Version 2.16.0-99.0.dev

Merge commit '2da9688cfbe6f0c2a5ffc156a94c7ebf56884966' into 'dev'
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 7cfb915..ac64623 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -8810,6 +8810,16 @@
     correctionMessage: r"""Try replacing ':' with '='.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codePositionalSuperParametersAndArguments =
+    messagePositionalSuperParametersAndArguments;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messagePositionalSuperParametersAndArguments = const MessageCode(
+    "PositionalSuperParametersAndArguments",
+    problemMessage:
+        r"""Positional super-initializer parameters cannot be used when the super initializer has positional arguments.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codePrefixAfterCombinator = messagePrefixAfterCombinator;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -9412,6 +9422,16 @@
     problemMessage: r"""Can't have initializers after 'super'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeSuperInitializerParameter =
+    messageSuperInitializerParameter;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageSuperInitializerParameter = const MessageCode(
+    "SuperInitializerParameter",
+    severity: Severity.context,
+    problemMessage: r"""This is the super-initializer parameter.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeSuperNullAware = messageSuperNullAware;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index 3e230c6..181ddae 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -220,7 +220,7 @@
           if (superclass != null && !superclass.isDartCoreObject) {
             var unnamedConstructor =
                 superclass.element.unnamedConstructor?.declaration;
-            if (unnamedConstructor != null) {
+            if (unnamedConstructor != null && unnamedConstructor.isConst) {
               callback(unnamedConstructor);
             }
           }
diff --git a/pkg/analyzer/lib/src/dart/constant/utilities.dart b/pkg/analyzer/lib/src/dart/constant/utilities.dart
index 4882359..62f7b47 100644
--- a/pkg/analyzer/lib/src/dart/constant/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/constant/utilities.dart
@@ -172,7 +172,7 @@
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
     if (node.isConst) {
       var constructor = node.constructorName.staticElement?.declaration;
-      if (constructor != null) {
+      if (constructor != null && constructor.isConst) {
         _callback(constructor);
       }
     }
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index 146e093..5fe0521 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -344,8 +344,8 @@
         }
         frontendStrategy.registerModuleData(data);
 
-        // After we've deserialized modular data, we set and verify the main
-        // method as well as trim the component of any unnecessary dependencies.
+        // After we've deserialized modular data, we trim the component of any
+        // unnecessary dependencies.
         // Note: It is critical we wait to trim the dill until after we've
         // deserialized modular data because some of this data may reference
         // 'trimmed' elements.
@@ -354,14 +354,7 @@
             dumpUnusedLibraries(result);
           }
           if (options.entryUri != null) {
-            result.setMainAndTrimComponent(options.entryUri);
-          }
-          if (result.component.mainMethod == null) {
-            // TODO(sigmund): move this so that we use the same error template
-            // from the CFE.
-            _reporter.reportError(_reporter.createMessage(NO_LOCATION_SPANNABLE,
-                MessageKind.GENERIC, {'text': "No 'main' method found."}));
-            return;
+            result.trimComponent(options.entryUri);
           }
         }
         if (options.cfeOnly) {
diff --git a/pkg/compiler/lib/src/kernel/loader.dart b/pkg/compiler/lib/src/kernel/loader.dart
index dbefdbb..e671f3e 100644
--- a/pkg/compiler/lib/src/kernel/loader.dart
+++ b/pkg/compiler/lib/src/kernel/loader.dart
@@ -52,6 +52,37 @@
   @override
   String get name => 'kernel loader';
 
+  static Library _findEntryLibrary(Component component, Uri entryUri) {
+    var entryLibrary = component.libraries
+        .firstWhere((l) => l.fileUri == entryUri, orElse: () => null);
+    if (entryLibrary == null) {
+      throw ArgumentError('Entry uri $entryUri not found in dill.');
+    }
+    return entryLibrary;
+  }
+
+  static ir.Reference _findMainMethod(Library entryLibrary) {
+    var mainMethod = entryLibrary.procedures
+        .firstWhere((p) => p.name.text == 'main', orElse: () => null);
+
+    // In some cases, a main method is defined in another file, and then
+    // exported. In these cases, we search for the main method in
+    // [additionalExports].
+    ir.Reference mainMethodReference;
+    if (mainMethod == null) {
+      mainMethodReference = entryLibrary.additionalExports.firstWhere(
+          (p) => p.canonicalName.name == 'main',
+          orElse: () => null);
+    } else {
+      mainMethodReference = mainMethod.reference;
+    }
+    if (mainMethodReference == null) {
+      throw ArgumentError(
+          'Entry uri ${entryLibrary.fileUri} has no main method.');
+    }
+    return mainMethodReference;
+  }
+
   /// Loads an entire Kernel [Component] from a file on disk.
   Future<KernelResult> load() {
     return measure(() async {
@@ -128,6 +159,18 @@
             await read(dependency);
           }
         }
+
+        if (_options.entryUri != null) {
+          var entryLibrary = _findEntryLibrary(component, _options.entryUri);
+          var mainMethod = _findMainMethod(entryLibrary);
+          component.setMainMethodAndMode(mainMethod, true, component.mode);
+        }
+        if (!_options.modularMode && component.mainMethod == null) {
+          // TODO(sigmund): move this so that we use the same error template
+          // from the CFE.
+          _reporter.reportError(_reporter.createMessage(NO_LOCATION_SPANNABLE,
+              MessageKind.GENERIC, {'text': "No 'main' method found."}));
+        }
       } else {
         bool verbose = false;
         Target target =
@@ -250,40 +293,7 @@
   KernelResult(this.component, this.rootLibraryUri, this.libraries,
       this.moduleLibraries);
 
-  static Library _findEntryLibrary(Component component, Uri entryUri) {
-    var entryLibrary = component.libraries
-        .firstWhere((l) => l.fileUri == entryUri, orElse: () => null);
-    if (entryLibrary == null) {
-      throw ArgumentError('Entry uri $entryUri not found in dill.');
-    }
-    return entryLibrary;
-  }
-
-  static ir.Reference _findMainMethod(Library entryLibrary) {
-    var mainMethod = entryLibrary.procedures
-        .firstWhere((p) => p.name.text == 'main', orElse: () => null);
-
-    // In some cases, a main method is defined in another file, and then
-    // exported. In these cases, we search for the main method in
-    // [additionalExports].
-    ir.Reference mainMethodReference;
-    if (mainMethod == null) {
-      mainMethodReference = entryLibrary.additionalExports.firstWhere(
-          (p) => p.canonicalName.name == 'main',
-          orElse: () => null);
-    } else {
-      mainMethodReference = mainMethod.reference;
-    }
-    if (mainMethodReference == null) {
-      throw ArgumentError(
-          'Entry uri ${entryLibrary.fileUri} has no main method.');
-    }
-    return mainMethodReference;
-  }
-
-  void setMainAndTrimComponent(Uri entryUri) {
-    var entryLibrary = _findEntryLibrary(component, entryUri);
-    var mainMethod = _findMainMethod(entryLibrary);
+  void trimComponent(Uri entryUri) {
     var irLibraryMap = <Uri, Library>{};
     var irLibraries = <Library>[];
     for (var library in component.libraries) {
@@ -292,11 +302,13 @@
     for (var library in libraries) {
       irLibraries.add(irLibraryMap[library]);
     }
+    var mainMethod = component.mainMethodName;
+    var componentMode = component.mode;
     component = ir.Component(
         libraries: irLibraries,
         uriToSource: component.uriToSource,
         nameRoot: component.root);
-    component.setMainMethodAndMode(mainMethod, true, component.mode);
+    component.setMainMethodAndMode(mainMethod, true, componentMode);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
index 3e47192..b181d62 100644
--- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
@@ -117,13 +117,19 @@
 
   bool get isInitializingFormal => (modifiers & initializingFormalMask) != 0;
 
+  bool get isSuperInitializingFormal =>
+      (modifiers & superInitializingFormalMask) != 0;
+
   bool get isCovariantByDeclaration => (modifiers & covariantMask) != 0;
 
   // An initializing formal parameter might be final without its
   // VariableDeclaration being final. See
   // [ProcedureBuilder.computeFormalParameterInitializerScope]..
   @override
-  bool get isAssignable => variable!.isAssignable && !isInitializingFormal;
+  bool get isAssignable =>
+      variable!.isAssignable &&
+      !isInitializingFormal &&
+      !isSuperInitializingFormal;
 
   @override
   String get fullNameForErrors => name;
@@ -171,19 +177,33 @@
   FormalParameterBuilder forFormalParameterInitializerScope() {
     // ignore: unnecessary_null_comparison
     assert(variable != null);
-    return !isInitializingFormal
-        ? this
-        : (new FormalParameterBuilder(
-            metadata,
-            modifiers | finalMask | initializingFormalMask,
-            type,
-            name,
-            null,
-            charOffset,
-            fileUri: fileUri,
-            isExtensionThis: isExtensionThis)
-          ..parent = parent
-          ..variable = variable);
+    if (isInitializingFormal) {
+      return new FormalParameterBuilder(
+          metadata,
+          modifiers | finalMask | initializingFormalMask,
+          type,
+          name,
+          null,
+          charOffset,
+          fileUri: fileUri,
+          isExtensionThis: isExtensionThis)
+        ..parent = parent
+        ..variable = variable;
+    } else if (isSuperInitializingFormal) {
+      return new FormalParameterBuilder(
+          metadata,
+          modifiers | finalMask | superInitializingFormalMask,
+          type,
+          name,
+          null,
+          charOffset,
+          fileUri: fileUri,
+          isExtensionThis: isExtensionThis)
+        ..parent = parent
+        ..variable = variable;
+    } else {
+      return this;
+    }
   }
 
   void finalizeInitializingFormal(ClassBuilder classBuilder) {
diff --git a/pkg/front_end/lib/src/fasta/builder/function_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
index 0ad02c9..9bd4714 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
@@ -219,7 +219,8 @@
     if (formals == null) return parent;
     Map<String, Builder> local = <String, Builder>{};
     for (FormalParameterBuilder formal in formals!) {
-      if (!isConstructor || !formal.isInitializingFormal) {
+      if (!isConstructor ||
+          !formal.isInitializingFormal && !formal.isSuperInitializingFormal) {
         local[formal.name] = formal;
       }
     }
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index dad946b..ece4718 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -306,8 +306,7 @@
 
   /// List of built redirecting factory invocations.  The targets of the
   /// invocations are to be resolved in a separate step.
-  final List<FactoryConstructorInvocation> redirectingFactoryInvocations =
-      <FactoryConstructorInvocation>[];
+  final List<FactoryConstructorInvocation> redirectingFactoryInvocations = [];
 
   /// List of redirecting factory invocations delayed for resolution.
   ///
@@ -315,7 +314,7 @@
   /// the inference in the declaration of the redirecting factory isn't done
   /// yet.
   final List<FactoryConstructorInvocation>
-      delayedRedirectingFactoryInvocations = <FactoryConstructorInvocation>[];
+      delayedRedirectingFactoryInvocations = [];
 
   /// List of built type aliased generative constructor invocations that
   /// require unaliasing.
@@ -326,6 +325,13 @@
   /// unaliasing.
   final List<TypeAliasedFactoryInvocation> typeAliasedFactoryInvocations = [];
 
+  /// List of type aliased factory invocations delayed for resolution.
+  ///
+  /// A resolution of a type aliased factory invocation can be delayed because
+  /// the inference in the declaration of the target isn't done yet.
+  final List<TypeAliasedFactoryInvocation>
+      delayedTypeAliasedFactoryInvocations = [];
+
   /// Variables with metadata.  Their types need to be inferred late, for
   /// example, in [finishFunction].
   List<VariableDeclaration>? variablesWithMetadata;
@@ -897,9 +903,8 @@
       [List<DelayedActionPerformer>? delayedActionPerformers]) {
     _finishVariableMetadata();
     _unaliasTypeAliasedConstructorInvocations();
-    _unaliasTypeAliasedFactoryInvocations();
-    _resolveRedirectingFactoryTargets(
-        redirectingFactoryInvocations, delayedRedirectingFactoryInvocations);
+    _unaliasTypeAliasedFactoryInvocations(typeAliasedFactoryInvocations);
+    _resolveRedirectingFactoryTargets(redirectingFactoryInvocations);
     libraryBuilder.checkUncheckedTypedefTypes(typeEnvironment);
     if (hasDelayedActions) {
       assert(
@@ -1043,6 +1048,56 @@
         buildInvalidInitializer(node as Expression, token.charOffset)
       ];
     }
+
+    if (initializers.isNotEmpty && initializers.last is SuperInitializer) {
+      List<VariableDeclaration>? positionalSuperParameters;
+      List<VariableDeclaration>? namedSuperParameters;
+
+      List<FormalParameterBuilder>? formals =
+          (member as ConstructorBuilder).formals;
+      if (formals != null) {
+        for (FormalParameterBuilder formal in formals) {
+          if (formal.isSuperInitializingFormal) {
+            if (formal.isNamed) {
+              (namedSuperParameters ??= <VariableDeclaration>[])
+                  .add(formal.variable!);
+            } else {
+              (positionalSuperParameters ??= <VariableDeclaration>[])
+                  .add(formal.variable!);
+            }
+          }
+        }
+
+        SuperInitializer superInitializer =
+            initializers.last as SuperInitializer;
+        Arguments arguments = superInitializer.arguments;
+        if (positionalSuperParameters != null) {
+          if (arguments.positional.isNotEmpty) {
+            addProblem(fasta.messagePositionalSuperParametersAndArguments,
+                arguments.fileOffset, noLength,
+                context: <LocatedMessage>[
+                  fasta.messageSuperInitializerParameter.withLocation(
+                      uri, positionalSuperParameters.first.fileOffset, noLength)
+                ]);
+          } else {
+            for (VariableDeclaration positional in positionalSuperParameters) {
+              arguments.positional.add(
+                  new VariableGetImpl(positional, forNullGuardedAccess: false)
+                    ..fileOffset = positional.fileOffset);
+            }
+          }
+        }
+        if (namedSuperParameters != null) {
+          // TODO(cstefantsova): Report name conflicts.
+          for (VariableDeclaration named in namedSuperParameters) {
+            arguments.named.add(new NamedExpression(named.name!,
+                new VariableGetImpl(named, forNullGuardedAccess: false))
+              ..fileOffset = named.fileOffset);
+          }
+        }
+      }
+    }
+
     _initializers ??= <Initializer>[];
     _initializers!.addAll(initializers);
   }
@@ -1349,9 +1404,7 @@
   }
 
   void _resolveRedirectingFactoryTargets(
-      List<FactoryConstructorInvocation> redirectingFactoryInvocations,
-      List<FactoryConstructorInvocation>?
-          delayedRedirectingFactoryInvocations) {
+      List<FactoryConstructorInvocation> redirectingFactoryInvocations) {
     List<FactoryConstructorInvocation> invocations =
         redirectingFactoryInvocations.toList();
     redirectingFactoryInvocations.clear();
@@ -1381,7 +1434,7 @@
           invocation.fileOffset,
           invocation.isConst);
       if (replacement == null) {
-        delayedRedirectingFactoryInvocations?.add(invocation);
+        delayedRedirectingFactoryInvocations.add(invocation);
       } else {
         invocation.replaceWith(replacement);
       }
@@ -1414,9 +1467,12 @@
     typeAliasedConstructorInvocations.clear();
   }
 
-  void _unaliasTypeAliasedFactoryInvocations() {
-    for (TypeAliasedFactoryInvocation invocation
-        in typeAliasedFactoryInvocations) {
+  void _unaliasTypeAliasedFactoryInvocations(
+      List<TypeAliasedFactoryInvocation> typeAliasedFactoryInvocations) {
+    List<TypeAliasedFactoryInvocation> invocations =
+        typeAliasedFactoryInvocations.toList();
+    typeAliasedFactoryInvocations.clear();
+    for (TypeAliasedFactoryInvocation invocation in invocations) {
       bool inferred = !hasExplicitTypeArguments(invocation.arguments);
       DartType aliasedType = new TypedefType(
           invocation.typeAliasBuilder.typedef,
@@ -1436,8 +1492,16 @@
           named: invocation.arguments.named,
           hasExplicitTypeArguments:
               hasExplicitTypeArguments(invocation.arguments));
-      invocation.replaceWith(_resolveRedirectingFactoryTarget(invocation.target,
-          invocationArguments, invocation.fileOffset, invocation.isConst)!);
+      Expression? replacement = _resolveRedirectingFactoryTarget(
+          invocation.target,
+          invocationArguments,
+          invocation.fileOffset,
+          invocation.isConst);
+      if (replacement == null) {
+        delayedTypeAliasedFactoryInvocations.add(invocation);
+      } else {
+        invocation.replaceWith(replacement);
+      }
     }
     typeAliasedFactoryInvocations.clear();
   }
@@ -1451,8 +1515,7 @@
   @override
   void performDelayedActions() {
     if (delayedRedirectingFactoryInvocations.isNotEmpty) {
-      _resolveRedirectingFactoryTargets(
-          delayedRedirectingFactoryInvocations, null);
+      _resolveRedirectingFactoryTargets(delayedRedirectingFactoryInvocations);
       if (delayedRedirectingFactoryInvocations.isNotEmpty) {
         for (StaticInvocation invocation
             in delayedRedirectingFactoryInvocations) {
@@ -1464,11 +1527,26 @@
         }
       }
     }
+    if (delayedTypeAliasedFactoryInvocations.isNotEmpty) {
+      _unaliasTypeAliasedFactoryInvocations(
+          delayedTypeAliasedFactoryInvocations);
+      if (delayedTypeAliasedFactoryInvocations.isNotEmpty) {
+        for (StaticInvocation invocation
+            in delayedTypeAliasedFactoryInvocations) {
+          internalProblem(
+              fasta.templateInternalProblemUnhandled.withArguments(
+                  invocation.target.name.text, 'performDelayedActions'),
+              invocation.fileOffset,
+              uri);
+        }
+      }
+    }
   }
 
   @override
   bool get hasDelayedActions {
-    return delayedRedirectingFactoryInvocations.isNotEmpty;
+    return delayedRedirectingFactoryInvocations.isNotEmpty ||
+        delayedTypeAliasedFactoryInvocations.isNotEmpty;
   }
 
   void _finishVariableMetadata() {
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index ff0fb53..ce46969 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -4573,8 +4573,13 @@
         _helper.lookupConstructor(name, isSuper: isSuper);
     LocatedMessage? message;
     if (constructor != null) {
-      message = _helper.checkArgumentsForFunction(
-          constructor.function, arguments, offset, <TypeParameter>[]);
+      // The check of the arguments is done later for super initializers if the
+      // 'super-parameters' language feature is enabled. In that case the
+      // additional parameters can be added at a later stage.
+      if (!(isSuper && _helper.libraryBuilder.enableSuperParametersInLibrary)) {
+        message = _helper.checkArgumentsForFunction(
+            constructor.function, arguments, offset, <TypeParameter>[]);
+      }
     } else {
       String fullName =
           _helper.constructorNameForDiagnostics(name.text, isSuper: isSuper);
diff --git a/pkg/front_end/lib/src/fasta/kernel/verifier.dart b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
index 7543cd9..ae560e2 100644
--- a/pkg/front_end/lib/src/fasta/kernel/verifier.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
@@ -29,7 +29,10 @@
 import '../type_inference/type_schema.dart' show UnknownType;
 
 import 'redirecting_factory_body.dart'
-    show RedirectingFactoryBody, isRedirectingFactory;
+    show
+        RedirectingFactoryBody,
+        isRedirectingFactory,
+        isRedirectingFactoryField;
 
 List<LocatedMessage> verifyComponent(Component component, Target target,
     {bool? isOutline, bool? afterConst, bool skipPlatform: false}) {
@@ -431,6 +434,89 @@
     exitTreeNode(node);
   }
 
+  void _checkConstructorTearOff(Node node, Member tearOffTarget) {
+    if (tearOffTarget.enclosingLibrary.importUri.scheme == 'dart') {
+      // Platform libraries are not compilation with test flags and might
+      // contain tear-offs not expected when testing lowerings.
+      return;
+    }
+    if (currentMember != null && isRedirectingFactoryField(currentMember!)) {
+      // The encoding of the redirecting factory field uses
+      // [ConstructorTearOffConstant] nodes also when lowerings are enabled.
+      return;
+    }
+    if (tearOffTarget is Constructor &&
+        target.isConstructorTearOffLoweringEnabled) {
+      problem(
+          node is TreeNode ? node : getLastSeenTreeNode(),
+          '${node.runtimeType} nodes for generative constructors should be '
+          'lowered for target "${target.name}".');
+    }
+    if (tearOffTarget is Procedure &&
+        tearOffTarget.isFactory &&
+        target.isFactoryTearOffLoweringEnabled) {
+      problem(
+          node is TreeNode ? node : getLastSeenTreeNode(),
+          '${node.runtimeType} nodes for factory constructors should be '
+          'lowered for target "${target.name}".');
+    }
+  }
+
+  @override
+  void visitConstructorTearOff(ConstructorTearOff node) {
+    _checkConstructorTearOff(node, node.target);
+    super.visitConstructorTearOff(node);
+  }
+
+  @override
+  void visitConstructorTearOffConstant(ConstructorTearOffConstant node) {
+    _checkConstructorTearOff(node, node.target);
+    super.visitConstructorTearOffConstant(node);
+  }
+
+  void _checkTypedefTearOff(Node node) {
+    if (target.isTypedefTearOffLoweringEnabled) {
+      problem(
+          node is TreeNode ? node : getLastSeenTreeNode(),
+          '${node.runtimeType} nodes for typedefs should be '
+          'lowered for target "${target.name}".');
+    }
+  }
+
+  @override
+  void visitTypedefTearOff(TypedefTearOff node) {
+    _checkTypedefTearOff(node);
+    super.visitTypedefTearOff(node);
+  }
+
+  @override
+  void visitTypedefTearOffConstant(TypedefTearOffConstant node) {
+    _checkTypedefTearOff(node);
+    super.visitTypedefTearOffConstant(node);
+  }
+
+  void _checkRedirectingFactoryTearOff(Node node) {
+    if (target.isRedirectingFactoryTearOffLoweringEnabled) {
+      problem(
+          node is TreeNode ? node : getLastSeenTreeNode(),
+          'ConstructorTearOff nodes for redirecting factories should be '
+          'lowered for target "${target.name}".');
+    }
+  }
+
+  @override
+  void visitRedirectingFactoryTearOff(RedirectingFactoryTearOff node) {
+    _checkRedirectingFactoryTearOff(node);
+    super.visitRedirectingFactoryTearOff(node);
+  }
+
+  @override
+  void visitRedirectingFactoryTearOffConstant(
+      RedirectingFactoryTearOffConstant node) {
+    _checkRedirectingFactoryTearOff(node);
+    super.visitRedirectingFactoryTearOffConstant(node);
+  }
+
   @override
   void defaultTreeNode(TreeNode node) {
     enterTreeNode(node);
diff --git a/pkg/front_end/lib/src/fasta/modifier.dart b/pkg/front_end/lib/src/fasta/modifier.dart
index 127ce5c..1d0b3f7 100644
--- a/pkg/front_end/lib/src/fasta/modifier.dart
+++ b/pkg/front_end/lib/src/fasta/modifier.dart
@@ -50,6 +50,10 @@
 /// constructor.
 const int declaresConstConstructorMask = initializingFormalMask << 1;
 
+/// Not a modifier, used by formal parameters to track if they are
+/// super-parameter initializers.
+const int superInitializingFormalMask = declaresConstConstructorMask << 1;
+
 /// Not a real modifier, and by setting it to zero, it is automatically ignored
 /// by [Modifier.toMask] below.
 const int varMask = 0;
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 0d7fc82..79fdc67 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -2104,6 +2104,7 @@
           type,
           name == null ? FormalParameterBuilder.noNameSentinel : name as String,
           thisKeyword != null,
+          superKeyword != null,
           charOffset,
           initializerStart));
     }
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 3689325..2666f82 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
@@ -106,6 +106,7 @@
         declaresConstConstructorMask,
         hasInitializerMask,
         initializingFormalMask,
+        superInitializingFormalMask,
         lateMask,
         mixinDeclarationMask,
         namedMixinApplicationMask,
@@ -2770,11 +2771,17 @@
       TypeBuilder? type,
       String name,
       bool hasThis,
+      bool hasSuper,
       int charOffset,
       Token? initializerToken) {
+    assert(!hasThis || !hasSuper,
+        "Formal parameter '${name}' has both 'this' and 'super' prefixes.");
     if (hasThis) {
       modifiers |= initializingFormalMask;
     }
+    if (hasSuper) {
+      modifiers |= superInitializingFormalMask;
+    }
     FormalParameterBuilder formal = new FormalParameterBuilder(
         metadata, modifiers, type, name, this, charOffset,
         fileUri: fileUri)
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index c7aca29..ceaa2a1 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -725,6 +725,8 @@
 PatchNonExternal/example: Fail
 PlatformPrivateLibraryAccess/example: Fail
 PositionalAfterNamedArgument/example: Fail
+PositionalSuperParametersAndArguments/analyzerCode: Fail
+PositionalSuperParametersAndArguments/example: Fail
 PrefixAfterCombinator/example: Fail
 PreviousUseOfName/analyzerCode: Fail
 PreviousUseOfName/example: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 043ebae..3c8ec81 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -5444,3 +5444,10 @@
 EnumDeclaresFactory:
   problemMessage: "Enums can't declare factory constructors."
   correctionMessage: "Try removing the factory constructor declaration."
+
+PositionalSuperParametersAndArguments:
+  problemMessage: "Positional super-initializer parameters cannot be used when the super initializer has positional arguments."
+
+SuperInitializerParameter:
+  problemMessage: "This is the super-initializer parameter."
+  severity: CONTEXT
diff --git a/pkg/front_end/test/fasta/modular_suite.dart b/pkg/front_end/test/fasta/modular_suite.dart
new file mode 100644
index 0000000..8d7441e
--- /dev/null
+++ b/pkg/front_end/test/fasta/modular_suite.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE.md file.
+
+library fasta.test.weak_test;
+
+import 'testing/suite.dart';
+
+Future<FastaContext> createContext(
+    Chain suite, Map<String, String> environment) {
+  environment[COMPILATION_MODE] = CompileMode.modular.name;
+  return FastaContext.create(suite, environment);
+}
+
+void main(List<String> arguments) {
+  internalMain(arguments: arguments);
+}
+
+void internalMain(
+        {List<String> arguments = const [], int shards = 1, int shard = 0}) =>
+    runMe(arguments, createContext,
+        configurationPath: "../../testing.json", shard: shard, shards: shards);
diff --git a/pkg/front_end/test/fasta/sdk_test.dart b/pkg/front_end/test/fasta/sdk_test.dart
index c448d5d..400df69 100644
--- a/pkg/front_end/test/fasta/sdk_test.dart
+++ b/pkg/front_end/test/fasta/sdk_test.dart
@@ -8,7 +8,7 @@
 
 Future<FastaContext> createContext(
     Chain suite, Map<String, String> environment) {
-  environment[ENABLE_FULL_COMPILE] = "";
+  environment[COMPILATION_MODE] = CompileMode.full.name;
   environment["skipVm"] ??= "true";
   environment["onlyCrashes"] ??= "true";
   environment["ignoreExpectations"] ??= "true";
diff --git a/pkg/front_end/test/fasta/strong_suite.dart b/pkg/front_end/test/fasta/strong_suite.dart
index 538136d..8bb8640 100644
--- a/pkg/front_end/test/fasta/strong_suite.dart
+++ b/pkg/front_end/test/fasta/strong_suite.dart
@@ -8,7 +8,7 @@
 
 Future<FastaContext> createContext(
     Chain suite, Map<String, String> environment) {
-  environment[ENABLE_FULL_COMPILE] = "";
+  environment[COMPILATION_MODE] = CompileMode.full.name;
   environment['soundNullSafety'] = "true";
   return FastaContext.create(suite, environment);
 }
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index 5121e9a..f7221fd 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -171,7 +171,7 @@
 
 export 'package:testing/testing.dart' show Chain, runMe;
 
-const String ENABLE_FULL_COMPILE = " full compile ";
+const String COMPILATION_MODE = " compilation mode ";
 
 const String UPDATE_EXPECTATIONS = "updateExpectations";
 const String UPDATE_COMMENTS = "updateComments";
@@ -378,55 +378,61 @@
       this.skipVm,
       this.semiFuzz,
       bool kernelTextSerialization,
-      bool fullCompile,
+      CompileMode compileMode,
       this.verify,
       this.soundNullSafety)
       : steps = <Step>[
-          new Outline(fullCompile, updateComments: updateComments),
+          new Outline(compileMode, updateComments: updateComments),
           const Print(),
-          new Verify(fullCompile)
+          new Verify(compileMode)
         ] {
-    String fullPrefix;
-    String outlinePrefix;
+    String prefix;
+    String infix;
     if (soundNullSafety) {
-      fullPrefix = '.strong';
-      outlinePrefix = '.strong.outline';
+      prefix = '.strong';
     } else {
-      fullPrefix = '.weak';
-      outlinePrefix = '.weak.outline';
+      prefix = '.weak';
+    }
+    switch (compileMode) {
+      case CompileMode.outline:
+        infix = '.outline';
+        break;
+      case CompileMode.modular:
+        infix = '.modular';
+        break;
+      case CompileMode.full:
+        infix = '';
+        break;
     }
 
-    if (!fullCompile) {
-      // If not doing a full compile this is the only expect file so we run the
-      // extra constant evaluation now. If we do a full compilation, we'll do
-      // if after the transformation. That also ensures we don't get the same
-      // 'extra constant evaluation' output twice (in .transformed and not).
+    if (compileMode == CompileMode.outline) {
+      // If doing an outline compile, this is the only expect file so we run the
+      // extra constant evaluation now. If we do a full or modular compilation,
+      // we'll do if after the transformation. That also ensures we don't get
+      // the same 'extra constant evaluation' output twice (in .transformed and
+      // not).
       steps.add(const StressConstantEvaluatorStep());
     }
     if (!ignoreExpectations) {
-      steps.add(new MatchExpectation(
-          fullCompile ? "$fullPrefix.expect" : "$outlinePrefix.expect",
-          serializeFirst: false,
-          isLastMatchStep: false));
-      steps.add(new MatchExpectation(
-          fullCompile ? "$fullPrefix.expect" : "$outlinePrefix.expect",
-          serializeFirst: true,
-          isLastMatchStep: true));
+      steps.add(new MatchExpectation("$prefix$infix.expect",
+          serializeFirst: false, isLastMatchStep: false));
+      steps.add(new MatchExpectation("$prefix$infix.expect",
+          serializeFirst: true, isLastMatchStep: true));
     }
     steps.add(const TypeCheck());
     steps.add(const EnsureNoErrors());
     if (kernelTextSerialization) {
       steps.add(const KernelTextSerialization());
     }
-    if (fullCompile) {
+    if (compileMode == CompileMode.full) {
       steps.add(const Transform());
-      steps.add(const Verify(true));
+      steps.add(const Verify(CompileMode.full));
       steps.add(const StressConstantEvaluatorStep());
       if (!ignoreExpectations) {
-        steps.add(new MatchExpectation("$fullPrefix.transformed.expect",
+        steps.add(new MatchExpectation("$prefix$infix.transformed.expect",
             serializeFirst: false, isLastMatchStep: updateExpectations));
         if (!updateExpectations) {
-          steps.add(new MatchExpectation("$fullPrefix.transformed.expect",
+          steps.add(new MatchExpectation("$prefix$infix.transformed.expect",
               serializeFirst: true, isLastMatchStep: true));
         }
       }
@@ -767,7 +773,7 @@
       "verify",
       KERNEL_TEXT_SERIALIZATION,
       "platformBinaries",
-      ENABLE_FULL_COMPILE,
+      COMPILATION_MODE,
     };
     checkEnvironment(environment, knownEnvironmentKeys);
 
@@ -815,7 +821,7 @@
         skipVm,
         semiFuzz,
         kernelTextSerialization,
-        environment.containsKey(ENABLE_FULL_COMPILE),
+        compileModeFromName(environment[COMPILATION_MODE]),
         verify,
         soundNullSafety));
   }
@@ -1777,13 +1783,15 @@
 }
 
 Set<Uri> createUserLibrariesImportUriSet(
-    Component component, UriTranslator uriTranslator) {
+    Component component, UriTranslator uriTranslator,
+    {Set<Library> excludedLibraries: const {}}) {
   Set<Uri> knownUris =
       component.libraries.map((Library library) => library.importUri).toSet();
   Set<Uri> userLibraries = component.libraries
       .where((Library library) =>
           library.importUri.scheme != 'dart' &&
-          library.importUri.scheme != 'package')
+          library.importUri.scheme != 'package' &&
+          !excludedLibraries.contains(library))
       .map((Library library) => library.importUri)
       .toSet();
   // Mark custom "dart:" libraries defined in the test-specific libraries.json
@@ -1797,20 +1805,48 @@
   return userLibraries.intersection(knownUris);
 }
 
-class Outline extends Step<TestDescription, ComponentResult, FastaContext> {
-  final bool fullCompile;
+enum CompileMode {
+  /// Compiles only the outline of the test and its linked dependencies.
+  outline,
 
-  const Outline(this.fullCompile, {this.updateComments: false});
+  /// Fully compiles the test but compiles only the outline of its linked
+  /// dependencies.
+  ///
+  /// This mimics how modular compilation is performed with dartdevc.
+  modular,
+
+  /// Fully compiles the test and its linked dependencies.
+  full,
+}
+
+CompileMode compileModeFromName(String? name) {
+  for (CompileMode mode in CompileMode.values) {
+    if (name == mode.name) {
+      return mode;
+    }
+  }
+  return CompileMode.outline;
+}
+
+class Outline extends Step<TestDescription, ComponentResult, FastaContext> {
+  final CompileMode compileMode;
+
+  const Outline(this.compileMode, {this.updateComments: false});
 
   final bool updateComments;
 
   @override
   String get name {
-    return fullCompile ? "compile" : "outline";
+    switch (compileMode) {
+      case CompileMode.outline:
+        return "outline";
+      case CompileMode.modular:
+        return "modular";
+      case CompileMode.full:
+        return "compile";
+    }
   }
 
-  bool get isCompiler => fullCompile;
-
   @override
   Future<Result<ComponentResult>> run(
       TestDescription description, FastaContext context) async {
@@ -1839,7 +1875,7 @@
           compilationSetup.errors.addAll(compilationSetup.testOptions.errors!);
         }
         Component p = (await sourceTarget.buildOutlines())!;
-        if (fullCompile) {
+        if (compileMode == CompileMode.full) {
           p = (await sourceTarget.buildComponent(
               verify: compilationSetup.folderOptions.noVerify
                   ? false
@@ -1885,6 +1921,13 @@
       if (description.uri.pathSegments.last.endsWith(".no_link.dart")) {
         alsoAppend = null;
       }
+
+      Set<Library>? excludedLibraries;
+      if (compileMode == CompileMode.modular) {
+        excludedLibraries = alsoAppend?.libraries.toSet();
+      }
+      excludedLibraries ??= const {};
+
       KernelTarget sourceTarget = await outlineInitialization(context,
           description, compilationSetup.options, <Uri>[description.uri],
           alsoAppend: alsoAppend);
@@ -1893,9 +1936,10 @@
       await instrumentation.loadExpectations(description.uri);
       sourceTarget.loader.instrumentation = instrumentation;
       Component p = (await sourceTarget.buildOutlines())!;
-      Set<Uri> userLibraries =
-          createUserLibrariesImportUriSet(p, sourceTarget.uriTranslator);
-      if (fullCompile) {
+      Set<Uri> userLibraries = createUserLibrariesImportUriSet(
+          p, sourceTarget.uriTranslator,
+          excludedLibraries: excludedLibraries);
+      if (compileMode != CompileMode.outline) {
         p = (await sourceTarget.buildComponent(
             verify: compilationSetup.folderOptions.noVerify
                 ? false
@@ -1998,9 +2042,9 @@
 }
 
 class Verify extends Step<ComponentResult, ComponentResult, FastaContext> {
-  final bool fullCompile;
+  final CompileMode compileMode;
 
-  const Verify(this.fullCompile);
+  const Verify(this.compileMode);
 
   @override
   String get name => "verify";
@@ -2031,7 +2075,7 @@
       compilerContext.uriToSource.addAll(component.uriToSource);
       List<LocatedMessage> verificationErrors = verifyComponent(
           component, result.options.target,
-          isOutline: !fullCompile, skipPlatform: true);
+          isOutline: compileMode == CompileMode.outline, skipPlatform: true);
       assert(verificationErrors.isEmpty || messages.isNotEmpty);
       if (messages.isEmpty) {
         return pass(result);
diff --git a/pkg/front_end/test/fasta/text_serialization_suite.dart b/pkg/front_end/test/fasta/text_serialization_suite.dart
index cddceac..eda34ee 100644
--- a/pkg/front_end/test/fasta/text_serialization_suite.dart
+++ b/pkg/front_end/test/fasta/text_serialization_suite.dart
@@ -8,7 +8,7 @@
 
 Future<FastaContext> createContext(
     Chain suite, Map<String, String> environment) {
-  environment[ENABLE_FULL_COMPILE] = "";
+  environment[COMPILATION_MODE] = CompileMode.full.name;
   environment[KERNEL_TEXT_SERIALIZATION] = "";
   return FastaContext.create(suite, environment);
 }
diff --git a/pkg/front_end/test/fasta/weak_suite.dart b/pkg/front_end/test/fasta/weak_suite.dart
index 1ce80c58..52fd4d8 100644
--- a/pkg/front_end/test/fasta/weak_suite.dart
+++ b/pkg/front_end/test/fasta/weak_suite.dart
@@ -8,7 +8,7 @@
 
 Future<FastaContext> createContext(
     Chain suite, Map<String, String> environment) {
-  environment[ENABLE_FULL_COMPILE] = "";
+  environment[COMPILATION_MODE] = CompileMode.full.name;
   return FastaContext.create(suite, environment);
 }
 
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index 2a6a8f4..7a1fd28 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -903,6 +903,7 @@
 std
 stress
 string2
+stringy
 strip
 strongest
 stub's
diff --git a/pkg/front_end/test/unit_test_suites.dart b/pkg/front_end/test/unit_test_suites.dart
index ef12180..c9acb09 100644
--- a/pkg/front_end/test/unit_test_suites.dart
+++ b/pkg/front_end/test/unit_test_suites.dart
@@ -20,6 +20,7 @@
 import 'fasta/incremental_dartino_suite.dart' as incremental_dartino
     show createContext;
 import 'fasta/messages_suite.dart' as messages show createContext;
+import 'fasta/modular_suite.dart' as modular show createContext;
 import 'fasta/outline_suite.dart' as outline show createContext;
 import 'fasta/strong_suite.dart' as strong show createContext;
 import 'fasta/text_serialization_suite.dart' as text_serialization
@@ -453,6 +454,13 @@
     requiresGit: true,
   ),
   const Suite(
+    "fasta/modular",
+    modular.createContext,
+    "../../testing.json",
+    path: "fasta/modular_suite.dart",
+    shardCount: 4,
+  ),
+  const Suite(
     "fasta/weak",
     weak.createContext,
     "../../testing.json",
diff --git a/pkg/front_end/testcases/agnostic/as.dart.weak.modular.expect b/pkg/front_end/testcases/agnostic/as.dart.weak.modular.expect
new file mode 100644
index 0000000..40e7073
--- /dev/null
+++ b/pkg/front_end/testcases/agnostic/as.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static const field core::List<core::int> a = #C1;
+static const field core::List<core::int> b = #C2;
+static method main() → void {}
+
+constants  {
+  #C1 = <Null>[]
+  #C2 = <core::int?>[]
+}
diff --git a/pkg/front_end/testcases/agnostic/identical.dart.weak.modular.expect b/pkg/front_end/testcases/agnostic/identical.dart.weak.modular.expect
new file mode 100644
index 0000000..f5a7aaa
--- /dev/null
+++ b/pkg/front_end/testcases/agnostic/identical.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static const field core::List<core::int> a = #C1;
+static const field core::List<core::int?> b = #C2;
+static const field core::bool c = #C3;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <core::int*>[]
+  #C2 = <core::int?>[]
+  #C3 = false
+}
diff --git a/pkg/front_end/testcases/agnostic/is.dart.weak.modular.expect b/pkg/front_end/testcases/agnostic/is.dart.weak.modular.expect
new file mode 100644
index 0000000..b52395a
--- /dev/null
+++ b/pkg/front_end/testcases/agnostic/is.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static const field core::bool a = #C1;
+static const field core::bool b = #C1;
+static method main() → void {}
+
+constants  {
+  #C1 = true
+}
diff --git a/pkg/front_end/testcases/agnostic/map.dart.weak.modular.expect b/pkg/front_end/testcases/agnostic/map.dart.weak.modular.expect
new file mode 100644
index 0000000..70e1f24
--- /dev/null
+++ b/pkg/front_end/testcases/agnostic/map.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static const field core::List<core::int> a = #C1;
+static const field core::List<core::int?> b = #C2;
+static const field core::Map<core::List<core::int?>, core::int> c = #C5;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <core::int*>[]
+  #C2 = <core::int?>[]
+  #C3 = 0
+  #C4 = 1
+  #C5 = <core::List<core::int?>*, core::int*>{#C1:#C3, #C2:#C4)
+}
diff --git a/pkg/front_end/testcases/agnostic/set.dart.weak.modular.expect b/pkg/front_end/testcases/agnostic/set.dart.weak.modular.expect
new file mode 100644
index 0000000..add03f5
--- /dev/null
+++ b/pkg/front_end/testcases/agnostic/set.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static const field core::List<core::int> a = #C1;
+static const field core::List<core::int?> b = #C2;
+static const field core::Set<core::List<core::int?>> c = #C3;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <core::int*>[]
+  #C2 = <core::int?>[]
+  #C3 = <core::List<core::int?>*>{#C1, #C2}
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.weak.modular.expect
new file mode 100644
index 0000000..89d51078
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_assert_statements.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = #C1;
+static const field core::int var2 = #C1;
+static method fn() → core::int {
+  core::int x = 0;
+  assert(x =={core::num::==}{(core::Object) → core::bool} 0, "fail");
+  return x;
+}
+static method fn2() → core::int {
+  core::int x = 0;
+  assert((() → core::bool {
+    core::int y = x.{core::num::+}(1){(core::num) → core::int};
+    return y =={core::num::==}{(core::Object) → core::bool} 1;
+  })(){() → core::bool});
+  return x;
+}
+static method main() → void {
+  exp::Expect::equals(#C1, 0);
+  exp::Expect::equals(#C1, 0);
+}
+
+constants  {
+  #C1 = 0
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_block.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_block.dart.weak.modular.expect
new file mode 100644
index 0000000..ee6a074
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_block.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static method blockTest() → void {
+  function x() → core::int
+    return 1;
+  exp::Expect::equals(#C1, 1);
+  {
+    function x() → core::int
+      return 2;
+    exp::Expect::equals(#C2, 2);
+    {
+      function x() → core::int
+        return 3;
+      exp::Expect::equals(#C3, 3);
+    }
+  }
+  exp::Expect::equals(#C1, 1);
+}
+static method blockTest1() → void {
+  function x() → core::int {
+    core::int z = 3;
+    {
+      core::int z = 4;
+    }
+    return z;
+  }
+  exp::Expect::equals(#C3, 3);
+}
+static method main() → void {
+  self::blockTest();
+  self::blockTest1();
+}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+  #C3 = 3
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_closures.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_closures.dart.weak.modular.expect
new file mode 100644
index 0000000..a1bc565
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_closures.dart.weak.modular.expect
@@ -0,0 +1,86 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = #C1;
+static const field core::int var2 = #C1;
+static const field core::int y = #C2;
+static const field core::int var3 = #C3;
+static const field core::int var4 = #C1;
+static const field core::int var5 = #C4;
+static const field core::int var6 = #C4;
+static method foo() → core::int {
+  () → () → core::int f = () → () → core::int {
+    core::int count = 0;
+    function baz() → core::int {
+      count = count.{core::num::+}(1){(core::num) → core::int};
+      return count;
+    }
+    return baz;
+  };
+  () → core::int c1 = f(){() → () → core::int};
+  () → core::int c2 = f(){() → () → core::int};
+  core::int c1_val1 = c1(){() → core::int};
+  assert(c1_val1 =={core::num::==}{(core::Object) → core::bool} 1);
+  core::int c1_val2 = c1(){() → core::int};
+  assert(c1_val2 =={core::num::==}{(core::Object) → core::bool} 2);
+  core::int c1_val3 = c1(){() → core::int};
+  assert(c1_val3 =={core::num::==}{(core::Object) → core::bool} 3);
+  core::int c2_val1 = c2(){() → core::int};
+  assert(c1_val1 =={core::num::==}{(core::Object) → core::bool} 1);
+  core::int c2_val2 = c2(){() → core::int};
+  assert(c1_val2 =={core::num::==}{(core::Object) → core::bool} 2);
+  core::int c2_val3 = c2(){() → core::int};
+  assert(c1_val3 =={core::num::==}{(core::Object) → core::bool} 3);
+  return 0;
+}
+static method fn() → core::int {
+  return (() → core::int => 0)(){() → core::int};
+}
+static method fn3() → core::int {
+  core::int y = 2;
+  return y;
+}
+static method fn4() → core::int {
+  core::int x = 0;
+  function innerFn() → core::int {
+    return x;
+  }
+  return innerFn(){() → core::int};
+}
+static method fn5(core::int a) → core::int {
+  function recurse(core::int b) → core::int {
+    if(b =={core::num::==}{(core::Object) → core::bool} 1)
+      return 1;
+    core::int result = recurse(b.{core::num::-}(1){(core::num) → core::int}){(core::int) → core::int};
+    return b.{core::num::*}(result){(core::num) → core::int};
+  }
+  return recurse(a){(core::int) → core::int};
+}
+static method fn6(core::int a) → core::int {
+  function recurse() → core::int {
+    a = a.{core::num::-}(1){(core::num) → core::int};
+    if(a =={core::num::==}{(core::Object) → core::bool} 1)
+      return 1;
+    return a.{core::num::*}(recurse(){() → core::int}){(core::num) → core::int};
+  }
+  return recurse(){() → core::int};
+}
+static method main() → void {
+  exp::Expect::equals(#C1, 0);
+  exp::Expect::equals(#C1, 0);
+  exp::Expect::equals(#C3, 2);
+  exp::Expect::equals(#C1, 0);
+  exp::Expect::equals(#C4, 6);
+  exp::Expect::equals(#C4, 6);
+}
+
+constants  {
+  #C1 = 0
+  #C2 = 1
+  #C3 = 2
+  #C4 = 6
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.weak.modular.expect
new file mode 100644
index 0000000..819097c
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_ctor.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+class Simple extends core::Object /*hasConstConstructor*/  {
+  final field core::String name;
+  const constructor •(core::String name) → self::Simple
+    : self::Simple::name = name, super core::Object::•() {
+    assert(this.{self::Simple::name}{core::String} =={core::String::==}{(core::Object) → core::bool} #C1);
+  }
+}
+class A extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A
+    : super core::Object::•() {
+    return;
+  }
+}
+static const field core::String printString = #C1;
+static const field self::Simple var1 = #C2;
+static const field self::A var2 = #C3;
+static const field self::A var3 = #C3;
+static method fn() → self::A
+  return new self::A::•();
+static method main() → void {
+  exp::Expect::equals(#C2.{self::Simple::name}{core::String}, #C1);
+}
+
+constants  {
+  #C1 = "print"
+  #C2 = self::Simple {name:#C1}
+  #C3 = self::A {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_functions_const_ctor.dart:
+- Simple. (from org-dartlang-testcase:///const_functions_const_ctor.dart:14:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- A. (from org-dartlang-testcase:///const_functions_const_ctor.dart:21:9)
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.modular.expect
new file mode 100644
index 0000000..b972e0f
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart.weak.modular.expect
@@ -0,0 +1,98 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:41:14: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const var4 = C();
+//              ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:26:5: Error: Constructors can't have a return type.
+// Try removing the return type.
+//     return Simple2(this.name);
+//     ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:12:14: Error: Constant evaluation error:
+// const var1 = Simple(printString);
+//              ^
+// pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:17:22: Context: This assertion failed.
+//     assert(this.name != printString);
+//                      ^
+// pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:12:7: Context: While analyzing:
+// const var1 = Simple(printString);
+//       ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:30:14: Error: Constant evaluation error:
+// const var3 = B();
+//              ^
+// pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:33:14: Context: This assertion failed.
+//     assert(1 == 2);
+//              ^
+// pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:30:7: Context: While analyzing:
+// const var3 = B();
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "package:expect/expect.dart";
+
+class Simple extends core::Object /*hasConstConstructor*/  {
+  final field core::String name;
+  const constructor •(core::String name) → self::Simple
+    : self::Simple::name = name, super core::Object::•() {
+    assert(!(this.{self::Simple::name}{core::String} =={core::String::==}{(core::Object) → core::bool} #C1));
+  }
+}
+class Simple2 extends core::Object /*hasConstConstructor*/  {
+  final field core::String name;
+  const constructor •(core::String name) → self::Simple2
+    : self::Simple2::name = name, super core::Object::•() {
+    invalid-expression "pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:26:5: Error: Constructors can't have a return type.
+Try removing the return type.
+    return Simple2(this.name);
+    ^";
+  }
+}
+class A extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A
+    : super core::Object::•() {
+    assert(1 =={core::num::==}{(core::Object) → core::bool} 2);
+  }
+}
+class B extends self::A /*hasConstConstructor*/  {
+  const constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C extends core::Object {
+  field core::int? x = null;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+static const field core::String printString = #C1;
+static const field self::Simple var1 = invalid-expression "This assertion failed.";
+static const field self::Simple2 var2 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:26:5: Error: Constructors can't have a return type.
+Try removing the return type.
+    return Simple2(this.name);
+    ^";
+static const field self::B var3 = invalid-expression "This assertion failed.";
+static const field invalid-type var4 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_const_ctor_error.dart:41:14: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const var4 = C();
+             ^";
+static method main() → void {}
+
+constants  {
+  #C1 = "print"
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_functions_const_ctor_error.dart:
+- Simple. (from org-dartlang-testcase:///const_functions_const_ctor_error.dart:16:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Simple2. (from org-dartlang-testcase:///const_functions_const_ctor_error.dart:25:9)
+- B. (from org-dartlang-testcase:///const_functions_const_ctor_error.dart:38:9)
+- A. (from org-dartlang-testcase:///const_functions_const_ctor_error.dart:32:9)
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.weak.modular.expect
new file mode 100644
index 0000000..b9d7932
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+class MessageType extends core::Object /*hasConstConstructor*/  {
+  static const field self::MessageType print = #C2;
+  static const field self::MessageType skip = #C4;
+  final field core::String name;
+  const constructor _(core::String name) → self::MessageType
+    : self::MessageType::name = name, super core::Object::•()
+    ;
+  static factory parse(core::String name) → self::MessageType {
+    if(name =={core::String::==}{(core::Object) → core::bool} "print") {
+      return #C2;
+    }
+    return #C4;
+  }
+}
+static const field self::MessageType printConst = #C2;
+static method main() → void {
+  exp::Expect::equals(#C2, #C2);
+}
+
+constants  {
+  #C1 = "print"
+  #C2 = self::MessageType {name:#C1}
+  #C3 = "skip"
+  #C4 = self::MessageType {name:#C3}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_functions_const_factory.dart:
+- MessageType._ (from org-dartlang-testcase:///const_functions_const_factory.dart:25:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.modular.expect
new file mode 100644
index 0000000..4442626
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = #C1;
+static const field core::int var2 = #C2;
+static const field core::int var3 = #C3;
+static const field core::int var4 = #C4;
+static method fn() → core::int {
+  core::int x = 0;
+  do {
+    x = x.{core::num::+}(1){(core::num) → core::int};
+  }
+  while (x.{core::num::<}(2){(core::num) → core::bool})
+  return x;
+}
+static method fn2(core::int a) → core::int {
+  core::int x = 0;
+  core::int b = 0;
+  #L1:
+  do {
+    if(x.{core::num::>}(5){(core::num) → core::bool})
+      break #L1;
+    x = x.{core::num::+}(a){(core::num) → core::int};
+    b = b.{core::num::+}(1){(core::num) → core::int};
+  }
+  while (b.{core::num::<}(2){(core::num) → core::bool})
+  return x;
+}
+static method fn3() → core::int {
+  core::int x = 0;
+  core::int b = 0;
+  do
+    #L2:
+    {
+      x = x.{core::num::+}(1){(core::num) → core::int};
+      if(x.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1)
+        break #L2;
+      b = b.{core::num::+}(x){(core::num) → core::int};
+    }
+  while (x.{core::num::<}(5){(core::num) → core::bool})
+  return b;
+}
+static method main() → void {
+  exp::Expect::equals(#C1, 2);
+  exp::Expect::equals(#C2, 4);
+  exp::Expect::equals(#C3, 10);
+  exp::Expect::equals(#C4, 6);
+}
+
+constants  {
+  #C1 = 2
+  #C2 = 4
+  #C3 = 10
+  #C4 = 6
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.weak.modular.expect
new file mode 100644
index 0000000..f4906f3
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_for_statements.dart.weak.modular.expect
@@ -0,0 +1,102 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = #C1;
+static const field core::int var2 = #C2;
+static const field core::int var3 = #C3;
+static const field core::int var4 = #C4;
+static const field core::int var5 = #C5;
+static const field core::int var6 = #C1;
+static const field core::int var7 = #C6;
+static const field core::int var8 = #C2;
+static const field core::int var9 = #C7;
+static const field core::int var10 = #C8;
+static method fn(core::int a) → core::int {
+  core::int b = a;
+  for (core::int i = 0; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    b = b.{core::num::+}(a){(core::num) → core::int};
+  }
+  return b;
+}
+static method fn1(core::int a) → core::int {
+  core::int b = a;
+  for (core::int i = 0; ; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    b = b.{core::num::*}(3){(core::num) → core::int};
+    if(b.{core::num::>}(10){(core::num) → core::bool})
+      return b;
+  }
+}
+static method fn2() → core::int {
+  for (core::int i = 0, core::int j = 2; ; i = i.{core::num::+}(2){(core::num) → core::int}, j = j.{core::num::+}(1){(core::num) → core::int}) {
+    if(i.{core::num::+}(j){(core::num) → core::int}.{core::num::>}(10){(core::num) → core::bool}) {
+      return i.{core::num::+}(j){(core::num) → core::int};
+    }
+  }
+}
+static method fnContinue() → core::int {
+  core::int a = 0;
+  for (core::int i = 0; i.{core::num::<}(5){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+    #L1:
+    {
+      if(i.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1)
+        break #L1;
+      a = a.{core::num::+}(i){(core::num) → core::int};
+    }
+  return a;
+}
+static method fnBreak(core::int a) → core::int {
+  core::int b = a;
+  #L2:
+  for (core::int i = 0; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(b =={core::num::==}{(core::Object) → core::bool} 2)
+      break #L2;
+    b = b.{core::num::+}(a){(core::num) → core::int};
+  }
+  return b;
+}
+static method fnNestedFor() → core::int {
+  core::int a = 0;
+  for (; ; ) {
+    #L3:
+    for (; ; ) {
+      break #L3;
+    }
+    return 1;
+  }
+}
+static method fnBreakLabel() → core::int {
+  #L4:
+  for (; ; ) {
+    for (; ; ) {
+      break #L4;
+    }
+  }
+  return 3;
+}
+static method main() → void {
+  exp::Expect::equals(#C1, 6);
+  exp::Expect::equals(#C2, 9);
+  exp::Expect::equals(#C3, 18);
+  exp::Expect::equals(#C4, 27);
+  exp::Expect::equals(#C5, 11);
+  exp::Expect::equals(#C1, 6);
+  exp::Expect::equals(#C6, 2);
+  exp::Expect::equals(#C2, 9);
+  exp::Expect::equals(#C7, 1);
+  exp::Expect::equals(#C8, 3);
+}
+
+constants  {
+  #C1 = 6
+  #C2 = 9
+  #C3 = 18
+  #C4 = 27
+  #C5 = 11
+  #C6 = 2
+  #C7 = 1
+  #C8 = 3
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.weak.modular.expect
new file mode 100644
index 0000000..525bcb7
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_if_statements.dart.weak.modular.expect
@@ -0,0 +1,86 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = #C1;
+static const field core::int var2 = #C2;
+static const field core::int var3 = #C3;
+static const field core::int one = #C4;
+static const field core::int var4 = #C1;
+static const field core::int var5 = #C2;
+static const field core::int var6 = #C1;
+static const field core::int var6_1 = #C2;
+static const field core::int var6_2 = #C3;
+static const field core::int var7 = #C5;
+static const field core::int var8 = #C6;
+static method ifTest(core::int a) → core::int {
+  if(a =={core::num::==}{(core::Object) → core::bool} 1) {
+    return 100;
+  }
+  else
+    if(a =={core::num::==}{(core::Object) → core::bool} 2) {
+      return 200;
+    }
+    else {
+      return 300;
+    }
+}
+static method ifTest2(core::int a) → core::int {
+  if(a =={core::num::==}{(core::Object) → core::bool} #C4) {
+    return 100;
+  }
+  else {
+    return 200;
+  }
+}
+static method ifTest3(core::int a) → core::int {
+  if(a.{core::num::>}(0){(core::num) → core::bool}) {
+    if(a =={core::num::==}{(core::Object) → core::bool} 1)
+      return 100;
+    return 200;
+  }
+  return 300;
+}
+static method ifTest4(core::int a) → core::int {
+  core::int b = a;
+  if(a =={core::num::==}{(core::Object) → core::bool} 1) {
+    b = b.{core::num::+}(a){(core::num) → core::int};
+    if(a.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1) {
+      b = b.{core::num::+}(a){(core::num) → core::int};
+    }
+  }
+  else
+    if(a =={core::num::==}{(core::Object) → core::bool} 2) {
+      b = b.{core::num::-}(a){(core::num) → core::int};
+    }
+  return b;
+}
+static method ifTest5() → core::int {
+  core::int x = 10;
+  if(true) {
+    core::int x = 20;
+  }
+  return x;
+}
+static method main() → void {
+  exp::Expect::equals(#C1, 100);
+  exp::Expect::equals(#C2, 200);
+  exp::Expect::equals(#C3, 300);
+  exp::Expect::equals(#C1, 100);
+  exp::Expect::equals(#C2, 200);
+  exp::Expect::equals(#C1, 100);
+  exp::Expect::equals(#C5, 3);
+  exp::Expect::equals(#C6, 10);
+}
+
+constants  {
+  #C1 = 100
+  #C2 = 200
+  #C3 = 300
+  #C4 = 1
+  #C5 = 3
+  #C6 = 10
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.weak.modular.expect
new file mode 100644
index 0000000..889f2d5
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_fields.dart.weak.modular.expect
@@ -0,0 +1,65 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+class A extends core::Object /*hasConstConstructor*/  {
+  final field core::int y;
+  const constructor •(core::int y) → self::A
+    : self::A::y = y, super core::Object::•()
+    ;
+}
+class B extends self::A /*hasConstConstructor*/  {
+  const constructor •(core::int x) → self::B
+    : super self::A::•(x)
+    ;
+}
+class C extends self::A /*hasConstConstructor*/  {
+  @#C1
+  final field core::int y = 2;
+  const constructor •() → self::C
+    : super self::A::•(100)
+    ;
+}
+static const field core::int var1 = #C2;
+static const field core::int var2 = #C2;
+static const field core::int var3 = #C2;
+static const field core::int var4 = #C2;
+static const field core::int var5 = #C3;
+static method fn() → core::int
+  return #C4.{self::A::y}{core::int};
+static method fn2() → core::int {
+  self::A x = #C4;
+  return x.{self::A::y}{core::int};
+}
+static method fn4() → core::int
+  return #C5.{self::A::y}{core::int};
+static method fn5() → core::int
+  return #C7.{self::C::y}{core::int};
+static method main() → void {
+  exp::Expect::equals(#C2, 1);
+  exp::Expect::equals(#C2, 1);
+  exp::Expect::equals(#C2, 1);
+  exp::Expect::equals(#C2, 1);
+  exp::Expect::equals(#C3, 2);
+}
+
+constants  {
+  #C1 = core::_Override {}
+  #C2 = 1
+  #C3 = 2
+  #C4 = self::A {y:#C2}
+  #C5 = self::B {y:#C2}
+  #C6 = 100
+  #C7 = self::C {y:#C3, y:#C6}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_functions_instance_fields.dart:
+- A. (from org-dartlang-testcase:///const_functions_instance_fields.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- B. (from org-dartlang-testcase:///const_functions_instance_fields.dart:27:9)
+- C. (from org-dartlang-testcase:///const_functions_instance_fields.dart:37:9)
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.modular.expect
new file mode 100644
index 0000000..d74febc
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.modular.expect
@@ -0,0 +1,138 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+class A extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::B
+    : super core::Object::•()
+    ;
+  @#C1
+  method toString() → core::String
+    return "B";
+}
+class C extends core::Object /*hasConstConstructor*/  {
+  final field core::int y;
+  const constructor •(core::int y) → self::C
+    : self::C::y = y, super core::Object::•()
+    ;
+  method fn() → core::int {
+    if(this.{self::C::y}{core::int} =={core::num::==}{(core::Object) → core::bool} 1)
+      return 100;
+    return 200;
+  }
+}
+class D extends self::C /*hasConstConstructor*/  {
+  const constructor •(core::int y) → self::D
+    : super self::C::•(y)
+    ;
+  @#C1
+  method fn() → core::int
+    return 300;
+}
+class E extends self::C /*hasConstConstructor*/  {
+  const constructor •(core::int y) → self::E
+    : super self::C::•(y)
+    ;
+}
+class F<T extends core::Object? = dynamic, U extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::F<self::F::T%, self::F::U%, self::F::V%>
+    : super core::Object::•()
+    ;
+  method fn(covariant-by-class self::F::U% x) → self::F::U%
+    return x;
+}
+class G<T extends core::Object? = dynamic> extends self::F<self::G::T%, core::String, core::num> /*hasConstConstructor*/  {
+  const constructor •() → self::G<self::G::T%>
+    : super self::F::•()
+    ;
+}
+static const field core::String var1 = #C2;
+static const field core::String toString1 = #C2;
+static const field core::String var2 = #C3;
+static const field core::String toString2 = #C3;
+static const field core::int var3 = #C4;
+static const field core::int var4 = #C5;
+static const field core::int fnVal1 = #C4;
+static const field core::int fnVal2 = #C5;
+static const field core::int var5 = #C6;
+static const field core::int fnVal3 = #C6;
+static const field core::int var6 = #C5;
+static const field core::int fnVal4 = #C4;
+static const field core::String var7 = #C7;
+static const field core::String fnVal5 = #C7;
+static const field core::String var8 = #C7;
+static const field core::String fnVal6 = #C7;
+static method fn() → core::String
+  return #C8.{core::Object::toString}(){() → core::String};
+static method fn2() → core::String
+  return #C9.{self::B::toString}(){() → core::String};
+static method fn3() → core::int
+  return #C11.{self::C::fn}(){() → core::int};
+static method fn4() → core::int
+  return #C13.{self::C::fn}(){() → core::int};
+static method fn5() → core::int
+  return #C14.{self::D::fn}(){() → core::int};
+static method fn6() → core::int
+  return #C15.{self::C::fn}(){() → core::int};
+static method fn7() → core::String
+  return #C16.{self::F::fn}("string"){(core::String) → core::String};
+static method fn8() → core::String
+  return #C17.{self::F::fn}("string"){(core::String) → core::String};
+static method main() → void {
+  exp::Expect::equals(#C2, #C8.{core::Object::toString}(){() → core::String});
+  exp::Expect::equals(#C2, #C8.{core::Object::toString}(){() → core::String});
+  exp::Expect::equals(#C3, #C9.{self::B::toString}(){() → core::String});
+  exp::Expect::equals(#C3, #C9.{self::B::toString}(){() → core::String});
+  exp::Expect::equals(#C4, 200);
+  exp::Expect::equals(#C5, 100);
+  exp::Expect::equals(#C4, 200);
+  exp::Expect::equals(#C5, 100);
+  exp::Expect::equals(#C6, 300);
+  exp::Expect::equals(#C6, 300);
+  exp::Expect::equals(#C5, 100);
+  exp::Expect::equals(#C4, 200);
+  exp::Expect::equals(#C7, "string");
+  exp::Expect::equals(#C7, "string");
+  exp::Expect::equals(#C7, "string");
+  exp::Expect::equals(#C7, "string");
+}
+
+constants  {
+  #C1 = core::_Override {}
+  #C2 = "Instance of 'A'"
+  #C3 = "B"
+  #C4 = 200
+  #C5 = 100
+  #C6 = 300
+  #C7 = "string"
+  #C8 = self::A {}
+  #C9 = self::B {}
+  #C10 = 0
+  #C11 = self::C {y:#C10}
+  #C12 = 1
+  #C13 = self::C {y:#C12}
+  #C14 = self::D {y:#C12}
+  #C15 = self::E {y:#C12}
+  #C16 = self::F<core::int*, core::String*, core::num*> {}
+  #C17 = self::G<core::int*> {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_functions_instance_methods.dart:
+- A. (from org-dartlang-testcase:///const_functions_instance_methods.dart:10:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- B. (from org-dartlang-testcase:///const_functions_instance_methods.dart:14:9)
+- C. (from org-dartlang-testcase:///const_functions_instance_methods.dart:23:9)
+- D. (from org-dartlang-testcase:///const_functions_instance_methods.dart:32:9)
+- E. (from org-dartlang-testcase:///const_functions_instance_methods.dart:39:9)
+- F. (from org-dartlang-testcase:///const_functions_instance_methods.dart:43:9)
+- G. (from org-dartlang-testcase:///const_functions_instance_methods.dart:48:9)
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.modular.expect
new file mode 100644
index 0000000..bc35178
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_list.dart.weak.modular.expect
@@ -0,0 +1,125 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int firstVar = #C1;
+static const field core::int firstCatchVar = #C2;
+static const field core::bool isEmptyVar = #C3;
+static const field core::bool isNotEmptyVar = #C4;
+static const field core::int lastVar = #C5;
+static const field core::int lastCatchVar = #C2;
+static const field core::int lengthVar = #C5;
+static const field core::int singleVar = #C1;
+static const field core::int singleCatchVar = #C2;
+static const field core::int singleCatchVar2 = #C2;
+static const field core::int getWithIndexVar = #C1;
+static const field core::int rangeErrorCatchVar = #C2;
+static const field core::List<core::int> mutableListVar = #C6;
+static const field core::List<core::int> mutableListAddVar = #C8;
+static method firstFn() → core::int {
+  return #C6.{core::Iterable::first}{core::int};
+}
+static method firstCatchFn() → core::int {
+  try {
+    core::int v = #C9.{core::Iterable::first}{core::int};
+  }
+  on core::StateError catch(no-exception-var) {
+    return 0;
+  }
+  return 1;
+}
+static method isEmptyFn() → core::bool {
+  return #C6.{core::Iterable::isEmpty}{core::bool};
+}
+static method isNotEmptyFn() → core::bool {
+  return #C6.{core::Iterable::isNotEmpty}{core::bool};
+}
+static method lastFn() → core::int {
+  return #C6.{core::Iterable::last}{core::int};
+}
+static method lastCatchFn() → core::int {
+  try {
+    core::int v = #C9.{core::Iterable::last}{core::int};
+  }
+  on core::StateError catch(no-exception-var) {
+    return 0;
+  }
+  return 1;
+}
+static method lengthFn() → core::int {
+  return #C6.{core::List::length}{core::int};
+}
+static method singleFn() → core::int {
+  return #C10.{core::Iterable::single}{core::int};
+}
+static method singleCatchFn() → core::int {
+  try {
+    core::int v = #C9.{core::Iterable::single}{core::int};
+  }
+  on core::StateError catch(no-exception-var) {
+    return 0;
+  }
+  return 1;
+}
+static method singleCatchFn2() → core::int {
+  try {
+    core::int v = #C6.{core::Iterable::single}{core::int};
+  }
+  on core::StateError catch(no-exception-var) {
+    return 0;
+  }
+  return 1;
+}
+static method getWithIndexFn() → core::int {
+  return #C10.{core::List::[]}(0){(core::int) → core::int};
+}
+static method rangeErrorCatchFn() → core::int {
+  try {
+    core::int v = #C10.{core::List::[]}(1){(core::int) → core::int};
+  }
+  on core::RangeError catch(no-exception-var) {
+    return 0;
+  }
+  return 1;
+}
+static method mutableList() → core::List<core::int> {
+  core::List<core::int> x = <core::int>[1, 2];
+  return x;
+}
+static method mutableListAdd() → core::List<core::int> {
+  core::List<core::int> x = <core::int>[1, 2];
+  x.{core::List::add}(3){(core::int) → void};
+  return x;
+}
+static method main() → void {
+  exp::Expect::equals(#C1, 1);
+  exp::Expect::equals(#C2, 0);
+  exp::Expect::equals(#C3, false);
+  exp::Expect::equals(#C4, true);
+  exp::Expect::equals(#C5, 2);
+  exp::Expect::equals(#C2, 0);
+  exp::Expect::equals(#C5, 2);
+  exp::Expect::equals(#C1, 1);
+  exp::Expect::equals(#C2, 0);
+  exp::Expect::equals(#C2, 0);
+  exp::Expect::equals(#C1, 1);
+  exp::Expect::equals(#C2, 0);
+  exp::Expect::equals(#C6, #C6);
+  exp::Expect::equals(#C8, #C8);
+}
+
+constants  {
+  #C1 = 1
+  #C2 = 0
+  #C3 = false
+  #C4 = true
+  #C5 = 2
+  #C6 = <core::int*>[#C1, #C5]
+  #C7 = 3
+  #C8 = <core::int*>[#C1, #C5, #C7]
+  #C9 = <core::int*>[]
+  #C10 = <core::int*>[#C1]
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.modular.expect
new file mode 100644
index 0000000..a7c5460
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_list_error.dart.weak.modular.expect
@@ -0,0 +1,126 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/const_functions/const_functions_list_error.dart:36:12: Error: The getter 'invalidProperty' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'invalidProperty'.
+//   return x.invalidProperty;
+//            ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/const_functions/const_functions_list_error.dart:54:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   return x[0.1];
+//            ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_list_error.dart:9:24: Error: Constant evaluation error:
+// const firstException = firstExceptionFn();
+//                        ^
+// pkg/front_end/testcases/const_functions/const_functions_list_error.dart:12:12: Context: Unhandled core exception: Bad state: No element
+//   return x.first;
+//            ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_list_error.dart:15:23: Error: Constant evaluation error:
+// const lastException = lastExceptionFn();
+//                       ^
+// pkg/front_end/testcases/const_functions/const_functions_list_error.dart:18:12: Context: Unhandled core exception: Bad state: No element
+//   return x.last;
+//            ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_list_error.dart:21:25: Error: Constant evaluation error:
+// const singleException = singleExceptionFn();
+//                         ^
+// pkg/front_end/testcases/const_functions/const_functions_list_error.dart:24:12: Context: Unhandled core exception: Bad state: No element
+//   return x.single;
+//            ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_list_error.dart:27:30: Error: Constant evaluation error:
+// const singleExceptionMulti = singleExceptionMultiFn();
+//                              ^
+// pkg/front_end/testcases/const_functions/const_functions_list_error.dart:30:12: Context: Unhandled core exception: Bad state: Too many elements
+//   return x.single;
+//            ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_list_error.dart:39:31: Error: Constant evaluation error:
+// const getWithIndexException = getWithIndexExceptionFn();
+//                               ^
+// pkg/front_end/testcases/const_functions/const_functions_list_error.dart:42:11: Context: Unhandled core exception: RangeError: Index out of range: index should be less than 1: 1
+//   return x[1];
+//           ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_list_error.dart:45:32: Error: Constant evaluation error:
+// const getWithIndexException2 = getWithIndexExceptionFn2();
+//                                ^
+// pkg/front_end/testcases/const_functions/const_functions_list_error.dart:48:11: Context: Unhandled core exception: RangeError: Index out of range: index must not be negative: -1
+//   return x[-1];
+//           ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_list_error.dart:57:31: Error: Constant evaluation error:
+// const constListAddException = constListAddExceptionFn();
+//                               ^
+// pkg/front_end/testcases/const_functions/const_functions_list_error.dart:60:5: Context: Unhandled core exception: Unsupported operation: add
+//   x.add(3);
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "package:expect/expect.dart";
+
+static const field core::int firstException = invalid-expression "Unhandled core exception: Bad state: No element";
+static const field core::int lastException = invalid-expression "Unhandled core exception: Bad state: No element";
+static const field core::int singleException = invalid-expression "Unhandled core exception: Bad state: No element";
+static const field core::int singleExceptionMulti = invalid-expression "Unhandled core exception: Bad state: Too many elements";
+static const field core::int invalidProperty = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:36:12: Error: The getter 'invalidProperty' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'invalidProperty'.
+  return x.invalidProperty;
+           ^^^^^^^^^^^^^^^";
+static const field core::int getWithIndexException = invalid-expression "Unhandled core exception: RangeError: Index out of range: index should be less than 1: 1";
+static const field core::int getWithIndexException2 = invalid-expression "Unhandled core exception: RangeError: Index out of range: index must not be negative: -1";
+static const field core::int getWithIndexException3 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:54:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  return x[0.1];
+           ^";
+static const field core::List<core::int> constListAddException = invalid-expression "Unhandled core exception: Unsupported operation: add";
+static method firstExceptionFn() → core::int {
+  return #C1.{core::Iterable::first}{core::int};
+}
+static method lastExceptionFn() → core::int {
+  return #C1.{core::Iterable::last}{core::int};
+}
+static method singleExceptionFn() → core::int {
+  return #C1.{core::Iterable::single}{core::int};
+}
+static method singleExceptionMultiFn() → core::int {
+  return #C4.{core::Iterable::single}{core::int};
+}
+static method invalidPropertyFn() → core::int {
+  return invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:36:12: Error: The getter 'invalidProperty' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'invalidProperty'.
+  return x.invalidProperty;
+           ^^^^^^^^^^^^^^^" in #C4{<unresolved>}.invalidProperty as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+}
+static method getWithIndexExceptionFn() → core::int {
+  return #C5.{core::List::[]}(1){(core::int) → core::int};
+}
+static method getWithIndexExceptionFn2() → core::int {
+  return #C5.{core::List::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::int};
+}
+static method getWithIndexExceptionFn3() → core::int {
+  return #C5.{core::List::[]}(invalid-expression "pkg/front_end/testcases/const_functions/const_functions_list_error.dart:54:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  return x[0.1];
+           ^" in 0.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int};
+}
+static method constListAddExceptionFn() → core::List<core::int> {
+  #C4.{core::List::add}(3){(core::int) → void};
+  return #C4;
+}
+static method main() → void {}
+
+constants  {
+  #C1 = <core::int*>[]
+  #C2 = 1
+  #C3 = 2
+  #C4 = <core::int*>[#C2, #C3]
+  #C5 = <core::int*>[#C2]
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.weak.modular.expect
new file mode 100644
index 0000000..4c5f0e1
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_local_functions.dart.weak.modular.expect
@@ -0,0 +1,71 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int constTwo = #C1;
+static method function1() → core::int {
+  function add(core::int a, core::int b) → core::int
+    return a.{core::num::+}(b){(core::num) → core::int};
+  return #C2;
+}
+static method function2() → core::int {
+  function addTwo(core::int a) → core::int {
+    core::int b = a.{core::num::+}(#C1){(core::num) → core::int};
+    return b;
+  }
+  return #C3;
+}
+static method function3() → core::int {
+  function addTwoReturn(core::int a) → core::int
+    return a.{core::num::+}(#C1){(core::num) → core::int};
+  return #C4;
+}
+static method function4() → core::int {
+  function addTwo(core::int a) → core::int
+    return a.{core::num::+}(#C1){(core::num) → core::int};
+  return #C5;
+}
+static method function5() → core::int {
+  function typeFn<T extends core::Object? = dynamic>(T% a) → T%
+    return a;
+  return #C6;
+}
+static method function6() → core::int {
+  function optionalFn([core::int a = #C7]) → core::int
+    return a;
+  return #C8;
+}
+static method function7() → core::int {
+  function namedFn({core::int a = #C7}) → core::int
+    return a;
+  return #C1;
+}
+static method function8() → core::int {
+  function add(core::int a, core::int b) → core::int
+    return a.{core::num::+}(b){(core::num) → core::int};
+  return #C1.{core::num::+}(#C4){(core::num) → core::int};
+}
+static method main() → void {
+  exp::Expect::equals(self::function1(), 12);
+  exp::Expect::equals(self::function2(), 4);
+  exp::Expect::equals(self::function3(), 5);
+  exp::Expect::equals(self::function4(), 22);
+  exp::Expect::equals(self::function5(), 3);
+  exp::Expect::equals(self::function6(), 1);
+  exp::Expect::equals(self::function7(), 2);
+  exp::Expect::equals(self::function8(), 7);
+}
+
+constants  {
+  #C1 = 2
+  #C2 = 12
+  #C3 = 4
+  #C4 = 5
+  #C5 = 22
+  #C6 = 3
+  #C7 = 0
+  #C8 = 1
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.modular.expect
new file mode 100644
index 0000000..7f69cd7
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_map.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::Object? var1 = #C1;
+static const field core::Object? var2 = #C2;
+static const field core::Object? var3 = #C3;
+static const field core::Map<core::String, core::int> map = #C9;
+static const field core::Object? var4 = #C2;
+static const field core::Object? var5 = #C6;
+static const field core::Object? var6 = #C8;
+static const field core::int? var7 = #C2;
+static method fn(core::Map<core::Object, core::Object> map, core::Object key) → core::Object? {
+  return map.{core::Map::[]}(key){(core::Object?) → core::Object?};
+}
+static method fn2() → core::int? {
+  return #C11.{core::Map::[]}("key"){(core::Object?) → core::int?};
+}
+static method main() → void {
+  exp::Expect::equals(#C1, "val");
+  exp::Expect::equals(#C2, 2);
+  exp::Expect::equals(#C3, null);
+  exp::Expect::equals(#C2, 2);
+  exp::Expect::equals(#C6, 3);
+  exp::Expect::equals(#C8, 4);
+  exp::Expect::equals(#C2, 2);
+}
+
+constants  {
+  #C1 = "val"
+  #C2 = 2
+  #C3 = null
+  #C4 = "key1"
+  #C5 = "key2"
+  #C6 = 3
+  #C7 = "key3"
+  #C8 = 4
+  #C9 = <core::String*, core::int*>{#C4:#C2, #C5:#C6, #C7:#C8)
+  #C10 = "key"
+  #C11 = <core::String*, core::int*>{#C10:#C2)
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.weak.modular.expect
new file mode 100644
index 0000000..1ee9329
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_recursion.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int b = #C1;
+static method fn(core::int a) → core::int {
+  if(a =={core::num::==}{(core::Object) → core::bool} 1)
+    return 1;
+  return a.{core::num::*}(self::fn(a.{core::num::-}(1){(core::num) → core::int})){(core::num) → core::int};
+}
+static method localTest() → core::int {
+  function fnLocal(core::int a) → core::int {
+    if(a =={core::num::==}{(core::Object) → core::bool} 1)
+      return 1;
+    return a.{core::num::*}(fnLocal(a.{core::num::-}(1){(core::num) → core::int}){(core::int) → core::int}){(core::num) → core::int};
+  }
+  return #C1;
+}
+static method main() → void {
+  exp::Expect::equals(#C1, 24);
+  exp::Expect::equals(self::localTest(), 24);
+}
+
+constants  {
+  #C1 = 24
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_return.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_return.dart.weak.modular.expect
new file mode 100644
index 0000000..de04a6c
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_return.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field void var1 = #C1;
+static const field void var2 = #C1;
+static const field core::int? var3 = #C1;
+static const field core::int? var4 = #C1;
+static const field core::int var5 = #C2;
+static method fn() → void {}
+static method fn2() → void {
+  return;
+}
+static method fn3() → core::int?
+  return null;
+static method fn4() → core::int? {
+  return null;
+}
+static method fn5() → core::int {
+  try {
+    return throw 1;
+  }
+  on core::int catch(no-exception-var) {
+    return 2;
+  }
+}
+static method main() → void {
+  exp::Expect::equals(#C1 as{ForNonNullableByDefault} dynamic, null);
+  exp::Expect::equals(#C1 as{ForNonNullableByDefault} dynamic, null);
+  exp::Expect::equals(#C1, null);
+  exp::Expect::equals(#C1, null);
+  exp::Expect::equals(#C2, 2);
+}
+
+constants  {
+  #C1 = null
+  #C2 = 2
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.modular.expect
new file mode 100644
index 0000000..04bf4ef
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_simple_invocations.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int binary = #C1;
+static const field core::int optional = #C2;
+static const field core::int optional1 = #C3;
+static const field core::int named = #C4;
+static const field core::int named1 = #C5;
+static const field core::int type = #C6;
+static const field core::String str = #C7;
+static const field core::bool eq = #C8;
+static const field core::int negative = #C9;
+static const field core::bool boolean = #C8;
+static const field core::double doubleResult = #C10;
+static const field core::int multi = #C2;
+static const field core::int multi2 = #C3;
+static method binaryFn(core::int a, core::int b) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method optionalFn(core::int c, [core::int d = #C11]) → core::int
+  return c.{core::num::+}(d){(core::num) → core::int};
+static method namedFn(core::int e, {core::int f = #C3}) → core::int
+  return e.{core::num::+}(f){(core::num) → core::int};
+static method typeFn<T extends core::Object? = dynamic>(self::typeFn::T% x) → self::typeFn::T%
+  return x;
+static method stringFn(core::String s) → core::String
+  return s.{core::String::+}("ing"){(core::String) → core::String};
+static method equalFn(core::int a, core::int b) → core::bool
+  return a =={core::num::==}{(core::Object) → core::bool} b;
+static method unary(core::int a) → core::int
+  return a.{core::int::unary-}(){() → core::int};
+static method boolFn(core::bool a, core::bool b) → core::bool
+  return a || b;
+static method doubleFn(core::double a, core::double b) → core::double
+  return a.{core::double::*}(b){(core::num) → core::double};
+static method multiFn(core::int a) → core::int
+  return a.{core::num::+}(1){(core::num) → core::int};
+static method main() → void {
+  exp::Expect::equals(#C1, 1);
+  exp::Expect::equals(#C2, 2);
+  exp::Expect::equals(#C3, 3);
+  exp::Expect::equals(#C4, 4);
+  exp::Expect::equals(#C5, 5);
+  exp::Expect::equals(#C6, 6);
+  exp::Expect::equals(#C7, "string");
+  exp::Expect::equals(#C8, true);
+  exp::Expect::equals(#C9, 2.{core::int::unary-}(){() → core::int});
+  exp::Expect::equals(#C8, true);
+  exp::Expect::equals(#C10, 4.4);
+  exp::Expect::equals(#C2, 2);
+  exp::Expect::equals(#C3, 3);
+}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+  #C3 = 3
+  #C4 = 4
+  #C5 = 5
+  #C6 = 6
+  #C7 = "string"
+  #C8 = true
+  #C9 = -2
+  #C10 = 4.4
+  #C11 = 0
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_string.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_string.dart.weak.modular.expect
new file mode 100644
index 0000000..21293b7
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_string.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::String str = #C1;
+static const field core::String var1 = #C2;
+static const field dynamic var2 = #C3;
+static const field core::String var3 = #C3;
+static const field dynamic var4 = #C4;
+static method fn() → dynamic {
+  core::String local = "str";
+  return local.{core::String::[]}(0){(core::int) → core::String};
+}
+static method fn2() → dynamic {
+  try {
+    core::String x = #C1.{core::String::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::String};
+  }
+  on core::RangeError catch(no-exception-var) {
+    return 2;
+  }
+}
+static method main() → void {
+  exp::Expect::equals(#C2, "r");
+  exp::Expect::equals(#C3, "s");
+  exp::Expect::equals(#C3, "s");
+  exp::Expect::equals(#C4, 2);
+}
+
+constants  {
+  #C1 = "str"
+  #C2 = "r"
+  #C3 = "s"
+  #C4 = 2
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.modular.expect
new file mode 100644
index 0000000..eeab2cc
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_string_error.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/const_functions/const_functions_string_error.dart:28:14: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   return str[1.1];
+//              ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_string_error.dart:10:17: Error: Constant evaluation error:
+// const var1 = str[-1];
+//                 ^
+// pkg/front_end/testcases/const_functions/const_functions_string_error.dart:10:17: Context: Unhandled core exception: RangeError: Index out of range: index must not be negative: -1
+// const var1 = str[-1];
+//                 ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_string_error.dart:11:17: Error: Constant evaluation error:
+// const var2 = str[3];
+//                 ^
+// pkg/front_end/testcases/const_functions/const_functions_string_error.dart:11:17: Context: Unhandled core exception: RangeError: Index out of range: index should be less than 3: 3
+// const var2 = str[3];
+//                 ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_string_error.dart:13:14: Error: Constant evaluation error:
+// const var3 = fn();
+//              ^
+// pkg/front_end/testcases/const_functions/const_functions_string_error.dart:16:13: Context: Unhandled core exception: RangeError: Index out of range: index must not be negative: -1
+//   return str[-1];
+//             ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_string_error.dart:19:14: Error: Constant evaluation error:
+// const var4 = fn2();
+//              ^
+// pkg/front_end/testcases/const_functions/const_functions_string_error.dart:22:13: Context: Unhandled core exception: RangeError: Index out of range: index should be less than 3: 3
+//   return str[3];
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "package:expect/expect.dart";
+
+static const field core::String str = #C1;
+static const field core::String var1 = invalid-expression "Unhandled core exception: RangeError: Index out of range: index must not be negative: -1";
+static const field core::String var2 = invalid-expression "Unhandled core exception: RangeError: Index out of range: index should be less than 3: 3";
+static const field dynamic var3 = invalid-expression "Unhandled core exception: RangeError: Index out of range: index must not be negative: -1";
+static const field dynamic var4 = invalid-expression "Unhandled core exception: RangeError: Index out of range: index should be less than 3: 3";
+static const field dynamic var5 = invalid-expression "pkg/front_end/testcases/const_functions/const_functions_string_error.dart:28:14: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  return str[1.1];
+             ^";
+static method fn() → dynamic {
+  core::String s = "str";
+  return #C1.{core::String::[]}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::String};
+}
+static method fn2() → dynamic {
+  core::String s = "str";
+  return #C1.{core::String::[]}(3){(core::int) → core::String};
+}
+static method fn3() → dynamic {
+  core::String s = "str";
+  return #C1.{core::String::[]}(invalid-expression "pkg/front_end/testcases/const_functions/const_functions_string_error.dart:28:14: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  return str[1.1];
+             ^" in 1.1 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::String};
+}
+static method main() → void {}
+
+constants  {
+  #C1 = "str"
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.weak.modular.expect
new file mode 100644
index 0000000..b3f761c
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_switch_statements.dart.weak.modular.expect
@@ -0,0 +1,93 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = #C1;
+static const field core::int var2 = #C2;
+static const field core::int var3 = #C1;
+static const field core::int var4 = #C1;
+static const field core::int var5 = #C3;
+static const field core::int var6 = #C4;
+static const field core::int var7 = #C5;
+static const field core::int var8 = #C6;
+static const field core::int var9 = #C3;
+static method basicSwitch(core::int x) → core::int {
+  #L1:
+  switch(x) {
+    #L2:
+    case #C7:
+      {
+        return 100;
+      }
+    #L3:
+    default:
+      {
+        x = x.{core::num::+}(1){(core::num) → core::int};
+        break #L1;
+      }
+  }
+  return x;
+}
+static method multipleCaseSwitch(core::int x) → core::int {
+  #L4:
+  switch(x) {
+    #L5:
+    case #C7:
+    case #C8:
+      {
+        return 100;
+      }
+    #L6:
+    default:
+      {
+        break #L4;
+      }
+  }
+  return 0;
+}
+static method continueLabelSwitch(core::int x) → core::int {
+  switch(x) {
+    #L7:
+    case #C7:
+      {
+        x = x.{core::num::+}(100){(core::num) → core::int};
+        continue #L8;
+      }
+    #L9:
+    case #C8:
+      {
+        continue #L7;
+      }
+    #L8:
+    case #C2:
+      {
+        return x.{core::num::+}(3){(core::num) → core::int};
+      }
+  }
+  return 0;
+}
+static method main() → void {
+  exp::Expect::equals(#C1, 100);
+  exp::Expect::equals(#C2, 3);
+  exp::Expect::equals(#C1, 100);
+  exp::Expect::equals(#C1, 100);
+  exp::Expect::equals(#C3, 0);
+  exp::Expect::equals(#C4, 104);
+  exp::Expect::equals(#C5, 105);
+  exp::Expect::equals(#C6, 6);
+  exp::Expect::equals(#C3, 0);
+}
+
+constants  {
+  #C1 = 100
+  #C2 = 3
+  #C3 = 0
+  #C4 = 104
+  #C5 = 105
+  #C6 = 6
+  #C7 = 1
+  #C8 = 2
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.weak.modular.expect
new file mode 100644
index 0000000..f816401
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally.dart.weak.modular.expect
@@ -0,0 +1,137 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = #C1;
+static const field core::int var2 = #C2;
+static const field core::int var3 = #C3;
+static const field core::int var4 = #C2;
+static const field core::int var5 = #C4;
+static const field core::int var6 = #C4;
+static const field core::int var7 = #C4;
+static const field core::int var8 = #C4;
+static const field core::int var9 = #C4;
+static const field core::int var10 = #C1;
+static const field core::int var11 = #C1;
+static const field core::String var12 = #C5;
+static const field core::int var13 = #C2;
+static method fn(dynamic error) → core::int {
+  try {
+    throw error;
+  }
+  on core::String catch(no-exception-var) {
+    return 0;
+  }
+  on core::Object catch(final core::Object e) {
+    return 1;
+  }
+}
+static method fn1(dynamic error) → core::int {
+  try {
+    throw error;
+  }
+  on core::int catch(final core::int e) {
+    return e;
+  }
+  on core::Object catch(final core::Object e) {
+    return 1;
+  }
+}
+static method finallyReturn(dynamic error) → core::int {
+  try
+    try {
+      if(!(error =={core::Object::==}{(core::Object) → core::bool} 1))
+        throw error;
+    }
+    on core::int catch(final core::int e) {
+      return e;
+    }
+    on core::Object catch(final core::Object e) {
+      return 1;
+    }
+  finally {
+    return 100;
+  }
+}
+static method finallyReturn1(core::int x) → core::int {
+  try {
+    if(x =={core::num::==}{(core::Object) → core::bool} 1) {
+      throw x;
+    }
+    else {
+      return 0;
+    }
+  }
+  finally {
+    return 100;
+  }
+}
+static method finallyMutate() → core::int {
+  core::int x = 0;
+  try {
+    return x;
+  }
+  finally {
+    x = x.{core::num::+}(1){(core::num) → core::int};
+  }
+}
+static method subtypeFn() → core::int {
+  try {
+    throw 2.5;
+  }
+  on core::num catch(final core::num e) {
+    return 0;
+  }
+}
+static method orderFn() → core::String {
+  core::String x = "st";
+  try
+    try {
+      x = x.{core::String::+}("ri"){(core::String) → core::String};
+      throw 2;
+    }
+    on core::Object catch(final core::Object e) {
+      x = x.{core::String::+}("n"){(core::String) → core::String};
+    }
+  finally {
+    return x.{core::String::+}("g"){(core::String) → core::String};
+  }
+}
+static method notThrowStatement() → core::int {
+  core::int count = 0;
+  try {
+    for (core::int i = 0; i.{core::num::<}(1){(core::num) → core::bool}; throw "a") {
+      count = count.{core::num::+}(i){(core::num) → core::int};
+    }
+  }
+  on core::Object catch(final core::Object e) {
+    return 1;
+  }
+  return 0;
+}
+static method main() → void {
+  exp::Expect::equals(#C1, 0);
+  exp::Expect::equals(#C2, 1);
+  exp::Expect::equals(#C3, 10);
+  exp::Expect::equals(#C2, 1);
+  exp::Expect::equals(#C4, 100);
+  exp::Expect::equals(#C4, 100);
+  exp::Expect::equals(#C4, 100);
+  exp::Expect::equals(#C4, 100);
+  exp::Expect::equals(#C4, 100);
+  exp::Expect::equals(#C1, 0);
+  exp::Expect::equals(#C1, 0);
+  exp::Expect::equals(#C5, "string");
+  exp::Expect::equals(#C2, 1);
+}
+
+constants  {
+  #C1 = 0
+  #C2 = 1
+  #C3 = 10
+  #C4 = 100
+  #C5 = "string"
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.weak.modular.expect
new file mode 100644
index 0000000..233c4ee
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart.weak.modular.expect
@@ -0,0 +1,78 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart:9:14: Error: Constant evaluation error:
+// const var1 = finallyThrow(0);
+//              ^
+// pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart:19:5: Context: Unhandled exception: 2
+//     throw 2;
+//     ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart:10:14: Error: Constant evaluation error:
+// const var2 = finallyThrow(1);
+//              ^
+// pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart:19:5: Context: Unhandled exception: 2
+//     throw 2;
+//     ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart:23:14: Error: Constant evaluation error:
+// const var3 = unhandledThrow(0);
+//              ^
+// pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart:27:5: Context: Unhandled exception: 0
+//     throw x;
+//     ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart:24:14: Error: Constant evaluation error:
+// const var4 = unhandledThrow("string");
+//              ^
+// pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart:29:5: Context: Unhandled exception: "string"
+//     throw e;
+//     ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart:33:14: Error: Constant evaluation error:
+// const var5 = unhandledThrow2();
+//              ^
+// pkg/front_end/testcases/const_functions/const_functions_try_catch_finally_error.dart:36:26: Context: Unhandled exception: "a"
+//   for (int i = 0; i < 1; throw 'a') {
+//                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = invalid-expression "Unhandled exception: 2";
+static const field core::int var2 = invalid-expression "Unhandled exception: 2";
+static const field core::int var3 = invalid-expression "Unhandled exception: 0";
+static const field core::int var4 = invalid-expression "Unhandled exception: \"string\"";
+static const field core::int var5 = invalid-expression "Unhandled exception: \"a\"";
+static method finallyThrow(core::int x) → core::int {
+  try {
+    if(x =={core::num::==}{(core::Object) → core::bool} 1) {
+      throw x;
+    }
+    else {
+      return 0;
+    }
+  }
+  finally {
+    throw 2;
+  }
+}
+static method unhandledThrow(dynamic x) → core::int {
+  try {
+    throw x;
+  }
+  on core::String catch(final core::String e) {
+    throw e;
+  }
+}
+static method unhandledThrow2() → core::int {
+  core::int count = 0;
+  for (core::int i = 0; i.{core::num::<}(1){(core::num) → core::bool}; throw "a") {
+    count = count.{core::num::+}(i){(core::num) → core::int};
+  }
+  return 0;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.weak.modular.expect
new file mode 100644
index 0000000..704d914
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_variable_assignments.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = #C1;
+static const field core::int var3 = #C2;
+static const field core::int var4 = #C1;
+static method varAssignmentTest(core::int a) → core::int {
+  core::int x = 4;
+  {
+    x = 3;
+  }
+  return x;
+}
+static method function() → core::int {
+  function varAssignmentTest2() → core::int {
+    core::int x = 2;
+    x = x.{core::num::+}(1){(core::num) → core::int};
+    return x;
+  }
+  return #C1;
+}
+static method varAssignmentTest3(core::int a) → core::int {
+  core::int x = 4;
+  x = a.{core::num::+}(1){(core::num) → core::int};
+  return x;
+}
+static method main() → void {
+  exp::Expect::equals(#C1, 3);
+  exp::Expect::equals(self::function(), 3);
+  exp::Expect::equals(#C2, 2);
+  exp::Expect::equals(#C1, 3);
+}
+
+constants  {
+  #C1 = 3
+  #C2 = 2
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.weak.modular.expect
new file mode 100644
index 0000000..c8a68f5
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations.dart.weak.modular.expect
@@ -0,0 +1,81 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = #C1;
+static const field core::int var1_1 = #C2;
+static const field core::String var2 = #C3;
+static const field core::int var3 = #C4;
+static const field core::int var4 = #C5;
+static const field core::int var5 = #C6;
+static const field core::int var6 = #C5;
+static const field core::int var7 = #C5;
+static const field core::int var8 = #C5;
+static const field core::int? var9 = #C7;
+static method function1(core::int a, core::int b) → core::int {
+  core::int x = 1.{core::num::+}(a){(core::num) → core::int}.{core::num::+}(b){(core::num) → core::int};
+  return x;
+}
+static method function2() → core::String {
+  dynamic x = "string";
+  return x as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
+}
+static method function3() → core::int {
+  core::int first = 2;
+  core::int second = 2.{core::num::+}(first){(core::num) → core::int};
+  return 2.{core::num::+}(second){(core::num) → core::int};
+}
+static method function4() → core::int {
+  core::int first = 2;
+  core::int second = 0;
+  return first.{core::num::+}(second){(core::num) → core::int};
+}
+static method function5() → core::int {
+  return #C6;
+}
+static method function6() → core::int {
+  dynamic a;
+  a = 2;
+  return a as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+}
+static method function7() → core::int {
+  dynamic a;
+  dynamic b;
+  a = 2;
+  return a as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+}
+static method function8() → core::int {
+  dynamic a;
+  core::int? b;
+  a = 2;
+  return a as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+}
+static method function9() → core::int? {
+  core::int? x;
+  return x;
+}
+static method main() → void {
+  exp::Expect::equals(#C1, 4);
+  exp::Expect::equals(#C2, 5);
+  exp::Expect::equals(#C3, "string");
+  exp::Expect::equals(#C4, 6);
+  exp::Expect::equals(#C5, 2);
+  exp::Expect::equals(#C6, 2.{core::int::unary-}(){() → core::int});
+  exp::Expect::equals(#C5, 2);
+  exp::Expect::equals(#C5, 2);
+  exp::Expect::equals(#C5, 2);
+  exp::Expect::equals(#C7, null);
+}
+
+constants  {
+  #C1 = 4
+  #C2 = 5
+  #C3 = "string"
+  #C4 = 6
+  #C5 = 2
+  #C6 = -2
+  #C7 = null
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_variable_declarations_error.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations_error.dart.weak.modular.expect
new file mode 100644
index 0000000..9d6fa65
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_variable_declarations_error.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/const_functions/const_functions_variable_declarations_error.dart:9:14: Error: Constant evaluation error:
+// const var1 = fn1();
+//              ^
+// pkg/front_end/testcases/const_functions/const_functions_variable_declarations_error.dart:10:8: Context: Expected constant 'null' to be of type 'int', but was of type 'Null'.
+// int fn1() {
+//        ^
+// pkg/front_end/testcases/const_functions/const_functions_variable_declarations_error.dart:9:7: Context: While analyzing:
+// const var1 = fn1();
+//       ^
+//
+// pkg/front_end/testcases/const_functions/const_functions_variable_declarations_error.dart:15:14: Error: Constant evaluation error:
+// const var2 = fn2();
+//              ^
+// pkg/front_end/testcases/const_functions/const_functions_variable_declarations_error.dart:19:10: Context: Expected constant '"string"' to be of type 'int', but was of type 'String'.
+//   return x;
+//          ^
+// pkg/front_end/testcases/const_functions/const_functions_variable_declarations_error.dart:15:7: Context: While analyzing:
+// const var2 = fn2();
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = invalid-expression "Expected constant 'null' to be of type 'int', but was of type 'Null'.";
+static const field core::int var2 = invalid-expression "Expected constant '\"string\"' to be of type 'int', but was of type 'String'.";
+static method fn1() → core::int {
+  dynamic a;
+  return a as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+}
+static method fn2() → core::int {
+  dynamic x;
+  x = "string";
+  return x as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.weak.modular.expect
new file mode 100644
index 0000000..b96eb2b
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_while_statements.dart.weak.modular.expect
@@ -0,0 +1,100 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = #C1;
+static const field core::int var2 = #C2;
+static const field core::int var3 = #C3;
+static const field core::int var4 = #C4;
+static const field core::int var5 = #C1;
+static const field core::int var6 = #C5;
+static const field core::int var7 = #C2;
+static const field core::int var8 = #C6;
+static const field core::int var9 = #C7;
+static method fn(core::int a) → core::int {
+  core::int b = a;
+  core::int i = 0;
+  while (i.{core::num::<}(2){(core::num) → core::bool}) {
+    b = b.{core::num::+}(a){(core::num) → core::int};
+    i = i.{core::num::+}(1){(core::num) → core::int};
+  }
+  return b;
+}
+static method fn1(core::int a) → core::int {
+  core::int b = a;
+  while (true) {
+    b = b.{core::num::*}(3){(core::num) → core::int};
+    if(b.{core::num::>}(10){(core::num) → core::bool})
+      return b;
+  }
+}
+static method fnContinue() → core::int {
+  core::int a = 0;
+  core::int i = 0;
+  while (i.{core::num::<}(5){(core::num) → core::bool})
+    #L1:
+    {
+      if(i.{core::num::%}(2){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 1) {
+        i = i.{core::num::+}(1){(core::num) → core::int};
+        break #L1;
+      }
+      a = a.{core::num::+}(i){(core::num) → core::int};
+      i = i.{core::num::+}(1){(core::num) → core::int};
+    }
+  return a;
+}
+static method fnBreak(core::int a) → core::int {
+  core::int b = a;
+  core::int i = 0;
+  #L2:
+  while (i.{core::num::<}(2){(core::num) → core::bool}) {
+    if(b =={core::num::==}{(core::Object) → core::bool} 2)
+      break #L2;
+    b = b.{core::num::+}(a){(core::num) → core::int};
+    i = i.{core::num::+}(1){(core::num) → core::int};
+  }
+  return b;
+}
+static method fnNestedWhile() → core::int {
+  core::int a = 0;
+  while (true) {
+    #L3:
+    while (true) {
+      break #L3;
+    }
+    return 1;
+  }
+}
+static method fnBreakLabel() → core::int {
+  #L4:
+  while (true) {
+    while (true) {
+      break #L4;
+    }
+  }
+  return 3;
+}
+static method main() → void {
+  exp::Expect::equals(#C1, 6);
+  exp::Expect::equals(#C2, 9);
+  exp::Expect::equals(#C3, 18);
+  exp::Expect::equals(#C4, 27);
+  exp::Expect::equals(#C1, 6);
+  exp::Expect::equals(#C5, 2);
+  exp::Expect::equals(#C2, 9);
+  exp::Expect::equals(#C6, 1);
+  exp::Expect::equals(#C7, 3);
+}
+
+constants  {
+  #C1 = 6
+  #C2 = 9
+  #C3 = 18
+  #C4 = 27
+  #C5 = 2
+  #C6 = 1
+  #C7 = 3
+}
diff --git a/pkg/front_end/testcases/const_functions/non_function_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/const_functions/non_function_invocation.dart.weak.modular.expect
new file mode 100644
index 0000000..a98efbd
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/non_function_invocation.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/const_functions/non_function_invocation.dart:6:20: Error: Constant evaluation error:
+// const dynamic b = a();
+//                    ^
+// pkg/front_end/testcases/const_functions/non_function_invocation.dart:6:20: Context: Null value during constant evaluation.
+// const dynamic b = a();
+//                    ^
+// pkg/front_end/testcases/const_functions/non_function_invocation.dart:6:15: Context: While analyzing:
+// const dynamic b = a();
+//               ^
+//
+import self as self;
+
+static const field dynamic a = #C1;
+static const field dynamic b = invalid-expression "Null value during constant evaluation.";
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..98579c4
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:14:17: Error: Constructors on abstract classes can't be torn off.
+//   AbstractClass.new; // error
+//                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Member not found: 'new'.
+//   Mixin.new; // error
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:17:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.new; // error
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Member not found: 'new'.
+//   Extension.new; // error
+//             ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ConcreteClass extends core::Object {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractClass extends core::Object {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class NamedMixinApplication = core::Object with self::Mixin /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::NamedMixinApplication
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractNamedMixinApplication = core::Object with self::Mixin /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::AbstractNamedMixinApplication
+    : super core::Object::•()
+    ;
+}
+extension Extension on core::int {
+}
+static method test() → dynamic {
+  #C1;
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:14:17: Error: Constructors on abstract classes can't be torn off.
+  AbstractClass.new; // error
+                ^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:15:9: Error: Member not found: 'new'.
+  Mixin.new; // error
+        ^^^";
+  #C2;
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:17:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.new; // error
+                                ^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/abstract_class_constructor_tear_off.dart:18:13: Error: Member not found: 'new'.
+  Extension.new; // error
+            ^^^";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::ConcreteClass::•
+  #C2 = constructor-tearoff self::NamedMixinApplication::•
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.weak.modular.expect
new file mode 100644
index 0000000..0494323
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:11:20: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// var test3 = (() => C<Object>)();
+//                    ^
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:7:11: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// test() => C<Object>;
+//           ^
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:9:17: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// test2([Type t = C<Object>]) {}
+//                 ^
+// pkg/front_end/testcases/constructor_tearoffs/bound_checks_in_type_literals.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T>
+    : super core::Object::•()
+    ;
+}
+static field core::Type test3 = (() → core::Type => #C1)(){() → core::Type};
+static method test() → dynamic
+  return #C1;
+static method test2([core::Type t = #C1]) → dynamic {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::C<core::Object*>*)
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.weak.modular.expect
new file mode 100644
index 0000000..6e425f6
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart:11:31: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+//  - 'Function' is from 'dart:core'.
+// Try changing the operand or remove the type arguments.
+//   int Function(int) g = f.call<int>;
+//                               ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field <T extends core::Object? = dynamic>(T%) → T% funcValue = #C1;
+static field (core::int) → core::int f = self::funcValue.call<core::int>;
+static field (core::int) → core::int g = self::funcValue.call<core::int>;
+static method func<T extends core::Object? = dynamic>(self::func::T% value) → self::func::T%
+  return value;
+static method test(core::Function f) → dynamic {
+  (core::int) → core::int g = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/call_instantiation.dart:11:31: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+ - 'Function' is from 'dart:core'.
+Try changing the operand or remove the type arguments.
+  int Function(int) g = f.call<int>;
+                              ^";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::func
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.weak.modular.expect
new file mode 100644
index 0000000..bb11cff
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart.weak.modular.expect
@@ -0,0 +1,319 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:29:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   c1<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:30:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+//  - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   c2<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:31:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+// Try changing the operand or remove the type arguments.
+//   i<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:32:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+// Try changing the operand or remove the type arguments.
+//   t1<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:33:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T?'.
+// Try changing the operand or remove the type arguments.
+//   t2<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:34:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'S?'.
+// Try changing the operand or remove the type arguments.
+//   s<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:35:5: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+// Try changing the operand or remove the type arguments.
+//   f1<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:36:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+// Try changing the operand or remove the type arguments.
+//   n<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:37:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//   d<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:38:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+// Try changing the operand or remove the type arguments.
+//   a<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:39:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+// Try changing the operand or remove the type arguments.
+//   b<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:40:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+// Try changing the operand or remove the type arguments.
+//   c<int>; // error
+//    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:41:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   f2<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:42:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+//  - 'Function' is from 'dart:core'.
+// Try changing the operand or remove the type arguments.
+//   f3<int>; // error
+//     ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:61:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+// var topLevel3 = c2<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:62:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+//  - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+// var topLevel4 = c3<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:63:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+// Try changing the operand or remove the type arguments.
+// var topLevel5 = i2<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:64:19: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+// Try changing the operand or remove the type arguments.
+// var topLevel6 = f1<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:65:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+// Try changing the operand or remove the type arguments.
+// var topLevel7 = n<int>; // error
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:66:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+// var topLevel8 = d<int>; // error
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:67:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+// Try changing the operand or remove the type arguments.
+// var topLevel9 = a<int>; // error
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:68:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+// Try changing the operand or remove the type arguments.
+// var topLevel10 = b<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:69:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+// Try changing the operand or remove the type arguments.
+// var topLevel11 = c<int>; // error
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:70:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+// var topLevel12 = f2<int>; // error
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:71:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+//  - 'Function' is from 'dart:core'.
+// Try changing the operand or remove the type arguments.
+// var topLevel13 = f3<int>; // error
+//                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object? = dynamic>() → dynamic {}
+}
+class GetterCall extends core::Object {
+  synthetic constructor •() → self::GetterCall
+    : super core::Object::•()
+    ;
+  get call() → <T extends core::Object? = dynamic>() → void
+    return <T extends core::Object? = dynamic>() → void {};
+}
+extension Extension on core::int {
+  method call = self::Extension|call;
+  tearoff call = self::Extension|get#call;
+}
+extension ExtensionGetter on core::double {
+  get call = self::ExtensionGetter|get#call;
+}
+extension ExtensionSetter on core::bool {
+  set call = self::ExtensionSetter|set#call;
+}
+extension Ambiguous1 on core::String {
+  method call = self::Ambiguous1|call;
+  tearoff call = self::Ambiguous1|get#call;
+}
+extension Ambiguous2 on core::String {
+  method call = self::Ambiguous2|call;
+  tearoff call = self::Ambiguous2|get#call;
+}
+static field self::Class c1 = new self::Class::•();
+static field self::Class? c2;
+static field self::GetterCall c3 = new self::GetterCall::•();
+static field core::int i1 = 0;
+static field core::int? i2 = null;
+static field <T extends core::Object? = dynamic>() →? void f1 = null;
+static field Never n = throw "";
+static field dynamic d = null;
+static field core::String a = "";
+static field core::double b = 0.5;
+static field core::bool c = true;
+static field FutureOr<self::Class>f2 = new self::Class::•();
+static field core::Function f3 = () → Null {};
+static field () → dynamic topLevel1 = self::c1.{self::Class::call}{<T extends core::Object? = dynamic>() → dynamic}<core::int>;
+static field () → dynamic topLevel2 = self::Extension|get#call(self::i1)<core::int>;
+static field invalid-type topLevel3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:61:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+var topLevel3 = c2<int>; // error
+                  ^";
+static field invalid-type topLevel4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:62:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+ - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+var topLevel4 = c3<int>; // error
+                  ^";
+static field invalid-type topLevel5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:63:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+Try changing the operand or remove the type arguments.
+var topLevel5 = i2<int>; // error
+                  ^";
+static field invalid-type topLevel6 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:64:19: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+Try changing the operand or remove the type arguments.
+var topLevel6 = f1<int>; // error
+                  ^";
+static field invalid-type topLevel7 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:65:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+Try changing the operand or remove the type arguments.
+var topLevel7 = n<int>; // error
+                 ^";
+static field invalid-type topLevel8 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:66:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+var topLevel8 = d<int>; // error
+                 ^";
+static field invalid-type topLevel9 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:67:18: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+Try changing the operand or remove the type arguments.
+var topLevel9 = a<int>; // error
+                 ^";
+static field invalid-type topLevel10 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:68:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+Try changing the operand or remove the type arguments.
+var topLevel10 = b<int>; // error
+                  ^";
+static field invalid-type topLevel11 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:69:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+Try changing the operand or remove the type arguments.
+var topLevel11 = c<int>; // error
+                  ^";
+static field invalid-type topLevel12 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:70:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+var topLevel12 = f2<int>; // error
+                   ^";
+static field invalid-type topLevel13 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:71:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+ - 'Function' is from 'dart:core'.
+Try changing the operand or remove the type arguments.
+var topLevel13 = f3<int>; // error
+                   ^";
+static method method<T extends self::Class, S extends core::int>(self::Class c, core::int i, self::method::T t, self::method::S s) → dynamic {
+  c.{self::Class::call}{<T extends core::Object? = dynamic>() → dynamic}<core::int>;
+  self::Extension|get#call(i)<core::int>;
+  t.{self::Class::call}{<T extends core::Object? = dynamic>() → dynamic}<core::int>;
+  self::Extension|get#call(s)<core::int>;
+}
+static method test<T extends self::Class?, S extends core::int>(self::Class? c1, self::GetterCall c2, core::int? i, self::test::T% t1, self::test::T? t2, self::test::S? s, <T extends core::Object? = dynamic>() →? void f1, Never n, dynamic d, core::String a, core::double b, core::bool c, FutureOr<self::Class>f2, core::Function f3) → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:29:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class?'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  c1<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:30:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'GetterCall'.
+ - 'GetterCall' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  c2<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:31:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int?'.
+Try changing the operand or remove the type arguments.
+  i<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:32:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+Try changing the operand or remove the type arguments.
+  t1<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:33:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T?'.
+Try changing the operand or remove the type arguments.
+  t2<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:34:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'S?'.
+Try changing the operand or remove the type arguments.
+  s<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:35:5: Error: The static type of the explicit instantiation operand must be a non-null generic function type but is 'void Function<T>()?'.
+Try changing the operand or remove the type arguments.
+  f1<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:36:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+Try changing the operand or remove the type arguments.
+  n<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:37:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+  d<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:38:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+Try changing the operand or remove the type arguments.
+  a<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:39:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'double'.
+Try changing the operand or remove the type arguments.
+  b<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:40:4: Error: The static type of the explicit instantiation operand must be a generic function type but is 'bool'.
+Try changing the operand or remove the type arguments.
+  c<int>; // error
+   ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:41:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'FutureOr<Class>'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  f2<int>; // error
+    ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/callable_instantiation.dart:42:5: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Function'.
+ - 'Function' is from 'dart:core'.
+Try changing the operand or remove the type arguments.
+  f3<int>; // error
+    ^";
+}
+static method Extension|call<T extends core::Object? = dynamic>(lowered final core::int #this) → dynamic {}
+static method Extension|get#call(lowered final core::int #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Extension|call<T%>(#this);
+static method ExtensionGetter|get#call(lowered final core::double #this) → <T extends core::Object? = dynamic>() → void
+  return <T extends core::Object? = dynamic>() → void {};
+static method ExtensionSetter|set#call(lowered final core::bool #this, <T extends core::Object? = dynamic>() → void value) → void {}
+static method Ambiguous1|call<T extends core::Object? = dynamic>(lowered final core::String #this) → dynamic {}
+static method Ambiguous1|get#call(lowered final core::String #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Ambiguous1|call<T%>(#this);
+static method Ambiguous2|call<T extends core::Object? = dynamic>(lowered final core::String #this) → dynamic {}
+static method Ambiguous2|get#call(lowered final core::String #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::Ambiguous2|call<T%>(#this);
+static method main() → dynamic {
+  self::method<self::Class, core::int>(new self::Class::•(), 0, new self::Class::•(), 0);
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..fc95e6e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/const_tear_off.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef B<T extends core::Object? = dynamic> = self::A<T%>;
+typedef C<unrelated T extends core::Object? = dynamic> = self::A<core::int>;
+class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
+    return new self::A::•<self::A::fact::T%>();
+  static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
+    return new self::A::•<self::A::redirect::T%>();
+}
+static const field <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+static const field () → self::A<core::int> b = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+static const field () → self::A<core::int> d = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+static const field () → self::A<core::int> f = #C7;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+static const field () → self::A<core::int> h = #C3;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+static const field () → self::A<core::int> j = #C5;
+static const field <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+static const field () → self::A<core::int> l = #C7;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+static const field () → self::A<core::int> n = #C3;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+static const field () → self::A<core::int> p = #C5;
+static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+static const field () → self::A<core::int> r = #C7;
+static method test() → dynamic {
+  <T extends core::Object? = dynamic>() → self::A<T%> a = #C2;
+  () → self::A<core::int> b = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> c = #C4;
+  () → self::A<core::int> d = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> e = #C6;
+  () → self::A<core::int> f = #C7;
+  <T extends core::Object? = dynamic>() → self::A<T%> g = #C2;
+  () → self::A<core::int> h = #C3;
+  <T extends core::Object? = dynamic>() → self::A<T%> i = #C4;
+  () → self::A<core::int> j = #C5;
+  <T extends core::Object? = dynamic>() → self::A<T%> k = #C6;
+  () → self::A<core::int> l = #C7;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = #C8;
+  () → self::A<core::int> n = #C3;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = #C9;
+  () → self::A<core::int> p = #C5;
+  <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = #C10;
+  () → self::A<core::int> r = #C7;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = constructor-tearoff self::A::•
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = constructor-tearoff self::A::fact
+  #C5 = instantiation #C4 <core::int*>
+  #C6 = redirecting-factory-tearoff self::A::redirect
+  #C7 = instantiation #C6 <core::int*>
+  #C8 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C2<core::int>)
+  #C9 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C4<core::int>)
+  #C10 = typedef-tearoff <unrelated T extends core::Object? = dynamic>.(#C6<core::int>)
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.modular.expect
new file mode 100644
index 0000000..25718f4
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart.weak.modular.expect
@@ -0,0 +1,321 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:18: Error: Expected '[' before this.
+//   Class<int><int>;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:20: Error: Unexpected token ';'.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:20: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:20: Error: Expected ';' after this.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:18:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   Class<int>.named<int>();
+//              ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:18: Error: Expected '[' before this.
+//   Class<int><int>.named;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:18: Error: Expected '[' before this.
+//   Class<int><int>.named();
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int>;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int>;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int>();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int>();
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>;
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:24: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:28: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//                            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:34: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>;
+//                                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>();
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:24: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:28: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//                            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:36: Error: Unexpected token ';'.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:36: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:36: Error: Expected ';' after this.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:17:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class<int> Function()'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart'.
+// Try changing the operand or remove the type arguments.
+//   Class<int>.named<int>;
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'named'.
+//   Class<int><int>.named();
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int>;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:24: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//   Class<int><int>.named<int>;
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int>();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'named'.
+//   Class<int><int>.named<int>();
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int><int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int><int>;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int><int>();
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int><int>();
+//                   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  #C1;
+  new self::Class::•<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:13:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>;
+       ^" in #C2{<unresolved>}.<(#C3){dynamic}.>(<core::int>[]);
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:14:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>();
+       ^" in #C2{<unresolved>}.<(#C3){dynamic}.>(<int extends core::Object? = dynamic>() → Null
+    ;
+);
+  #C5;
+  new self::Class::named<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:17:19: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Class<int> Function()'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart'.
+Try changing the operand or remove the type arguments.
+  Class<int>.named<int>;
+                  ^";
+  new self::Class::named<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named;
+       ^" in #C2{<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:19:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named;
+                  ^^^^^" in <core::int>[]{<unresolved>}.named);
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named();
+       ^" in #C2{<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:20:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'named'.
+  Class<int><int>.named();
+                  ^^^^^" in <core::int>[]{<unresolved>}.named());
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int>;
+       ^" in #C2{<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:21:24: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+  Class<int><int>.named<int>;
+                       ^");
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int>();
+       ^" in #C2{<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:22:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'named'.
+  Class<int><int>.named<int>();
+                  ^^^^^" in <core::int>[]{<unresolved>}.named<core::int>());
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int><int>;
+       ^" in #C2{<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:23:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int><int>;
+                  ^^^^^" in <core::int>[]{<unresolved>}.named){dynamic}.<(#C3){dynamic}.>(<core::int>[]);
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int><int>();
+       ^" in #C2{<unresolved>}.<(#C3){dynamic}.>(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/duplicate_instantiation.dart:24:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int><int>();
+                  ^^^^^" in <core::int>[]{<unresolved>}.named){dynamic}.<(#C3){dynamic}.>(<int extends core::Object? = dynamic>() → Null
+    ;
+);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::Class<core::int*>*)
+  #C2 = TypeLiteralConstant(self::Class<dynamic>*)
+  #C3 = TypeLiteralConstant(core::int*)
+  #C4 = constructor-tearoff self::Class::named
+  #C5 = instantiation #C4 <core::int*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/dynamic_explicit_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/dynamic_explicit_instantiation.dart.weak.modular.expect
new file mode 100644
index 0000000..ee9aed5
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/dynamic_explicit_instantiation.dart.weak.modular.expect
@@ -0,0 +1,47 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/dynamic_explicit_instantiation.dart:5:26: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+// test1(dynamic x) => x.foo<int>; // Error.
+//                          ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/dynamic_explicit_instantiation.dart:6:24: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+// Try changing the operand or remove the type arguments.
+// test2(Never x) => x.foo<int>; // Error.
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/dynamic_explicit_instantiation.dart:7:31: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String Function()'.
+// Try changing the operand or remove the type arguments.
+// test3(dynamic x) => x.toString<int>; // Error.
+//                               ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/dynamic_explicit_instantiation.dart:8:29: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+// Try changing the operand or remove the type arguments.
+// test4(Never x) => x.toString<int>; // Error.
+//                             ^
+//
+import self as self;
+
+static method test1(dynamic x) → dynamic
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/dynamic_explicit_instantiation.dart:5:26: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+test1(dynamic x) => x.foo<int>; // Error.
+                         ^";
+static method test2(Never x) → dynamic
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/dynamic_explicit_instantiation.dart:6:24: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+Try changing the operand or remove the type arguments.
+test2(Never x) => x.foo<int>; // Error.
+                       ^";
+static method test3(dynamic x) → dynamic
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/dynamic_explicit_instantiation.dart:7:31: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String Function()'.
+Try changing the operand or remove the type arguments.
+test3(dynamic x) => x.toString<int>; // Error.
+                              ^";
+static method test4(Never x) → dynamic
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/dynamic_explicit_instantiation.dart:8:29: Error: The static type of the explicit instantiation operand must be a generic function type but is 'Never'.
+Try changing the operand or remove the type arguments.
+test4(Never x) => x.toString<int>; // Error.
+                            ^";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.modular.expect
new file mode 100644
index 0000000..63427ae
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.modular.expect
@@ -0,0 +1,103 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef ListList<T extends core::Object? = dynamic> = core::List<core::List<T%>>;
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  static method stat<T extends core::Object? = dynamic>(self::C::stat::T% value) → self::C::stat::T%
+    return value;
+  method inst<T extends core::Object? = dynamic>(self::C::inst::T% value) → self::C::inst::T%
+    return value;
+  method method() → void {
+    (core::int) → core::int f1 = #C2;
+    core::String f1TypeName = #C2.{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
+    (core::int) → core::int f2 = this.{self::C::inst}{<T extends core::Object? = dynamic>(T%) → T%}<core::int>;
+    core::String f2TypeName = (this.{self::C::inst}{<T extends core::Object? = dynamic>(T%) → T%}<core::int>).{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
+    (core::int) → core::int f3 = this.{self::C::inst}{<T extends core::Object? = dynamic>(T%) → T%}<core::int>;
+    core::String f3TypeName = (this.{self::C::inst}{<T extends core::Object? = dynamic>(T%) → T%}<core::int>).{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
+  }
+}
+abstract class M extends self::C /*isMixinDeclaration*/  {
+  static method mstat<T extends core::Object? = dynamic>(self::M::mstat::T% value) → self::M::mstat::T%
+    return value;
+  method minst<T extends core::Object? = dynamic>(self::M::minst::T% value) → self::M::minst::T%
+    return value;
+  method mmethod() → void {
+    (core::int) → core::int f1 = #C4;
+    core::String f1TypeName = #C4.{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
+    (core::int) → core::int f2 = this.{self::M::minst}{<T extends core::Object? = dynamic>(T%) → T%}<core::int>;
+    core::String f2TypeName = (this.{self::M::minst}{<T extends core::Object? = dynamic>(T%) → T%}<core::int>).{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
+    (core::int) → core::int f3 = this.{self::M::minst}{<T extends core::Object? = dynamic>(T%) → T%}<core::int>;
+    core::String f3TypeName = (this.{self::M::minst}{<T extends core::Object? = dynamic>(T%) → T%}<core::int>).{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
+  }
+}
+abstract class _D&C&M = self::C with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_D&C&M
+    : super self::C::•()
+    ;
+  mixin-super-stub method minst<T extends core::Object? = dynamic>(self::_D&C&M::minst::T% value) → self::_D&C&M::minst::T%
+    return super.{self::M::minst}<self::_D&C&M::minst::T%>(value);
+  mixin-super-stub method mmethod() → void
+    return super.{self::M::mmethod}();
+}
+class D extends self::_D&C&M {
+  synthetic constructor •() → self::D
+    : super self::_D&C&M::•()
+    ;
+  method method() → void {
+    (core::int) → core::int f4 = super.{self::C::inst}<core::int>;
+    core::String f4TypeName = (super.{self::C::inst}<core::int>).{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
+  }
+}
+extension Ext on self::C {
+  static method estat = self::Ext|estat;
+  method einst = self::Ext|einst;
+  tearoff einst = self::Ext|get#einst;
+  method emethod = self::Ext|emethod;
+  tearoff emethod = self::Ext|get#emethod;
+}
+static method top<T extends core::Object? = dynamic>(self::top::T% value) → self::top::T%
+  return value;
+static method Ext|estat<T extends core::Object? = dynamic>(self::Ext|estat::T% value) → self::Ext|estat::T%
+  return value;
+static method Ext|einst<T extends core::Object? = dynamic>(lowered final self::C #this, self::Ext|einst::T% value) → self::Ext|einst::T%
+  return value;
+static method Ext|get#einst(lowered final self::C #this) → <T extends core::Object? = dynamic>(T%) → T%
+  return <T extends core::Object? = dynamic>(T% value) → T% => self::Ext|einst<T%>(#this, value);
+static method Ext|emethod(lowered final self::C #this) → void {
+  (core::int) → core::int f1 = #C6;
+  core::String f1TypeName = #C6.{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
+  (core::int) → core::int f2 = self::Ext|get#einst(#this)<core::int>;
+  core::String f2TypeName = (self::Ext|get#einst(#this)<core::int>).{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
+  (core::int) → core::int f3 = self::Ext|get#einst(#this)<core::int>;
+  core::String f3TypeName = (self::Ext|get#einst(#this)<core::int>).{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
+}
+static method Ext|get#emethod(lowered final self::C #this) → () → void
+  return () → void => self::Ext|emethod(#this);
+static method main() → void {
+  core::Type t1 = #C7;
+  core::Type t2 = #C8;
+  function local<T extends core::Object? = dynamic>(T% value) → T%
+    return value;
+  (core::int) → core::int f3 = local<core::int>;
+  self::D d = new self::D::•();
+  (core::int) → core::int f4 = d.{self::C::inst}{<T extends core::Object? = dynamic>(T%) → T%}<core::int>;
+  (core::int) → core::int f5 = d.{self::_D&C&M::minst}{<T extends core::Object? = dynamic>(T%) → T%}<core::int>;
+  (core::int) → core::int f6 = self::Ext|get#einst(d)<core::int>;
+  core::String typeName = #C7.{core::Type::toString}(){() → core::String};
+  core::String functionTypeName = (local<core::int>).{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
+}
+
+constants  {
+  #C1 = static-tearoff self::C::stat
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = static-tearoff self::M::mstat
+  #C4 = instantiation #C3 <core::int*>
+  #C5 = static-tearoff self::Ext|estat
+  #C6 = instantiation #C5 <core::int*>
+  #C7 = TypeLiteralConstant(core::List<core::int*>*)
+  #C8 = TypeLiteralConstant(core::List<core::List<core::int*>*>*)
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.modular.expect
new file mode 100644
index 0000000..8ed55ac
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart.weak.modular.expect
@@ -0,0 +1,112 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:15:13: Error: Too many type arguments: 1 allowed, but 2 found.
+// Try removing the extra type arguments.
+//   var d = id<int, String>; // error - too many args
+//             ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:16:17: Error: Too few type arguments: 2 required, 1 given.
+// Try adding the missing type arguments.
+//   var e = method<int>; // error - too few args
+//                 ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:17:12: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//   var f = 0<int>; // error - non-function type operand
+//            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:18:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic Function()'.
+// Try changing the operand or remove the type arguments.
+//   var g = main<int>; // error - non-generic function type operand
+//               ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:19:24: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'X Function<X extends num>(X)'.
+// Try changing type arguments so that they conform to the bounds.
+//   var h = boundedMethod<String>; // error - invalid bound
+//                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:25:11: Error: Too many type arguments: 1 allowed, but 2 found.
+// Try removing the extra type arguments.
+// var d = id<int, String>; // error - too many args
+//           ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:26:15: Error: Too few type arguments: 2 required, 1 given.
+// Try adding the missing type arguments.
+// var e = method<int>; // error - too few args
+//               ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:27:10: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+// var f = 0<int>; // error - non-function type operand
+//          ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:28:13: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic Function()'.
+// Try changing the operand or remove the type arguments.
+// var g = main<int>; // error - non-generic function type operand
+//             ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:29:22: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'X Function<X extends num>(X)'.
+// Try changing type arguments so that they conform to the bounds.
+// var h = boundedMethod<String>; // error - invalid bound
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field <X extends core::Object? = dynamic>(X%) → X% a = #C1;
+static field (core::int) → core::int b = self::a<core::int>;
+static field (core::int) → core::int c = #C2;
+static field invalid-type d = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:25:11: Error: Too many type arguments: 1 allowed, but 2 found.
+Try removing the extra type arguments.
+var d = id<int, String>; // error - too many args
+          ^";
+static field invalid-type e = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:26:15: Error: Too few type arguments: 2 required, 1 given.
+Try adding the missing type arguments.
+var e = method<int>; // error - too few args
+              ^";
+static field invalid-type f = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:27:10: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+var f = 0<int>; // error - non-function type operand
+         ^";
+static field invalid-type g = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:28:13: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic Function()'.
+Try changing the operand or remove the type arguments.
+var g = main<int>; // error - non-generic function type operand
+            ^";
+static field (core::String) → core::String h = #C4;
+static method id<X extends core::Object? = dynamic>(self::id::X% x) → self::id::X%
+  return x;
+static method method<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → void {}
+static method boundedMethod<X extends core::num>(self::boundedMethod::X x) → self::boundedMethod::X
+  return x;
+static method test() → dynamic {
+  <X extends core::Object? = dynamic>(X%) → X% a = #C1;
+  (core::int) → core::int b = a<core::int>;
+  (core::int) → core::int c = #C2;
+  invalid-type d = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:15:13: Error: Too many type arguments: 1 allowed, but 2 found.
+Try removing the extra type arguments.
+  var d = id<int, String>; // error - too many args
+            ^";
+  invalid-type e = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:16:17: Error: Too few type arguments: 2 required, 1 given.
+Try adding the missing type arguments.
+  var e = method<int>; // error - too few args
+                ^";
+  invalid-type f = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:17:12: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+  var f = 0<int>; // error - non-function type operand
+           ^";
+  invalid-type g = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation_errors.dart:18:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic Function()'.
+Try changing the operand or remove the type arguments.
+  var g = main<int>; // error - non-generic function type operand
+              ^";
+  (core::String) → core::String h = #C4;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::id
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = static-tearoff self::boundedMethod
+  #C4 = instantiation #C3 <core::String*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.modular.expect
new file mode 100644
index 0000000..13d3f0b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart.weak.modular.expect
@@ -0,0 +1,105 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart:15:3: Error: 'C' is already declared in this scope.
+//   C.new(); // Error.
+//   ^
+// pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart:14:3: Context: Previous declaration of 'C'.
+//   C();
+//   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart:20:3: Error: 'D' is already declared in this scope.
+//   D(); // Error.
+//   ^
+// pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart:19:3: Context: Previous declaration of 'D'.
+//   D.new();
+//   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart:26:11: Error: 'E1' is already declared in this scope.
+//   factory E1.new() => E1._(); // Error.
+//           ^^
+// pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart:25:3: Context: Previous declaration of 'E1'.
+//   E1();
+//   ^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart:32:3: Error: 'E2' is already declared in this scope.
+//   E2();
+//   ^^
+// pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart:31:11: Context: Previous declaration of 'E2'.
+//   factory E2.new() => E2._(); // Error.
+//           ^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart:38:11: Error: 'E3' is already declared in this scope.
+//   factory E3.new() = E3._; // Error.
+//           ^^
+// pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart:37:3: Context: Previous declaration of 'E3'.
+//   E3();
+//   ^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart:44:3: Error: 'E4' is already declared in this scope.
+//   E4(); // Error.
+//   ^^
+// pkg/front_end/testcases/constructor_tearoffs/explicit_new_as_unnamed.dart:43:11: Context: Previous declaration of 'E4'.
+//   factory E4.new() = E4._;
+//           ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+class D extends core::Object {
+  constructor •() → self::D
+    : super core::Object::•()
+    ;
+}
+class E1 extends core::Object {
+  constructor _() → self::E1
+    : super core::Object::•()
+    ;
+  constructor •() → self::E1
+    : super core::Object::•()
+    ;
+}
+class E2 extends core::Object {
+  constructor _() → self::E2
+    : super core::Object::•()
+    ;
+  static factory •() → self::E2
+    return new self::E2::_();
+}
+class E3 extends core::Object {
+  constructor _() → self::E3
+    : super core::Object::•()
+    ;
+  constructor •() → self::E3
+    : super core::Object::•()
+    ;
+}
+class E4 extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor _() → self::E4
+    : super core::Object::•()
+    ;
+  static factory •() → self::E4
+    return new self::E4::_();
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::E4::•
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.modular.expect
new file mode 100644
index 0000000..d91a515
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart.weak.modular.expect
@@ -0,0 +1,140 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:13:32: Error: A value of type 'A<X/*1*/> Function<X>(X/*1*/, int)' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
+//  - 'X/*1*/' is from 'unknown'.
+//  - 'X/*2*/' is from 'unknown'.
+// A<X> Function<X>(X) test2() => A.foo2; // Error.
+//                                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:14:32: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
+//  - 'X/*1*/' is from 'unknown'.
+//  - 'X/*2*/' is from 'unknown'.
+// A<X> Function<X>(X) test3() => A.new; // Error.
+//                                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:15:32: Error: A value of type 'A<int> Function()' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
+// A<X> Function<X>(X) test4() => A<int>.new; // Error.
+//                                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:16:32: Error: Too many type arguments: 1 allowed, but 2 found.
+// Try removing the extra type arguments.
+// A<X> Function<X>(X) test5() => A<int, String>.new; // Error.
+//                                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:17:32: Error: A value of type 'A<int> Function(int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
+// A<X> Function<X>(X) test6() => A<int>.foo1; // Error.
+//                                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:18:32: Error: Too many type arguments: 1 allowed, but 2 found.
+// Try removing the extra type arguments.
+// A<X> Function<X>(X) test7() => A<int, String>.foo1; // Error.
+//                                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:19:32: Error: A value of type 'A<int> Function(int, int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
+// A<X> Function<X>(X) test8() => A<int>.foo2; // Error.
+//                                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:20:32: Error: Too many type arguments: 1 allowed, but 2 found.
+// Try removing the extra type arguments.
+// A<X> Function<X>(X) test9() => A<int, String>.foo2; // Error.
+//                                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:22:33: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
+//  - 'X/*1*/' is from 'unknown'.
+//  - 'X/*2*/' is from 'unknown'.
+// A<X> Function<X>(X) test11() => A.bar1; // Error.
+//                                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  constructor foo1(self::A::X% x) → self::A<self::A::X%>
+    : super core::Object::•() {}
+  constructor foo2(self::A::X% x, core::int y) → self::A<self::A::X%>
+    : super core::Object::•() {}
+  constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  static factory bar1<X extends core::Object? = dynamic>() → self::A<self::A::bar1::X%>
+    return new self::A::•<self::A::bar1::X%>();
+}
+static method test1() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
+  return #C1;
+static method test2() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:13:32: Error: A value of type 'A<X/*1*/> Function<X>(X/*1*/, int)' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+ - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
+ - 'X/*1*/' is from 'unknown'.
+ - 'X/*2*/' is from 'unknown'.
+A<X> Function<X>(X) test2() => A.foo2; // Error.
+                               ^" in #C2 as{TypeError,ForNonNullableByDefault} Never;
+static method test3() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:14:32: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+ - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
+ - 'X/*1*/' is from 'unknown'.
+ - 'X/*2*/' is from 'unknown'.
+A<X> Function<X>(X) test3() => A.new; // Error.
+                               ^" in #C3 as{TypeError,ForNonNullableByDefault} Never;
+static method test4() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:15:32: Error: A value of type 'A<int> Function()' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+ - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
+A<X> Function<X>(X) test4() => A<int>.new; // Error.
+                               ^" in #C4 as{TypeError,ForNonNullableByDefault} Never;
+static method test5() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:16:32: Error: Too many type arguments: 1 allowed, but 2 found.
+Try removing the extra type arguments.
+A<X> Function<X>(X) test5() => A<int, String>.new; // Error.
+                               ^";
+static method test6() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:17:32: Error: A value of type 'A<int> Function(int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+ - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
+A<X> Function<X>(X) test6() => A<int>.foo1; // Error.
+                               ^" in #C5 as{TypeError,ForNonNullableByDefault} Never;
+static method test7() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:18:32: Error: Too many type arguments: 1 allowed, but 2 found.
+Try removing the extra type arguments.
+A<X> Function<X>(X) test7() => A<int, String>.foo1; // Error.
+                               ^";
+static method test8() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:19:32: Error: A value of type 'A<int> Function(int, int)' can't be returned from a function with return type 'A<X> Function<X>(X)'.
+ - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
+A<X> Function<X>(X) test8() => A<int>.foo2; // Error.
+                               ^" in #C6 as{TypeError,ForNonNullableByDefault} Never;
+static method test9() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:20:32: Error: Too many type arguments: 1 allowed, but 2 found.
+Try removing the extra type arguments.
+A<X> Function<X>(X) test9() => A<int, String>.foo2; // Error.
+                               ^";
+static method test10() → <X extends core::Object? = dynamic>() → self::A<X%>
+  return #C7;
+static method test11() → <X extends core::Object? = dynamic>(X%) → self::A<X%>
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart:22:33: Error: A value of type 'A<X/*1*/> Function<X>()' can't be returned from a function with return type 'A<X/*2*/> Function<X>(X/*2*/)'.
+ - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_with_context.dart'.
+ - 'X/*1*/' is from 'unknown'.
+ - 'X/*2*/' is from 'unknown'.
+A<X> Function<X>(X) test11() => A.bar1; // Error.
+                                ^" in #C7 as{TypeError,ForNonNullableByDefault} Never;
+static method test12() → () → self::A<core::int>
+  return #C8;
+static method test13() → () → self::A<core::int>
+  return #C8;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::foo1
+  #C2 = constructor-tearoff self::A::foo2
+  #C3 = constructor-tearoff self::A::•
+  #C4 = instantiation #C3 <core::int*>
+  #C5 = instantiation #C1 <core::int*>
+  #C6 = instantiation #C2 <core::int*>
+  #C7 = constructor-tearoff self::A::bar1
+  #C8 = instantiation #C7 <core::int*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.modular.expect
new file mode 100644
index 0000000..a5cdb82
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart.weak.modular.expect
@@ -0,0 +1,102 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart:18:23: Error: Too many type arguments: 1 allowed, but 2 found.
+// Try removing the extra type arguments.
+// testFooExtraArgs() => A<int, String>.foo; // Error.
+//                       ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart:19:23: Error: Too many type arguments: 1 allowed, but 2 found.
+// Try removing the extra type arguments.
+// testNewExtraArgs() => A<int, String>.new; // Error.
+//                       ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart:20:23: Error: Too many type arguments: 1 allowed, but 2 found.
+// Try removing the extra type arguments.
+// testBarExtraArgs() => A<int, String>.bar; // Error.
+//                       ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart:30:22: Error: Too many type arguments: 1 allowed, but 2 found.
+// Try removing the extra type arguments.
+//   var fooExtraArgs = A<int, String>.foo; // Error.
+//                      ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart:31:22: Error: Too many type arguments: 1 allowed, but 2 found.
+// Try removing the extra type arguments.
+//   var newExtraArgs = A<int, String>.new; // Error.
+//                      ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart:32:22: Error: Too many type arguments: 1 allowed, but 2 found.
+// Try removing the extra type arguments.
+//   var barExtraArgs = A<int, String>.bar; // Error.
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  constructor foo() → self::A<self::A::X%>
+    : super core::Object::•() {}
+  constructor •() → self::A<self::A::X%>
+    : super core::Object::•() {}
+  static factory bar<X extends core::Object? = dynamic>() → self::A<self::A::bar::X%>
+    return new self::A::•<self::A::bar::X%>();
+}
+static method testFoo() → dynamic
+  return #C1;
+static method testFooArgs() → dynamic
+  return #C2;
+static method testNew() → dynamic
+  return #C3;
+static method testNewArgs() → dynamic
+  return #C4;
+static method testBar() → dynamic
+  return #C5;
+static method testBarArgs() → dynamic
+  return #C6;
+static method testFooExtraArgs() → dynamic
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart:18:23: Error: Too many type arguments: 1 allowed, but 2 found.
+Try removing the extra type arguments.
+testFooExtraArgs() => A<int, String>.foo; // Error.
+                      ^";
+static method testNewExtraArgs() → dynamic
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart:19:23: Error: Too many type arguments: 1 allowed, but 2 found.
+Try removing the extra type arguments.
+testNewExtraArgs() => A<int, String>.new; // Error.
+                      ^";
+static method testBarExtraArgs() → dynamic
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart:20:23: Error: Too many type arguments: 1 allowed, but 2 found.
+Try removing the extra type arguments.
+testBarExtraArgs() => A<int, String>.bar; // Error.
+                      ^";
+static method method() → dynamic {
+  <X extends core::Object? = dynamic>() → self::A<X%> foo = #C1;
+  () → self::A<core::int> fooArgs = #C2;
+  <X extends core::Object? = dynamic>() → self::A<X%> _new = #C3;
+  () → self::A<core::int> newArgs = #C4;
+  <X extends core::Object? = dynamic>() → self::A<X%> bar = #C5;
+  () → self::A<core::int> barArgs = #C6;
+  invalid-type fooExtraArgs = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart:30:22: Error: Too many type arguments: 1 allowed, but 2 found.
+Try removing the extra type arguments.
+  var fooExtraArgs = A<int, String>.foo; // Error.
+                     ^";
+  invalid-type newExtraArgs = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart:31:22: Error: Too many type arguments: 1 allowed, but 2 found.
+Try removing the extra type arguments.
+  var newExtraArgs = A<int, String>.new; // Error.
+                     ^";
+  invalid-type barExtraArgs = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/generic_tearoff_without_context.dart:32:22: Error: Too many type arguments: 1 allowed, but 2 found.
+Try removing the extra type arguments.
+  var barExtraArgs = A<int, String>.bar; // Error.
+                     ^";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::foo
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = constructor-tearoff self::A::•
+  #C4 = instantiation #C3 <core::int*>
+  #C5 = constructor-tearoff self::A::bar
+  #C6 = instantiation #C5 <core::int*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.modular.expect
new file mode 100644
index 0000000..5abed3e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.modular.expect
@@ -0,0 +1,52 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static field (core::int) → core::int implicitInstantiation = #C2;
+static field (core::int) → core::int explicitInstantiation = #C2;
+static const field (core::int) → core::int implicitConstInstantiation = #C2;
+static const field (core::int) → core::int explicitConstInstantiation = #C2;
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method create<T extends core::Object? = dynamic>() → (self::create::T%) → self::create::T%
+  return #C1<self::create::T%>;
+static method main() → dynamic {
+  self::expect(true, core::identical(self::implicitInstantiation, self::implicitInstantiation));
+  self::expect(true, core::identical(self::implicitInstantiation, self::explicitInstantiation));
+  self::expect(true, core::identical(self::implicitInstantiation, #C2));
+  self::expect(true, core::identical(self::implicitInstantiation, #C2));
+  self::expect(true, core::identical(self::implicitInstantiation, #C2));
+  self::expect(false, core::identical(self::implicitInstantiation, #C3));
+  self::expect(false, core::identical(self::implicitInstantiation, self::create<core::int>()));
+  self::expect(true, core::identical(self::explicitInstantiation, self::implicitInstantiation));
+  self::expect(true, core::identical(self::explicitInstantiation, self::explicitInstantiation));
+  self::expect(true, core::identical(self::explicitInstantiation, #C2));
+  self::expect(true, core::identical(self::explicitInstantiation, #C2));
+  self::expect(true, core::identical(self::explicitInstantiation, #C2));
+  self::expect(false, core::identical(self::explicitInstantiation, #C3));
+  self::expect(false, core::identical(self::explicitInstantiation, self::create<core::int>()));
+  self::expect(true, core::identical(#C2, self::implicitInstantiation));
+  self::expect(true, core::identical(#C2, self::explicitInstantiation));
+  self::expect(true, core::identical(#C2, #C2));
+  self::expect(true, core::identical(#C2, #C2));
+  self::expect(true, core::identical(#C2, #C2));
+  self::expect(false, core::identical(#C2, #C3));
+  self::expect(false, core::identical(#C2, self::create<core::int>()));
+  self::expect(true, core::identical(#C2, self::implicitInstantiation));
+  self::expect(true, core::identical(#C2, self::explicitInstantiation));
+  self::expect(true, core::identical(#C2, #C2));
+  self::expect(true, core::identical(#C2, #C2));
+  self::expect(true, core::identical(#C2, #C2));
+  self::expect(false, core::identical(#C2, #C3));
+  self::expect(false, core::identical(#C2, self::create<core::int>()));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = static-tearoff self::id
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::String*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/implicit_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/implicit_instantiation.dart.weak.modular.expect
new file mode 100644
index 0000000..a39c27d
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/implicit_instantiation.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object? = dynamic>(self::Class::call::T% t) → self::Class::call::T%
+    return t;
+}
+static field <T extends core::Object? = dynamic>(T%) → T% alias = #C1;
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method method((core::int) → core::int f) → dynamic {}
+static method test() → dynamic {
+  self::Class c = new self::Class::•();
+  (core::int) → core::int f = self::alias<core::int>;
+  (core::int) → core::int g;
+  g = self::alias<core::int>;
+  (core::int) → core::int h = (let final self::Class #t1 = c in #t1 == null ?{<T extends core::Object? = dynamic>(T%) → T%} null : #t1.{self::Class::call}{<T extends core::Object? = dynamic>(T%) → T%})<core::int>;
+  g = (let final self::Class #t2 = c in #t2 == null ?{<T extends core::Object? = dynamic>(T%) → T%} null : #t2.{self::Class::call}{<T extends core::Object? = dynamic>(T%) → T%})<core::int>;
+  self::method(self::alias<core::int>);
+}
+static method main() → dynamic {
+  self::test();
+}
+
+constants  {
+  #C1 = static-tearoff self::id
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/implicit_instantiation_errors.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/implicit_instantiation_errors.dart.weak.modular.expect
new file mode 100644
index 0000000..473f61e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/implicit_instantiation_errors.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/implicit_instantiation_errors.dart:16:30: Error: A value of type 'int Function(int, int)?' can't be assigned to a variable of type 'int Function(int, int)' because 'int Function(int, int)?' is nullable and 'int Function(int, int)' isn't.
+//   int Function(int, int) f = alias;
+//                              ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/implicit_instantiation_errors.dart:18:7: Error: A value of type 'int Function(int, int)?' can't be assigned to a variable of type 'int Function(int, int?)?' because 'int?' is nullable and 'int' isn't.
+//   g = alias;
+//       ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/implicit_instantiation_errors.dart:19:27: Error: A value of type 'int Function(int, int)' can't be assigned to a variable of type 'int Function(int, int?)' because 'int?' is nullable and 'int' isn't.
+//   int Function(int, int?) h = c;
+//                           ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/implicit_instantiation_errors.dart:20:3: Error: A value of type 'int Function(int, int)' can't be assigned to a variable of type 'int Function(int, int?)?' because 'int?' is nullable and 'int' isn't.
+//   g = c;
+//   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/implicit_instantiation_errors.dart:21:10: Error: The argument type 'int Function(int, int)?' can't be assigned to the parameter type 'int Function(int, int?)' because 'int?' is nullable and 'int' isn't.
+//   method(alias);
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object? = dynamic>(self::Class::call::T% t, core::int i) → self::Class::call::T%
+    return t;
+}
+static field <T extends core::Object? = dynamic>(T%, core::int) →? T% alias = #C1;
+static method id<T extends core::Object? = dynamic>(self::id::T% t, core::int i) → self::id::T%
+  return t;
+static method method((core::int, core::int?) → core::int f) → dynamic {}
+static method test() → dynamic {
+  self::Class c = new self::Class::•();
+  (core::int, core::int) → core::int f = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/implicit_instantiation_errors.dart:16:30: Error: A value of type 'int Function(int, int)?' can't be assigned to a variable of type 'int Function(int, int)' because 'int Function(int, int)?' is nullable and 'int Function(int, int)' isn't.
+  int Function(int, int) f = alias;
+                             ^" in (self::alias<core::int>) as{TypeError,ForNonNullableByDefault} (core::int, core::int) → core::int;
+  (core::int, core::int?) →? core::int g;
+  g = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/implicit_instantiation_errors.dart:18:7: Error: A value of type 'int Function(int, int)?' can't be assigned to a variable of type 'int Function(int, int?)?' because 'int?' is nullable and 'int' isn't.
+  g = alias;
+      ^" in (self::alias<core::int>) as{TypeError,ForNonNullableByDefault} (core::int, core::int?) →? core::int;
+  (core::int, core::int?) → core::int h = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/implicit_instantiation_errors.dart:19:27: Error: A value of type 'int Function(int, int)' can't be assigned to a variable of type 'int Function(int, int?)' because 'int?' is nullable and 'int' isn't.
+  int Function(int, int?) h = c;
+                          ^" in ((let final self::Class #t1 = c in #t1 == null ?{<T extends core::Object? = dynamic>(T%, core::int) → T%} null : #t1.{self::Class::call}{<T extends core::Object? = dynamic>(T%, core::int) → T%})<core::int>) as{TypeError,ForNonNullableByDefault} (core::int, core::int?) → core::int;
+  g = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/implicit_instantiation_errors.dart:20:3: Error: A value of type 'int Function(int, int)' can't be assigned to a variable of type 'int Function(int, int?)?' because 'int?' is nullable and 'int' isn't.
+  g = c;
+  ^" in ((let final self::Class #t2 = c in #t2 == null ?{<T extends core::Object? = dynamic>(T%, core::int) → T%} null : #t2.{self::Class::call}{<T extends core::Object? = dynamic>(T%, core::int) → T%})<core::int>) as{TypeError,ForNonNullableByDefault} (core::int, core::int?) →? core::int;
+  self::method(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/implicit_instantiation_errors.dart:21:10: Error: The argument type 'int Function(int, int)?' can't be assigned to the parameter type 'int Function(int, int?)' because 'int?' is nullable and 'int' isn't.
+  method(alias);
+         ^" in (self::alias<core::int>) as{TypeError,ForNonNullableByDefault} (core::int, core::int?) → core::int);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::id
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..5857e8c
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart.weak.modular.expect
@@ -0,0 +1,93 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//     f1a(''); // error
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//     f2a(''); // error
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::Class1
+    : self::Class1::field = field, super core::Object::•()
+    ;
+}
+abstract class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  abstract get field() → core::int;
+}
+class Class2 extends core::Object implements self::Interface2 {
+  final field core::int field;
+  constructor •(core::int field) → self::Class2
+    : self::Class2::field = field, super core::Object::•()
+    ;
+}
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static field (core::int) → self::Class1 Class1_new = #C1;
+static field (core::int) → self::Class2 Class2_new = #C2;
+static method main() → dynamic {
+  core::print("inSoundMode: ${self::inSoundMode}");
+  self::testInferred();
+}
+static method testInferred() → dynamic {
+  (core::int) → self::Class1 f1a = #C1;
+  self::expect(true, f1a is{ForNonNullableByDefault} (core::int) → self::Class1);
+  self::expect(false, f1a is{ForNonNullableByDefault} (core::String) → self::Class1);
+  self::Class1 c1a = f1a(0){(core::int) → self::Class1};
+  self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
+  () → Null {
+    f1a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f1a(''); // error
+        ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1};
+  };
+  dynamic f1b = #C1;
+  dynamic c1b = f1b{dynamic}.call(0);
+  self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
+  self::throws(() → dynamic => f1b{dynamic}.call(""));
+  (core::int) → self::Class2 f2a = #C2;
+  self::expect(true, f2a is{ForNonNullableByDefault} (core::int) → self::Class2);
+  self::expect(false, f2a is{ForNonNullableByDefault} (core::String) → self::Class2);
+  self::Class2 c2a = f2a(0){(core::int) → self::Class2};
+  self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
+  () → Null {
+    f2a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f2a(''); // error
+        ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2};
+  };
+  dynamic f2b = #C2;
+  dynamic c2b = f2b{dynamic}.call(0);
+  self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
+  self::throws(() → dynamic => f2b{dynamic}.call(""));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C3}) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print("Thrown: ${e}");
+    return;
+  }
+  if(!self::inSoundMode && inSoundModeOnly) {
+    return;
+  }
+  throw "Expected exception";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::•
+  #C3 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.modular.expect
new file mode 100644
index 0000000..5827e2a
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/inferred_non_proper_rename.dart.weak.modular.expect
@@ -0,0 +1,56 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<X extends core::num> = self::A<X>;
+typedef G<unrelated Y extends core::Object? = dynamic> = self::A<core::int>;
+typedef H<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic> = self::A<X%>;
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+}
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static const field () → self::A<core::int> f1a = #C2;
+static const field () → self::A<core::int> f1b = #C2;
+static const field () → self::A<core::int> f1c = #C2;
+static const field () → self::A<core::int> g1a = #C2;
+static const field () → self::A<core::int> g1b = #C2;
+static const field () → self::A<core::int> g1c = #C2;
+static const field () → self::A<core::int> h1a = #C2;
+static const field () → self::A<core::int> h1b = #C2;
+static const field () → self::A<core::int> h1c = #C2;
+static method main() → dynamic {
+  self::test<core::int>();
+  core::identical(#C2, #C2);
+  core::identical(#C2, #C2);
+  core::identical(#C2, #C2);
+  core::identical(#C2, #C2);
+  core::identical(#C2, #C2);
+  core::identical(#C2, #C2);
+}
+static method test<T extends core::num>() → dynamic {
+  () → self::A<self::test::T> f2a = #C1<self::test::T>;
+  () → self::A<self::test::T> f2b = #C1<self::test::T>;
+  () → self::A<self::test::T> f2c = #C1<self::test::T>;
+  () → self::A<core::int> g2a = #C2;
+  () → self::A<core::int> g2b = #C2;
+  () → self::A<core::int> g2c = #C2;
+  () → self::A<self::test::T> h2a = #C1<self::test::T>;
+  () → self::A<self::test::T> h2b = #C1<self::test::T>;
+  () → self::A<self::test::T> h2c = #C1<self::test::T>;
+  self::expect(#C2, g2a);
+  self::expect(g2a, g2b);
+  if(self::inSoundMode) {
+    self::expect(g2a, g2c);
+  }
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = instantiation #C1 <core::int*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.modular.expect
new file mode 100644
index 0000000..ba34a7a
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/instantiation.dart.weak.modular.expect
@@ -0,0 +1,73 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/instantiation.dart:16:40: Error: Inferred type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'A<X> Function<X extends num>(X)'.
+//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/instantiation.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// A<dynamic> Function(String) test5() => A.foo; // Error.
+//                                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/instantiation.dart:17:40: Error: Inferred type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'A<X> Function<X extends num>(X)'.
+//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/instantiation.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// A<dynamic> Function(String) test6() => A.new; // Error.
+//                                        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/instantiation.dart:23:41: Error: Inferred type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'A<X> Function<X extends num>(X)'.
+//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/instantiation.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// A<dynamic> Function(String) test11() => A.bar; // Error.
+//                                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::num> extends core::Object {
+  constructor foo(self::A::X x) → self::A<self::A::X>
+    : super core::Object::•() {}
+  constructor •(self::A::X x) → self::A<self::A::X>
+    : super core::Object::•() {}
+  static factory bar<X extends core::num>(self::A::bar::X x) → self::A<self::A::bar::X>
+    return new self::A::•<self::A::bar::X>(x);
+}
+static method test1() → (core::num) → self::A<core::num>
+  return #C2;
+static method test2() → (core::int) → self::A<core::int>
+  return #C3;
+static method test3() → (core::num) → self::A<core::num>
+  return #C5;
+static method test4() → (core::int) → self::A<core::int>
+  return #C6;
+static method test5() → (core::String) → self::A<dynamic>
+  return #C7;
+static method test6() → (core::String) → self::A<dynamic>
+  return #C8;
+static method test7() → (core::num) → self::A<dynamic>
+  return #C2;
+static method test8() → (core::num) → self::A<dynamic>
+  return #C5;
+static method test9() → (core::num) → self::A<core::num>
+  return #C10;
+static method test10() → (core::int) → self::A<core::int>
+  return #C11;
+static method test11() → (core::String) → self::A<dynamic>
+  return #C12;
+static method test12() → (core::num) → self::A<dynamic>
+  return #C10;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::foo
+  #C2 = instantiation #C1 <core::num*>
+  #C3 = instantiation #C1 <core::int*>
+  #C4 = constructor-tearoff self::A::•
+  #C5 = instantiation #C4 <core::num*>
+  #C6 = instantiation #C4 <core::int*>
+  #C7 = instantiation #C1 <core::String*>
+  #C8 = instantiation #C4 <core::String*>
+  #C9 = constructor-tearoff self::A::bar
+  #C10 = instantiation #C9 <core::num*>
+  #C11 = instantiation #C9 <core::int*>
+  #C12 = instantiation #C9 <core::String*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46133.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46133.dart.weak.modular.expect
new file mode 100644
index 0000000..912d264
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46133.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46133.dart:7:18: Error: Expected an identifier, but got '.'.
+// Try inserting an identifier before '.'.
+// test() => A.const.toString();
+//                  ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46133.dart:7:13: Error: Expected an identifier, but got 'const'.
+// Try inserting an identifier before 'const'.
+// test() => A.const.toString();
+//             ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46133.dart:7:13: Error: Expected an identifier, but got 'const'.
+Try inserting an identifier before 'const'.
+test() => A.const.toString();
+            ^^^^^";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.modular.expect
new file mode 100644
index 0000000..6add537
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46719.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46719.dart:24:10: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   A.named<int>.toString(); // error
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue46719.dart" as self;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  method m<X extends core::Object? = dynamic>(self::A::m::X% x) → core::List<self::A::m::X%>
+    return <self::A::m::X%>[x];
+  static method n<X extends core::Object? = dynamic>(self::A::n::X% x) → core::List<self::A::n::X%>
+    return <self::A::n::X%>[x];
+}
+extension FunctionApplier on core::Function {
+  method applyAndPrint = self::FunctionApplier|applyAndPrint;
+  tearoff applyAndPrint = self::FunctionApplier|get#applyAndPrint;
+}
+static method m<X extends core::Object? = dynamic>(self::m::X% x) → core::List<self::m::X%>
+  return <self::m::X%>[x];
+static method FunctionApplier|applyAndPrint(lowered final core::Function #this, core::List<core::Object?> positionalArguments) → void
+  return core::print(core::Function::apply(#this, positionalArguments, #C1));
+static method FunctionApplier|get#applyAndPrint(lowered final core::Function #this) → (core::List<core::Object?>) → void
+  return (core::List<core::Object?> positionalArguments) → void => self::FunctionApplier|applyAndPrint(#this, positionalArguments);
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46719.dart:24:10: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  A.named<int>.toString(); // error
+         ^";
+}
+static method main() → void {
+  self::A<dynamic> a = new self::A::•<dynamic>();
+  self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::int>, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(a.{self::A::m}{<X extends core::Object? = dynamic>(X%) → core::List<X%>}<core::String>, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C3, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C4, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C6, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C7, <core::Object?>["three"]);
+  self::FunctionApplier|applyAndPrint(#C3, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C4, <core::Object?>["three"]);
+  #C8.{core::Object::toString}(){() → core::String};
+  #C9.{core::Object::toString}(){() → core::String};
+}
+
+constants  {
+  #C1 = <core::Symbol*, dynamic>{)
+  #C2 = static-tearoff self::A::n
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = instantiation #C2 <core::String*>
+  #C5 = static-tearoff self::m
+  #C6 = instantiation #C5 <core::int*>
+  #C7 = instantiation #C5 <core::String*>
+  #C8 = constructor-tearoff self::A::named
+  #C9 = instantiation #C8 <core::int*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.modular.expect
new file mode 100644
index 0000000..b032165
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46887.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef b = core::int;
+typedef c = core::String;
+static method f(dynamic a, [dynamic b = #C1]) → core::String
+  return "${a}, ${b}";
+static method a<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic>(core::int x) → core::String {
+  return "a<${self::a::T1%}, ${self::a::T2%}>(${x})";
+}
+static method main() → dynamic {
+  self::expect("${#C3}, null", self::f(#C3.{core::Object::toString}(){() → core::String}));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = null
+  #C2 = static-tearoff self::a
+  #C3 = instantiation #C2 <core::int*, core::String*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.modular.expect
new file mode 100644
index 0000000..9459fcb
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46890.dart.weak.modular.expect
@@ -0,0 +1,75 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:22:14: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   List.filled<int>; // Error.
+//              ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:23:8: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   A.foo<int>; // Error.
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:24:8: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   A.bar<int>; // Error.
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:25:8: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   A.baz<int>; // Error.
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor foo() → self::A<self::A::X%>
+    : super core::Object::•() {}
+  static factory bar<X extends core::Object? = dynamic>() → self::A<self::A::bar::X%>
+    return new self::A::foo<self::A::bar::X%>();
+  static factory baz<X extends core::Object? = dynamic>() → self::A<self::A::baz::X%>
+    return self::A::bar<self::A::baz::X%>();
+}
+static method test() → dynamic {
+  #C2;
+  #C3;
+  #C4;
+  #C5;
+  #C6;
+  #C7;
+  #C8;
+  #C9;
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:22:14: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  List.filled<int>; // Error.
+             ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:23:8: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  A.foo<int>; // Error.
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:24:8: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  A.bar<int>; // Error.
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue46890.dart:25:8: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  A.baz<int>; // Error.
+       ^";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::baz
+  #C2 = constructor-tearoff core::List::filled
+  #C3 = constructor-tearoff self::A::foo
+  #C4 = constructor-tearoff self::A::bar
+  #C5 = redirecting-factory-tearoff self::A::baz
+  #C6 = instantiation #C2 <core::int*>
+  #C7 = instantiation #C3 <core::int*>
+  #C8 = instantiation #C4 <core::int*>
+  #C9 = instantiation #C5 <core::int*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.weak.modular.expect
new file mode 100644
index 0000000..9c76f69
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue46925.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:18:16: Error: Function invocation is not a constant expression.
+//   const c1 = v1(3, 14);
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:19:16: Error: Function invocation is not a constant expression.
+//   const c2 = v1(3, 14);
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:20:16: Error: Function invocation is not a constant expression.
+//   const c3 = v2();
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:21:16: Error: Function invocation is not a constant expression.
+//   const c4 = v2();
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:22:16: Error: Function invocation is not a constant expression.
+//   const c5 = v3(3, 14);
+//                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue46925.dart:23:16: Error: Function invocation is not a constant expression.
+//   const c6 = v4();
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class MyClass<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field dynamic a;
+  const constructor •(core::int i, core::int j) → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = i.{core::num::+}(j){(core::num) → core::int}, super core::Object::•()
+    ;
+  const constructor constr() → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = 0, super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  const self::MyClass<core::String> c1 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::String> c2 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::int> c3 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::int> c4 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::int> c5 = invalid-expression "Function invocation is not a constant expression.";
+  const self::MyClass<core::String> c6 = invalid-expression "Function invocation is not a constant expression.";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.weak.modular.expect
new file mode 100644
index 0000000..9f3e10b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47069.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:7:2: Error: Couldn't find constructor 'func'.
+// @func()
+//  ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:9:9: Error: Couldn't find constructor 'func'.
+//   const func();
+//         ^^^^
+//
+import self as self;
+
+static method func() → dynamic {}
+@invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:7:2: Error: Couldn't find constructor 'func'.
+@func()
+ ^^^^"
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47069.dart:9:9: Error: Couldn't find constructor 'func'.
+  const func();
+        ^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.weak.modular.expect
new file mode 100644
index 0000000..a4ce712
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47071.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47071.dart:8:7: Error: Couldn't find constructor 'a'.
+//   new a();
+//       ^
+//
+import self as self;
+
+static field dynamic a;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47071.dart:8:7: Error: Couldn't find constructor 'a'.
+  new a();
+      ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.modular.expect
new file mode 100644
index 0000000..1d24b72
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47075.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:6:7: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   int new = 42;
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:10:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new is int;
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:12:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new;
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47075.dart:13:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new();
+//       ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int new = 42;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  new self::C::•().{self::C::new}{core::int} is{ForNonNullableByDefault} core::int;
+  dynamic foo;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.weak.modular.expect
new file mode 100644
index 0000000..17917a9
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47079.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/issue47079.dart:6:7: Error: Couldn't find constructor 'A'.
+//   new A();
+//       ^
+//
+import self as self;
+
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/issue47079.dart:6:7: Error: Couldn't find constructor 'A'.
+  new A();
+      ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.modular.expect
new file mode 100644
index 0000000..9af80b0
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154a.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  final field (core::int) → core::int x;
+  const constructor •(core::bool b) → self::A
+    : self::A::x = (b ?{<X extends core::Object? = dynamic>(X%) → X%} #C1 : #C2)<core::int>, super core::Object::•()
+    ;
+}
+static method id<X extends core::Object? = dynamic>(self::id::X% x) → self::id::X%
+  return x;
+static method other<X extends core::Object? = dynamic>(self::other::X% x) → self::other::X%
+  return throw "${x}";
+static method main() → void {
+  core::print("${#C3}, ${#C1}, ${#C3}, ${#C4}");
+}
+
+constants  {
+  #C1 = static-tearoff self::id
+  #C2 = static-tearoff self::other
+  #C3 = instantiation #C1 <core::int*>
+  #C4 = self::A {x:#C3}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue47154a.dart:
+- A. (from org-dartlang-testcase:///issue47154a.dart:7:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.modular.expect
new file mode 100644
index 0000000..a593732
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154b.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  final field (core::int) → core::int x;
+  const constructor •(core::bool b) → self::A
+    : self::A::x = b ?{(core::int) → core::int} #C2 : #C4, super core::Object::•()
+    ;
+}
+static method id<X extends core::Object? = dynamic>(self::id::X% x) → self::id::X%
+  return x;
+static method other<X extends core::Object? = dynamic>(self::other::X% x) → self::other::X%
+  return throw "${x}";
+static method main() → void {
+  core::print("${#C2}, ${#C1}, ${#C2}, ${#C5}");
+}
+
+constants  {
+  #C1 = static-tearoff self::id
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = static-tearoff self::other
+  #C4 = instantiation #C3 <core::int*>
+  #C5 = self::A {x:#C2}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue47154b.dart:
+- A. (from org-dartlang-testcase:///issue47154b.dart:7:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.modular.expect
new file mode 100644
index 0000000..691f3a6
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47154c.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field core::List<self::A::X%> x;
+  const constructor •(dynamic x) → self::A<self::A::X%>
+    : self::A::x = x is{ForNonNullableByDefault} core::List<self::A::X%> ?{core::List<self::A::X%>} x{core::List<self::A::X%>} : x as{ForNonNullableByDefault} core::List<self::A::X%>, super core::Object::•()
+    ;
+}
+class B<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field (self::B::X%) → void f;
+  const constructor •() → self::B<self::B::X%>
+    : self::B::f = #C1<self::B::X%>, super core::Object::•()
+    ;
+}
+class C<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field dynamic f;
+  const constructor •() → self::C<self::C::X%>
+    : self::C::f = #C1<self::C::X%>, super core::Object::•()
+    ;
+}
+static method m<X extends core::Object? = dynamic>(self::m::X% x) → void {}
+static method main() → void {
+  #C4;
+  core::print((#C6.{self::B::f}{(core::String) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::String) → void).{core::Object::runtimeType}{core::Type});
+  core::print(#C7.{self::C::f}{dynamic}.{core::Object::runtimeType}{core::Type});
+}
+
+constants  {
+  #C1 = static-tearoff self::m
+  #C2 = 1
+  #C3 = <core::int*>[#C2]
+  #C4 = self::A<core::int*> {x:#C3}
+  #C5 = instantiation #C1 <core::String*>
+  #C6 = self::B<core::String*> {f:#C5}
+  #C7 = self::C<core::String*> {f:#C5}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue47154c.dart:
+- A. (from org-dartlang-testcase:///issue47154c.dart:8:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- B. (from org-dartlang-testcase:///issue47154c.dart:16:9)
+- C. (from org-dartlang-testcase:///issue47154c.dart:22:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.modular.expect
new file mode 100644
index 0000000..ff4b5b0
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/issue47462.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {}
+static method test() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num*>
+  #C5 = typedef-tearoff <T extends core::num>.(#C3<T>)
+  #C6 = instantiation #C5 <core::num*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart
index 19d9464..a192018 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart
@@ -14,6 +14,13 @@
         Alias.impl(),
         ImplAlias<String>()
       ]});
+
+  const Class.named(
+      {this.constants = const [
+        Const.impl(),
+        Alias.impl(),
+        ImplAlias<String>()
+      ]});
 }
 
 typedef Alias = Const;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect
index df41444..1b1884e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect
@@ -2,11 +2,19 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:22:9: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'ImplAlias'.
+// Try changing type arguments so that they conform to the bounds.
+//         ImplAlias<String>()
+//         ^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:32:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef ImplAlias<T extends num> = _ConstImpl<T>;
+//                   ^
+//
 // pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:15:9: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'ImplAlias'.
 // Try changing type arguments so that they conform to the bounds.
 //         ImplAlias<String>()
 //         ^
-// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:25:19: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:32:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef ImplAlias<T extends num> = _ConstImpl<T>;
 //                   ^
 //
@@ -15,13 +23,18 @@
 
 typedef Alias = self::Const;
 typedef ImplAlias<T extends core::num> = self::_ConstImpl<T>;
-class Class extends core::Object {
+class Class extends core::Object /*hasConstConstructor*/  {
   final field core::List<self::Const> constants;
   constructor •({core::List<self::Const> constants = #C3}) → self::Class
     : self::Class::constants = constants, super core::Object::•()
     ;
+  const constructor named({core::List<self::Const> constants = #C3}) → self::Class
+    : self::Class::constants = constants, super core::Object::•()
+    ;
   static method _#new#tearOff({core::List<self::Const> constants = #C3}) → self::Class
     return new self::Class::•(constants: constants);
+  static method _#named#tearOff({core::List<self::Const> constants = #C3}) → self::Class
+    return new self::Class::named(constants: constants);
 }
 abstract class Const extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
@@ -51,5 +64,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///const_redirect.dart:
-- _ConstImpl. (from org-dartlang-testcase:///const_redirect.dart:28:9)
+- _ConstImpl. (from org-dartlang-testcase:///const_redirect.dart:35:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect
index df41444..1b1884e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect
@@ -2,11 +2,19 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:22:9: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'ImplAlias'.
+// Try changing type arguments so that they conform to the bounds.
+//         ImplAlias<String>()
+//         ^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:32:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef ImplAlias<T extends num> = _ConstImpl<T>;
+//                   ^
+//
 // pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:15:9: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'ImplAlias'.
 // Try changing type arguments so that they conform to the bounds.
 //         ImplAlias<String>()
 //         ^
-// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:25:19: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:32:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef ImplAlias<T extends num> = _ConstImpl<T>;
 //                   ^
 //
@@ -15,13 +23,18 @@
 
 typedef Alias = self::Const;
 typedef ImplAlias<T extends core::num> = self::_ConstImpl<T>;
-class Class extends core::Object {
+class Class extends core::Object /*hasConstConstructor*/  {
   final field core::List<self::Const> constants;
   constructor •({core::List<self::Const> constants = #C3}) → self::Class
     : self::Class::constants = constants, super core::Object::•()
     ;
+  const constructor named({core::List<self::Const> constants = #C3}) → self::Class
+    : self::Class::constants = constants, super core::Object::•()
+    ;
   static method _#new#tearOff({core::List<self::Const> constants = #C3}) → self::Class
     return new self::Class::•(constants: constants);
+  static method _#named#tearOff({core::List<self::Const> constants = #C3}) → self::Class
+    return new self::Class::named(constants: constants);
 }
 abstract class Const extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
@@ -51,5 +64,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///const_redirect.dart:
-- _ConstImpl. (from org-dartlang-testcase:///const_redirect.dart:28:9)
+- _ConstImpl. (from org-dartlang-testcase:///const_redirect.dart:35:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.textual_outline.expect
index 2453b30..4601a8e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.textual_outline.expect
@@ -6,6 +6,12 @@
         Alias.impl(),
         ImplAlias<String>()
       ]});
+  const Class.named(
+      {this.constants = const [
+        Const.impl(),
+        Alias.impl(),
+        ImplAlias<String>()
+      ]});
 }
 
 typedef Alias = Const;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.textual_outline_modelled.expect
index 615c4c2..3c229e1 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.textual_outline_modelled.expect
@@ -9,6 +9,12 @@
         Alias.impl(),
         ImplAlias<String>()
       ]});
+  const Class.named(
+      {this.constants = const [
+        Const.impl(),
+        Alias.impl(),
+        ImplAlias<String>()
+      ]});
   final List<Const> constants;
 }
 
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.expect
index 38c6a94..39fb6b3 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.expect
@@ -2,11 +2,19 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:22:9: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'ImplAlias'.
+// Try changing type arguments so that they conform to the bounds.
+//         ImplAlias<String>()
+//         ^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:32:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef ImplAlias<T extends num> = _ConstImpl<T>;
+//                   ^
+//
 // pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:15:9: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'ImplAlias'.
 // Try changing type arguments so that they conform to the bounds.
 //         ImplAlias<String>()
 //         ^
-// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:25:19: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:32:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef ImplAlias<T extends num> = _ConstImpl<T>;
 //                   ^
 //
@@ -15,13 +23,18 @@
 
 typedef Alias = self::Const;
 typedef ImplAlias<T extends core::num> = self::_ConstImpl<T>;
-class Class extends core::Object {
+class Class extends core::Object /*hasConstConstructor*/  {
   final field core::List<self::Const> constants;
   constructor •({core::List<self::Const> constants = #C3}) → self::Class
     : self::Class::constants = constants, super core::Object::•()
     ;
+  const constructor named({core::List<self::Const> constants = #C3}) → self::Class
+    : self::Class::constants = constants, super core::Object::•()
+    ;
   static method _#new#tearOff({core::List<self::Const> constants = #C3}) → self::Class
     return new self::Class::•(constants: constants);
+  static method _#named#tearOff({core::List<self::Const> constants = #C3}) → self::Class
+    return new self::Class::named(constants: constants);
 }
 abstract class Const extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
@@ -51,5 +64,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///const_redirect.dart:
-- _ConstImpl. (from org-dartlang-testcase:///const_redirect.dart:28:9)
+- _ConstImpl. (from org-dartlang-testcase:///const_redirect.dart:35:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.modular.expect
new file mode 100644
index 0000000..39fb6b3
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:22:9: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'ImplAlias'.
+// Try changing type arguments so that they conform to the bounds.
+//         ImplAlias<String>()
+//         ^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:32:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef ImplAlias<T extends num> = _ConstImpl<T>;
+//                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:15:9: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'ImplAlias'.
+// Try changing type arguments so that they conform to the bounds.
+//         ImplAlias<String>()
+//         ^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:32:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef ImplAlias<T extends num> = _ConstImpl<T>;
+//                   ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Alias = self::Const;
+typedef ImplAlias<T extends core::num> = self::_ConstImpl<T>;
+class Class extends core::Object /*hasConstConstructor*/  {
+  final field core::List<self::Const> constants;
+  constructor •({core::List<self::Const> constants = #C3}) → self::Class
+    : self::Class::constants = constants, super core::Object::•()
+    ;
+  const constructor named({core::List<self::Const> constants = #C3}) → self::Class
+    : self::Class::constants = constants, super core::Object::•()
+    ;
+  static method _#new#tearOff({core::List<self::Const> constants = #C3}) → self::Class
+    return new self::Class::•(constants: constants);
+  static method _#named#tearOff({core::List<self::Const> constants = #C3}) → self::Class
+    return new self::Class::named(constants: constants);
+}
+abstract class Const extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  static factory impl() → self::Const
+    return new self::_ConstImpl::•<dynamic>();
+  static method _#impl#tearOff() → self::Const
+    return new self::_ConstImpl::•<dynamic>();
+}
+class _ConstImpl<T extends core::Object? = dynamic> extends core::Object implements self::Const /*hasConstConstructor*/  {
+  const constructor •() → self::_ConstImpl<self::_ConstImpl::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::_ConstImpl<self::_ConstImpl::_#new#tearOff::T%>
+    return new self::_ConstImpl::•<self::_ConstImpl::_#new#tearOff::T%>();
+}
+static method main() → dynamic {}
+static method _#ImplAlias#new#tearOff<T extends core::num>() → self::_ConstImpl<self::_#ImplAlias#new#tearOff::T>
+  return new self::_ConstImpl::•<self::_#ImplAlias#new#tearOff::T>();
+
+constants  {
+  #C1 = self::_ConstImpl<dynamic> {}
+  #C2 = self::_ConstImpl<core::String*> {}
+  #C3 = <self::Const*>[#C1, #C1, #C2]
+  #C4 = constructor-tearoff self::Const::impl
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_redirect.dart:
+- _ConstImpl. (from org-dartlang-testcase:///const_redirect.dart:35:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect
index 7fffaa8..50eff12 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.outline.expect
@@ -1,15 +1,31 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:22:9: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'ImplAlias'.
+// Try changing type arguments so that they conform to the bounds.
+//         ImplAlias<String>()
+//         ^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:32:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef ImplAlias<T extends num> = _ConstImpl<T>;
+//                   ^
+//
 import self as self;
 import "dart:core" as core;
 
 typedef Alias = self::Const;
 typedef ImplAlias<T extends core::num> = self::_ConstImpl<T>;
-class Class extends core::Object {
+class Class extends core::Object /*hasConstConstructor*/  {
   final field core::List<self::Const> constants;
   constructor •({core::List<self::Const> constants}) → self::Class
     ;
+  const constructor named({core::List<self::Const> constants = const <self::Const>[const self::_ConstImpl::•<dynamic>(), const self::_ConstImpl::•<dynamic>(), const self::_ConstImpl::•<core::String>()]}) → self::Class
+    : self::Class::constants = constants, super core::Object::•()
+    ;
   static method _#new#tearOff({core::List<self::Const> constants}) → self::Class
     return new self::Class::•(constants: constants);
+  static method _#named#tearOff({core::List<self::Const> constants}) → self::Class
+    return new self::Class::named(constants: constants);
 }
 abstract class Const extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::Const::impl]/*isLegacy*/;
@@ -32,5 +48,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorTearOff @ org-dartlang-testcase:///const_redirect.dart:21:16 -> ConstructorTearOffConstant(Const.impl)
-Extra constant evaluation: evaluated: 8, effectively constant: 1
+Evaluated: ListLiteral @ org-dartlang-testcase:///const_redirect.dart:19:25 -> ListConstant(const <Const*>[const _ConstImpl<dynamic>{}, const _ConstImpl<dynamic>{}, const _ConstImpl<String*>{}])
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///const_redirect.dart:28:16 -> ConstructorTearOffConstant(Const.impl)
+Extra constant evaluation: evaluated: 12, effectively constant: 2
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.transformed.expect
index 38c6a94..39fb6b3 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.weak.transformed.expect
@@ -2,11 +2,19 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:22:9: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'ImplAlias'.
+// Try changing type arguments so that they conform to the bounds.
+//         ImplAlias<String>()
+//         ^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:32:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef ImplAlias<T extends num> = _ConstImpl<T>;
+//                   ^
+//
 // pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:15:9: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'ImplAlias'.
 // Try changing type arguments so that they conform to the bounds.
 //         ImplAlias<String>()
 //         ^
-// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:25:19: Context: This is the type variable whose bound isn't conformed to.
+// pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart:32:19: Context: This is the type variable whose bound isn't conformed to.
 // typedef ImplAlias<T extends num> = _ConstImpl<T>;
 //                   ^
 //
@@ -15,13 +23,18 @@
 
 typedef Alias = self::Const;
 typedef ImplAlias<T extends core::num> = self::_ConstImpl<T>;
-class Class extends core::Object {
+class Class extends core::Object /*hasConstConstructor*/  {
   final field core::List<self::Const> constants;
   constructor •({core::List<self::Const> constants = #C3}) → self::Class
     : self::Class::constants = constants, super core::Object::•()
     ;
+  const constructor named({core::List<self::Const> constants = #C3}) → self::Class
+    : self::Class::constants = constants, super core::Object::•()
+    ;
   static method _#new#tearOff({core::List<self::Const> constants = #C3}) → self::Class
     return new self::Class::•(constants: constants);
+  static method _#named#tearOff({core::List<self::Const> constants = #C3}) → self::Class
+    return new self::Class::named(constants: constants);
 }
 abstract class Const extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
@@ -51,5 +64,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///const_redirect.dart:
-- _ConstImpl. (from org-dartlang-testcase:///const_redirect.dart:28:9)
+- _ConstImpl. (from org-dartlang-testcase:///const_redirect.dart:35:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..678c59b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart.weak.modular.expect
@@ -0,0 +1,230 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:73:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f3a(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:74:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f3a(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:89:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f4a(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:103:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f5a(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:104:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+// Try removing the extra positional arguments.
+//     f5a(42, 87, 123); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:116:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f6a(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:117:8: Error: Required named parameter 'field3' must be provided.
+//     f6a(42); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:118:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f6a(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:119:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f6a(field1: 87, field2: 87); // error
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::Class1
+    return new self::Class1::•();
+}
+class Class2 extends core::Object {
+  constructor named() → self::Class2
+    : super core::Object::•()
+    ;
+  static method _#named#tearOff() → self::Class2
+    return new self::Class2::named();
+}
+class Class3 extends core::Object {
+  final field core::int field;
+  constructor •(core::int field) → self::Class3
+    : self::Class3::field = field, super core::Object::•()
+    ;
+  static method _#new#tearOff(core::int field) → self::Class3
+    return new self::Class3::•(field);
+}
+class Class4 extends core::Object {
+  final field core::int? field;
+  constructor •([core::int? field = #C1]) → self::Class4
+    : self::Class4::field = field, super core::Object::•()
+    ;
+  static method _#new#tearOff([core::int? field = #C1]) → self::Class4
+    return new self::Class4::•(field);
+}
+class Class5 extends core::Object {
+  final field core::int field1;
+  final field core::int? field2;
+  constructor •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+    : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
+    ;
+  static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+    return new self::Class5::•(field1, field2);
+}
+class Class6 extends core::Object {
+  final field core::int field1;
+  final field core::int? field2;
+  final field core::int field3;
+  constructor •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+    : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
+    ;
+  static method _#new#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+    return new self::Class6::•(field1, field2: field2, field3: field3);
+}
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+  core::print("inSoundMode: ${self::inSoundMode}");
+  self::testNoArgs();
+  self::testArgs();
+}
+static method testNoArgs() → dynamic {
+  () → self::Class1 f1a = #C2;
+  self::Class1 c1a = f1a(){() → self::Class1};
+  self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
+  dynamic f1b = #C2;
+  dynamic c1b = f1b{dynamic}.call();
+  self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
+  self::expect(true, core::identical(f1a, f1b));
+  () → self::Class2 f2a = #C3;
+  self::Class2 c2a = f2a(){() → self::Class2};
+  self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
+  dynamic f2b = #C3;
+  dynamic c2b = f2b{dynamic}.call();
+  self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
+  self::expect(true, core::identical(f2a, f2b));
+}
+static method testArgs() → dynamic {
+  (core::int) → self::Class3 f3a = #C4;
+  self::Class3 c3a = f3a(42){(core::int) → self::Class3};
+  self::expect(42, c3a.{self::Class3::field}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:73:8: Error: Too few positional arguments: 1 required, 0 given.
+    f3a(); // error
+       ^" in f3a{<inapplicable>}.();
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:74:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f3a(42, 87); // error
+       ^" in f3a{<inapplicable>}.(42, 87);
+  };
+  dynamic f3b = #C4;
+  dynamic c3b = f3b{dynamic}.call(87);
+  self::expect(87, c3b{dynamic}.field);
+  self::throws(() → dynamic => f3b{dynamic}.call());
+  self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
+  ([core::int?]) → self::Class4 f4a = #C5;
+  self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
+  self::expect(null, c4a.{self::Class4::field}{core::int?});
+  self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
+  self::expect(42, c4b.{self::Class4::field}{core::int?});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:89:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f4a(42, 87); // error
+       ^" in f4a{<inapplicable>}.(42, 87);
+  };
+  dynamic f4b = #C5;
+  self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
+  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
+  self::expect(42, c5a.{self::Class5::field1}{core::int});
+  self::expect(null, c5a.{self::Class5::field2}{core::int?});
+  self::Class5 c5b = f5a(87, 42){(core::int, [core::int?]) → self::Class5};
+  self::expect(87, c5b.{self::Class5::field1}{core::int});
+  self::expect(42, c5b.{self::Class5::field2}{core::int?});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:103:8: Error: Too few positional arguments: 1 required, 0 given.
+    f5a(); // error
+       ^" in f5a{<inapplicable>}.();
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:104:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+Try removing the extra positional arguments.
+    f5a(42, 87, 123); // error
+       ^" in f5a{<inapplicable>}.(42, 87, 123);
+  };
+  dynamic f5b = #C6;
+  self::throws(() → dynamic => f5b{dynamic}.call());
+  self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
+  self::expect(42, c6a.{self::Class6::field1}{core::int});
+  self::expect(null, c6a.{self::Class6::field2}{core::int?});
+  self::expect(87, c6a.{self::Class6::field3}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:116:8: Error: Too few positional arguments: 1 required, 0 given.
+    f6a(); // error
+       ^" in f6a{<inapplicable>}.();
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:117:8: Error: Required named parameter 'field3' must be provided.
+    f6a(42); // error
+       ^" in f6a{<inapplicable>}.(42);
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:118:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f6a(42, 87); // error
+       ^" in f6a{<inapplicable>}.(42, 87);
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off.dart:119:8: Error: Too few positional arguments: 1 required, 0 given.
+    f6a(field1: 87, field2: 87); // error
+       ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
+  };
+  self::Class6 c6b = f6a(42, field2: 123, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
+  self::expect(42, c6b.{self::Class6::field1}{core::int});
+  self::expect(123, c6b.{self::Class6::field2}{core::int?});
+  self::expect(87, c6b.{self::Class6::field3}{core::int});
+  self::Class6 c6c = f6a(87, field3: 42, field2: 123){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
+  self::expect(87, c6c.{self::Class6::field1}{core::int});
+  self::expect(123, c6c.{self::Class6::field2}{core::int?});
+  self::expect(42, c6c.{self::Class6::field3}{core::int});
+  dynamic f6b = #C7;
+  self::throws(() → dynamic => f6b{dynamic}.call());
+  self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
+  self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
+  self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C8}) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print("Thrown: ${e}");
+    return;
+  }
+  if(!self::inSoundMode && inSoundModeOnly) {
+    return;
+  }
+  throw "Expected exception";
+}
+
+constants  {
+  #C1 = null
+  #C2 = static-tearoff self::Class1::_#new#tearOff
+  #C3 = static-tearoff self::Class2::_#named#tearOff
+  #C4 = static-tearoff self::Class3::_#new#tearOff
+  #C5 = static-tearoff self::Class4::_#new#tearOff
+  #C6 = static-tearoff self::Class5::_#new#tearOff
+  #C7 = static-tearoff self::Class6::_#new#tearOff
+  #C8 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.weak.modular.expect
new file mode 100644
index 0000000..9db8c5f
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart.weak.modular.expect
@@ -0,0 +1,98 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:31:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f1a(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:47:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     f2a(87); // error
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  final field core::int field;
+  constructor •([core::int field = #C1]) → self::Class1
+    : self::Class1::field = field, super core::Object::•()
+    ;
+  static method _#new#tearOff([core::int field = #C1]) → self::Class1
+    return new self::Class1::•(field);
+}
+class Class2 extends core::Object {
+  final field core::int field;
+  constructor •({core::int field = #C1}) → self::Class2
+    : self::Class2::field = field, super core::Object::•()
+    ;
+  static method _#new#tearOff({core::int field = #C1}) → self::Class2
+    return new self::Class2::•(field: field);
+}
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+  core::print("inSoundMode: ${self::inSoundMode}");
+  self::testDefaultValues();
+}
+static method testDefaultValues() → void {
+  ([core::int]) → self::Class1 f1a = #C2;
+  self::Class1 c1a = f1a(){([core::int]) → self::Class1};
+  self::expect(42, c1a.{self::Class1::field}{core::int});
+  self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
+  self::expect(87, c1b.{self::Class1::field}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:31:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f1a(42, 87); // error
+       ^" in f1a{<inapplicable>}.(42, 87);
+  };
+  dynamic f1b = #C2;
+  dynamic c1c = f1b{dynamic}.call();
+  self::expect(42, c1c{dynamic}.field);
+  dynamic c1d = f1b{dynamic}.call(87);
+  self::expect(87, c1d{dynamic}.field);
+  self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
+  ({field: core::int}) → self::Class2 f2a = #C3;
+  self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
+  self::expect(42, c2a.{self::Class2::field}{core::int});
+  self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
+  self::expect(87, c2b.{self::Class2::field}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:47:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    f2a(87); // error
+       ^" in f2a{<inapplicable>}.(87);
+  };
+  dynamic f2b = #C3;
+  dynamic c2c = f2b{dynamic}.call();
+  self::expect(42, c2c{dynamic}.field);
+  dynamic c2d = f2b{dynamic}.call(field: 87);
+  self::expect(87, c2d{dynamic}.field);
+  self::throws(() → dynamic => f2b{dynamic}.call(87));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C4}) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print("Thrown: ${e}");
+    return;
+  }
+  if(!self::inSoundMode && inSoundModeOnly) {
+    return;
+  }
+  throw "Expected exception";
+}
+
+constants  {
+  #C1 = 42
+  #C2 = static-tearoff self::Class1::_#new#tearOff
+  #C3 = static-tearoff self::Class2::_#new#tearOff
+  #C4 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.weak.modular.expect
new file mode 100644
index 0000000..8666359
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri_part.dart:8:27: Error: A value of type 'Class Function()' can't be assigned to a variable of type 'Class Function(int)'.
+//  - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart'.
+//   Class Function(int) f = Class.new;
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+part constructor_tear_off_uri_part.dart;
+class Class extends core::Object { // from org-dartlang-testcase:///constructor_tear_off_uri_part.dart
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
+}
+static method main() → dynamic {}
+static method /* from org-dartlang-testcase:///constructor_tear_off_uri_part.dart */ test() → dynamic {
+  (core::int) → self::Class f = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri_part.dart:8:27: Error: A value of type 'Class Function()' can't be assigned to a variable of type 'Class Function(int)'.
+ - 'Class' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_uri.dart'.
+  Class Function(int) f = Class.new;
+                          ^" in #C1 as{TypeError,ForNonNullableByDefault} (core::int) → self::Class;
+}
+
+constants  {
+  #C1 = static-tearoff self::Class::_#new#tearOff
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.weak.modular.expect
new file mode 100644
index 0000000..a612cdc
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:14:9: Error: 'AAlias' is already declared in this scope.
+// typedef AAlias = A; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:11:9: Context: Previous declaration of 'AAlias'.
+// typedef AAlias = A;
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:15:9: Error: 'AAlias' is already declared in this scope.
+// typedef AAlias = C<String>; // error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:14:9: Context: Previous declaration of 'AAlias'.
+// typedef AAlias = A; //  error
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:16:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias<T> = C<T>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:12:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias<T> = C<T>;
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:17:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias = C<String>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:16:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias<T> = C<T>; //  error
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:18:9: Error: 'CAlias' is already declared in this scope.
+// typedef CAlias<T1, T2> = C<T1>; //  error
+//         ^^^^^^
+// pkg/front_end/testcases/constructor_tearoffs/lowering/duplicate_typedefs.dart:17:9: Context: Previous declaration of 'CAlias'.
+// typedef CAlias = C<String>; //  error
+//         ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef AAlias = self::A;
+typedef CAlias<T extends core::Object? = dynamic> = self::C<T%>;
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::A
+    return new self::A::•();
+}
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::T%>
+    return new self::C::•<self::C::_#new#tearOff::T%>();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..68c70e1
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart.weak.modular.expect
@@ -0,0 +1,254 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:82:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f3a(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:83:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f3a(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:98:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f4a(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:112:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f5a(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:113:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+// Try removing the extra positional arguments.
+//     f5a(42, 87, 123); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:125:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f6a(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:126:8: Error: Required named parameter 'field3' must be provided.
+//     f6a(42); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:127:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f6a(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:128:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f6a(field1: 87, field2: 87); // error
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  constructor _() → self::Class1
+    : super core::Object::•()
+    ;
+  static method _#_#tearOff() → self::Class1
+    return new self::Class1::_();
+  static factory •() → self::Class1
+    return new self::Class1::_();
+  static method _#new#tearOff() → self::Class1
+    return self::Class1::•();
+}
+class Class2 extends core::Object {
+  constructor _() → self::Class2
+    : super core::Object::•()
+    ;
+  static method _#_#tearOff() → self::Class2
+    return new self::Class2::_();
+  static factory named() → self::Class2
+    return new self::Class2::_();
+  static method _#named#tearOff() → self::Class2
+    return self::Class2::named();
+}
+class Class3 extends core::Object {
+  final field core::int field;
+  constructor _(core::int field) → self::Class3
+    : self::Class3::field = field, super core::Object::•()
+    ;
+  static method _#_#tearOff(core::int field) → self::Class3
+    return new self::Class3::_(field);
+  static factory •(core::int field) → self::Class3
+    return new self::Class3::_(field);
+  static method _#new#tearOff(core::int field) → self::Class3
+    return self::Class3::•(field);
+}
+class Class4 extends core::Object {
+  final field core::int? field;
+  constructor _([core::int? field = #C1]) → self::Class4
+    : self::Class4::field = field, super core::Object::•()
+    ;
+  static method _#_#tearOff([core::int? field = #C1]) → self::Class4
+    return new self::Class4::_(field);
+  static factory •([core::int? field = #C1]) → self::Class4
+    return new self::Class4::_(field);
+  static method _#new#tearOff([core::int? field = #C1]) → self::Class4
+    return self::Class4::•(field);
+}
+class Class5 extends core::Object {
+  final field core::int field1;
+  final field core::int? field2;
+  constructor _(core::int field1, [core::int? field2 = #C1]) → self::Class5
+    : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
+    ;
+  static method _#_#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+    return new self::Class5::_(field1, field2);
+  static factory •(core::int field1, [core::int? field2 = #C1]) → self::Class5
+    return new self::Class5::_(field1, field2);
+  static method _#new#tearOff(core::int field1, [core::int? field2 = #C1]) → self::Class5
+    return self::Class5::•(field1, field2);
+}
+class Class6 extends core::Object {
+  final field core::int field1;
+  final field core::int? field2;
+  final field core::int field3;
+  constructor _(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+    : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
+    ;
+  static method _#_#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+    return new self::Class6::_(field1, field2: field2, field3: field3);
+  static factory •(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+    return new self::Class6::_(field1, field2: field2, field3: field3);
+  static method _#new#tearOff(core::int field1, {core::int? field2 = #C1, required core::int field3 = #C1}) → self::Class6
+    return self::Class6::•(field1, field2: field2, field3: field3);
+}
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+  core::print("inSoundMode: ${self::inSoundMode}");
+  self::testNoArgs();
+  self::testArgs();
+}
+static method testNoArgs() → dynamic {
+  () → self::Class1 f1a = #C2;
+  self::Class1 c1a = f1a(){() → self::Class1};
+  self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
+  dynamic f1b = #C2;
+  dynamic c1b = f1b{dynamic}.call();
+  self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
+  self::expect(true, core::identical(f1a, f1b));
+  () → self::Class2 f2a = #C3;
+  self::Class2 c2a = f2a(){() → self::Class2};
+  self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
+  dynamic f2b = #C3;
+  dynamic c2b = f2b{dynamic}.call();
+  self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
+  self::expect(true, core::identical(f2a, f2b));
+}
+static method testArgs() → dynamic {
+  (core::int) → self::Class3 f3a = #C4;
+  self::Class3 c3a = f3a(42){(core::int) → self::Class3};
+  self::expect(42, c3a.{self::Class3::field}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:82:8: Error: Too few positional arguments: 1 required, 0 given.
+    f3a(); // error
+       ^" in f3a{<inapplicable>}.();
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:83:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f3a(42, 87); // error
+       ^" in f3a{<inapplicable>}.(42, 87);
+  };
+  dynamic f3b = #C4;
+  dynamic c3b = f3b{dynamic}.call(87);
+  self::expect(87, c3b{dynamic}.field);
+  self::throws(() → dynamic => f3b{dynamic}.call());
+  self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
+  ([core::int?]) → self::Class4 f4a = #C5;
+  self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
+  self::expect(null, c4a.{self::Class4::field}{core::int?});
+  self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
+  self::expect(42, c4b.{self::Class4::field}{core::int?});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:98:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f4a(42, 87); // error
+       ^" in f4a{<inapplicable>}.(42, 87);
+  };
+  dynamic f4b = #C5;
+  self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
+  (core::int, [core::int?]) → self::Class5 f5a = #C6;
+  self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
+  self::expect(42, c5a.{self::Class5::field1}{core::int});
+  self::expect(null, c5a.{self::Class5::field2}{core::int?});
+  self::Class5 c5b = f5a(87, 42){(core::int, [core::int?]) → self::Class5};
+  self::expect(87, c5b.{self::Class5::field1}{core::int});
+  self::expect(42, c5b.{self::Class5::field2}{core::int?});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:112:8: Error: Too few positional arguments: 1 required, 0 given.
+    f5a(); // error
+       ^" in f5a{<inapplicable>}.();
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:113:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+Try removing the extra positional arguments.
+    f5a(42, 87, 123); // error
+       ^" in f5a{<inapplicable>}.(42, 87, 123);
+  };
+  dynamic f5b = #C6;
+  self::throws(() → dynamic => f5b{dynamic}.call());
+  self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C7;
+  self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
+  self::expect(42, c6a.{self::Class6::field1}{core::int});
+  self::expect(null, c6a.{self::Class6::field2}{core::int?});
+  self::expect(87, c6a.{self::Class6::field3}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:125:8: Error: Too few positional arguments: 1 required, 0 given.
+    f6a(); // error
+       ^" in f6a{<inapplicable>}.();
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:126:8: Error: Required named parameter 'field3' must be provided.
+    f6a(42); // error
+       ^" in f6a{<inapplicable>}.(42);
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:127:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f6a(42, 87); // error
+       ^" in f6a{<inapplicable>}.(42, 87);
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off.dart:128:8: Error: Too few positional arguments: 1 required, 0 given.
+    f6a(field1: 87, field2: 87); // error
+       ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
+  };
+  self::Class6 c6b = f6a(42, field2: 123, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
+  self::expect(42, c6b.{self::Class6::field1}{core::int});
+  self::expect(123, c6b.{self::Class6::field2}{core::int?});
+  self::expect(87, c6b.{self::Class6::field3}{core::int});
+  self::Class6 c6c = f6a(87, field3: 42, field2: 123){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
+  self::expect(87, c6c.{self::Class6::field1}{core::int});
+  self::expect(123, c6c.{self::Class6::field2}{core::int?});
+  self::expect(42, c6c.{self::Class6::field3}{core::int});
+  dynamic f6b = #C7;
+  self::throws(() → dynamic => f6b{dynamic}.call());
+  self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
+  self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
+  self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C8}) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print("Thrown: ${e}");
+    return;
+  }
+  if(!self::inSoundMode && inSoundModeOnly) {
+    return;
+  }
+  throw "Expected exception";
+}
+
+constants  {
+  #C1 = null
+  #C2 = static-tearoff self::Class1::_#new#tearOff
+  #C3 = static-tearoff self::Class2::_#named#tearOff
+  #C4 = static-tearoff self::Class3::_#new#tearOff
+  #C5 = static-tearoff self::Class4::_#new#tearOff
+  #C6 = static-tearoff self::Class5::_#new#tearOff
+  #C7 = static-tearoff self::Class6::_#new#tearOff
+  #C8 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.modular.expect
new file mode 100644
index 0000000..6ef9f15
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart.weak.modular.expect
@@ -0,0 +1,106 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f1a(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     f2a(87); // error
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  final field core::int field;
+  constructor _(core::int field) → self::Class1
+    : self::Class1::field = field, super core::Object::•()
+    ;
+  static method _#_#tearOff(core::int field) → self::Class1
+    return new self::Class1::_(field);
+  static factory •([core::int field = #C1]) → self::Class1
+    return new self::Class1::_(field);
+  static method _#new#tearOff([core::int field = #C1]) → self::Class1
+    return self::Class1::•(field);
+}
+class Class2 extends core::Object {
+  final field core::int field;
+  constructor _(core::int field) → self::Class2
+    : self::Class2::field = field, super core::Object::•()
+    ;
+  static method _#_#tearOff(core::int field) → self::Class2
+    return new self::Class2::_(field);
+  static factory •({core::int field = #C1}) → self::Class2
+    return new self::Class2::_(field);
+  static method _#new#tearOff({core::int field = #C1}) → self::Class2
+    return self::Class2::•(field: field);
+}
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+  core::print("inSoundMode: ${self::inSoundMode}");
+  self::testDefaultValues();
+}
+static method testDefaultValues() → void {
+  ([core::int]) → self::Class1 f1a = #C2;
+  self::Class1 c1a = f1a(){([core::int]) → self::Class1};
+  self::expect(42, c1a.{self::Class1::field}{core::int});
+  self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
+  self::expect(87, c1b.{self::Class1::field}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f1a(42, 87); // error
+       ^" in f1a{<inapplicable>}.(42, 87);
+  };
+  dynamic f1b = #C2;
+  dynamic c1c = f1b{dynamic}.call();
+  self::expect(42, c1c{dynamic}.field);
+  dynamic c1d = f1b{dynamic}.call(87);
+  self::expect(87, c1d{dynamic}.field);
+  self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
+  ({field: core::int}) → self::Class2 f2a = #C3;
+  self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
+  self::expect(42, c2a.{self::Class2::field}{core::int});
+  self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
+  self::expect(87, c2b.{self::Class2::field}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    f2a(87); // error
+       ^" in f2a{<inapplicable>}.(87);
+  };
+  dynamic f2b = #C3;
+  dynamic c2c = f2b{dynamic}.call();
+  self::expect(42, c2c{dynamic}.field);
+  dynamic c2d = f2b{dynamic}.call(field: 87);
+  self::expect(87, c2d{dynamic}.field);
+  self::throws(() → dynamic => f2b{dynamic}.call(87));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C4}) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print("Thrown: ${e}");
+    return;
+  }
+  if(!self::inSoundMode && inSoundModeOnly) {
+    return;
+  }
+  throw "Expected exception";
+}
+
+constants  {
+  #C1 = 42
+  #C2 = static-tearoff self::Class1::_#new#tearOff
+  #C3 = static-tearoff self::Class2::_#new#tearOff
+  #C4 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.modular.expect
new file mode 100644
index 0000000..c83f268
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart.weak.modular.expect
@@ -0,0 +1,187 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:44:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f3a(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:45:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f3a(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:62:8: Error: Expected 1 type arguments.
+//     f4a<int, String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:70:8: Error: Expected 0 type arguments.
+//     f4b<int>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:87:8: Error: Expected 1 type arguments.
+//     f4d<int, String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:95:8: Error: Expected 0 type arguments.
+//     f4e<int>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:112:8: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try changing type arguments so that they conform to the bounds.
+//     f5a<String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:113:8: Error: Expected 1 type arguments.
+//     f5a<int, String>(); // error
+//        ^
+//
+import self as self;
+import "main_lib.dart" as mai;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+  () → mai::Class1 f1a = #C1;
+  mai::Class1 c1a = f1a(){() → mai::Class1};
+  self::expect(true, c1a is{ForNonNullableByDefault} mai::Class1);
+  dynamic f1b = #C1;
+  dynamic c1b = f1b{dynamic}.call();
+  self::expect(true, c1b is{ForNonNullableByDefault} mai::Class1);
+  self::expect(true, core::identical(f1a, f1b));
+  () → mai::Class2 f2a = #C2;
+  mai::Class2 c2a = f2a(){() → mai::Class2};
+  self::expect(true, c2a is{ForNonNullableByDefault} mai::Class2);
+  dynamic f2b = #C2;
+  dynamic c2b = f2b{dynamic}.call();
+  self::expect(true, c2b is{ForNonNullableByDefault} mai::Class2);
+  self::expect(true, core::identical(f2a, f2b));
+  () → mai::Class2 f2c = #C3;
+  mai::Class2 c2c = f2c(){() → mai::Class2};
+  self::expect(true, c2c is{ForNonNullableByDefault} mai::Class2);
+  dynamic f2d = #C3;
+  dynamic c2d = f2d{dynamic}.call();
+  self::expect(true, c2d is{ForNonNullableByDefault} mai::Class2);
+  self::expect(true, core::identical(f2c, f2d));
+  (core::int) → mai::Class3 f3a = #C4;
+  mai::Class3 c3a = f3a(42){(core::int) → mai::Class3};
+  self::expect(42, c3a.{mai::Class3::field}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:44:8: Error: Too few positional arguments: 1 required, 0 given.
+    f3a(); // error
+       ^" in f3a{<inapplicable>}.();
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:45:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f3a(42, 87); // error
+       ^" in f3a{<inapplicable>}.(42, 87);
+  };
+  dynamic f3b = #C4;
+  dynamic c3b = f3b{dynamic}.call(87);
+  self::expect(87, c3b{dynamic}.field);
+  self::throws(() → dynamic => f3b{dynamic}.call());
+  self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
+  <T extends core::Object? = dynamic>() → mai::Class4<T%> f4a = #C5;
+  mai::Class4<dynamic> c4a = f4a<dynamic>(){() → mai::Class4<dynamic>};
+  self::expect(true, c4a is{ForNonNullableByDefault} mai::Class4<dynamic>);
+  self::expect(false, c4a is{ForNonNullableByDefault} mai::Class4<core::int>);
+  mai::Class4<core::int> c4b = f4a<core::int>(){() → mai::Class4<core::int>};
+  self::expect(true, c4b is{ForNonNullableByDefault} mai::Class4<core::int>);
+  self::expect(false, c4b is{ForNonNullableByDefault} mai::Class4<core::String>);
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:62:8: Error: Expected 1 type arguments.
+    f4a<int, String>(); // error
+       ^" in f4a{<inapplicable>}.<core::int, core::String>();
+  };
+  () → mai::Class4<core::int> f4b = f4a<core::int>;
+  mai::Class4<core::int> c4c = f4b(){() → mai::Class4<core::int>};
+  self::expect(true, c4c is{ForNonNullableByDefault} mai::Class4<core::int>);
+  self::expect(false, c4c is{ForNonNullableByDefault} mai::Class4<core::String>);
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:70:8: Error: Expected 0 type arguments.
+    f4b<int>(); // error
+       ^" in f4b{<inapplicable>}.<core::int>();
+  };
+  dynamic f4c = #C5;
+  dynamic c4d = f4c{dynamic}.call();
+  self::expect(true, c4d is{ForNonNullableByDefault} mai::Class4<dynamic>);
+  self::expect(false, c4d is{ForNonNullableByDefault} mai::Class4<core::int>);
+  self::throws(() → dynamic => f4c{dynamic}.call<core::int, core::String>());
+  <T extends core::Object? = dynamic>() → mai::Class4<T%> f4d = #C6;
+  mai::Class4<dynamic> c4e = f4d<dynamic>(){() → mai::Class4<dynamic>};
+  self::expect(true, c4e is{ForNonNullableByDefault} mai::Class4<dynamic>);
+  self::expect(false, c4e is{ForNonNullableByDefault} mai::Class4<core::int>);
+  mai::Class4<core::int> c4f = f4d<core::int>(){() → mai::Class4<core::int>};
+  self::expect(true, c4f is{ForNonNullableByDefault} mai::Class4<core::int>);
+  self::expect(false, c4f is{ForNonNullableByDefault} mai::Class4<core::String>);
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:87:8: Error: Expected 1 type arguments.
+    f4d<int, String>(); // error
+       ^" in f4d{<inapplicable>}.<core::int, core::String>();
+  };
+  () → mai::Class4<core::int> f4e = f4d<core::int>;
+  mai::Class4<core::int> c4g = f4e(){() → mai::Class4<core::int>};
+  self::expect(true, c4g is{ForNonNullableByDefault} mai::Class4<core::int>);
+  self::expect(false, c4g is{ForNonNullableByDefault} mai::Class4<core::String>);
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:95:8: Error: Expected 0 type arguments.
+    f4e<int>(); // error
+       ^" in f4e{<inapplicable>}.<core::int>();
+  };
+  dynamic f4f = #C6;
+  dynamic c4h = f4f{dynamic}.call();
+  self::expect(true, c4h is{ForNonNullableByDefault} mai::Class4<dynamic>);
+  self::expect(false, c4h is{ForNonNullableByDefault} mai::Class4<core::int>);
+  self::throws(() → dynamic => f4f{dynamic}.call<core::int, core::String>());
+  <T extends core::num>() → mai::Class5<T> f5a = #C7;
+  mai::Class5<core::num> c5a = f5a<core::num>(){() → mai::Class5<core::num>};
+  self::expect(true, c5a is{ForNonNullableByDefault} mai::Class5<core::num>);
+  self::expect(false, c5a is{ForNonNullableByDefault} mai::Class5<core::int>);
+  mai::Class5<core::int> c5b = f5a<core::int>(){() → mai::Class5<core::int>};
+  self::expect(true, c5b is{ForNonNullableByDefault} mai::Class5<core::int>);
+  self::expect(false, c5b is{ForNonNullableByDefault} mai::Class5<core::double>);
+  () → Null {
+    f5a<core::String>(){() → mai::Class5<core::String>};
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:113:8: Error: Expected 1 type arguments.
+    f5a<int, String>(); // error
+       ^" in f5a{<inapplicable>}.<core::int, core::String>();
+  };
+  dynamic f5b = #C7;
+  dynamic c5c = f5b{dynamic}.call();
+  self::expect(true, c5c is{ForNonNullableByDefault} mai::Class5<core::num>);
+  self::expect(false, c5c is{ForNonNullableByDefault} mai::Class5<core::int>);
+  dynamic c5d = f5b{dynamic}.call<core::int>();
+  self::expect(true, c5d is{ForNonNullableByDefault} mai::Class5<core::int>);
+  self::expect(false, c5d is{ForNonNullableByDefault} mai::Class5<core::double>);
+  self::throws(() → dynamic => f5b{dynamic}.call<core::String>());
+  self::throws(() → dynamic => f5b{dynamic}.call<core::int, core::String>());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C8}) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print("Thrown: ${e}");
+    return;
+  }
+  if(!self::inSoundMode && inSoundModeOnly) {
+    return;
+  }
+  throw "Expected exception";
+}
+
+constants  {
+  #C1 = static-tearoff mai::Class1::_#new#tearOff
+  #C2 = static-tearoff mai::Class2::_#named#tearOff
+  #C3 = static-tearoff mai::Class2::_#redirect#tearOff
+  #C4 = static-tearoff mai::Class3::_#new#tearOff
+  #C5 = static-tearoff mai::Class4::_#new#tearOff
+  #C6 = static-tearoff mai::Class4::_#redirect#tearOff
+  #C7 = static-tearoff mai::Class5::_#new#tearOff
+  #C8 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..7cca76e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart.weak.modular.expect
@@ -0,0 +1,180 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:24:8: Error: Expected 1 type arguments.
+//     f1a<int, String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:32:8: Error: Expected 0 type arguments.
+//     f1b<int>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:59:8: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try changing type arguments so that they conform to the bounds.
+//     f2a<String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:60:8: Error: Expected 1 type arguments.
+//     f2a<int, String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:81:8: Error: Type argument 'num' doesn't conform to the bound 'S' of the type variable 'T' on 'call'.
+// Try changing type arguments so that they conform to the bounds.
+//     f3a<num, int>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:95:18: Error: Inferred type argument 'Class4<Object?>' doesn't conform to the bound 'Class4<T>' of the type variable 'T' on 'call'.
+//  - 'Class4' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     var c4a = f4a(); // error
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class1<self::Class1::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#new#tearOff::T%>
+    return new self::Class1::•<self::Class1::_#new#tearOff::T%>();
+}
+class Class2<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::Class2<self::Class2::T>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::num>() → self::Class2<self::Class2::_#new#tearOff::T>
+    return new self::Class2::•<self::Class2::_#new#tearOff::T>();
+}
+class Class3<T extends self::Class3::S% = dynamic, S extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class3<self::Class3::T%, self::Class3::S%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends self::Class3::_#new#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>
+    return new self::Class3::•<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
+}
+class Class4<T extends self::Class4<self::Class4::T> = self::Class4<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Class4<self::Class4::T>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends self::Class4<self::Class4::_#new#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#new#tearOff::T>
+    return new self::Class4::•<self::Class4::_#new#tearOff::T>();
+}
+class Class4int extends self::Class4<self::Class4int> {
+  synthetic constructor •() → self::Class4int
+    : super self::Class4::•()
+    ;
+  static method _#new#tearOff() → self::Class4int
+    return new self::Class4int::•();
+}
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+  core::print("inSoundMode: ${self::inSoundMode}");
+  self::testGeneric();
+  self::testBounded();
+}
+static method testGeneric() → dynamic {
+  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C1;
+  self::Class1<dynamic> c1a = f1a<dynamic>(){() → self::Class1<dynamic>};
+  self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
+  self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
+  self::Class1<core::int> c1b = f1a<core::int>(){() → self::Class1<core::int>};
+  self::expect(true, c1b is{ForNonNullableByDefault} self::Class1<core::int>);
+  self::expect(false, c1b is{ForNonNullableByDefault} self::Class1<core::String>);
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:24:8: Error: Expected 1 type arguments.
+    f1a<int, String>(); // error
+       ^" in f1a{<inapplicable>}.<core::int, core::String>();
+  };
+  () → self::Class1<core::int> f1b = f1a<core::int>;
+  self::Class1<core::int> c1c = f1b(){() → self::Class1<core::int>};
+  self::expect(true, c1c is{ForNonNullableByDefault} self::Class1<core::int>);
+  self::expect(false, c1c is{ForNonNullableByDefault} self::Class1<core::String>);
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:32:8: Error: Expected 0 type arguments.
+    f1b<int>(); // error
+       ^" in f1b{<inapplicable>}.<core::int>();
+  };
+  dynamic f1c = #C1;
+  dynamic c1d = f1c{dynamic}.call();
+  self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
+  self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
+  self::throws(() → dynamic => f1c{dynamic}.call<core::int, core::String>());
+}
+static method testBounded() → dynamic {
+  <T extends core::num>() → self::Class2<T> f2a = #C2;
+  self::Class2<core::num> c2a = f2a<core::num>(){() → self::Class2<core::num>};
+  self::expect(true, c2a is{ForNonNullableByDefault} self::Class2<core::num>);
+  self::expect(false, c2a is{ForNonNullableByDefault} self::Class2<core::int>);
+  self::Class2<core::int> c2b = f2a<core::int>(){() → self::Class2<core::int>};
+  self::expect(true, c2b is{ForNonNullableByDefault} self::Class2<core::int>);
+  self::expect(false, c2b is{ForNonNullableByDefault} self::Class2<core::double>);
+  () → Null {
+    f2a<core::String>(){() → self::Class2<core::String>};
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_constructor_tear_off.dart:60:8: Error: Expected 1 type arguments.
+    f2a<int, String>(); // error
+       ^" in f2a{<inapplicable>}.<core::int, core::String>();
+  };
+  dynamic f2b = #C2;
+  dynamic c2c = f2b{dynamic}.call();
+  self::expect(true, c2c is{ForNonNullableByDefault} self::Class2<core::num>);
+  self::expect(false, c2c is{ForNonNullableByDefault} self::Class2<core::int>);
+  dynamic c2d = f2b{dynamic}.call<core::int>();
+  self::expect(true, c2d is{ForNonNullableByDefault} self::Class2<core::int>);
+  self::expect(false, c2d is{ForNonNullableByDefault} self::Class2<core::double>);
+  self::throws(() → dynamic => f2b{dynamic}.call<core::String>());
+  self::throws(() → dynamic => f2b{dynamic}.call<core::int, core::String>());
+  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C3;
+  self::Class3<dynamic, dynamic> c3a = f3a<dynamic, dynamic>(){() → self::Class3<dynamic, dynamic>};
+  self::expect(true, c3a is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
+  self::expect(false, c3a is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
+  self::Class3<core::int, core::num> c3b = f3a<core::int, core::num>(){() → self::Class3<core::int, core::num>};
+  self::expect(true, c3b is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
+  self::expect(false, c3b is{ForNonNullableByDefault} self::Class3<core::double, core::num>);
+  () → Null {
+    f3a<core::num, core::int>(){() → self::Class3<core::num, core::int>};
+  };
+  dynamic f3b = #C3;
+  dynamic c3c = f3b{dynamic}.call();
+  self::expect(true, c3c is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
+  self::expect(false, c3c is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
+  dynamic c3d = f3b{dynamic}.call<core::int, core::num>();
+  self::expect(true, c3d is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
+  self::expect(false, c3d is{ForNonNullableByDefault} self::Class3<core::double, core::num>);
+  self::throws(() → dynamic => f3b{dynamic}.call<core::num, core::int>());
+  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C4;
+  () → Null {
+    self::Class4<self::Class4<core::Object?>> c4a = f4a<self::Class4<core::Object?>>(){() → self::Class4<self::Class4<core::Object?>>};
+  };
+  dynamic f4b = #C4;
+  self::throws(() → dynamic => f4b{dynamic}.call());
+  dynamic c4b = f4b{dynamic}.call<self::Class4int>();
+  self::expect(true, c4b is{ForNonNullableByDefault} self::Class4<self::Class4int>);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C5}) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print("Thrown: ${e}");
+    return;
+  }
+  if(!self::inSoundMode && inSoundModeOnly) {
+    return;
+  }
+  throw "Expected exception";
+}
+
+constants  {
+  #C1 = static-tearoff self::Class1::_#new#tearOff
+  #C2 = static-tearoff self::Class2::_#new#tearOff
+  #C3 = static-tearoff self::Class3::_#new#tearOff
+  #C4 = static-tearoff self::Class4::_#new#tearOff
+  #C5 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..2addbc7
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart.weak.modular.expect
@@ -0,0 +1,200 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
+//     f1a<int, String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
+//     f1b<int>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:74:8: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try changing type arguments so that they conform to the bounds.
+//     f2a<String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
+//     f2a<int, String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:96:8: Error: Type argument 'num' doesn't conform to the bound 'S' of the type variable 'T' on 'call'.
+// Try changing type arguments so that they conform to the bounds.
+//     f3a<num, int>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:110:18: Error: Inferred type argument 'Class4<Object?>' doesn't conform to the bound 'Class4<T>' of the type variable 'T' on 'call'.
+//  - 'Class4' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     var c4a = f4a(); // error
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1<T extends core::Object? = dynamic> extends core::Object {
+  constructor _() → self::Class1<self::Class1::T%>
+    : super core::Object::•()
+    ;
+  static method _#_#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#_#tearOff::T%>
+    return new self::Class1::_<self::Class1::_#_#tearOff::T%>();
+  static factory •<T extends core::Object? = dynamic>() → self::Class1<self::Class1::•::T%>
+    return new self::Class1::_<self::Class1::•::T%>();
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#new#tearOff::T%>
+    return self::Class1::•<self::Class1::_#new#tearOff::T%>();
+}
+class Class2<T extends core::num> extends core::Object {
+  constructor _() → self::Class2<self::Class2::T>
+    : super core::Object::•()
+    ;
+  static method _#_#tearOff<T extends core::num>() → self::Class2<self::Class2::_#_#tearOff::T>
+    return new self::Class2::_<self::Class2::_#_#tearOff::T>();
+  static factory •<T extends core::num>() → self::Class2<self::Class2::•::T>
+    return new self::Class2::_<self::Class2::•::T>();
+  static method _#new#tearOff<T extends core::num>() → self::Class2<self::Class2::_#new#tearOff::T>
+    return self::Class2::•<self::Class2::_#new#tearOff::T>();
+}
+class Class3<T extends self::Class3::S% = dynamic, S extends core::Object? = dynamic> extends core::Object {
+  constructor _() → self::Class3<self::Class3::T%, self::Class3::S%>
+    : super core::Object::•()
+    ;
+  static method _#_#tearOff<T extends self::Class3::_#_#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>
+    return new self::Class3::_<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>();
+  static factory •<T extends self::Class3::•::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::•::T%, self::Class3::•::S%>
+    return new self::Class3::_<self::Class3::•::T%, self::Class3::•::S%>();
+  static method _#new#tearOff<T extends self::Class3::_#new#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>
+    return self::Class3::•<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
+}
+class Class4<T extends self::Class4<self::Class4::T> = self::Class4<dynamic>> extends core::Object {
+  constructor _() → self::Class4<self::Class4::T>
+    : super core::Object::•()
+    ;
+  static method _#_#tearOff<T extends self::Class4<self::Class4::_#_#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#_#tearOff::T>
+    return new self::Class4::_<self::Class4::_#_#tearOff::T>();
+  static factory •<T extends self::Class4<self::Class4::•::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::•::T>
+    return new self::Class4::_<self::Class4::•::T>();
+  static method _#new#tearOff<T extends self::Class4<self::Class4::_#new#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#new#tearOff::T>
+    return self::Class4::•<self::Class4::_#new#tearOff::T>();
+}
+class Class4int extends self::Class4<self::Class4int> {
+  constructor _() → self::Class4int
+    : super self::Class4::_()
+    ;
+  static method _#_#tearOff() → self::Class4int
+    return new self::Class4int::_();
+  static factory •() → self::Class4int
+    return new self::Class4int::_();
+  static method _#new#tearOff() → self::Class4int
+    return self::Class4int::•();
+}
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+  core::print("inSoundMode: ${self::inSoundMode}");
+  self::testGeneric();
+  self::testBounded();
+}
+static method testGeneric() → dynamic {
+  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C1;
+  self::Class1<dynamic> c1a = f1a<dynamic>(){() → self::Class1<dynamic>};
+  self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
+  self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
+  self::Class1<core::int> c1b = f1a<core::int>(){() → self::Class1<core::int>};
+  self::expect(true, c1b is{ForNonNullableByDefault} self::Class1<core::int>);
+  self::expect(false, c1b is{ForNonNullableByDefault} self::Class1<core::String>);
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
+    f1a<int, String>(); // error
+       ^" in f1a{<inapplicable>}.<core::int, core::String>();
+  };
+  () → self::Class1<core::int> f1b = f1a<core::int>;
+  self::Class1<core::int> c1c = f1b(){() → self::Class1<core::int>};
+  self::expect(true, c1c is{ForNonNullableByDefault} self::Class1<core::int>);
+  self::expect(false, c1c is{ForNonNullableByDefault} self::Class1<core::String>);
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
+    f1b<int>(); // error
+       ^" in f1b{<inapplicable>}.<core::int>();
+  };
+  dynamic f1c = #C1;
+  dynamic c1d = f1c{dynamic}.call();
+  self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
+  self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
+  self::throws(() → dynamic => f1c{dynamic}.call<core::int, core::String>());
+}
+static method testBounded() → dynamic {
+  <T extends core::num>() → self::Class2<T> f2a = #C2;
+  self::Class2<core::num> c2a = f2a<core::num>(){() → self::Class2<core::num>};
+  self::expect(true, c2a is{ForNonNullableByDefault} self::Class2<core::num>);
+  self::expect(false, c2a is{ForNonNullableByDefault} self::Class2<core::int>);
+  self::Class2<core::int> c2b = f2a<core::int>(){() → self::Class2<core::int>};
+  self::expect(true, c2b is{ForNonNullableByDefault} self::Class2<core::int>);
+  self::expect(false, c2b is{ForNonNullableByDefault} self::Class2<core::double>);
+  () → Null {
+    f2a<core::String>(){() → self::Class2<core::String>};
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
+    f2a<int, String>(); // error
+       ^" in f2a{<inapplicable>}.<core::int, core::String>();
+  };
+  dynamic f2b = #C2;
+  dynamic c2c = f2b{dynamic}.call();
+  self::expect(true, c2c is{ForNonNullableByDefault} self::Class2<core::num>);
+  self::expect(false, c2c is{ForNonNullableByDefault} self::Class2<core::int>);
+  dynamic c2d = f2b{dynamic}.call<core::int>();
+  self::expect(true, c2d is{ForNonNullableByDefault} self::Class2<core::int>);
+  self::expect(false, c2d is{ForNonNullableByDefault} self::Class2<core::double>);
+  self::throws(() → dynamic => f2b{dynamic}.call<core::String>());
+  self::throws(() → dynamic => f2b{dynamic}.call<core::int, core::String>());
+  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C3;
+  self::Class3<dynamic, dynamic> c3a = f3a<dynamic, dynamic>(){() → self::Class3<dynamic, dynamic>};
+  self::expect(true, c3a is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
+  self::expect(false, c3a is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
+  self::Class3<core::int, core::num> c3b = f3a<core::int, core::num>(){() → self::Class3<core::int, core::num>};
+  self::expect(true, c3b is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
+  self::expect(false, c3b is{ForNonNullableByDefault} self::Class3<core::double, core::num>);
+  () → Null {
+    f3a<core::num, core::int>(){() → self::Class3<core::num, core::int>};
+  };
+  dynamic f3b = #C3;
+  dynamic c3c = f3b{dynamic}.call();
+  self::expect(true, c3c is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
+  self::expect(false, c3c is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
+  dynamic c3d = f3b{dynamic}.call<core::int, core::num>();
+  self::expect(true, c3d is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
+  self::expect(false, c3d is{ForNonNullableByDefault} self::Class3<core::double, core::num>);
+  self::throws(() → dynamic => f3b{dynamic}.call<core::num, core::int>());
+  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C4;
+  () → Null {
+    self::Class4<self::Class4<core::Object?>> c4a = f4a<self::Class4<core::Object?>>(){() → self::Class4<self::Class4<core::Object?>>};
+  };
+  dynamic f4b = #C4;
+  self::throws(() → dynamic => f4b{dynamic}.call());
+  dynamic c4b = f4b{dynamic}.call<self::Class4int>();
+  self::expect(true, c4b is{ForNonNullableByDefault} self::Class4<self::Class4int>);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C5}) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print("Thrown: ${e}");
+    return;
+  }
+  if(!self::inSoundMode && inSoundModeOnly) {
+    return;
+  }
+  throw "Expected exception";
+}
+
+constants  {
+  #C1 = static-tearoff self::Class1::_#new#tearOff
+  #C2 = static-tearoff self::Class2::_#new#tearOff
+  #C3 = static-tearoff self::Class3::_#new#tearOff
+  #C4 = static-tearoff self::Class4::_#new#tearOff
+  #C5 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..81c7cd2
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart.weak.modular.expect
@@ -0,0 +1,210 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
+//     f1a<int, String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
+//     f1b<int>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:74:8: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try changing type arguments so that they conform to the bounds.
+//     f2a<String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
+//     f2a<int, String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:96:8: Error: Type argument 'num' doesn't conform to the bound 'S' of the type variable 'T' on 'call'.
+// Try changing type arguments so that they conform to the bounds.
+//     f3a<num, int>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:110:18: Error: Inferred type argument 'Class4<Object?>' doesn't conform to the bound 'Class4<T>' of the type variable 'T' on 'call'.
+//  - 'Class4' is from 'pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     var c4a = f4a(); // error
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor _() → self::Class1<self::Class1::T%>
+    : super core::Object::•()
+    ;
+  static method _#_#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#_#tearOff::T%>
+    return new self::Class1::_<self::Class1::_#_#tearOff::T%>();
+  static factory •<T extends core::Object? = dynamic>() → self::Class1<self::Class1::•::T%>
+    return new self::Class1::_<self::Class1::•::T%>();
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class1<self::Class1::_#new#tearOff::T%>
+    return new self::Class1::_<self::Class1::_#new#tearOff::T%>();
+}
+class Class2<T extends core::num> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor _() → self::Class2<self::Class2::T>
+    : super core::Object::•()
+    ;
+  static method _#_#tearOff<T extends core::num>() → self::Class2<self::Class2::_#_#tearOff::T>
+    return new self::Class2::_<self::Class2::_#_#tearOff::T>();
+  static factory •<T extends core::num>() → self::Class2<self::Class2::•::T>
+    return new self::Class2::_<self::Class2::•::T>();
+  static method _#new#tearOff<T extends core::num>() → self::Class2<self::Class2::_#new#tearOff::T>
+    return new self::Class2::_<self::Class2::_#new#tearOff::T>();
+}
+class Class3<T extends self::Class3::S% = dynamic, S extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
+  constructor _() → self::Class3<self::Class3::T%, self::Class3::S%>
+    : super core::Object::•()
+    ;
+  static method _#_#tearOff<T extends self::Class3::_#_#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>
+    return new self::Class3::_<self::Class3::_#_#tearOff::T%, self::Class3::_#_#tearOff::S%>();
+  static factory •<T extends self::Class3::•::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::•::T%, self::Class3::•::S%>
+    return new self::Class3::_<self::Class3::•::T%, self::Class3::•::S%>();
+  static method _#new#tearOff<T extends self::Class3::_#new#tearOff::S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>
+    return new self::Class3::_<self::Class3::_#new#tearOff::T%, self::Class3::_#new#tearOff::S%>();
+}
+class Class4<T extends self::Class4<self::Class4::T> = self::Class4<dynamic>> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _() → self::Class4<self::Class4::T>
+    : super core::Object::•()
+    ;
+  static method _#_#tearOff<T extends self::Class4<self::Class4::_#_#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#_#tearOff::T>
+    return new self::Class4::_<self::Class4::_#_#tearOff::T>();
+  static factory •<T extends self::Class4<self::Class4::•::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::•::T>
+    return new self::Class4::_<self::Class4::•::T>();
+  static method _#new#tearOff<T extends self::Class4<self::Class4::_#new#tearOff::T> = self::Class4<dynamic>>() → self::Class4<self::Class4::_#new#tearOff::T>
+    return new self::Class4::_<self::Class4::_#new#tearOff::T>();
+}
+class Class4int extends self::Class4<self::Class4int> {
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+  constructor _() → self::Class4int
+    : super self::Class4::_()
+    ;
+  static method _#_#tearOff() → self::Class4int
+    return new self::Class4int::_();
+  static factory •() → self::Class4int
+    return new self::Class4int::_();
+  static method _#new#tearOff() → self::Class4int
+    return new self::Class4int::_();
+}
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+  core::print("inSoundMode: ${self::inSoundMode}");
+  self::testGeneric();
+  self::testBounded();
+}
+static method testGeneric() → dynamic {
+  <T extends core::Object? = dynamic>() → self::Class1<T%> f1a = #C6;
+  self::Class1<dynamic> c1a = f1a<dynamic>(){() → self::Class1<dynamic>};
+  self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
+  self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
+  self::Class1<core::int> c1b = f1a<core::int>(){() → self::Class1<core::int>};
+  self::expect(true, c1b is{ForNonNullableByDefault} self::Class1<core::int>);
+  self::expect(false, c1b is{ForNonNullableByDefault} self::Class1<core::String>);
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:27:8: Error: Expected 1 type arguments.
+    f1a<int, String>(); // error
+       ^" in f1a{<inapplicable>}.<core::int, core::String>();
+  };
+  () → self::Class1<core::int> f1b = f1a<core::int>;
+  self::Class1<core::int> c1c = f1b(){() → self::Class1<core::int>};
+  self::expect(true, c1c is{ForNonNullableByDefault} self::Class1<core::int>);
+  self::expect(false, c1c is{ForNonNullableByDefault} self::Class1<core::String>);
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:35:8: Error: Expected 0 type arguments.
+    f1b<int>(); // error
+       ^" in f1b{<inapplicable>}.<core::int>();
+  };
+  dynamic f1c = #C6;
+  dynamic c1d = f1c{dynamic}.call();
+  self::expect(true, c1a is{ForNonNullableByDefault} self::Class1<dynamic>);
+  self::expect(false, c1a is{ForNonNullableByDefault} self::Class1<core::int>);
+  self::throws(() → dynamic => f1c{dynamic}.call<core::int, core::String>());
+}
+static method testBounded() → dynamic {
+  <T extends core::num>() → self::Class2<T> f2a = #C7;
+  self::Class2<core::num> c2a = f2a<core::num>(){() → self::Class2<core::num>};
+  self::expect(true, c2a is{ForNonNullableByDefault} self::Class2<core::num>);
+  self::expect(false, c2a is{ForNonNullableByDefault} self::Class2<core::int>);
+  self::Class2<core::int> c2b = f2a<core::int>(){() → self::Class2<core::int>};
+  self::expect(true, c2b is{ForNonNullableByDefault} self::Class2<core::int>);
+  self::expect(false, c2b is{ForNonNullableByDefault} self::Class2<core::double>);
+  () → Null {
+    f2a<core::String>(){() → self::Class2<core::String>};
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/generic_redirecting_factory_tear_off.dart:75:8: Error: Expected 1 type arguments.
+    f2a<int, String>(); // error
+       ^" in f2a{<inapplicable>}.<core::int, core::String>();
+  };
+  dynamic f2b = #C7;
+  dynamic c2c = f2b{dynamic}.call();
+  self::expect(true, c2c is{ForNonNullableByDefault} self::Class2<core::num>);
+  self::expect(false, c2c is{ForNonNullableByDefault} self::Class2<core::int>);
+  dynamic c2d = f2b{dynamic}.call<core::int>();
+  self::expect(true, c2d is{ForNonNullableByDefault} self::Class2<core::int>);
+  self::expect(false, c2d is{ForNonNullableByDefault} self::Class2<core::double>);
+  self::throws(() → dynamic => f2b{dynamic}.call<core::String>());
+  self::throws(() → dynamic => f2b{dynamic}.call<core::int, core::String>());
+  <T extends S% = dynamic, S extends core::Object? = dynamic>() → self::Class3<T%, S%> f3a = #C8;
+  self::Class3<dynamic, dynamic> c3a = f3a<dynamic, dynamic>(){() → self::Class3<dynamic, dynamic>};
+  self::expect(true, c3a is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
+  self::expect(false, c3a is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
+  self::Class3<core::int, core::num> c3b = f3a<core::int, core::num>(){() → self::Class3<core::int, core::num>};
+  self::expect(true, c3b is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
+  self::expect(false, c3b is{ForNonNullableByDefault} self::Class3<core::double, core::num>);
+  () → Null {
+    f3a<core::num, core::int>(){() → self::Class3<core::num, core::int>};
+  };
+  dynamic f3b = #C8;
+  dynamic c3c = f3b{dynamic}.call();
+  self::expect(true, c3c is{ForNonNullableByDefault} self::Class3<dynamic, dynamic>);
+  self::expect(false, c3c is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
+  dynamic c3d = f3b{dynamic}.call<core::int, core::num>();
+  self::expect(true, c3d is{ForNonNullableByDefault} self::Class3<core::int, core::num>);
+  self::expect(false, c3d is{ForNonNullableByDefault} self::Class3<core::double, core::num>);
+  self::throws(() → dynamic => f3b{dynamic}.call<core::num, core::int>());
+  <T extends self::Class4<T> = self::Class4<dynamic>>() → self::Class4<T> f4a = #C9;
+  () → Null {
+    self::Class4<self::Class4<core::Object?>> c4a = f4a<self::Class4<core::Object?>>(){() → self::Class4<self::Class4<core::Object?>>};
+  };
+  dynamic f4b = #C9;
+  self::throws(() → dynamic => f4b{dynamic}.call());
+  dynamic c4b = f4b{dynamic}.call<self::Class4int>();
+  self::expect(true, c4b is{ForNonNullableByDefault} self::Class4<self::Class4int>);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C10}) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print("Thrown: ${e}");
+    return;
+  }
+  if(!self::inSoundMode && inSoundModeOnly) {
+    return;
+  }
+  throw "Expected exception";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::•
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = constructor-tearoff self::Class4int::•
+  #C6 = static-tearoff self::Class1::_#new#tearOff
+  #C7 = static-tearoff self::Class2::_#new#tearOff
+  #C8 = static-tearoff self::Class3::_#new#tearOff
+  #C9 = static-tearoff self::Class4::_#new#tearOff
+  #C10 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..da67936
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart.weak.modular.expect
@@ -0,0 +1,97 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//     f1a(''); // error
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//     f2a(''); // error
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::Class1
+    : self::Class1::field = field, super core::Object::•()
+    ;
+  static method _#new#tearOff(core::int field) → self::Class1
+    return new self::Class1::•(field);
+}
+abstract class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  abstract get field() → core::int;
+}
+class Class2 extends core::Object implements self::Interface2 {
+  final field core::int field;
+  constructor •(core::int field) → self::Class2
+    : self::Class2::field = field, super core::Object::•()
+    ;
+  static method _#new#tearOff(core::int field) → self::Class2
+    return new self::Class2::•(field);
+}
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static field (core::int) → self::Class1 Class1_new = #C1;
+static field (core::int) → self::Class2 Class2_new = #C2;
+static method main() → dynamic {
+  core::print("inSoundMode: ${self::inSoundMode}");
+  self::testInferred();
+}
+static method testInferred() → dynamic {
+  (core::int) → self::Class1 f1a = #C1;
+  self::expect(true, f1a is{ForNonNullableByDefault} (core::int) → self::Class1);
+  self::expect(false, f1a is{ForNonNullableByDefault} (core::String) → self::Class1);
+  self::Class1 c1a = f1a(0){(core::int) → self::Class1};
+  self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
+  () → Null {
+    f1a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f1a(''); // error
+        ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1};
+  };
+  dynamic f1b = #C1;
+  dynamic c1b = f1b{dynamic}.call(0);
+  self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
+  self::throws(() → dynamic => f1b{dynamic}.call(""));
+  (core::int) → self::Class2 f2a = #C2;
+  self::expect(true, f2a is{ForNonNullableByDefault} (core::int) → self::Class2);
+  self::expect(false, f2a is{ForNonNullableByDefault} (core::String) → self::Class2);
+  self::Class2 c2a = f2a(0){(core::int) → self::Class2};
+  self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
+  () → Null {
+    f2a(invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+    f2a(''); // error
+        ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2};
+  };
+  dynamic f2b = #C2;
+  dynamic c2b = f2b{dynamic}.call(0);
+  self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
+  self::throws(() → dynamic => f2b{dynamic}.call(""));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C3}) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print("Thrown: ${e}");
+    return;
+  }
+  if(!self::inSoundMode && inSoundModeOnly) {
+    return;
+  }
+  throw "Expected exception";
+}
+
+constants  {
+  #C1 = static-tearoff self::Class1::_#new#tearOff
+  #C2 = static-tearoff self::Class2::_#new#tearOff
+  #C3 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.modular.expect
new file mode 100644
index 0000000..6075c15
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_non_proper_rename.dart.weak.modular.expect
@@ -0,0 +1,106 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<X extends core::num> = self::A<X>;
+typedef G<unrelated Y extends core::Object? = dynamic> = self::A<core::int>;
+typedef H<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic> = self::A<X%>;
+class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::T%>
+    return new self::A::•<self::A::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
+    return new self::A::•<self::A::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
+    return self::A::fact<self::A::_#fact#tearOff::T%>();
+  static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
+    return new self::A::•<self::A::redirect::T%>();
+  static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
+    return new self::A::•<self::A::_#redirect#tearOff::T%>();
+}
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static const field () → self::A<core::int> f1a = #C3;
+static const field () → self::A<core::int> f1b = #C3;
+static const field () → self::A<core::int> f1c = #C3;
+static const field () → self::A<core::int> f1d = #C5;
+static const field () → self::A<core::int> f1e = #C5;
+static const field () → self::A<core::int> f1f = #C5;
+static const field () → self::A<core::int> f1g = #C7;
+static const field () → self::A<core::int> f1h = #C7;
+static const field () → self::A<core::int> f1i = #C7;
+static const field () → self::A<core::int> g1a = #C3;
+static const field () → self::A<core::int> g1b = #C3;
+static const field () → self::A<core::int> g1c = #C3;
+static const field () → self::A<core::int> h1a = #C3;
+static const field () → self::A<core::int> h1b = #C3;
+static const field () → self::A<core::int> h1c = #C3;
+static method main() → dynamic {
+  self::test<core::int>();
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C5, #C5);
+  core::identical(#C5, #C5);
+  core::identical(#C7, #C7);
+  core::identical(#C7, #C7);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+  core::identical(#C3, #C3);
+}
+static method test<T extends core::num>() → dynamic {
+  () → self::A<self::test::T> f2a = #C2<self::test::T>;
+  () → self::A<self::test::T> f2b = #C2<self::test::T>;
+  () → self::A<self::test::T> f2c = #C2<self::test::T>;
+  () → self::A<self::test::T> f2d = #C4<self::test::T>;
+  () → self::A<self::test::T> f2e = #C4<self::test::T>;
+  () → self::A<self::test::T> f2f = #C4<self::test::T>;
+  () → self::A<self::test::T> f2g = #C6<self::test::T>;
+  () → self::A<self::test::T> f2h = #C6<self::test::T>;
+  () → self::A<self::test::T> f2i = #C6<self::test::T>;
+  () → self::A<core::int> g2a = #C3;
+  () → self::A<core::int> g2b = #C3;
+  () → self::A<core::int> g2c = #C3;
+  () → self::A<self::test::T> h2a = #C2<self::test::T>;
+  () → self::A<self::test::T> h2b = #C2<self::test::T>;
+  () → self::A<self::test::T> h2c = #C2<self::test::T>;
+  self::expect(#C3, g2a);
+  self::expect(g2a, g2b);
+  if(self::inSoundMode) {
+    self::expect(g2a, g2c);
+  }
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method _#F#new#tearOff<X extends core::num>() → self::A<self::_#F#new#tearOff::X>
+  return new self::A::•<self::_#F#new#tearOff::X>();
+static method _#F#fact#tearOff<X extends core::num>() → self::A<self::_#F#fact#tearOff::X>
+  return self::A::fact<self::_#F#fact#tearOff::X>();
+static method _#F#redirect#tearOff<X extends core::num>() → self::A<self::_#F#redirect#tearOff::X>
+  return self::A::_#redirect#tearOff<self::_#F#redirect#tearOff::X>();
+static method _#G#new#tearOff<unrelated Y extends core::Object? = dynamic>() → self::A<core::int>
+  return new self::A::•<core::int>();
+static method _#G#fact#tearOff<unrelated Y extends core::Object? = dynamic>() → self::A<core::int>
+  return self::A::fact<core::int>();
+static method _#G#redirect#tearOff<unrelated Y extends core::Object? = dynamic>() → self::A<core::int>
+  return self::A::_#redirect#tearOff<core::int>();
+static method _#H#new#tearOff<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic>() → self::A<self::_#H#new#tearOff::X%>
+  return new self::A::•<self::_#H#new#tearOff::X%>();
+static method _#H#fact#tearOff<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic>() → self::A<self::_#H#fact#tearOff::X%>
+  return self::A::fact<self::_#H#fact#tearOff::X%>();
+static method _#H#redirect#tearOff<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic>() → self::A<self::_#H#redirect#tearOff::X%>
+  return self::A::_#redirect#tearOff<self::_#H#redirect#tearOff::X%>();
+
+constants  {
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = static-tearoff self::A::_#new#tearOff
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = static-tearoff self::A::_#fact#tearOff
+  #C5 = instantiation #C4 <core::int*>
+  #C6 = static-tearoff self::A::_#redirect#tearOff
+  #C7 = instantiation #C6 <core::int*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..3414686
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<unrelated T extends core::Object? = dynamic> = self::A;
+typedef G<unrelated T extends core::num> = self::B<dynamic>;
+class A extends core::Object {
+  field core::int field1 = 0;
+  constructor •(core::int field1) → self::A
+    : self::A::field1 = field1, super core::Object::•()
+    ;
+  constructor named(core::int field1) → self::A
+    : self::A::field1 = field1, super core::Object::•()
+    ;
+  static method _#new#tearOff(core::int field1) → self::A
+    return new self::A::•(field1);
+  static method _#named#tearOff(core::int field1) → self::A
+    return new self::A::named(field1);
+}
+class B<T extends core::Object? = dynamic> extends core::Object implements self::A {
+  field core::int field1;
+  covariant-by-class field self::B::T% field2;
+  constructor •(core::int field1, self::B::T% field2) → self::B<self::B::T%>
+    : self::B::field1 = field1, self::B::field2 = field2, super core::Object::•()
+    ;
+  constructor named(core::int field1, self::B::T% field2) → self::B<self::B::T%>
+    : self::B::field1 = field1, self::B::field2 = field2, super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>(core::int field1, self::B::_#new#tearOff::T% field2) → self::B<self::B::_#new#tearOff::T%>
+    return new self::B::•<self::B::_#new#tearOff::T%>(field1, field2);
+  static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field1, self::B::_#named#tearOff::T% field2) → self::B<self::B::_#named#tearOff::T%>
+    return new self::B::named<self::B::_#named#tearOff::T%>(field1, field2);
+}
+static field (core::int) → self::A A_new = #C1;
+static field <T extends core::Object? = dynamic>(core::int, T%) → self::B<T%> B_new = #C2;
+static field <unrelated T extends core::Object? = dynamic>(core::int) → self::A F_new = #C3;
+static field <unrelated T extends core::num>(core::int, dynamic) → self::B<dynamic> G_new = #C4;
+static field (core::int) → self::A A_named = #C5;
+static field (core::int, core::int) → self::B<core::int> B_named = #C7;
+static field <unrelated T extends core::Object? = dynamic>(core::int) → self::A F_named = #C8;
+static field (core::int, dynamic) → self::B<dynamic> G_named = #C9;
+static method main() → dynamic {}
+static method _#F#new#tearOff<unrelated T extends core::Object? = dynamic>(core::int field1) → self::A
+  return new self::A::•(field1);
+static method _#F#named#tearOff<unrelated T extends core::Object? = dynamic>(core::int field1) → self::A
+  return new self::A::named(field1);
+static method _#G#new#tearOff<unrelated T extends core::num>(core::int field1, dynamic field2) → self::B<dynamic>
+  return new self::B::•<dynamic>(field1, field2);
+static method _#G#named#tearOff<unrelated T extends core::num>(core::int field1, dynamic field2) → self::B<dynamic>
+  return new self::B::named<dynamic>(field1, field2);
+
+constants  {
+  #C1 = static-tearoff self::A::_#new#tearOff
+  #C2 = static-tearoff self::B::_#new#tearOff
+  #C3 = static-tearoff self::_#F#new#tearOff
+  #C4 = static-tearoff self::_#G#new#tearOff
+  #C5 = static-tearoff self::A::_#named#tearOff
+  #C6 = static-tearoff self::B::_#named#tearOff
+  #C7 = instantiation #C6 <core::int*>
+  #C8 = static-tearoff self::_#F#named#tearOff
+  #C9 = instantiation #C6 <dynamic>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.modular.expect
new file mode 100644
index 0000000..2a6bd0b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/issue47462.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length = #C7]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable = #C2}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable = #C2}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable = #C1}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num*>
+  #C5 = static-tearoff self::_#MyList#filled#tearOff
+  #C6 = instantiation #C5 <core::num*>
+  #C7 = null
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.modular.expect
new file mode 100644
index 0000000..309b5f6
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart.weak.modular.expect
@@ -0,0 +1,116 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:15:8: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   A.new<int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:16:10: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   A.named<int>;
+//          ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:17:9: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   A.fact<int>;
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:18:13: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   A.redirect<int>;
+//             ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:19:8: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   B.new<int>;
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:20:10: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   B.named<int>;
+//          ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:21:9: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   B.fact<int>;
+//         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:22:13: Error: A constructor tear-off can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   B.redirect<int>;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef B<T extends core::num> = self::A<T>;
+class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::T%>
+    return new self::A::•<self::A::_#new#tearOff::T%>();
+  static method _#named#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#named#tearOff::T%>
+    return new self::A::named<self::A::_#named#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
+    return new self::A::•<self::A::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
+    return self::A::fact<self::A::_#fact#tearOff::T%>();
+  static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
+    return new self::A::•<self::A::redirect::T%>();
+  static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
+    return new self::A::•<self::A::_#redirect#tearOff::T%>();
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:15:8: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  A.new<int>;
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:16:10: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  A.named<int>;
+         ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:17:9: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  A.fact<int>;
+        ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:18:13: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  A.redirect<int>;
+            ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:19:8: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  B.new<int>;
+       ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:20:10: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  B.named<int>;
+         ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:21:9: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  B.fact<int>;
+        ^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/misplaced_type_arguments.dart:22:13: Error: A constructor tear-off can't have type arguments after the constructor name.
+Try removing the type arguments or placing them after the class name.
+  B.redirect<int>;
+            ^";
+}
+static method main() → dynamic {}
+static method _#B#new#tearOff<T extends core::num>() → self::A<self::_#B#new#tearOff::T>
+  return new self::A::•<self::_#B#new#tearOff::T>();
+static method _#B#named#tearOff<T extends core::num>() → self::A<self::_#B#named#tearOff::T>
+  return new self::A::named<self::_#B#named#tearOff::T>();
+static method _#B#fact#tearOff<T extends core::num>() → self::A<self::_#B#fact#tearOff::T>
+  return self::A::fact<self::_#B#fact#tearOff::T>();
+static method _#B#redirect#tearOff<T extends core::num>() → self::A<self::_#B#redirect#tearOff::T>
+  return self::A::_#redirect#tearOff<self::_#B#redirect#tearOff::T>();
+
+constants  {
+  #C1 = constructor-tearoff self::A::redirect
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.modular.expect
new file mode 100644
index 0000000..f19d273
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:10:23: Error: Redirection constructor target not found: 'Class.nonexisting'
+//   factory Class.a() = Class.nonexisting;
+//                       ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:11:23: Error: Redirection constructor target not found: 'Class.constructor'
+//   factory Class.b() = Class.constructor;
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  static field () → self::Class field = () → self::Class => new self::Class::_();
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
+  constructor _() → self::Class
+    : super core::Object::•()
+    ;
+  static method _#_#tearOff() → self::Class
+    return new self::Class::_();
+  static method constructor() → self::Class
+    return new self::Class::_();
+  static factory a() → self::Class
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:10:23: Error: Redirection constructor target not found: 'Class.nonexisting'
+  factory Class.a() = Class.nonexisting;
+                      ^";
+  static method _#a#tearOff() → self::Class;
+  static factory b() → self::Class
+    return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/missing_redirecting_target.dart:11:23: Error: Redirection constructor target not found: 'Class.constructor'
+  factory Class.b() = Class.constructor;
+                      ^";
+  static method _#b#tearOff() → self::Class;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::a
+  #C2 = constructor-tearoff self::Class::b
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect
new file mode 100644
index 0000000..841838c
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart.weak.modular.expect
@@ -0,0 +1,146 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+//   NamedMixinApplication.fact;
+//                         ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+//   NamedMixinApplication.redirectingFactory;
+//                         ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.new;
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.named;
+//                                 ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.redirectingGenerative;
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+//   AbstractNamedMixinApplication.fact;
+//                                 ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+//   AbstractNamedMixinApplication.redirectingFactory;
+//                                 ^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get field() → core::int;
+}
+class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
+  field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor named(core::int field) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
+    : this self::Class::•(field)
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>([core::int field = #C2]) → self::Class<self::Class::_#new#tearOff::T%>
+    return new self::Class::•<self::Class::_#new#tearOff::T%>(field);
+  static method _#named#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#named#tearOff::T%>
+    return new self::Class::named<self::Class::_#named#tearOff::T%>(field);
+  static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#redirectingGenerative#tearOff::T%>
+    return new self::Class::redirectingGenerative<self::Class::_#redirectingGenerative#tearOff::T%>(field);
+  static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
+    return new self::Class::•<self::Class::fact::T%>(field);
+  static method _#fact#tearOff<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::_#fact#tearOff::T%>
+    return self::Class::fact<self::Class::_#fact#tearOff::T%>(field);
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+    return new self::Class::•<self::Class::redirectingFactory::T%>(field);
+  static method _#redirectingFactory#tearOff<T extends core::Object? = dynamic>(core::int field = #C2) → self::Class<self::Class::_#redirectingFactory#tearOff::T%>
+    return new self::Class::•<self::Class::_#redirectingFactory#tearOff::T%>(field);
+}
+abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int field]) → self::NamedMixinApplication<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>
+    return new self::NamedMixinApplication::•<self::NamedMixinApplication::_#new#tearOff::T%, self::NamedMixinApplication::_#new#tearOff::S%>(field);
+  static method _#named#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>
+    return new self::NamedMixinApplication::named<self::NamedMixinApplication::_#named#tearOff::T%, self::NamedMixinApplication::_#named#tearOff::S%>(field);
+  static method _#redirectingGenerative#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>
+    return new self::NamedMixinApplication::redirectingGenerative<self::NamedMixinApplication::_#redirectingGenerative#tearOff::T%, self::NamedMixinApplication::_#redirectingGenerative#tearOff::S%>(field);
+}
+abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+  NamedMixinApplication.fact;
+                        ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+  NamedMixinApplication.redirectingFactory;
+                        ^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.new;
+                                ^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.named;
+                                ^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.redirectingGenerative;
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+  AbstractNamedMixinApplication.fact;
+                                ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+  AbstractNamedMixinApplication.redirectingFactory;
+                                ^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+  #C6;
+  #C7;
+  #C8;
+  ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = static-tearoff self::NamedMixinApplication::_#new#tearOff
+  #C4 = static-tearoff self::NamedMixinApplication::_#named#tearOff
+  #C5 = static-tearoff self::NamedMixinApplication::_#redirectingGenerative#tearOff
+  #C6 = instantiation #C3 <core::int*, core::String*>
+  #C7 = instantiation #C4 <core::int*, core::String*>
+  #C8 = instantiation #C5 <core::int*, core::String*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.weak.modular.expect
new file mode 100644
index 0000000..715328b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/non_class_typedefs.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef S1<unrelated T extends core::Object? = dynamic> = dynamic;
+typedef S2<unrelated T extends core::Object? = dynamic> = Null;
+typedef S3<unrelated T extends core::Object? = dynamic> = void;
+typedef S4<unrelated T extends core::Object? = dynamic> = FutureOr<dynamic>;
+typedef S5<T extends core::Object? = dynamic> = FutureOr<T%>;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.modular.expect
new file mode 100644
index 0000000..b2e567f
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/proper_rename.dart.weak.modular.expect
@@ -0,0 +1,108 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F = self::A;
+typedef G0 = self::B<dynamic>;
+typedef G1 = self::B<core::int>;
+typedef G2<T extends core::Object? = dynamic> = self::B<T%>;
+typedef G3<T extends core::num> = self::B<T>;
+typedef H0 = self::C<dynamic, dynamic>;
+typedef H1 = self::C<core::int, core::String>;
+typedef H2<T extends core::Object? = dynamic> = self::C<core::int, T%>;
+typedef H3<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::C<T%, S%>;
+typedef H4<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::C<S%, T%>;
+typedef H5<T extends core::num, S extends core::Object? = dynamic> = self::C<T, S%>;
+typedef H6<T extends core::Object? = dynamic, S extends core::num> = self::C<T%, S>;
+typedef I0 = self::D<core::num>;
+typedef I1 = self::D<core::num>;
+typedef I2<T extends core::num> = self::D<T>;
+typedef I3<T extends core::int> = self::D<T>;
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::A
+    return new self::A::•();
+}
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::B<self::B::_#new#tearOff::T%>
+    return new self::B::•<self::B::_#new#tearOff::T%>();
+}
+class C<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::X%, self::C::_#new#tearOff::Y%>
+    return new self::C::•<self::C::_#new#tearOff::X%, self::C::_#new#tearOff::Y%>();
+}
+class D<X extends core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<X extends core::num>() → self::D<self::D::_#new#tearOff::X>
+    return new self::D::•<self::D::_#new#tearOff::X>();
+}
+static method main() → dynamic {
+  () → self::A f = #C1;
+  () → self::B<dynamic> g0 = #C3;
+  () → self::B<core::int> g1 = #C4;
+  <T extends core::Object? = dynamic>() → self::B<T%> g2a = #C2;
+  () → self::B<core::int> g2b = #C4;
+  <T extends core::num>() → self::B<T> g3a = #C5;
+  () → self::B<core::int> g3b = #C4;
+  () → self::C<dynamic, dynamic> h0 = #C7;
+  () → self::C<core::int, core::String> h1 = #C8;
+  <T extends core::Object? = dynamic>() → self::C<core::int, T%> h2a = #C9;
+  () → self::C<core::int, core::int> h2b = #C10;
+  <X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → self::C<X%, Y%> h3a = #C6;
+  () → self::C<core::int, core::String> h3b = #C8;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>() → self::C<S%, T%> h4a = #C11;
+  () → self::C<core::String, core::int> h4b = #C12;
+  <T extends core::num, S extends core::Object? = dynamic>() → self::C<T, S%> h5a = #C13;
+  () → self::C<core::int, core::String> h5b = #C8;
+  <T extends core::Object? = dynamic, S extends core::num>() → self::C<T%, S> h6a = #C14;
+  () → self::C<core::String, core::int> h6b = #C12;
+  () → self::D<core::num> i0 = #C16;
+  () → self::D<core::num> i1 = #C16;
+  <X extends core::num>() → self::D<X> i2a = #C15;
+  () → self::D<core::int> i2b = #C17;
+  <T extends core::int>() → self::D<T> i3a = #C18;
+  () → self::D<core::int> i3b = #C17;
+}
+static method _#G3#new#tearOff<T extends core::num>() → self::B<self::_#G3#new#tearOff::T>
+  return new self::B::•<self::_#G3#new#tearOff::T>();
+static method _#H2#new#tearOff<T extends core::Object? = dynamic>() → self::C<core::int, self::_#H2#new#tearOff::T%>
+  return new self::C::•<core::int, self::_#H2#new#tearOff::T%>();
+static method _#H4#new#tearOff<T extends core::Object? = dynamic, S extends core::Object? = dynamic>() → self::C<self::_#H4#new#tearOff::S%, self::_#H4#new#tearOff::T%>
+  return new self::C::•<self::_#H4#new#tearOff::S%, self::_#H4#new#tearOff::T%>();
+static method _#H5#new#tearOff<T extends core::num, S extends core::Object? = dynamic>() → self::C<self::_#H5#new#tearOff::T, self::_#H5#new#tearOff::S%>
+  return new self::C::•<self::_#H5#new#tearOff::T, self::_#H5#new#tearOff::S%>();
+static method _#H6#new#tearOff<T extends core::Object? = dynamic, S extends core::num>() → self::C<self::_#H6#new#tearOff::T%, self::_#H6#new#tearOff::S>
+  return new self::C::•<self::_#H6#new#tearOff::T%, self::_#H6#new#tearOff::S>();
+static method _#I3#new#tearOff<T extends core::int>() → self::D<self::_#I3#new#tearOff::T>
+  return new self::D::•<self::_#I3#new#tearOff::T>();
+
+constants  {
+  #C1 = static-tearoff self::A::_#new#tearOff
+  #C2 = static-tearoff self::B::_#new#tearOff
+  #C3 = instantiation #C2 <dynamic>
+  #C4 = instantiation #C2 <core::int*>
+  #C5 = static-tearoff self::_#G3#new#tearOff
+  #C6 = static-tearoff self::C::_#new#tearOff
+  #C7 = instantiation #C6 <dynamic, dynamic>
+  #C8 = instantiation #C6 <core::int*, core::String*>
+  #C9 = static-tearoff self::_#H2#new#tearOff
+  #C10 = instantiation #C6 <core::int*, core::int*>
+  #C11 = static-tearoff self::_#H4#new#tearOff
+  #C12 = instantiation #C6 <core::String*, core::int*>
+  #C13 = static-tearoff self::_#H5#new#tearOff
+  #C14 = static-tearoff self::_#H6#new#tearOff
+  #C15 = static-tearoff self::D::_#new#tearOff
+  #C16 = instantiation #C15 <core::num*>
+  #C17 = instantiation #C15 <core::int*>
+  #C18 = static-tearoff self::_#I3#new#tearOff
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..214d583
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart.weak.modular.expect
@@ -0,0 +1,332 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:101:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f3a(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:102:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f3a(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:117:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f4a(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:131:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f5a(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:132:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+// Try removing the extra positional arguments.
+//     f5a(42, 87, 123); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f6a(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Required named parameter 'field3' must be provided.
+//     f6a(42); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:146:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f6a(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:147:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f6a(field1: 87, field2: 87); // error
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor _() → self::Class1
+    : super core::Object::•()
+    ;
+  static method _#_#tearOff() → self::Class1
+    return new self::Class1::_();
+  static factory •() → self::Class1
+    return new self::Class1::_();
+  static method _#new#tearOff() → self::Class1
+    return new self::Class1::_();
+}
+class Class2 extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor __() → self::Class2
+    : super core::Object::•()
+    ;
+  static method _#__#tearOff() → self::Class2
+    return new self::Class2::__();
+  static factory _() → self::Class2
+    return new self::Class2::__();
+  static method _#_#tearOff() → self::Class2
+    return self::Class2::_();
+  static factory named() → self::Class2
+    return self::Class2::_();
+  static method _#named#tearOff() → self::Class2
+    return self::Class2::_();
+}
+class Class3 extends core::Object {
+  final field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
+  constructor _(core::int field) → self::Class3
+    : self::Class3::field = field, super core::Object::•()
+    ;
+  static method _#_#tearOff(core::int field) → self::Class3
+    return new self::Class3::_(field);
+  static factory •(core::int field) → self::Class3
+    return new self::Class3::_(field);
+  static method _#new#tearOff(core::int field) → self::Class3
+    return new self::Class3::_(field);
+}
+class Class4 extends core::Object {
+  final field core::int? field;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
+    : self::Class4::field = field, super core::Object::•()
+    ;
+  static method _#_#tearOff([core::int? field = #C5]) → self::Class4
+    return new self::Class4::_(field);
+  static factory •([core::int? field = #C5]) → self::Class4
+    return new self::Class4::_(field);
+  static method _#new#tearOff([core::int? field = #C5]) → self::Class4
+    return new self::Class4::_(field);
+}
+class Class5 extends core::Object {
+  final field core::int field1;
+  final field core::int? field2;
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
+    : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
+    ;
+  static method _#_#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
+    return new self::Class5::_(field1, field2);
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
+    return new self::Class5::_(field1, field2);
+  static method _#new#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
+    return new self::Class5::_(field1, field2);
+}
+class Class6 extends core::Object {
+  final field core::int field1;
+  final field core::int? field2;
+  final field core::int field3;
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
+    : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
+    ;
+  static method _#_#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
+    return new self::Class6::_(field1, field2: field2, field3: field3);
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
+    return new self::Class6::_(field1, field2: field2, field3: field3);
+  static method _#new#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
+    return new self::Class6::_(field1, field2: field2, field3: field3);
+}
+class Class7a extends core::Object implements self::Class7b {
+  constructor •() → self::Class7a
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::Class7a
+    return new self::Class7a::•();
+}
+class Class7b extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
+  static factory •() → self::Class7b
+    return new self::Class7a::•();
+  static method _#new#tearOff() → self::Class7b
+    return new self::Class7a::•();
+}
+class Class8a<T extends core::Object? = dynamic> extends core::Object implements self::Class8b<self::Class8a::T%> {
+  constructor •() → self::Class8a<self::Class8a::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::_#new#tearOff::T%>
+    return new self::Class8a::•<self::Class8a::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::fact::T%>
+    return new self::Class8a::•<self::Class8a::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::_#fact#tearOff::T%>
+    return self::Class8a::fact<self::Class8a::_#fact#tearOff::T%>();
+}
+class Class8b<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C9, #C10]/*isLegacy*/;
+  static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
+    return new self::Class8a::•<self::Class8b::•::T%>();
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
+    return new self::Class8a::•<self::Class8b::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::fact::T%>
+    return self::Class8a::fact<self::Class8b::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#fact#tearOff::T%>
+    return self::Class8a::fact<self::Class8b::_#fact#tearOff::T%>();
+}
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+  core::print("inSoundMode: ${self::inSoundMode}");
+  self::testNoArgs();
+  self::testArgs();
+}
+static method testNoArgs() → dynamic {
+  () → self::Class1 f1a = #C11;
+  self::Class1 c1a = f1a(){() → self::Class1};
+  self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
+  dynamic f1b = #C11;
+  dynamic c1b = f1b{dynamic}.call();
+  self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
+  self::expect(true, core::identical(f1a, f1b));
+  () → self::Class2 f2a = #C12;
+  self::Class2 c2a = f2a(){() → self::Class2};
+  self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
+  dynamic f2b = #C12;
+  dynamic c2b = f2b{dynamic}.call();
+  self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
+  self::expect(true, core::identical(f2a, f2b));
+}
+static method testArgs() → dynamic {
+  (core::int) → self::Class3 f3a = #C13;
+  self::Class3 c3a = f3a(42){(core::int) → self::Class3};
+  self::expect(42, c3a.{self::Class3::field}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:101:8: Error: Too few positional arguments: 1 required, 0 given.
+    f3a(); // error
+       ^" in f3a{<inapplicable>}.();
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:102:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f3a(42, 87); // error
+       ^" in f3a{<inapplicable>}.(42, 87);
+  };
+  dynamic f3b = #C13;
+  dynamic c3b = f3b{dynamic}.call(87);
+  self::expect(87, c3b{dynamic}.field);
+  self::throws(() → dynamic => f3b{dynamic}.call());
+  self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
+  ([core::int?]) → self::Class4 f4a = #C14;
+  self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
+  self::expect(null, c4a.{self::Class4::field}{core::int?});
+  self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
+  self::expect(42, c4b.{self::Class4::field}{core::int?});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:117:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f4a(42, 87); // error
+       ^" in f4a{<inapplicable>}.(42, 87);
+  };
+  dynamic f4b = #C14;
+  self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
+  (core::int, [core::int?]) → self::Class5 f5a = #C15;
+  self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
+  self::expect(42, c5a.{self::Class5::field1}{core::int});
+  self::expect(null, c5a.{self::Class5::field2}{core::int?});
+  self::Class5 c5b = f5a(87, 42){(core::int, [core::int?]) → self::Class5};
+  self::expect(87, c5b.{self::Class5::field1}{core::int});
+  self::expect(42, c5b.{self::Class5::field2}{core::int?});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:131:8: Error: Too few positional arguments: 1 required, 0 given.
+    f5a(); // error
+       ^" in f5a{<inapplicable>}.();
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:132:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+Try removing the extra positional arguments.
+    f5a(42, 87, 123); // error
+       ^" in f5a{<inapplicable>}.(42, 87, 123);
+  };
+  dynamic f5b = #C15;
+  self::throws(() → dynamic => f5b{dynamic}.call());
+  self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C16;
+  self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
+  self::expect(42, c6a.{self::Class6::field1}{core::int});
+  self::expect(null, c6a.{self::Class6::field2}{core::int?});
+  self::expect(87, c6a.{self::Class6::field3}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too few positional arguments: 1 required, 0 given.
+    f6a(); // error
+       ^" in f6a{<inapplicable>}.();
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Required named parameter 'field3' must be provided.
+    f6a(42); // error
+       ^" in f6a{<inapplicable>}.(42);
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:146:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f6a(42, 87); // error
+       ^" in f6a{<inapplicable>}.(42, 87);
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:147:8: Error: Too few positional arguments: 1 required, 0 given.
+    f6a(field1: 87, field2: 87); // error
+       ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
+  };
+  self::Class6 c6b = f6a(42, field2: 123, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
+  self::expect(42, c6b.{self::Class6::field1}{core::int});
+  self::expect(123, c6b.{self::Class6::field2}{core::int?});
+  self::expect(87, c6b.{self::Class6::field3}{core::int});
+  self::Class6 c6c = f6a(87, field3: 42, field2: 123){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
+  self::expect(87, c6c.{self::Class6::field1}{core::int});
+  self::expect(123, c6c.{self::Class6::field2}{core::int?});
+  self::expect(42, c6c.{self::Class6::field3}{core::int});
+  dynamic f6b = #C16;
+  self::throws(() → dynamic => f6b{dynamic}.call());
+  self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
+  self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
+  self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
+  () → self::Class7b f7a = #C17;
+  self::Class7b c7a = f7a(){() → self::Class7b};
+  self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
+  self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C18;
+  self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
+  self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
+  self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
+  self::Class8b<core::int> c8b = f8a<core::int>(){() → self::Class8b<core::int>};
+  self::expect(true, c8b is{ForNonNullableByDefault} self::Class8a<core::int>);
+  self::expect(true, c8b is{ForNonNullableByDefault} self::Class8b<core::int>);
+  self::expect(false, c8b is{ForNonNullableByDefault} self::Class8b<core::String>);
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C19;
+  self::Class8b<dynamic> c8c = f8b<dynamic>(){() → self::Class8b<dynamic>};
+  self::expect(true, c8c is{ForNonNullableByDefault} self::Class8a<dynamic>);
+  self::expect(true, c8c is{ForNonNullableByDefault} self::Class8b<dynamic>);
+  self::Class8b<core::int> c8d = f8b<core::int>(){() → self::Class8b<core::int>};
+  self::expect(true, c8d is{ForNonNullableByDefault} self::Class8a<core::int>);
+  self::expect(true, c8d is{ForNonNullableByDefault} self::Class8b<core::int>);
+  self::expect(false, c8d is{ForNonNullableByDefault} self::Class8b<core::String>);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print("Thrown: ${e}");
+    return;
+  }
+  if(!self::inSoundMode && inSoundModeOnly) {
+    return;
+  }
+  throw "Expected exception";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = constructor-tearoff self::Class8b::fact
+  #C11 = static-tearoff self::Class1::_#new#tearOff
+  #C12 = static-tearoff self::Class2::_#named#tearOff
+  #C13 = static-tearoff self::Class3::_#new#tearOff
+  #C14 = static-tearoff self::Class4::_#new#tearOff
+  #C15 = static-tearoff self::Class5::_#new#tearOff
+  #C16 = static-tearoff self::Class6::_#new#tearOff
+  #C17 = static-tearoff self::Class7b::_#new#tearOff
+  #C18 = static-tearoff self::Class8b::_#new#tearOff
+  #C19 = static-tearoff self::Class8b::_#fact#tearOff
+  #C20 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.modular.expect
new file mode 100644
index 0000000..8c398fe
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart.weak.modular.expect
@@ -0,0 +1,111 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f1a(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     f2a(87); // error
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  final field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor _([core::int field = #C2]) → self::Class1
+    : self::Class1::field = field, super core::Object::•()
+    ;
+  static method _#_#tearOff([core::int field = #C2]) → self::Class1
+    return new self::Class1::_(field);
+  static factory •([core::int field = #C3]) → self::Class1
+    return new self::Class1::_(field);
+  static method _#new#tearOff([core::int field = #C2]) → self::Class1
+    return new self::Class1::_(field);
+}
+class Class2 extends core::Object {
+  final field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _({core::int field = #C2}) → self::Class2
+    : self::Class2::field = field, super core::Object::•()
+    ;
+  static method _#_#tearOff({core::int field = #C2}) → self::Class2
+    return new self::Class2::_(field: field);
+  static factory •({core::int field = #C3}) → self::Class2
+    return new self::Class2::_(field: field);
+  static method _#new#tearOff({core::int field = #C2}) → self::Class2
+    return new self::Class2::_(field: field);
+}
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+  core::print("inSoundMode: ${self::inSoundMode}");
+  self::testDefaultValues();
+}
+static method testDefaultValues() → void {
+  ([core::int]) → self::Class1 f1a = #C5;
+  self::Class1 c1a = f1a(){([core::int]) → self::Class1};
+  self::expect(42, c1a.{self::Class1::field}{core::int});
+  self::Class1 c1b = f1a(87){([core::int]) → self::Class1};
+  self::expect(87, c1b.{self::Class1::field}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:33:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f1a(42, 87); // error
+       ^" in f1a{<inapplicable>}.(42, 87);
+  };
+  dynamic f1b = #C5;
+  dynamic c1c = f1b{dynamic}.call();
+  self::expect(42, c1c{dynamic}.field);
+  dynamic c1d = f1b{dynamic}.call(87);
+  self::expect(87, c1d{dynamic}.field);
+  self::throws(() → dynamic => f1b{dynamic}.call(42, 87));
+  ({field: core::int}) → self::Class2 f2a = #C6;
+  self::Class2 c2a = f2a(){({field: core::int}) → self::Class2};
+  self::expect(42, c2a.{self::Class2::field}{core::int});
+  self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2};
+  self::expect(87, c2b.{self::Class2::field}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values.dart:49:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    f2a(87); // error
+       ^" in f2a{<inapplicable>}.(87);
+  };
+  dynamic f2b = #C6;
+  dynamic c2c = f2b{dynamic}.call();
+  self::expect(42, c2c{dynamic}.field);
+  dynamic c2d = f2b{dynamic}.call(field: 87);
+  self::expect(87, c2d{dynamic}.field);
+  self::throws(() → dynamic => f2b{dynamic}.call(87));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C7}) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print("Thrown: ${e}");
+    return;
+  }
+  if(!self::inSoundMode && inSoundModeOnly) {
+    return;
+  }
+  throw "Expected exception";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = 42
+  #C3 = null
+  #C4 = constructor-tearoff self::Class2::•
+  #C5 = static-tearoff self::Class1::_#new#tearOff
+  #C6 = static-tearoff self::Class2::_#new#tearOff
+  #C7 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.modular.expect
new file mode 100644
index 0000000..aa8c2df
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart.weak.modular.expect
@@ -0,0 +1,244 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:58:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f1b(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:66:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     f1c(42); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:67:8: Error: Too many positional arguments: 0 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f1c(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:112:21: Error: No named parameter with the name 'field2'.
+//     f2c(field1: 42, field2: 87); // error
+//                     ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:123:9: Error: No named parameter with the name 'field1'.
+//     f2d(field1: 42, field2: 87); // error
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:131:9: Error: No named parameter with the name 'field1'.
+//     f2e(field1: 42); // error
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:132:9: Error: No named parameter with the name 'field2'.
+//     f2e(field2: 87); // error
+//         ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:133:9: Error: No named parameter with the name 'field1'.
+//     f2e(field1: 42, field2: 87); // error
+//         ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  final field core::int field1;
+  final field core::int field2;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5, #C6, #C7, #C8]/*isLegacy*/;
+  constructor positional([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
+    : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
+    ;
+  constructor named({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
+    : self::Class1::field1 = field1, self::Class1::field2 = field2, super core::Object::•()
+    ;
+  static method _#positional#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
+    return new self::Class1::positional(field1, field2);
+  static factory redirectPositionalSame([core::int field1 = #C11, core::int field2 = #C11]) → self::Class1
+    return new self::Class1::positional(field1, field2);
+  static method _#redirectPositionalSame#tearOff([core::int field1 = #C9, core::int field2 = #C10]) → self::Class1
+    return new self::Class1::positional(field1, field2);
+  static factory redirectPositionalFewer1([core::int field1 = #C11]) → self::Class1
+    return new self::Class1::positional(field1);
+  static method _#redirectPositionalFewer1#tearOff([core::int field1 = #C9]) → self::Class1
+    return new self::Class1::positional(field1);
+  static factory redirectPositionalFewer2() → self::Class1
+    return new self::Class1::positional();
+  static method _#redirectPositionalFewer2#tearOff() → self::Class1
+    return new self::Class1::positional();
+  static method _#named#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
+    return new self::Class1::named(field1: field1, field2: field2);
+  static factory redirectNamedSame({core::int field1 = #C11, core::int field2 = #C11}) → self::Class1
+    return new self::Class1::named(field1: field1, field2: field2);
+  static method _#redirectNamedSame#tearOff({core::int field1 = #C9, core::int field2 = #C10}) → self::Class1
+    return new self::Class1::named(field1: field1, field2: field2);
+  static factory redirectNamedReorder({core::int field2 = #C11, core::int field1 = #C11}) → self::Class1
+    return new self::Class1::named(field2: field2, field1: field1);
+  static method _#redirectNamedReorder#tearOff({core::int field2 = #C10, core::int field1 = #C9}) → self::Class1
+    return new self::Class1::named(field2: field2, field1: field1);
+  static factory redirectNamedFewer1({core::int field1 = #C11}) → self::Class1
+    return new self::Class1::named(field1: field1);
+  static method _#redirectNamedFewer1#tearOff({core::int field1 = #C9}) → self::Class1
+    return new self::Class1::named(field1: field1);
+  static factory redirectNamedFewer2({core::int field2 = #C11}) → self::Class1
+    return new self::Class1::named(field2: field2);
+  static method _#redirectNamedFewer2#tearOff({core::int field2 = #C10}) → self::Class1
+    return new self::Class1::named(field2: field2);
+  static factory redirectNamedFewer3() → self::Class1
+    return new self::Class1::named();
+  static method _#redirectNamedFewer3#tearOff() → self::Class1
+    return new self::Class1::named();
+}
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+  core::print("inSoundMode: ${self::inSoundMode}");
+  self::testDefaultValues();
+}
+static method testDefaultValues() → dynamic {
+  ([core::int, core::int]) → self::Class1 f1a = #C12;
+  self::Class1 c1a = f1a(){([core::int, core::int]) → self::Class1};
+  self::expect(1, c1a.{self::Class1::field1}{core::int});
+  self::expect(2, c1a.{self::Class1::field2}{core::int});
+  self::Class1 c1b = f1a(42){([core::int, core::int]) → self::Class1};
+  self::expect(42, c1b.{self::Class1::field1}{core::int});
+  self::expect(2, c1b.{self::Class1::field2}{core::int});
+  self::Class1 c1c = f1a(42, 87){([core::int, core::int]) → self::Class1};
+  self::expect(42, c1c.{self::Class1::field1}{core::int});
+  self::expect(87, c1c.{self::Class1::field2}{core::int});
+  ([core::int]) → self::Class1 f1b = #C13;
+  self::Class1 c1d = f1b(){([core::int]) → self::Class1};
+  self::expect(1, c1d.{self::Class1::field1}{core::int});
+  self::expect(2, c1d.{self::Class1::field2}{core::int});
+  self::Class1 c1e = f1b(42){([core::int]) → self::Class1};
+  self::expect(42, c1e.{self::Class1::field1}{core::int});
+  self::expect(2, c1e.{self::Class1::field2}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:58:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f1b(42, 87); // error
+       ^" in f1b{<inapplicable>}.(42, 87);
+  };
+  () → self::Class1 f1c = #C14;
+  self::Class1 c1f = f1c(){() → self::Class1};
+  self::expect(1, c1f.{self::Class1::field1}{core::int});
+  self::expect(2, c1f.{self::Class1::field2}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:66:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    f1c(42); // error
+       ^" in f1c{<inapplicable>}.(42);
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:67:8: Error: Too many positional arguments: 0 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f1c(42, 87); // error
+       ^" in f1c{<inapplicable>}.(42, 87);
+  };
+  ({field1: core::int, field2: core::int}) → self::Class1 f2a = #C15;
+  self::Class1 c2a = f2a(){({field1: core::int, field2: core::int}) → self::Class1};
+  self::expect(1, c2a.{self::Class1::field1}{core::int});
+  self::expect(2, c2a.{self::Class1::field2}{core::int});
+  self::Class1 c2b = f2a(field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
+  self::expect(42, c2b.{self::Class1::field1}{core::int});
+  self::expect(2, c2b.{self::Class1::field2}{core::int});
+  self::Class1 c2c = f2a(field1: 42, field2: 87){({field1: core::int, field2: core::int}) → self::Class1};
+  self::expect(42, c2c.{self::Class1::field1}{core::int});
+  self::expect(87, c2c.{self::Class1::field2}{core::int});
+  self::Class1 c2d = f2a(field2: 87){({field1: core::int, field2: core::int}) → self::Class1};
+  self::expect(1, c2d.{self::Class1::field1}{core::int});
+  self::expect(87, c2d.{self::Class1::field2}{core::int});
+  self::Class1 c2e = f2a(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
+  self::expect(42, c2e.{self::Class1::field1}{core::int});
+  self::expect(87, c2e.{self::Class1::field2}{core::int});
+  ({field1: core::int, field2: core::int}) → self::Class1 f2b = #C16;
+  self::Class1 c3a = f2b(){({field1: core::int, field2: core::int}) → self::Class1};
+  self::expect(1, c3a.{self::Class1::field1}{core::int});
+  self::expect(2, c3a.{self::Class1::field2}{core::int});
+  self::Class1 c3b = f2b(field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
+  self::expect(42, c3b.{self::Class1::field1}{core::int});
+  self::expect(2, c3b.{self::Class1::field2}{core::int});
+  self::Class1 c3c = f2b(field1: 42, field2: 87){({field1: core::int, field2: core::int}) → self::Class1};
+  self::expect(42, c3c.{self::Class1::field1}{core::int});
+  self::expect(87, c3c.{self::Class1::field2}{core::int});
+  self::Class1 c3d = f2b(field2: 87){({field1: core::int, field2: core::int}) → self::Class1};
+  self::expect(1, c3d.{self::Class1::field1}{core::int});
+  self::expect(87, c3d.{self::Class1::field2}{core::int});
+  self::Class1 c3e = f2b(field2: 87, field1: 42){({field1: core::int, field2: core::int}) → self::Class1};
+  self::expect(42, c3e.{self::Class1::field1}{core::int});
+  self::expect(87, c3e.{self::Class1::field2}{core::int});
+  ({field1: core::int}) → self::Class1 f2c = #C17;
+  self::Class1 c4a = f2c(){({field1: core::int}) → self::Class1};
+  self::expect(1, c4a.{self::Class1::field1}{core::int});
+  self::expect(2, c4a.{self::Class1::field2}{core::int});
+  self::Class1 c4b = f2c(field1: 42){({field1: core::int}) → self::Class1};
+  self::expect(42, c4b.{self::Class1::field1}{core::int});
+  self::expect(2, c4b.{self::Class1::field2}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:112:21: Error: No named parameter with the name 'field2'.
+    f2c(field1: 42, field2: 87); // error
+                    ^^^^^^" in f2c{<inapplicable>}.(field1: 42, field2: 87);
+  };
+  ({field2: core::int}) → self::Class1 f2d = #C18;
+  self::Class1 c5a = f2d(){({field2: core::int}) → self::Class1};
+  self::expect(1, c5a.{self::Class1::field1}{core::int});
+  self::expect(2, c5a.{self::Class1::field2}{core::int});
+  self::Class1 c5b = f2d(field2: 87){({field2: core::int}) → self::Class1};
+  self::expect(1, c5b.{self::Class1::field1}{core::int});
+  self::expect(87, c5b.{self::Class1::field2}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:123:9: Error: No named parameter with the name 'field1'.
+    f2d(field1: 42, field2: 87); // error
+        ^^^^^^" in f2d{<inapplicable>}.(field1: 42, field2: 87);
+  };
+  () → self::Class1 f2e = #C19;
+  self::Class1 c6a = f2e(){() → self::Class1};
+  self::expect(1, c6a.{self::Class1::field1}{core::int});
+  self::expect(2, c6a.{self::Class1::field2}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:131:9: Error: No named parameter with the name 'field1'.
+    f2e(field1: 42); // error
+        ^^^^^^" in f2e{<inapplicable>}.(field1: 42);
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:132:9: Error: No named parameter with the name 'field2'.
+    f2e(field2: 87); // error
+        ^^^^^^" in f2e{<inapplicable>}.(field2: 87);
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off_default_values_complex.dart:133:9: Error: No named parameter with the name 'field1'.
+    f2e(field1: 42, field2: 87); // error
+        ^^^^^^" in f2e{<inapplicable>}.(field1: 42, field2: 87);
+  };
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C20}) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print("Thrown: ${e}");
+    return;
+  }
+  if(!self::inSoundMode && inSoundModeOnly) {
+    return;
+  }
+  throw "Expected exception";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Class1::redirectPositionalSame
+  #C2 = constructor-tearoff self::Class1::redirectPositionalFewer1
+  #C3 = constructor-tearoff self::Class1::redirectPositionalFewer2
+  #C4 = constructor-tearoff self::Class1::redirectNamedSame
+  #C5 = constructor-tearoff self::Class1::redirectNamedReorder
+  #C6 = constructor-tearoff self::Class1::redirectNamedFewer1
+  #C7 = constructor-tearoff self::Class1::redirectNamedFewer2
+  #C8 = constructor-tearoff self::Class1::redirectNamedFewer3
+  #C9 = 1
+  #C10 = 2
+  #C11 = null
+  #C12 = static-tearoff self::Class1::_#redirectPositionalSame#tearOff
+  #C13 = static-tearoff self::Class1::_#redirectPositionalFewer1#tearOff
+  #C14 = static-tearoff self::Class1::_#redirectPositionalFewer2#tearOff
+  #C15 = static-tearoff self::Class1::_#redirectNamedSame#tearOff
+  #C16 = static-tearoff self::Class1::_#redirectNamedReorder#tearOff
+  #C17 = static-tearoff self::Class1::_#redirectNamedFewer1#tearOff
+  #C18 = static-tearoff self::Class1::_#redirectNamedFewer2#tearOff
+  #C19 = static-tearoff self::Class1::_#redirectNamedFewer3#tearOff
+  #C20 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.modular.expect
new file mode 100644
index 0000000..01b742d
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.modular.expect
@@ -0,0 +1,126 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///typedef_from_lib.dart";
+
+part typedef_from_part.dart;
+typedef B<S extends core::Object? = dynamic> = self::Class<S%, core::int>;
+class Class<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
+    : super core::Object::•()
+    ;
+  constructor named(self::Class::S% a, [self::Class::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::S%, self::Class::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
+    return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
+  static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C2, core::int c = #C3]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
+    return new self::Class::named<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>(a, b, c);
+  static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
+    return new self::Class::named<self::Class::fact::S%, self::Class::fact::T%>(a, b, c);
+  static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C2, core::int c = #C3}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
+    return self::Class::fact<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>(a, b: b, c: c);
+  static factory redirect<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::redirect::S% a) → self::Class<self::Class::redirect::S%, self::Class::redirect::T%>
+    return new self::Class::named<self::Class::redirect::S%, self::Class::redirect::T%>(a);
+  static method _#redirect#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#redirect#tearOff::S% a) → self::Class<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>
+    return new self::Class::named<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>(a);
+}
+static method main() → dynamic {
+  <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C4;
+  <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C5;
+  <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C6;
+  <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C7;
+  aNew<core::String>("", ""){(core::String, core::String) → self::Class<core::String, core::String>};
+  aNew<core::int>(0, ""){(core::int, core::String) → self::Class<core::int, core::String>};
+  aNamed<core::String>(""){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
+  aNamed<core::int>(0, ""){(core::int, [core::String?, core::int]) → self::Class<core::int, core::String>};
+  aNamed<core::String>("", "", 87){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
+  aFact<core::int>(0){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+  aFact<core::String>("", b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+  aFact<core::int>(0, c: 87){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+  aFact<core::String>("", c: 87, b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+  aRedirect<core::String>(""){(core::String) → self::Class<core::String, core::String>};
+  aRedirect<core::int>(0){(core::int) → self::Class<core::int, core::String>};
+  (core::bool, core::String) → self::Class<core::bool, core::String> aNewInst = aNew<core::bool>;
+  (core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String> aNamedInst = aNamed<core::bool>;
+  (core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String> aFactInst = aFact<core::bool>;
+  (core::bool) → self::Class<core::bool, core::String> aRedirectInst = aRedirect<core::bool>;
+  aNewInst(true, ""){(core::bool, core::String) → self::Class<core::bool, core::String>};
+  aNamedInst(false){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+  aNamedInst(true, ""){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+  aNamedInst(false, "", 87){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+  aFactInst(true){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+  aFactInst(false, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+  aFactInst(true, c: 87){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+  aFactInst(false, c: 87, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+  aRedirectInst(true){(core::bool) → self::Class<core::bool, core::String>};
+  <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C8;
+  <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C9;
+  <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C10;
+  <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C11;
+  bNew<core::String>("", 0){(core::String, core::int) → self::Class<core::String, core::int>};
+  bNew<core::int>(0, 0){(core::int, core::int) → self::Class<core::int, core::int>};
+  bNamed<core::String>(""){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
+  bNamed<core::int>(0, 0){(core::int, [core::int?, core::int]) → self::Class<core::int, core::int>};
+  bNamed<core::String>("", 0, 87){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
+  bFact<core::int>(0){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+  bFact<core::String>("", b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+  bFact<core::int>(0, c: 87){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+  bFact<core::String>("", c: 87, b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+  bRedirect<core::String>(""){(core::String) → self::Class<core::String, core::int>};
+  bRedirect<core::int>(0){(core::int) → self::Class<core::int, core::int>};
+  (core::bool, core::int) → self::Class<core::bool, core::int> bNewInst = bNew<core::bool>;
+  (core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int> bNamedInst = bNamed<core::bool>;
+  (core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int> bFactInst = bFact<core::bool>;
+  (core::bool) → self::Class<core::bool, core::int> bRedirectInst = bRedirect<core::bool>;
+  bNewInst(true, 0){(core::bool, core::int) → self::Class<core::bool, core::int>};
+  bNamedInst(false){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+  bNamedInst(true, 0){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+  bNamedInst(false, 0, 87){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+  bFactInst(true){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bFactInst(false, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bFactInst(true, c: 87){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bFactInst(false, c: 87, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+  bRedirectInst(true){(core::bool) → self::Class<core::bool, core::int>};
+}
+static method _#B#new#tearOff<S extends core::Object? = dynamic>(self::_#B#new#tearOff::S% a, core::int b) → self::Class<self::_#B#new#tearOff::S%, core::int>
+  return new self::Class::•<self::_#B#new#tearOff::S%, core::int>(a, b);
+static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C2, core::int c = #C3]) → self::Class<self::_#B#named#tearOff::S%, core::int>
+  return new self::Class::named<self::_#B#named#tearOff::S%, core::int>(a, b, c);
+static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C2, core::int c = #C3}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
+  return self::Class::fact<self::_#B#fact#tearOff::S%, core::int>(a, b: b, c: c);
+static method _#B#redirect#tearOff<S extends core::Object? = dynamic>(self::_#B#redirect#tearOff::S% a) → self::Class<self::_#B#redirect#tearOff::S%, core::int>
+  return self::Class::_#redirect#tearOff<self::_#B#redirect#tearOff::S%, core::int>(a);
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+import "typedef_from.dart" as self;
+
+import "org-dartlang-testcase:///typedef_from.dart";
+
+typedef A<T extends core::Object? = dynamic> = self::Class<T%, core::String>;
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#new#tearOff<T extends core::Object? = dynamic>(self2::_#A#new#tearOff::T% a, core::String b) → self::Class<self2::_#A#new#tearOff::T%, core::String>
+  return new self::Class::•<self2::_#A#new#tearOff::T%, core::String>(a, b);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C2, core::int c = #C3]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
+  return new self::Class::named<self2::_#A#named#tearOff::T%, core::String>(a, b, c);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C2, core::int c = #C3}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
+  return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
+  return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirect
+  #C2 = null
+  #C3 = 42
+  #C4 = static-tearoff self2::_#A#new#tearOff
+  #C5 = static-tearoff self2::_#A#named#tearOff
+  #C6 = static-tearoff self2::_#A#fact#tearOff
+  #C7 = static-tearoff self2::_#A#redirect#tearOff
+  #C8 = static-tearoff self::_#B#new#tearOff
+  #C9 = static-tearoff self::_#B#named#tearOff
+  #C10 = static-tearoff self::_#B#fact#tearOff
+  #C11 = static-tearoff self::_#B#redirect#tearOff
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.modular.expect
new file mode 100644
index 0000000..fa9d121
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.modular.expect
@@ -0,0 +1,89 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+typedef H<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = mai::A<Y%>;
+static field dynamic H_new = #C1;
+static field dynamic H_named = #C2;
+static field dynamic H_fact = #C3;
+static field dynamic H_redirect = #C4;
+static field dynamic F_new = #C5;
+static field dynamic F_named = #C6;
+static field dynamic F_fact = #C7;
+static field dynamic F_redirect = #C8;
+static method main() → dynamic {
+  self::expect(true, core::identical(self::F_new, mai::F_new_lib));
+  self::expect(false, core::identical(self::F_new, mai::F_named_lib));
+  self::expect(false, core::identical(self::F_new, mai::F_fact_lib));
+  self::expect(false, core::identical(self::F_new, mai::F_redirect_lib));
+  self::expect(false, core::identical(self::F_new, mai::G_new_lib));
+  self::expect(false, core::identical(self::F_new, mai::G_named_lib));
+  self::expect(false, core::identical(self::F_new, mai::G_fact_lib));
+  self::expect(false, core::identical(self::F_new, mai::G_redirect_lib));
+  self::expect(false, core::identical(self::F_new, self::H_new));
+  self::expect(false, core::identical(self::F_new, self::H_named));
+  self::expect(false, core::identical(self::F_new, self::H_fact));
+  self::expect(false, core::identical(self::F_new, self::H_redirect));
+  self::expect(false, core::identical(self::F_named, mai::F_new_lib));
+  self::expect(true, core::identical(self::F_named, mai::F_named_lib));
+  self::expect(false, core::identical(self::F_named, mai::F_fact_lib));
+  self::expect(false, core::identical(self::F_named, mai::F_redirect_lib));
+  self::expect(false, core::identical(self::F_named, mai::G_new_lib));
+  self::expect(false, core::identical(self::F_named, mai::G_named_lib));
+  self::expect(false, core::identical(self::F_named, mai::G_fact_lib));
+  self::expect(false, core::identical(self::F_named, mai::G_redirect_lib));
+  self::expect(false, core::identical(self::F_named, self::H_new));
+  self::expect(false, core::identical(self::F_named, self::H_named));
+  self::expect(false, core::identical(self::F_named, self::H_fact));
+  self::expect(false, core::identical(self::F_named, self::H_redirect));
+  self::expect(false, core::identical(self::F_fact, mai::F_new_lib));
+  self::expect(false, core::identical(self::F_fact, mai::F_named_lib));
+  self::expect(true, core::identical(self::F_fact, mai::F_fact_lib));
+  self::expect(false, core::identical(self::F_fact, mai::F_redirect_lib));
+  self::expect(false, core::identical(self::F_fact, mai::G_new_lib));
+  self::expect(false, core::identical(self::F_fact, mai::G_named_lib));
+  self::expect(false, core::identical(self::F_fact, mai::G_fact_lib));
+  self::expect(false, core::identical(self::F_fact, mai::G_redirect_lib));
+  self::expect(false, core::identical(self::F_fact, self::H_new));
+  self::expect(false, core::identical(self::F_fact, self::H_named));
+  self::expect(false, core::identical(self::F_fact, self::H_fact));
+  self::expect(false, core::identical(self::F_fact, self::H_redirect));
+  self::expect(false, core::identical(self::F_redirect, mai::F_new_lib));
+  self::expect(false, core::identical(self::F_redirect, mai::F_named_lib));
+  self::expect(false, core::identical(self::F_redirect, mai::F_fact_lib));
+  self::expect(true, core::identical(self::F_redirect, mai::F_redirect_lib));
+  self::expect(false, core::identical(self::F_redirect, mai::G_new_lib));
+  self::expect(false, core::identical(self::F_redirect, mai::G_named_lib));
+  self::expect(false, core::identical(self::F_redirect, mai::G_fact_lib));
+  self::expect(false, core::identical(self::F_redirect, mai::G_redirect_lib));
+  self::expect(false, core::identical(self::F_redirect, self::H_new));
+  self::expect(false, core::identical(self::F_redirect, self::H_named));
+  self::expect(false, core::identical(self::F_redirect, self::H_fact));
+  self::expect(false, core::identical(self::F_redirect, self::H_redirect));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b, core::int c}) → mai::A<self::_#H#fact#tearOff::Y%>
+  return mai::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
+  return mai::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
+  return new mai::A::•<self::_#H#new#tearOff::Y%>();
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b]) → mai::A<self::_#H#named#tearOff::Y%>
+  return new mai::A::named<self::_#H#named#tearOff::Y%>(a, b);
+
+constants  {
+  #C1 = static-tearoff self::_#H#new#tearOff
+  #C2 = static-tearoff self::_#H#named#tearOff
+  #C3 = static-tearoff self::_#H#fact#tearOff
+  #C4 = static-tearoff self::_#H#redirect#tearOff
+  #C5 = static-tearoff mai::_#F#new#tearOff
+  #C6 = static-tearoff mai::_#F#named#tearOff
+  #C7 = static-tearoff mai::_#F#fact#tearOff
+  #C8 = static-tearoff mai::_#F#redirect#tearOff
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.modular.expect
new file mode 100644
index 0000000..6da94c4
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.modular.expect
@@ -0,0 +1,148 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "typedef_identical_lib.dart" as typ;
+
+import "org-dartlang-testcase:///typedef_identical_lib.dart";
+
+typedef H<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> H_new = #C1;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> H_named = #C2;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> H_fact = #C3;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> H_redirect = #C4;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> F_new = #C5;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> F_named = #C6;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> F_fact = #C7;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> F_redirect = #C8;
+static method main() → dynamic {
+  self::expect(true, core::identical(self::F_new, typ::F_new_lib));
+  self::expect(false, core::identical(self::F_new, typ::F_named_lib));
+  self::expect(false, core::identical(self::F_new, typ::F_fact_lib));
+  self::expect(false, core::identical(self::F_new, typ::F_redirect_lib));
+  self::expect(false, core::identical(self::F_new, typ::G_new_lib));
+  self::expect(false, core::identical(self::F_new, typ::G_named_lib));
+  self::expect(false, core::identical(self::F_new, typ::G_fact_lib));
+  self::expect(false, core::identical(self::F_new, typ::G_redirect_lib));
+  self::expect(false, core::identical(self::F_new, self::H_new));
+  self::expect(false, core::identical(self::F_new, self::H_named));
+  self::expect(false, core::identical(self::F_new, self::H_fact));
+  self::expect(false, core::identical(self::F_new, self::H_redirect));
+  self::expect(false, core::identical(self::F_named, typ::F_new_lib));
+  self::expect(true, core::identical(self::F_named, typ::F_named_lib));
+  self::expect(false, core::identical(self::F_named, typ::F_fact_lib));
+  self::expect(false, core::identical(self::F_named, typ::F_redirect_lib));
+  self::expect(false, core::identical(self::F_named, typ::G_new_lib));
+  self::expect(false, core::identical(self::F_named, typ::G_named_lib));
+  self::expect(false, core::identical(self::F_named, typ::G_fact_lib));
+  self::expect(false, core::identical(self::F_named, typ::G_redirect_lib));
+  self::expect(false, core::identical(self::F_named, self::H_new));
+  self::expect(false, core::identical(self::F_named, self::H_named));
+  self::expect(false, core::identical(self::F_named, self::H_fact));
+  self::expect(false, core::identical(self::F_named, self::H_redirect));
+  self::expect(false, core::identical(self::F_fact, typ::F_new_lib));
+  self::expect(false, core::identical(self::F_fact, typ::F_named_lib));
+  self::expect(true, core::identical(self::F_fact, typ::F_fact_lib));
+  self::expect(false, core::identical(self::F_fact, typ::F_redirect_lib));
+  self::expect(false, core::identical(self::F_fact, typ::G_new_lib));
+  self::expect(false, core::identical(self::F_fact, typ::G_named_lib));
+  self::expect(false, core::identical(self::F_fact, typ::G_fact_lib));
+  self::expect(false, core::identical(self::F_fact, typ::G_redirect_lib));
+  self::expect(false, core::identical(self::F_fact, self::H_new));
+  self::expect(false, core::identical(self::F_fact, self::H_named));
+  self::expect(false, core::identical(self::F_fact, self::H_fact));
+  self::expect(false, core::identical(self::F_fact, self::H_redirect));
+  self::expect(false, core::identical(self::F_redirect, typ::F_new_lib));
+  self::expect(false, core::identical(self::F_redirect, typ::F_named_lib));
+  self::expect(false, core::identical(self::F_redirect, typ::F_fact_lib));
+  self::expect(true, core::identical(self::F_redirect, typ::F_redirect_lib));
+  self::expect(false, core::identical(self::F_redirect, typ::G_new_lib));
+  self::expect(false, core::identical(self::F_redirect, typ::G_named_lib));
+  self::expect(false, core::identical(self::F_redirect, typ::G_fact_lib));
+  self::expect(false, core::identical(self::F_redirect, typ::G_redirect_lib));
+  self::expect(false, core::identical(self::F_redirect, self::H_new));
+  self::expect(false, core::identical(self::F_redirect, self::H_named));
+  self::expect(false, core::identical(self::F_redirect, self::H_fact));
+  self::expect(false, core::identical(self::F_redirect, self::H_redirect));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
+  return new typ::A::•<self::_#H#new#tearOff::Y%>();
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
+  return new typ::A::named<self::_#H#named#tearOff::Y%>(a, b);
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
+  return typ::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
+  return typ::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
+
+library /*isNonNullableByDefault*/;
+import self as typ;
+import "dart:core" as core;
+
+typedef F<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
+typedef G<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = typ::A<Y%>;
+class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C11]/*isLegacy*/;
+  constructor •() → typ::A<typ::A::T%>
+    : super core::Object::•()
+    ;
+  constructor named(typ::A::T% a, [core::int? b = #C9]) → typ::A<typ::A::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → typ::A<typ::A::_#new#tearOff::T%>
+    return new typ::A::•<typ::A::_#new#tearOff::T%>();
+  static method _#named#tearOff<T extends core::Object? = dynamic>(typ::A::_#named#tearOff::T% a, [core::int? b = #C9]) → typ::A<typ::A::_#named#tearOff::T%>
+    return new typ::A::named<typ::A::_#named#tearOff::T%>(a, b);
+  static factory fact<T extends core::Object? = dynamic>(typ::A::fact::T% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<typ::A::fact::T%>
+    return new typ::A::•<typ::A::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>(typ::A::_#fact#tearOff::T% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<typ::A::_#fact#tearOff::T%>
+    return typ::A::fact<typ::A::_#fact#tearOff::T%>(a, b: b, c: c);
+  static factory redirect<T extends core::Object? = dynamic>() → typ::A<typ::A::redirect::T%>
+    return new typ::A::•<typ::A::redirect::T%>();
+  static method _#redirect#tearOff<T extends core::Object? = dynamic>() → typ::A<typ::A::_#redirect#tearOff::T%>
+    return new typ::A::•<typ::A::_#redirect#tearOff::T%>();
+}
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> F_new_lib = #C5;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> F_named_lib = #C6;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> F_fact_lib = #C7;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> F_redirect_lib = #C8;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_new_lib = #C12;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, [core::int?]) → typ::A<Y%> G_named_lib = #C13;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(Y%, {b: core::int?, c: core::int}) → typ::A<Y%> G_fact_lib = #C14;
+static field <unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<Y%> G_redirect_lib = #C15;
+static method _#F#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<typ::_#F#new#tearOff::Y%>
+  return new typ::A::•<typ::_#F#new#tearOff::Y%>();
+static method _#F#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#F#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<typ::_#F#named#tearOff::Y%>
+  return new typ::A::named<typ::_#F#named#tearOff::Y%>(a, b);
+static method _#F#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#F#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<typ::_#F#fact#tearOff::Y%>
+  return typ::A::fact<typ::_#F#fact#tearOff::Y%>(a, b: b, c: c);
+static method _#F#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<typ::_#F#redirect#tearOff::Y%>
+  return typ::A::_#redirect#tearOff<typ::_#F#redirect#tearOff::Y%>();
+static method _#G#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<typ::_#G#new#tearOff::Y%>
+  return new typ::A::•<typ::_#G#new#tearOff::Y%>();
+static method _#G#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#G#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<typ::_#G#named#tearOff::Y%>
+  return new typ::A::named<typ::_#G#named#tearOff::Y%>(a, b);
+static method _#G#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(typ::_#G#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<typ::_#G#fact#tearOff::Y%>
+  return typ::A::fact<typ::_#G#fact#tearOff::Y%>(a, b: b, c: c);
+static method _#G#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<typ::_#G#redirect#tearOff::Y%>
+  return typ::A::_#redirect#tearOff<typ::_#G#redirect#tearOff::Y%>();
+
+constants  {
+  #C1 = static-tearoff self::_#H#new#tearOff
+  #C2 = static-tearoff self::_#H#named#tearOff
+  #C3 = static-tearoff self::_#H#fact#tearOff
+  #C4 = static-tearoff self::_#H#redirect#tearOff
+  #C5 = static-tearoff typ::_#F#new#tearOff
+  #C6 = static-tearoff typ::_#F#named#tearOff
+  #C7 = static-tearoff typ::_#F#fact#tearOff
+  #C8 = static-tearoff typ::_#F#redirect#tearOff
+  #C9 = null
+  #C10 = 42
+  #C11 = constructor-tearoff typ::A::redirect
+  #C12 = static-tearoff typ::_#G#new#tearOff
+  #C13 = static-tearoff typ::_#G#named#tearOff
+  #C14 = static-tearoff typ::_#G#fact#tearOff
+  #C15 = static-tearoff typ::_#G#redirect#tearOff
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..9e50e01
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart.weak.modular.expect
@@ -0,0 +1,330 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:34:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     f1a(0); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:46:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     f2a(0); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:47:8: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'call'.
+// Try changing type arguments so that they conform to the bounds.
+//     f2a<String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:65:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     f3a(0); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:66:8: Error: Expected 0 type arguments.
+//     f3a<String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:85:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f3c(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:86:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f3c(0, 0); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:87:8: Error: Expected 0 type arguments.
+//     f3c<String>(0); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:107:8: Error: Too few positional arguments: 2 required, 0 given.
+//     f3e(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:108:8: Error: Too few positional arguments: 2 required, 1 given.
+//     f3e(0); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:109:8: Error: Expected 0 type arguments.
+//     f3e<String>(0, ''); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:130:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     f4a(0); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:131:8: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'call'.
+// Try changing type arguments so that they conform to the bounds.
+//     f4a<String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:152:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     f5a(0); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:153:8: Error: Expected 2 type arguments.
+//     f5a<String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:154:8: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'call'.
+// Try changing type arguments so that they conform to the bounds.
+//     f5a<String, String>(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:155:8: Error: Type argument 'num' doesn't conform to the bound 'String' of the type variable 'Y' on 'call'.
+// Try changing type arguments so that they conform to the bounds.
+//     f5a<num, num>(); // error
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef DA1 = self::A;
+typedef DA2<unrelated X extends core::num> = self::A;
+typedef DB1 = self::B<core::String>;
+typedef DB2<X extends core::num> = self::B<X>;
+typedef DB3<X extends core::num, unrelated Y extends core::String> = self::B<X>;
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::A
+    return new self::A::•();
+}
+class B<X extends core::Object? = dynamic> extends core::Object {
+  field core::int field1;
+  field core::String field2;
+  constructor _(core::int field1, core::String field2) → self::B<self::B::X%>
+    : self::B::field1 = field1, self::B::field2 = field2, super core::Object::•()
+    ;
+  constructor •() → self::B<self::B::X%>
+    : this self::B::_(0, "")
+    ;
+  constructor foo(core::int field1) → self::B<self::B::X%>
+    : self::B::field1 = field1, self::B::field2 = "", super core::Object::•()
+    ;
+  static method _#_#tearOff<X extends core::Object? = dynamic>(core::int field1, core::String field2) → self::B<self::B::_#_#tearOff::X%>
+    return new self::B::_<self::B::_#_#tearOff::X%>(field1, field2);
+  static method _#new#tearOff<X extends core::Object? = dynamic>() → self::B<self::B::_#new#tearOff::X%>
+    return new self::B::•<self::B::_#new#tearOff::X%>();
+  static method _#foo#tearOff<X extends core::Object? = dynamic>(core::int field1) → self::B<self::B::_#foo#tearOff::X%>
+    return new self::B::foo<self::B::_#foo#tearOff::X%>(field1);
+  static factory bar<X extends core::Object? = dynamic>(core::int i, core::String j) → self::B<self::B::bar::X%>
+    return new self::B::_<self::B::bar::X%>(i, j);
+  static method _#bar#tearOff<X extends core::Object? = dynamic>(core::int i, core::String j) → self::B<self::B::_#bar#tearOff::X%>
+    return self::B::bar<self::B::_#bar#tearOff::X%>(i, j);
+}
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+  () → self::A f1a = #C1;
+  self::A c1a = f1a(){() → self::A};
+  self::expect(true, c1a is{ForNonNullableByDefault} self::A);
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:34:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    f1a(0); // error
+       ^" in f1a{<inapplicable>}.(0);
+  };
+  dynamic f1b = #C1;
+  dynamic c1b = f1b{dynamic}.call();
+  self::expect(true, c1b is{ForNonNullableByDefault} self::A);
+  self::throws(() → dynamic => f1b{dynamic}.call(0));
+  <unrelated X extends core::num>() → self::A f2a = #C2;
+  self::A c2a = f2a<core::num>(){() → self::A};
+  self::expect(true, c2a is{ForNonNullableByDefault} self::A);
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:46:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    f2a(0); // error
+       ^" in f2a{<inapplicable>}.<core::num>(0);
+    f2a<core::String>(){() → self::A};
+  };
+  dynamic f2b = #C2;
+  dynamic c2b = f2b{dynamic}.call();
+  self::expect(true, c2b is{ForNonNullableByDefault} self::A);
+  dynamic c2c = f2b{dynamic}.call<core::int>();
+  self::expect(true, c2c is{ForNonNullableByDefault} self::A);
+  self::throws(() → dynamic => f2b{dynamic}.call(0));
+  self::throws(() → dynamic => f2b{dynamic}.call<core::String>());
+  () → self::B<core::String> f3a = #C4;
+  self::B<core::String> c3a = f3a(){() → self::B<core::String>};
+  self::expect(true, c3a is{ForNonNullableByDefault} self::B<core::String>);
+  self::expect(false, c3a is{ForNonNullableByDefault} self::B<core::int>);
+  self::expect(0, c3a.{self::B::field1}{core::int});
+  self::expect("", c3a.{self::B::field2}{core::String});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:65:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    f3a(0); // error
+       ^" in f3a{<inapplicable>}.(0);
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:66:8: Error: Expected 0 type arguments.
+    f3a<String>(); // error
+       ^" in f3a{<inapplicable>}.<core::String>();
+  };
+  dynamic f3b = #C4;
+  dynamic c3b = f3b{dynamic}.call();
+  self::expect(true, c3b is{ForNonNullableByDefault} self::B<core::String>);
+  self::expect(false, c3b is{ForNonNullableByDefault} self::B<core::int>);
+  self::expect(0, c3a.{self::B::field1}{core::int});
+  self::expect("", c3a.{self::B::field2}{core::String});
+  self::throws(() → dynamic => f3b{dynamic}.call(0));
+  self::throws(() → dynamic => f3b{dynamic}.call<core::String>());
+  (core::int) → self::B<core::String> f3c = #C6;
+  self::B<core::String> c3c = f3c(42){(core::int) → self::B<core::String>};
+  self::expect(true, c3c is{ForNonNullableByDefault} self::B<core::String>);
+  self::expect(false, c3c is{ForNonNullableByDefault} self::B<core::int>);
+  self::expect(42, c3c.{self::B::field1}{core::int});
+  self::expect("", c3c.{self::B::field2}{core::String});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:85:8: Error: Too few positional arguments: 1 required, 0 given.
+    f3c(); // error
+       ^" in f3c{<inapplicable>}.();
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:86:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f3c(0, 0); // error
+       ^" in f3c{<inapplicable>}.(0, 0);
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:87:8: Error: Expected 0 type arguments.
+    f3c<String>(0); // error
+       ^" in f3c{<inapplicable>}.<core::String>(0);
+  };
+  dynamic f3d = #C6;
+  dynamic c3d = f3d{dynamic}.call(42);
+  self::expect(true, c3d is{ForNonNullableByDefault} self::B<core::String>);
+  self::expect(false, c3d is{ForNonNullableByDefault} self::B<core::int>);
+  self::expect(42, c3d{dynamic}.field1);
+  self::expect("", c3d{dynamic}.field2);
+  self::throws(() → dynamic => f3d{dynamic}.call());
+  self::throws(() → dynamic => f3d{dynamic}.call(0, 0));
+  self::throws(() → dynamic => f3d{dynamic}.call<core::String>(0));
+  (core::int, core::String) → self::B<core::String> f3e = #C8;
+  self::B<core::String> c3e = f3e(42, "foo"){(core::int, core::String) → self::B<core::String>};
+  self::expect(true, c3e is{ForNonNullableByDefault} self::B<core::String>);
+  self::expect(false, c3e is{ForNonNullableByDefault} self::B<core::int>);
+  self::expect(42, c3e.{self::B::field1}{core::int});
+  self::expect("foo", c3e.{self::B::field2}{core::String});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:107:8: Error: Too few positional arguments: 2 required, 0 given.
+    f3e(); // error
+       ^" in f3e{<inapplicable>}.();
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:108:8: Error: Too few positional arguments: 2 required, 1 given.
+    f3e(0); // error
+       ^" in f3e{<inapplicable>}.(0);
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:109:8: Error: Expected 0 type arguments.
+    f3e<String>(0, ''); // error
+       ^" in f3e{<inapplicable>}.<core::String>(0, "");
+  };
+  dynamic f3f = #C8;
+  dynamic c3f = f3f{dynamic}.call(42, "foo");
+  self::expect(true, c3f is{ForNonNullableByDefault} self::B<core::String>);
+  self::expect(false, c3f is{ForNonNullableByDefault} self::B<core::int>);
+  self::expect(42, c3f{dynamic}.field1);
+  self::expect("foo", c3f{dynamic}.field2);
+  self::throws(() → dynamic => c3f{dynamic}.call());
+  self::throws(() → dynamic => c3f{dynamic}.call(0));
+  self::throws(() → dynamic => c3f{dynamic}.call<core::String>(0));
+  <X extends core::num>() → self::B<X> f4a = #C9;
+  self::B<core::num> c4a = f4a<core::num>(){() → self::B<core::num>};
+  self::expect(true, c4a is{ForNonNullableByDefault} self::B<core::num>);
+  self::expect(false, c4a is{ForNonNullableByDefault} self::B<core::int>);
+  self::B<core::int> c4b = f4a<core::int>(){() → self::B<core::int>};
+  self::expect(true, c4b is{ForNonNullableByDefault} self::B<core::int>);
+  self::expect(false, c4b is{ForNonNullableByDefault} self::B<core::double>);
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:130:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    f4a(0); // error
+       ^" in f4a{<inapplicable>}.<core::num>(0);
+    f4a<core::String>(){() → self::B<core::String>};
+  };
+  dynamic f4b = #C9;
+  dynamic c4c = f4b{dynamic}.call();
+  self::expect(true, c4c is{ForNonNullableByDefault} self::B<core::num>);
+  self::expect(false, c4c is{ForNonNullableByDefault} self::B<core::int>);
+  dynamic c4d = f4b{dynamic}.call<core::int>();
+  self::expect(true, c4d is{ForNonNullableByDefault} self::B<core::int>);
+  self::expect(false, c4d is{ForNonNullableByDefault} self::B<core::double>);
+  self::throws(() → dynamic => f4b{dynamic}.call(0));
+  self::throws(() → dynamic => f4b{dynamic}.call<core::String>());
+  <X extends core::num, unrelated Y extends core::String>() → self::B<X> f5a = #C10;
+  self::B<core::num> c5a = f5a<core::num, core::String>(){() → self::B<core::num>};
+  self::expect(true, c5a is{ForNonNullableByDefault} self::B<core::num>);
+  self::expect(false, c5a is{ForNonNullableByDefault} self::B<core::int>);
+  self::B<core::int> c5b = f5a<core::int, core::String>(){() → self::B<core::int>};
+  self::expect(true, c5b is{ForNonNullableByDefault} self::B<core::int>);
+  self::expect(false, c5b is{ForNonNullableByDefault} self::B<core::double>);
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:152:8: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    f5a(0); // error
+       ^" in f5a{<inapplicable>}.<core::num, core::String>(0);
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_tear_off.dart:153:8: Error: Expected 2 type arguments.
+    f5a<String>(); // error
+       ^" in f5a{<inapplicable>}.<core::String>();
+    f5a<core::String, core::String>(){() → self::B<core::String>};
+    f5a<core::num, core::num>(){() → self::B<core::num>};
+  };
+  dynamic f5b = #C10;
+  dynamic c5c = f5b{dynamic}.call();
+  self::expect(true, c5c is{ForNonNullableByDefault} self::B<core::num>);
+  self::expect(false, c5c is{ForNonNullableByDefault} self::B<core::int>);
+  dynamic c5d = f5b{dynamic}.call<core::int, core::String>();
+  self::expect(true, c5d is{ForNonNullableByDefault} self::B<core::int>);
+  self::expect(false, c5d is{ForNonNullableByDefault} self::B<core::double>);
+  self::throws(() → dynamic => f5b{dynamic}.call(0));
+  self::throws(() → dynamic => f5b{dynamic}.call<core::String>());
+  self::throws(() → dynamic => f5b{dynamic}.call<core::String, core::String>());
+  self::throws(() → dynamic => f5b{dynamic}.call<core::num, core::num>());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C11}) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print("Thrown: ${e}");
+    return;
+  }
+  if(!self::inSoundMode && inSoundModeOnly) {
+    return;
+  }
+  throw "Expected exception";
+}
+static method _#DA2#new#tearOff<unrelated X extends core::num>() → self::A
+  return new self::A::•();
+static method _#DB2#_#tearOff<X extends core::num>(core::int field1, core::String field2) → self::B<self::_#DB2#_#tearOff::X>
+  return new self::B::_<self::_#DB2#_#tearOff::X>(field1, field2);
+static method _#DB2#new#tearOff<X extends core::num>() → self::B<self::_#DB2#new#tearOff::X>
+  return new self::B::•<self::_#DB2#new#tearOff::X>();
+static method _#DB2#foo#tearOff<X extends core::num>(core::int field1) → self::B<self::_#DB2#foo#tearOff::X>
+  return new self::B::foo<self::_#DB2#foo#tearOff::X>(field1);
+static method _#DB2#bar#tearOff<X extends core::num>(core::int i, core::String j) → self::B<self::_#DB2#bar#tearOff::X>
+  return self::B::bar<self::_#DB2#bar#tearOff::X>(i, j);
+static method _#DB3#_#tearOff<X extends core::num, unrelated Y extends core::String>(core::int field1, core::String field2) → self::B<self::_#DB3#_#tearOff::X>
+  return new self::B::_<self::_#DB3#_#tearOff::X>(field1, field2);
+static method _#DB3#new#tearOff<X extends core::num, unrelated Y extends core::String>() → self::B<self::_#DB3#new#tearOff::X>
+  return new self::B::•<self::_#DB3#new#tearOff::X>();
+static method _#DB3#foo#tearOff<X extends core::num, unrelated Y extends core::String>(core::int field1) → self::B<self::_#DB3#foo#tearOff::X>
+  return new self::B::foo<self::_#DB3#foo#tearOff::X>(field1);
+static method _#DB3#bar#tearOff<X extends core::num, unrelated Y extends core::String>(core::int i, core::String j) → self::B<self::_#DB3#bar#tearOff::X>
+  return self::B::bar<self::_#DB3#bar#tearOff::X>(i, j);
+
+constants  {
+  #C1 = static-tearoff self::A::_#new#tearOff
+  #C2 = static-tearoff self::_#DA2#new#tearOff
+  #C3 = static-tearoff self::B::_#new#tearOff
+  #C4 = instantiation #C3 <core::String*>
+  #C5 = static-tearoff self::B::_#foo#tearOff
+  #C6 = instantiation #C5 <core::String*>
+  #C7 = static-tearoff self::B::_#bar#tearOff
+  #C8 = instantiation #C7 <core::String*>
+  #C9 = static-tearoff self::_#DB2#new#tearOff
+  #C10 = static-tearoff self::_#DB3#new#tearOff
+  #C11 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.modular.expect
new file mode 100644
index 0000000..911cbda
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart.weak.modular.expect
@@ -0,0 +1,130 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+//   NamedMixinApplication.fact;
+//                         ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+//   NamedMixinApplication.redirectingFactory;
+//                         ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.new;
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.named;
+//                                 ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+//   AbstractNamedMixinApplication.redirectingGenerative;
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+//   AbstractNamedMixinApplication.fact;
+//                                 ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+//   AbstractNamedMixinApplication.redirectingFactory;
+//                                 ^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get field() → core::int;
+}
+class Class<T extends core::Object? = dynamic> extends core::Object implements self::Interface {
+  field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor named(core::int field) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  constructor redirectingGenerative(core::int field) → self::Class<self::Class::T%>
+    : this self::Class::•(field)
+    ;
+  static factory fact<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::fact::T%>
+    return new self::Class::•<self::Class::fact::T%>(field);
+  static factory redirectingFactory<T extends core::Object? = dynamic>(core::int field) → self::Class<self::Class::redirectingFactory::T%>
+    return new self::Class::•<self::Class::redirectingFactory::T%>(field);
+}
+abstract class Mixin<S extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+class NamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::NamedMixinApplication::T%> with self::Mixin<self::NamedMixinApplication::S%> {
+  synthetic constructor •([core::int field = #C2]) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::NamedMixinApplication<self::NamedMixinApplication::T%, self::NamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+abstract class AbstractNamedMixinApplication<T extends core::Object? = dynamic, S extends core::Object? = dynamic> = self::Class<self::AbstractNamedMixinApplication::T%> with self::Mixin<self::AbstractNamedMixinApplication::S%> {
+  synthetic constructor •([core::int field = #C2]) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::•(field)
+    ;
+  synthetic constructor named(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::named(field)
+    ;
+  synthetic constructor redirectingGenerative(core::int field) → self::AbstractNamedMixinApplication<self::AbstractNamedMixinApplication::T%, self::AbstractNamedMixinApplication::S%>
+    : super self::Class::redirectingGenerative(field)
+    ;
+}
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:26:25: Error: Member not found: 'fact'.
+  NamedMixinApplication.fact;
+                        ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:27:25: Error: Member not found: 'redirectingFactory'.
+  NamedMixinApplication.redirectingFactory;
+                        ^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:29:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.new;
+                                ^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:30:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.named;
+                                ^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:31:33: Error: Constructors on abstract classes can't be torn off.
+  AbstractNamedMixinApplication.redirectingGenerative;
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:32:33: Error: Member not found: 'fact'.
+  AbstractNamedMixinApplication.fact;
+                                ^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/named_mixin_application.dart:33:33: Error: Member not found: 'redirectingFactory'.
+  AbstractNamedMixinApplication.redirectingFactory;
+                                ^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>([core::int]) → self::NamedMixinApplication<T%, S%> f1 = #C3;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f2 = #C4;
+  <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(core::int) → self::NamedMixinApplication<T%, S%> f3 = #C5;
+  #C6;
+  #C7;
+  #C8;
+  ([core::int]) → self::NamedMixinApplication<core::int, core::String> n1 = f1<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n2 = f2<core::int, core::String>;
+  (core::int) → self::NamedMixinApplication<core::int, core::String> n3 = f3<core::int, core::String>;
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirectingFactory
+  #C2 = 0
+  #C3 = constructor-tearoff self::NamedMixinApplication::•
+  #C4 = constructor-tearoff self::NamedMixinApplication::named
+  #C5 = constructor-tearoff self::NamedMixinApplication::redirectingGenerative
+  #C6 = instantiation #C3 <core::int*, core::String*>
+  #C7 = instantiation #C4 <core::int*, core::String*>
+  #C8 = instantiation #C5 <core::int*, core::String*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.weak.modular.expect
new file mode 100644
index 0000000..75ac16e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart.weak.modular.expect
@@ -0,0 +1,261 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:8:5: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// int new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:15:7: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   int new = 42; // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:29:16: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   external int new; // error
+//                ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:21:10: Error: 'new' can only be used as a constructor reference.
+//     this.new; // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:22:10: Error: 'new' can only be used as a constructor reference.
+//     this.new(); // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:23:10: Error: 'new' can only be used as a constructor reference.
+//     this.new<int>(); // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:24:10: Error: 'new' can only be used as a constructor reference.
+//     this.new = 87; // error
+//          ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:34:24: Error: 'new' can only be used as a constructor reference.
+// method(dynamic d) => d.new; // error
+//                        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:37:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new; // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:38:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:39:11: Error: 'new' can only be used as a constructor reference.
+//   new C().new = 87; // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:41:5: Error: 'new' can only be used as a constructor reference.
+//   c.new; // error
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:42:5: Error: 'new' can only be used as a constructor reference.
+//   c.new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:44:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new; // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:45:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new(); // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:46:7: Error: 'new' can only be used as a constructor reference.
+//   foo.new<int>(); // error
+//       ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:47:8: Error: 'new' can only be used as a constructor reference.
+//   foo?.new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:48:8: Error: 'new' can only be used as a constructor reference.
+//   foo?.new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:49:8: Error: 'new' can only be used as a constructor reference.
+//   foo?.new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:50:8: Error: 'new' can only be used as a constructor reference.
+//   foo..new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:51:8: Error: 'new' can only be used as a constructor reference.
+//   foo..new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:52:8: Error: 'new' can only be used as a constructor reference.
+//   foo..new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:53:9: Error: 'new' can only be used as a constructor reference.
+//   (foo).new; // error
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:54:9: Error: 'new' can only be used as a constructor reference.
+//   (foo).new(); // error
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:55:9: Error: 'new' can only be used as a constructor reference.
+//   (foo).new<int>(); // error
+//         ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:56:11: Error: 'new' can only be used as a constructor reference.
+//   prefix1.new; // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:57:11: Error: 'new' can only be used as a constructor reference.
+//   prefix1.new(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:58:11: Error: 'new' can only be used as a constructor reference.
+//   prefix1.new<int>(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:59:13: Error: 'new' can only be used as a constructor reference.
+//   prefix2.c.new; // error
+//             ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:60:13: Error: 'new' can only be used as a constructor reference.
+//   prefix2.c.new(); // error
+//             ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:61:13: Error: 'new' can only be used as a constructor reference.
+//   prefix2.c.new<int>(); // error
+//             ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:62:8: Error: 'new' can only be used as a constructor reference.
+//   E(0).new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:63:8: Error: 'new' can only be used as a constructor reference.
+//   E(0).new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:64:8: Error: 'new' can only be used as a constructor reference.
+//   E(0).new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:65:3: Error: Undefined name 'unresolved'.
+//   unresolved.new; // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:65:14: Error: 'new' can only be used as a constructor reference.
+//   unresolved.new; // error
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:66:3: Error: Undefined name 'unresolved'.
+//   unresolved.new(); // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:66:14: Error: 'new' can only be used as a constructor reference.
+//   unresolved.new(); // error
+//              ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
+//   unresolved.new<int>(); // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:67:14: Error: 'new' can only be used as a constructor reference.
+//   unresolved.new<int>(); // error
+//              ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///new_as_selector.dart" as prefix1;
+import "org-dartlang-testcase:///new_as_selector.dart" deferred as prefix2 hide E;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+class C extends self::Super {
+  field core::int new = 42;
+  constructor •() → self::C
+    : super self::Super::•()
+    ;
+  constructor named() → self::C
+    : this self::C::•()
+    ;
+  method method() → dynamic {
+    this.{self::C::new}{core::int};
+    self::E|call<dynamic>(this.{self::C::new}{core::int});
+    self::E|call<core::int>(this.{self::C::new}{core::int});
+    this.{self::C::new} = 87;
+  }
+}
+extension E on core::int {
+  get new = self::E|get#new;
+  set new = self::E|set#new;
+  method call = self::E|call;
+  tearoff call = self::E|get#call;
+}
+static field core::int new = 87;
+static field self::C c = new self::C::•();
+external static method E|get#new(core::int #this) → core::int;
+external static method E|set#new(core::int #this, core::int #externalFieldValue) → void;
+static method E|call<T extends core::Object? = dynamic>(lowered final core::int #this) → dynamic {}
+static method E|get#call(lowered final core::int #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::E|call<T%>(#this);
+static method method(dynamic d) → dynamic
+  return d{dynamic}.new;
+static method test() → dynamic {
+  new self::C::•().{self::C::new}{core::int};
+  self::E|call<dynamic>(new self::C::•().{self::C::new}{core::int});
+  new self::C::•().{self::C::new} = 87;
+  self::C c = new self::C::•();
+  c.{self::C::new}{core::int};
+  c.{self::C::new} = 87;
+  dynamic foo;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+  foo{dynamic}.new<core::int>();
+  let final dynamic #t1 = foo in #t1 == null ?{dynamic} null : #t1{dynamic}.new;
+  let final dynamic #t2 = foo in #t2 == null ?{dynamic} null : #t2{dynamic}.new();
+  let final dynamic #t3 = foo in #t3 == null ?{dynamic} null : #t3{dynamic}.new<core::int>();
+  let final dynamic #t4 = foo in block {
+    #t4{dynamic}.new;
+  } =>#t4;
+  let final dynamic #t5 = foo in block {
+    #t5{dynamic}.new();
+  } =>#t5;
+  let final dynamic #t6 = foo in block {
+    #t6{dynamic}.new<core::int>();
+  } =>#t6;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+  foo{dynamic}.new<core::int>();
+  self::new;
+  self::E|call<dynamic>(self::new);
+  self::E|call<core::int>(self::new);
+  let final dynamic #t7 = CheckLibraryIsLoaded(prefix2) in self::c.{self::C::new}{core::int};
+  let final dynamic #t8 = CheckLibraryIsLoaded(prefix2) in self::E|call<dynamic>(self::c.{self::C::new}{core::int});
+  let final dynamic #t9 = CheckLibraryIsLoaded(prefix2) in self::E|call<core::int>(self::c.{self::C::new}{core::int});
+  self::E|get#new(0);
+  self::E|call<dynamic>(self::E|get#new(0));
+  self::E|call<core::int>(self::E|get#new(0));
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:65:3: Error: Undefined name 'unresolved'.
+  unresolved.new; // error
+  ^^^^^^^^^^"{<invalid>}.new;
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:66:3: Error: Undefined name 'unresolved'.
+  unresolved.new(); // error
+  ^^^^^^^^^^"{dynamic}.new();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
+  unresolved.new<int>(); // error
+  ^^^^^^^^^^"{dynamic}.new<core::int>();
+}
+static method main() → dynamic {
+  #C1;
+  new self::C::•();
+}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.modular.expect
new file mode 100644
index 0000000..9f6be91
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart.weak.modular.expect
@@ -0,0 +1,61 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:13:25: Error: A value of type 'A Function(int)' can't be returned from a function with return type 'A Function()'.
+//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
+// A Function() test2() => A.foo2; // Error.
+//                         ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:15:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
+//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
+// A Function(int) test4() => A.new; // Error.
+//                            ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:17:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
+//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
+// A Function(int) test6() => A.bar1; // Error.
+//                            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor foo1() → self::A
+    : super core::Object::•() {}
+  constructor foo2(core::int x) → self::A
+    : super core::Object::•() {}
+  constructor •() → self::A
+    : super core::Object::•() {}
+  static factory bar1() → self::A
+    return new self::A::•();
+}
+static method test1() → () → self::A
+  return #C1;
+static method test2() → () → self::A
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:13:25: Error: A value of type 'A Function(int)' can't be returned from a function with return type 'A Function()'.
+ - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
+A Function() test2() => A.foo2; // Error.
+                        ^" in #C2 as{TypeError,ForNonNullableByDefault} () → self::A;
+static method test3() → () → self::A
+  return #C3;
+static method test4() → (core::int) → self::A
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:15:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
+ - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
+A Function(int) test4() => A.new; // Error.
+                           ^" in #C3 as{TypeError,ForNonNullableByDefault} (core::int) → self::A;
+static method test5() → () → self::A
+  return #C4;
+static method test6() → (core::int) → self::A
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart:17:28: Error: A value of type 'A Function()' can't be returned from a function with return type 'A Function(int)'.
+ - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_with_context.dart'.
+A Function(int) test6() => A.bar1; // Error.
+                           ^" in #C4 as{TypeError,ForNonNullableByDefault} (core::int) → self::A;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::foo1
+  #C2 = constructor-tearoff self::A::foo2
+  #C3 = constructor-tearoff self::A::•
+  #C4 = constructor-tearoff self::A::bar1
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.modular.expect
new file mode 100644
index 0000000..22aef61
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart.weak.modular.expect
@@ -0,0 +1,64 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart:15:23: Error: The static type of the explicit instantiation operand must be a generic function type but is 'A Function()'.
+//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart'.
+// Try changing the operand or remove the type arguments.
+// testFooExtraArgs() => A<int>.foo; // Error.
+//                       ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart:16:23: Error: The static type of the explicit instantiation operand must be a generic function type but is 'A Function()'.
+//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart'.
+// Try changing the operand or remove the type arguments.
+// testNewExtraArgs() => A<int>.new; // Error.
+//                       ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart:17:23: Error: The static type of the explicit instantiation operand must be a generic function type but is 'A Function()'.
+//  - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart'.
+// Try changing the operand or remove the type arguments.
+// testBarExtraArgs() => A<int>.bar; // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor foo() → self::A
+    : super core::Object::•() {}
+  constructor •() → self::A
+    : super core::Object::•() {}
+  static factory bar() → self::A
+    return new self::A::•();
+}
+static method testFoo() → dynamic
+  return #C1;
+static method testNew() → dynamic
+  return #C2;
+static method testBar() → dynamic
+  return #C3;
+static method testFooExtraArgs() → dynamic
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart:15:23: Error: The static type of the explicit instantiation operand must be a generic function type but is 'A Function()'.
+ - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart'.
+Try changing the operand or remove the type arguments.
+testFooExtraArgs() => A<int>.foo; // Error.
+                      ^";
+static method testNewExtraArgs() → dynamic
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart:16:23: Error: The static type of the explicit instantiation operand must be a generic function type but is 'A Function()'.
+ - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart'.
+Try changing the operand or remove the type arguments.
+testNewExtraArgs() => A<int>.new; // Error.
+                      ^";
+static method testBarExtraArgs() → dynamic
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart:17:23: Error: The static type of the explicit instantiation operand must be a generic function type but is 'A Function()'.
+ - 'A' is from 'pkg/front_end/testcases/constructor_tearoffs/nongeneric_tearoff_without_context.dart'.
+Try changing the operand or remove the type arguments.
+testBarExtraArgs() => A<int>.bar; // Error.
+                      ^";
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::foo
+  #C2 = constructor-tearoff self::A::•
+  #C3 = constructor-tearoff self::A::bar
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.modular.expect
new file mode 100644
index 0000000..b3fb9eb
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/not_unresolved_constructor_invocation.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+  constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+    : super core::Object::•()
+    ;
+  static method unresolvedConstructor() → dynamic {}
+}
+class unresolved_prefix extends core::Object {
+  synthetic constructor •() → self::unresolved_prefix
+    : super core::Object::•()
+    ;
+  static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+class resolved_prefix extends core::Object {
+  synthetic constructor •() → self::resolved_prefix
+    : super core::Object::•()
+    ;
+  static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+}
+extension Extension on core::Function {
+  method unresolvedConstructor = self::Extension|unresolvedConstructor;
+  tearoff unresolvedConstructor = self::Extension|get#unresolvedConstructor;
+}
+static method UnresolvedClass<T extends core::Object? = dynamic>() → dynamic {}
+static method Extension|unresolvedConstructor(lowered final core::Function #this) → dynamic {}
+static method Extension|get#unresolvedConstructor(lowered final core::Function #this) → () → dynamic
+  return () → dynamic => self::Extension|unresolvedConstructor(#this);
+static method main() → dynamic {
+  self::UnresolvedClass<dynamic>();
+  self::Extension|unresolvedConstructor(#C1);
+  self::Extension|unresolvedConstructor(#C1);
+  self::unresolved_prefix::UnresolvedClass<dynamic>();
+  self::unresolved_prefix::UnresolvedClass<dynamic>();
+  self::Extension|unresolvedConstructor(#C2);
+  self::Extension|unresolvedConstructor(#C2);
+  self::UnresolvedClass<core::int>();
+  self::UnresolvedClass<core::int>();
+  self::Extension|unresolvedConstructor(#C3);
+  self::Extension|unresolvedConstructor(#C3);
+  self::unresolved_prefix::UnresolvedClass<core::int>();
+  self::unresolved_prefix::UnresolvedClass<core::int>();
+  self::Extension|unresolvedConstructor(#C4);
+  self::Extension|unresolvedConstructor(#C4);
+  self::ResolvedClass::unresolvedConstructor();
+  self::ResolvedClass::unresolvedConstructor();
+  self::resolved_prefix::UnresolvedClass<dynamic>();
+  self::resolved_prefix::UnresolvedClass<dynamic>();
+  self::Extension|unresolvedConstructor(#C5);
+  self::Extension|unresolvedConstructor(#C5);
+  self::resolved_prefix::UnresolvedClass<core::int>();
+  self::resolved_prefix::UnresolvedClass<core::int>();
+  self::Extension|unresolvedConstructor(#C6);
+  self::Extension|unresolvedConstructor(#C6);
+}
+
+constants  {
+  #C1 = static-tearoff self::UnresolvedClass
+  #C2 = static-tearoff self::unresolved_prefix::UnresolvedClass
+  #C3 = instantiation #C1 <core::int*>
+  #C4 = instantiation #C2 <core::int*>
+  #C5 = static-tearoff self::resolved_prefix::UnresolvedClass
+  #C6 = instantiation #C5 <core::int*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.modular.expect
new file mode 100644
index 0000000..4e40f0b
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:20:5: Error: Expected ';' after this.
+//   A x3 f3();
+//     ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3]/*isLegacy*/;
+  constructor •() → self::A
+    : super core::Object::•()
+    ;
+  static factory redirectingFactory() → self::A
+    return new self::A::•();
+  static factory redirectingFactoryChild() → self::A
+    return new self::B::•();
+  static factory redirectingTwice() → self::A
+    return self::A::redirectingFactory();
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+static method test() → dynamic {
+  () → self::A f1 = #C4;
+  () → self::A f2 = #C5;
+  () → self::A f3 = #C6;
+  self::A x1 = f1(){() → self::A};
+  self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
+  self::A x3;
+  f3(){() → self::A};
+}
+static method main() → dynamic
+  return self::test();
+
+constants  {
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = constructor-tearoff self::A::redirectingTwice
+  #C4 = redirecting-factory-tearoff self::A::redirectingFactory
+  #C5 = redirecting-factory-tearoff self::A::redirectingFactoryChild
+  #C6 = redirecting-factory-tearoff self::A::redirectingTwice
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..05e5e9d
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart.weak.modular.expect
@@ -0,0 +1,280 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f3a(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f3a(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f4a(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f5a(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+// Try removing the extra positional arguments.
+//     f5a(42, 87, 123); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f6a(); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
+//     f6a(42); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     f6a(42, 87); // error
+//        ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
+//     f6a(field1: 87, field2: 87); // error
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor _() → self::Class1
+    : super core::Object::•()
+    ;
+  static factory •() → self::Class1
+    return new self::Class1::_();
+}
+class Class2 extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor __() → self::Class2
+    : super core::Object::•()
+    ;
+  static factory _() → self::Class2
+    return new self::Class2::__();
+  static factory named() → self::Class2
+    return self::Class2::_();
+}
+class Class3 extends core::Object {
+  final field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
+  constructor _(core::int field) → self::Class3
+    : self::Class3::field = field, super core::Object::•()
+    ;
+  static factory •(core::int field) → self::Class3
+    return new self::Class3::_(field);
+}
+class Class4 extends core::Object {
+  final field core::int? field;
+  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
+  constructor _([core::int? field = #C5]) → self::Class4
+    : self::Class4::field = field, super core::Object::•()
+    ;
+  static factory •([core::int? field = #C5]) → self::Class4
+    return new self::Class4::_(field);
+}
+class Class5 extends core::Object {
+  final field core::int field1;
+  final field core::int? field2;
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
+    : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
+    ;
+  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
+    return new self::Class5::_(field1, field2);
+}
+class Class6 extends core::Object {
+  final field core::int field1;
+  final field core::int? field2;
+  final field core::int field3;
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
+    : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
+    ;
+  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
+    return new self::Class6::_(field1, field2: field2, field3: field3);
+}
+class Class7a extends core::Object implements self::Class7b {
+  constructor •() → self::Class7a
+    : super core::Object::•()
+    ;
+}
+class Class7b extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
+  static factory •() → self::Class7b
+    return new self::Class7a::•();
+}
+class Class8a<T extends core::Object? = dynamic> extends core::Object implements self::Class8b<self::Class8a::T%> {
+  constructor •() → self::Class8a<self::Class8a::T%>
+    : super core::Object::•()
+    ;
+}
+class Class8b<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/;
+  static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
+    return new self::Class8a::•<self::Class8b::•::T%>();
+}
+static final field core::bool inSoundMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static method main() → dynamic {
+  core::print("inSoundMode: ${self::inSoundMode}");
+  self::testNoArgs();
+  self::testArgs();
+}
+static method testNoArgs() → dynamic {
+  () → self::Class1 f1a = #C10;
+  self::Class1 c1a = f1a(){() → self::Class1};
+  self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
+  dynamic f1b = #C10;
+  dynamic c1b = f1b{dynamic}.call();
+  self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
+  self::expect(true, core::identical(f1a, f1b));
+  () → self::Class2 f2a = #C11;
+  self::Class2 c2a = f2a(){() → self::Class2};
+  self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
+  dynamic f2b = #C11;
+  dynamic c2b = f2b{dynamic}.call();
+  self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
+  self::expect(true, core::identical(f2a, f2b));
+}
+static method testArgs() → dynamic {
+  (core::int) → self::Class3 f3a = #C12;
+  self::Class3 c3a = f3a(42){(core::int) → self::Class3};
+  self::expect(42, c3a.{self::Class3::field}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:99:8: Error: Too few positional arguments: 1 required, 0 given.
+    f3a(); // error
+       ^" in f3a{<inapplicable>}.();
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:100:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f3a(42, 87); // error
+       ^" in f3a{<inapplicable>}.(42, 87);
+  };
+  dynamic f3b = #C12;
+  dynamic c3b = f3b{dynamic}.call(87);
+  self::expect(87, c3b{dynamic}.field);
+  self::throws(() → dynamic => f3b{dynamic}.call());
+  self::throws(() → dynamic => f3b{dynamic}.call(42, 87));
+  ([core::int?]) → self::Class4 f4a = #C13;
+  self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
+  self::expect(null, c4a.{self::Class4::field}{core::int?});
+  self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
+  self::expect(42, c4b.{self::Class4::field}{core::int?});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:115:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f4a(42, 87); // error
+       ^" in f4a{<inapplicable>}.(42, 87);
+  };
+  dynamic f4b = #C13;
+  self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
+  (core::int, [core::int?]) → self::Class5 f5a = #C14;
+  self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
+  self::expect(42, c5a.{self::Class5::field1}{core::int});
+  self::expect(null, c5a.{self::Class5::field2}{core::int?});
+  self::Class5 c5b = f5a(87, 42){(core::int, [core::int?]) → self::Class5};
+  self::expect(87, c5b.{self::Class5::field1}{core::int});
+  self::expect(42, c5b.{self::Class5::field2}{core::int?});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:129:8: Error: Too few positional arguments: 1 required, 0 given.
+    f5a(); // error
+       ^" in f5a{<inapplicable>}.();
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:130:8: Error: Too many positional arguments: 2 allowed, but 3 found.
+Try removing the extra positional arguments.
+    f5a(42, 87, 123); // error
+       ^" in f5a{<inapplicable>}.(42, 87, 123);
+  };
+  dynamic f5b = #C14;
+  self::throws(() → dynamic => f5b{dynamic}.call());
+  self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
+  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C15;
+  self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
+  self::expect(42, c6a.{self::Class6::field1}{core::int});
+  self::expect(null, c6a.{self::Class6::field2}{core::int?});
+  self::expect(87, c6a.{self::Class6::field3}{core::int});
+  () → Null {
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:142:8: Error: Too few positional arguments: 1 required, 0 given.
+    f6a(); // error
+       ^" in f6a{<inapplicable>}.();
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:143:8: Error: Required named parameter 'field3' must be provided.
+    f6a(42); // error
+       ^" in f6a{<inapplicable>}.(42);
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:144:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    f6a(42, 87); // error
+       ^" in f6a{<inapplicable>}.(42, 87);
+    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_factory_tear_off.dart:145:8: Error: Too few positional arguments: 1 required, 0 given.
+    f6a(field1: 87, field2: 87); // error
+       ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
+  };
+  self::Class6 c6b = f6a(42, field2: 123, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
+  self::expect(42, c6b.{self::Class6::field1}{core::int});
+  self::expect(123, c6b.{self::Class6::field2}{core::int?});
+  self::expect(87, c6b.{self::Class6::field3}{core::int});
+  self::Class6 c6c = f6a(87, field3: 42, field2: 123){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
+  self::expect(87, c6c.{self::Class6::field1}{core::int});
+  self::expect(123, c6c.{self::Class6::field2}{core::int?});
+  self::expect(42, c6c.{self::Class6::field3}{core::int});
+  dynamic f6b = #C15;
+  self::throws(() → dynamic => f6b{dynamic}.call());
+  self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
+  self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
+  self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
+  () → self::Class7b f7a = #C16;
+  self::Class7b c7a = f7a(){() → self::Class7b};
+  self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
+  self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
+  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C17;
+  self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
+  self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
+  self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
+  self::Class8b<core::int> c8b = f8a<core::int>(){() → self::Class8b<core::int>};
+  self::expect(true, c8b is{ForNonNullableByDefault} self::Class8a<core::int>);
+  self::expect(true, c8b is{ForNonNullableByDefault} self::Class8b<core::int>);
+  self::expect(false, c8b is{ForNonNullableByDefault} self::Class8b<core::String>);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C18}) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print("Thrown: ${e}");
+    return;
+  }
+  if(!self::inSoundMode && inSoundModeOnly) {
+    return;
+  }
+  throw "Expected exception";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = constructor-tearoff self::Class2::named
+  #C3 = constructor-tearoff self::Class3::•
+  #C4 = constructor-tearoff self::Class4::•
+  #C5 = null
+  #C6 = constructor-tearoff self::Class5::•
+  #C7 = constructor-tearoff self::Class6::•
+  #C8 = constructor-tearoff self::Class7b::•
+  #C9 = constructor-tearoff self::Class8b::•
+  #C10 = redirecting-factory-tearoff self::Class1::•
+  #C11 = redirecting-factory-tearoff self::Class2::named
+  #C12 = redirecting-factory-tearoff self::Class3::•
+  #C13 = redirecting-factory-tearoff self::Class4::•
+  #C14 = redirecting-factory-tearoff self::Class5::•
+  #C15 = redirecting-factory-tearoff self::Class6::•
+  #C16 = redirecting-factory-tearoff self::Class7b::•
+  #C17 = redirecting-factory-tearoff self::Class8b::•
+  #C18 = false
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/simple_instantiated_type_literals.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/simple_instantiated_type_literals.dart.weak.modular.expect
new file mode 100644
index 0000000..1e0382a
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/simple_instantiated_type_literals.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method foo() → dynamic
+  return #C1;
+static method bar() → dynamic {
+  core::Type listString = #C2;
+  return listString;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(core::List<core::int*>*)
+  #C2 = TypeLiteralConstant(core::List<core::String*>*)
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.weak.modular.expect
new file mode 100644
index 0000000..2949323
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart.weak.modular.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart:32:18: Error: Constant evaluation error:
+// test4() => const StaticIdentityTest(A4.new, B4.new); // Error.
+//                  ^
+// pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart:26:43: Context: This assertion failed.
+//   const StaticIdentityTest(a, b) : assert(identical(a, b));
+//                                           ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart:33:18: Error: Constant evaluation error:
+// test5() => const StaticIdentityTest(A5.new, B5.new); // Error.
+//                  ^
+// pkg/front_end/testcases/constructor_tearoffs/simple_proper_rename_identity.dart:26:43: Context: This assertion failed.
+//   const StaticIdentityTest(a, b) : assert(identical(a, b));
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef B1<T extends core::Object? = dynamic> = self::A1<T%>;
+typedef B2<T extends core::num> = self::A2<T>;
+typedef B3<T extends core::List<core::Object?>, S extends Null> = self::A3<T, S%>;
+typedef B4<T extends core::int> = self::A4<T>;
+typedef B5<unrelated T extends core::List<core::Object?>, unrelated S extends Null> = self::A5<core::List<dynamic>, Never?>;
+class A1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A1<self::A1::T%>
+    : super core::Object::•()
+    ;
+}
+class A2<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A2<self::A2::T>
+    : super core::Object::•()
+    ;
+}
+class A3<T extends core::List<dynamic>, S extends Never?> extends core::Object {
+  synthetic constructor •() → self::A3<self::A3::T, self::A3::S%>
+    : super core::Object::•()
+    ;
+}
+class A4<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A4<self::A4::T>
+    : super core::Object::•()
+    ;
+}
+class A5<T extends core::List<dynamic>, S extends Never?> extends core::Object {
+  synthetic constructor •() → self::A5<self::A5::T, self::A5::S%>
+    : super core::Object::•()
+    ;
+}
+class StaticIdentityTest extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic a, dynamic b) → self::StaticIdentityTest
+    : assert(core::identical(a, b)), super core::Object::•()
+    ;
+}
+static method test1() → dynamic
+  return #C1;
+static method test2() → dynamic
+  return #C1;
+static method test3() → dynamic
+  return #C1;
+static method test4() → dynamic
+  return invalid-expression "This assertion failed.";
+static method test5() → dynamic
+  return invalid-expression "This assertion failed.";
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::StaticIdentityTest {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///simple_proper_rename_identity.dart:
+- StaticIdentityTest. (from org-dartlang-testcase:///simple_proper_rename_identity.dart:26:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.modular.expect
new file mode 100644
index 0000000..6f79e9e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart.weak.modular.expect
@@ -0,0 +1,87 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) f4 = A<int>.foo; // Error.
+//                                 ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var f5 = A<int>.foo; // Error.
+//                   ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) g4 = D1<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var g5 = D1<int>.foo; // Error.
+//                    ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   int Function(int) h4 = D2<int>.foo; // Error.
+//                                  ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+// Try removing the type arguments or placing them after the member name.
+//   var h5 = D2<int>.foo; // Error.
+//                    ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef D1<X extends core::Object? = dynamic> = self::A<X%>;
+typedef D2<X extends core::num> = self::A<X>;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  static method foo<X extends core::Object? = dynamic>(self::A::foo::X% x) → self::A::foo::X%
+    return x;
+}
+static method test() → dynamic {
+  <Y extends core::Object? = dynamic>(Y%) → Y% f1 = #C1;
+  (core::int) → core::int f2 = #C2;
+  (core::int) → core::int f3 = #C2;
+  (core::int) → core::int f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:16:33: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) f4 = A<int>.foo; // Error.
+                                ^^^";
+  invalid-type f5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:17:19: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var f5 = A<int>.foo; // Error.
+                  ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% g1 = #C1;
+  (core::int) → core::int g2 = #C2;
+  (core::int) → core::int g3 = #C2;
+  (core::int) → core::int g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:22:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) g4 = D1<int>.foo; // Error.
+                                 ^^^";
+  invalid-type g5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:23:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var g5 = D1<int>.foo; // Error.
+                   ^^^";
+  <Y extends core::Object? = dynamic>(Y%) → Y% h1 = #C1;
+  (core::int) → core::int h2 = #C2;
+  (core::int) → core::int h3 = #C2;
+  (core::int) → core::int h4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:28:34: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  int Function(int) h4 = D2<int>.foo; // Error.
+                                 ^^^";
+  invalid-type h5 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/static_tearoff_from_instantiated_class.dart:29:20: Error: Cannot access static member on an instantiated generic class.
+Try removing the type arguments or placing them after the member name.
+  var h5 = D2<int>.foo; // Error.
+                   ^^^";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::A::foo
+  #C2 = instantiation #C1 <core::int*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.modular.expect
new file mode 100644
index 0000000..f075526
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart.weak.modular.expect
@@ -0,0 +1,141 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:28:25: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'DA2'.
+// Try changing type arguments so that they conform to the bounds.
+// A Function() test5() => DA2<String>.new; // Error.
+//                         ^
+// pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:15:13: Context: This is the type variable whose bound isn't conformed to.
+// typedef DA2<X extends num> = A;
+//             ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:33:30: Error: A value of type 'B<String> Function()' can't be returned from a function with return type 'B<num> Function()'.
+//  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
+// B<num> Function() test9() => DB1.new; // Error.
+//                              ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be assigned to a variable of type 'B<Y> Function<Y>()'.
+//  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
+// B<Y> Function<Y>() test17() => DB2.new; // Error.
+//                                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be returned from a function with return type 'B<Y> Function<Y>()'.
+//  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
+// B<Y> Function<Y>() test17() => DB2.new; // Error.
+//                                ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be assigned to a variable of type 'B<Y> Function<Y, Z>()'.
+//  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
+// B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
+//                                   ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be returned from a function with return type 'B<Y> Function<Y, Z>()'.
+//  - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
+// B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
+//                                   ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef DA1 = self::A;
+typedef DA2<unrelated X extends core::num> = self::A;
+typedef DB1 = self::B<core::String>;
+typedef DB2<X extends core::num> = self::B<X>;
+typedef DB3<X extends core::num, unrelated Y extends core::String> = self::B<X>;
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B<X extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+  constructor foo() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+  static factory bar<X extends core::Object? = dynamic>() → self::B<self::B::bar::X%>
+    return new self::B::•<self::B::bar::X%>();
+}
+static method test1() → () → self::A
+  return #C1;
+static method test2() → () → self::A
+  return #C1;
+static method test3() → () → self::A
+  return #C2;
+static method test4() → () → self::A
+  return #C2;
+static method test5() → () → self::A
+  return #C1;
+static method test6() → () → self::A
+  return #C1;
+static method test7() → () → self::B<core::String>
+  return #C4;
+static method test8() → () → self::B<core::String>
+  return #C4;
+static method test9() → () → self::B<core::num>
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:33:30: Error: A value of type 'B<String> Function()' can't be returned from a function with return type 'B<num> Function()'.
+ - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
+B<num> Function() test9() => DB1.new; // Error.
+                             ^" in #C4 as{TypeError,ForNonNullableByDefault} () → self::B<core::num>;
+static method test10() → () → self::B<core::String>
+  return #C6;
+static method test11() → () → self::B<core::String>
+  return #C8;
+static method test12() → () → self::B<core::num>
+  return #C9;
+static method test13() → () → self::B<core::num>
+  return #C10;
+static method test14() → () → self::B<core::num>
+  return #C11;
+static method test15() → () → self::B<core::num>
+  return #C9;
+static method test16() → <Y extends core::num = dynamic>() → self::B<Y>
+  return #C12;
+static method test17() → <Y extends core::Object? = dynamic>() → self::B<Y%>
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be returned from a function with return type 'B<Y> Function<Y>()'.
+ - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
+B<Y> Function<Y>() test17() => DB2.new; // Error.
+                               ^" in invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:42:32: Error: A value of type 'B<X> Function<X extends num>()' can't be assigned to a variable of type 'B<Y> Function<Y>()'.
+ - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
+B<Y> Function<Y>() test17() => DB2.new; // Error.
+                               ^" in #C12 as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic>() → self::B<Y%> as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic>() → self::B<Y%>;
+static method test18() → () → self::B<core::num>
+  return #C9;
+static method test19() → () → self::B<core::num>
+  return #C10;
+static method test20() → () → self::B<core::num>
+  return #C11;
+static method test21() → () → self::B<core::num>
+  return #C9;
+static method test22() → <Y extends core::num = dynamic, Z extends core::String = dynamic>() → self::B<Y>
+  return #C13;
+static method test23() → <Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>() → self::B<Y%>
+  return invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be returned from a function with return type 'B<Y> Function<Y, Z>()'.
+ - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
+B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
+                                  ^" in invalid-expression "pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart:49:35: Error: A value of type 'B<X> Function<X extends num, Y extends String>()' can't be assigned to a variable of type 'B<Y> Function<Y, Z>()'.
+ - 'B' is from 'pkg/front_end/testcases/constructor_tearoffs/typedef_tearoffs.dart'.
+B<Y> Function<Y, Z>() test23() => DB3.new; // Error.
+                                  ^" in #C13 as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>() → self::B<Y%> as{TypeError,ForNonNullableByDefault} <Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>() → self::B<Y%>;
+static method test24() → () → self::B<core::String>
+  return #C14;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = instantiation #C1 <>
+  #C3 = constructor-tearoff self::B::•
+  #C4 = instantiation #C3 <core::String*>
+  #C5 = constructor-tearoff self::B::foo
+  #C6 = instantiation #C5 <core::String*>
+  #C7 = constructor-tearoff self::B::bar
+  #C8 = instantiation #C7 <core::String*>
+  #C9 = instantiation #C3 <core::num*>
+  #C10 = instantiation #C5 <core::num*>
+  #C11 = instantiation #C7 <core::num*>
+  #C12 = typedef-tearoff <X extends core::num>.(#C3<X>)
+  #C13 = typedef-tearoff <X extends core::num, unrelated Y extends core::String>.(#C3<X>)
+  #C14 = instantiation #C3 <Never*>
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..34009a6
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.modular.expect
@@ -0,0 +1,72 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
+  constructor •() → self::A
+    : super core::Object::•()
+    ;
+  constructor redirecting() → self::A
+    : this self::A::•()
+    ;
+  static factory redirectingFactory() → self::A
+    return new self::A::•();
+  static factory redirectingFactoryChild() → self::A
+    return new self::B::•();
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor •(core::int x) → self::C
+    : self::C::x = x, super core::Object::•()
+    ;
+}
+class D extends self::C {
+  constructor •(core::int x) → self::D
+    : super self::C::•(x.{core::num::*}(2){(core::num) → core::int})
+    ;
+}
+static method test() → dynamic {
+  new self::D::•(1);
+  #C4;
+  new self::C::•(1);
+  () → self::A f1 = #C5;
+  () → self::B f2 = #C6;
+  (core::int) → self::C f3 = #C7;
+  (core::int) → self::D f4 = #C8;
+  f1(){() → self::A};
+  f2(){() → self::B};
+  f3(1){(core::int) → self::C};
+  f4(1){(core::int) → self::D};
+  () → self::A g1 = #C5;
+  () → self::B g2 = #C6;
+  (core::int) → self::C g3 = #C7;
+  (core::int) → self::D g4 = #C8;
+  g1(){() → self::A};
+  g2(){() → self::B};
+  g3(1){(core::int) → self::C};
+  g4(1){(core::int) → self::D};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::redirectingFactory
+  #C2 = constructor-tearoff self::A::redirectingFactoryChild
+  #C3 = 1
+  #C4 = self::C {x:#C3}
+  #C5 = constructor-tearoff self::A::•
+  #C6 = constructor-tearoff self::B::•
+  #C7 = constructor-tearoff self::C::•
+  #C8 = constructor-tearoff self::D::•
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///unnamed_constructor.dart:
+- C. (from org-dartlang-testcase:///unnamed_constructor.dart:16:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.weak.modular.expect
new file mode 100644
index 0000000..920c962
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.weak.modular.expect
@@ -0,0 +1,858 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:12:26: Error: Superclass has no constructor named 'Super'.
+//   Class.constructor1() : super();
+//                          ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:13:26: Error: Superclass has no constructor named 'Super.unresolved'.
+//   Class.constructor2() : super.unresolved();
+//                          ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:14:26: Error: Couldn't find constructor 'Class'.
+//   Class.constructor3() : this();
+//                          ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:15:26: Error: Couldn't find constructor 'Class.unresolved'.
+//   Class.constructor4() : this.unresolved();
+//                          ^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:23:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:24:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:25:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:27:3: Error: Undefined name 'UnresolvedClass'.
+//   UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:28:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   new UnresolvedClass.unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:29:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   const UnresolvedClass.unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:30:3: Error: Undefined name 'UnresolvedClass'.
+//   UnresolvedClass /**/ .unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:31:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   new UnresolvedClass. /**/ unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:32:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   const UnresolvedClass /**/ .unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:34:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:35:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:36:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:37:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix. /**/ UnresolvedClass();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:38:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix /**/ .UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:39:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix. /**/ UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:41:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:42:41: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                                         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:43:43: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:44:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:45:47: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+//                                               ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:46:55: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+//                                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:48:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:49:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:50:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:51:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass /**/ <int>();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:52:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int> /**/ ();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:53:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass /**/ <int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:55:3: Error: Couldn't find constructor 'UnresolvedClass'.
+//   UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:56:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int>.unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:57:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>.unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:58:3: Error: Couldn't find constructor 'UnresolvedClass'.
+//   UnresolvedClass /**/ <int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:59:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int> /**/ .unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:60:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>. /**/ unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:62:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:63:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass<int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:64:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass<int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:65:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:66:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:67:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass<int> /**/ ();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:69:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:70:46: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                              ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:71:48: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:72:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:73:52: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+//                                                    ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:74:54: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+//                                                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:76:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:77:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:78:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:80:17: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass.unresolvedConstructor();
+//                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:81:21: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass.unresolvedConstructor();
+//                     ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:82:23: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:83:23: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:84:27: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass. /**/ unresolvedConstructor();
+//                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:85:29: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass /**/ .unresolvedConstructor();
+//                             ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:87:19: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:88:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:89:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:90:25: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix. /**/ UnresolvedClass();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:91:29: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix /**/ .UnresolvedClass();
+//                             ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:92:31: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix. /**/ UnresolvedClass();
+//                               ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:94:19: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix.ResolvedClass();
+//                   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:95:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:96:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:97:25: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix. /**/ ResolvedClass();
+//                         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:98:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix /**/ .ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:99:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix. /**/ ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:101:19: Error: Undefined name 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:102:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:103:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:104:25: Error: Undefined name 'UnresolvedClass'.
+//   resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:105:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:106:31: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+//                               ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:108:33: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:109:37: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                     ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:110:39: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:111:39: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+//                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:112:43: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+//                                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:113:51: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+//                                                   ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:115:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass<int>();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:116:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass<int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:117:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass<int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:118:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass /**/ <int>();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:119:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:120:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass /**/ <int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:122:22: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass<int>.unresolvedConstructor();
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:123:26: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass<int>.unresolvedConstructor();
+//                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:124:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass<int>.unresolvedConstructor();
+//                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:125:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass<int> /**/ .unresolvedConstructor();
+//                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:126:32: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass<int>. /**/ unresolvedConstructor();
+//                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:127:34: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass /**/ <int>.unresolvedConstructor();
+//                                  ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:129:19: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass<int>();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:130:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int>();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:131:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int>();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:132:25: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix. /**/ UnresolvedClass<int>();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:133:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass /**/ <int>();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:134:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int> /**/ ();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:136:19: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix.ResolvedClass<int>();
+//                   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:137:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass<int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:138:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass<int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:139:25: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix. /**/ ResolvedClass<int>();
+//                         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:140:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:141:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass<int> /**/ ();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:143:19: Error: Couldn't find constructor 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:144:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:145:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:146:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:147:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:149:14: Error: Couldn't find constructor 'UnresolvedClass'.
+//       . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+//              ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:151:38: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:152:42: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:153:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:154:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+//                                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:155:48: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:156:56: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+//                                                        ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///unresolved_constructor_invocation.dart" as resolved_prefix;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Class extends self::Super {
+  constructor constructor1() → self::Class
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:12:26: Error: Superclass has no constructor named 'Super'.
+  Class.constructor1() : super();
+                         ^^^^^"
+    ;
+  constructor constructor2() → self::Class
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:13:26: Error: Superclass has no constructor named 'Super.unresolved'.
+  Class.constructor2() : super.unresolved();
+                         ^^^^^"
+    ;
+  constructor constructor3() → self::Class
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:14:26: Error: Couldn't find constructor 'Class'.
+  Class.constructor3() : this();
+                         ^^^^"
+    ;
+  constructor constructor4() → self::Class
+    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:15:26: Error: Couldn't find constructor 'Class.unresolved'.
+  Class.constructor4() : this.unresolved();
+                         ^^^^"
+    ;
+}
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+  constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:23:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:24:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:25:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:27:3: Error: Undefined name 'UnresolvedClass'.
+  UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:28:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  new UnresolvedClass.unresolvedConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:29:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  const UnresolvedClass.unresolvedConstructor();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:30:3: Error: Undefined name 'UnresolvedClass'.
+  UnresolvedClass /**/ .unresolvedConstructor();
+  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:31:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  new UnresolvedClass. /**/ unresolvedConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:32:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  const UnresolvedClass /**/ .unresolvedConstructor();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:34:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:35:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:36:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:37:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix. /**/ UnresolvedClass();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:38:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix /**/ .UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:39:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix. /**/ UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:41:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:42:41: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+                                        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:43:43: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+                                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:44:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:45:47: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+                                              ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:46:55: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+                                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:48:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:49:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:50:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:51:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass /**/ <int>();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:52:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int> /**/ ();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:53:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass /**/ <int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:55:3: Error: Couldn't find constructor 'UnresolvedClass'.
+  UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:56:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int>.unresolvedConstructor();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:57:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>.unresolvedConstructor();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:58:3: Error: Couldn't find constructor 'UnresolvedClass'.
+  UnresolvedClass /**/ <int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:59:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int> /**/ .unresolvedConstructor();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:60:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>. /**/ unresolvedConstructor();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:62:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:63:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass<int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:64:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass<int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:65:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass<core::int>();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:66:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:67:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass<int> /**/ ();
+        ^^^^^^^^^^^^^^^";
+  (invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:69:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass<core::int>){dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:70:46: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                             ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:71:48: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  (invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:72:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass<core::int>){dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:73:52: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+                                                   ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:74:54: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+                                                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:76:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:77:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:78:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:80:17: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass.unresolvedConstructor();
+                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:81:21: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass.unresolvedConstructor();
+                    ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:82:23: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:83:23: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:84:27: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass. /**/ unresolvedConstructor();
+                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:85:29: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass /**/ .unresolvedConstructor();
+                            ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:87:19: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:88:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:89:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:90:25: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix. /**/ UnresolvedClass();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:91:29: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix /**/ .UnresolvedClass();
+                            ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:92:31: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix. /**/ UnresolvedClass();
+                              ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:94:19: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix.ResolvedClass();
+                  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:95:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:96:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:97:25: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix. /**/ ResolvedClass();
+                        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:98:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix /**/ .ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:99:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix. /**/ ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:101:19: Error: Undefined name 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:102:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:103:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:104:25: Error: Undefined name 'UnresolvedClass'.
+  resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:105:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:106:31: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+                              ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:108:33: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:109:37: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                    ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:110:39: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:111:39: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:112:43: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+                                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:113:51: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+                                                  ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:115:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass<int>();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:116:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass<int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:117:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass<int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:118:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass /**/ <int>();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:119:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:120:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass /**/ <int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:122:22: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass<int>.unresolvedConstructor();
+                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:123:26: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass<int>.unresolvedConstructor();
+                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:124:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass<int>.unresolvedConstructor();
+                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:125:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass<int> /**/ .unresolvedConstructor();
+                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:126:32: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass<int>. /**/ unresolvedConstructor();
+                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:127:34: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass /**/ <int>.unresolvedConstructor();
+                                 ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:129:19: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass<int>();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:130:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int>();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:131:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int>();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:132:25: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix. /**/ UnresolvedClass<int>();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:133:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass /**/ <int>();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:134:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int> /**/ ();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:136:19: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix.ResolvedClass<int>();
+                  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:137:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass<int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:138:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass<int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:139:25: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix. /**/ ResolvedClass<int>();
+                        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:140:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:141:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass<int> /**/ ();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:143:19: Error: Couldn't find constructor 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:144:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:145:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:146:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:147:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:149:14: Error: Couldn't find constructor 'UnresolvedClass'.
+      . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+             ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:151:38: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:152:42: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:153:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:154:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+                                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:155:48: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:156:56: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+                                                       ^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/dart2js/conditional_import.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/conditional_import.dart.weak.modular.expect
new file mode 100644
index 0000000..5f33ec1
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/conditional_import.dart.weak.modular.expect
@@ -0,0 +1,84 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dart2js/conditional_import.dart:18:11: Error: The getter 'readyState' isn't defined for the class 'HttpRequest'.
+//  - 'HttpRequest' is from 'dart:_http'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'readyState'.
+//   request.readyState; // ok (from dart:html)
+//           ^^^^^^^^^^
+//
+// pkg/front_end/testcases/dart2js/conditional_import.dart:23:11: Error: The getter 'certificate' isn't defined for the class 'HttpRequest'.
+//  - 'HttpRequest' is from 'pkg/front_end/testcases/dart2js/conditional_import.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'certificate'.
+//   request.certificate; // error
+//           ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/dart2js/conditional_import.dart:24:11: Error: The getter 'response' isn't defined for the class 'HttpRequest'.
+//  - 'HttpRequest' is from 'pkg/front_end/testcases/dart2js/conditional_import.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'response'.
+//   request.response; // error
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/dart2js/conditional_import.dart:25:11: Error: The getter 'readyState' isn't defined for the class 'HttpRequest'.
+//  - 'HttpRequest' is from 'pkg/front_end/testcases/dart2js/conditional_import.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'readyState'.
+//   request.readyState; // error
+//           ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_http" as _ht;
+import "dart:io" as io;
+
+import "dart:io" as a;
+import "org-dartlang-testcase:///conditional_import.dart" as b;
+
+class HttpRequest extends core::Object {
+  synthetic constructor •() → self::HttpRequest
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::HttpRequest
+    return new self::HttpRequest::•();
+}
+static method testA(_ht::HttpRequest request) → dynamic {
+  request.{_ht::HttpRequest::certificate}{io::X509Certificate?};
+  request.{_ht::HttpRequest::response}{_ht::HttpResponse};
+  invalid-expression "pkg/front_end/testcases/dart2js/conditional_import.dart:18:11: Error: The getter 'readyState' isn't defined for the class 'HttpRequest'.
+ - 'HttpRequest' is from 'dart:_http'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'readyState'.
+  request.readyState; // ok (from dart:html)
+          ^^^^^^^^^^" in request{<unresolved>}.readyState;
+  request.{core::Object::hashCode}{core::int};
+}
+static method testB(self::HttpRequest request) → dynamic {
+  invalid-expression "pkg/front_end/testcases/dart2js/conditional_import.dart:23:11: Error: The getter 'certificate' isn't defined for the class 'HttpRequest'.
+ - 'HttpRequest' is from 'pkg/front_end/testcases/dart2js/conditional_import.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'certificate'.
+  request.certificate; // error
+          ^^^^^^^^^^^" in request{<unresolved>}.certificate;
+  invalid-expression "pkg/front_end/testcases/dart2js/conditional_import.dart:24:11: Error: The getter 'response' isn't defined for the class 'HttpRequest'.
+ - 'HttpRequest' is from 'pkg/front_end/testcases/dart2js/conditional_import.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'response'.
+  request.response; // error
+          ^^^^^^^^" in request{<unresolved>}.response;
+  invalid-expression "pkg/front_end/testcases/dart2js/conditional_import.dart:25:11: Error: The getter 'readyState' isn't defined for the class 'HttpRequest'.
+ - 'HttpRequest' is from 'pkg/front_end/testcases/dart2js/conditional_import.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'readyState'.
+  request.readyState; // error
+          ^^^^^^^^^^" in request{<unresolved>}.readyState;
+  request.{core::Object::hashCode}{core::int};
+}
+static method main() → void {
+  self::expect(false, #C1);
+  self::expect(true, #C1);
+  self::expect(false, #C1);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = false
+}
diff --git a/pkg/front_end/testcases/dart2js/constructor_tearoff.dart b/pkg/front_end/testcases/dart2js/constructor_tearoff.dart
new file mode 100644
index 0000000..b7234a7
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/constructor_tearoff.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+typedef Alias<T extends num> = Class<T>;
+
+class Class<T> {
+  Class();
+  factory Class.fact() => Class<T>();
+  factory Class.redirect() = Class<T>;
+}
+
+const a = Class.new;
+const b = Class.fact;
+const c = Class.redirect;
+const d = Alias.new;
+const e = Alias.fact;
+const f = Alias.redirect;
+
+main() {
+  print('$a$b$c$d$e$f');
+}
diff --git a/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.strong.expect b/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.strong.expect
new file mode 100644
index 0000000..46e4364
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.strong.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef Alias<T extends core::num> = self::Class<T>;
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#new#tearOff::T%>
+    return new self::Class::•<self::Class::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class<self::Class::fact::T%>
+    return new self::Class::•<self::Class::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#fact#tearOff::T%>
+    return self::Class::fact<self::Class::_#fact#tearOff::T%>();
+  static factory redirect<T extends core::Object? = dynamic>() → self::Class<self::Class::redirect::T%>
+    return new self::Class::•<self::Class::redirect::T%>();
+  static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#redirect#tearOff::T%>
+    return new self::Class::•<self::Class::_#redirect#tearOff::T%>();
+}
+static const field <T extends core::Object? = dynamic>() → self::Class<T%> a = #C2;
+static const field <T extends core::Object? = dynamic>() → self::Class<T%> b = #C3;
+static const field <T extends core::Object? = dynamic>() → self::Class<T%> c = #C4;
+static const field <T extends core::num>() → self::Class<T> d = #C5;
+static const field <T extends core::num>() → self::Class<T> e = #C6;
+static const field <T extends core::num>() → self::Class<T> f = #C7;
+static method main() → dynamic {
+  core::print("${#C2}${#C3}${#C4}${#C5}${#C6}${#C7}");
+}
+static method _#Alias#new#tearOff<T extends core::num>() → self::Class<self::_#Alias#new#tearOff::T>
+  return new self::Class::•<self::_#Alias#new#tearOff::T>();
+static method _#Alias#fact#tearOff<T extends core::num>() → self::Class<self::_#Alias#fact#tearOff::T>
+  return self::Class::fact<self::_#Alias#fact#tearOff::T>();
+static method _#Alias#redirect#tearOff<T extends core::num>() → self::Class<self::_#Alias#redirect#tearOff::T>
+  return self::Class::_#redirect#tearOff<self::_#Alias#redirect#tearOff::T>();
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirect
+  #C2 = static-tearoff self::Class::_#new#tearOff
+  #C3 = static-tearoff self::Class::_#fact#tearOff
+  #C4 = static-tearoff self::Class::_#redirect#tearOff
+  #C5 = static-tearoff self::_#Alias#new#tearOff
+  #C6 = static-tearoff self::_#Alias#fact#tearOff
+  #C7 = static-tearoff self::_#Alias#redirect#tearOff
+}
diff --git a/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.strong.transformed.expect
new file mode 100644
index 0000000..46e4364
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.strong.transformed.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef Alias<T extends core::num> = self::Class<T>;
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#new#tearOff::T%>
+    return new self::Class::•<self::Class::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class<self::Class::fact::T%>
+    return new self::Class::•<self::Class::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#fact#tearOff::T%>
+    return self::Class::fact<self::Class::_#fact#tearOff::T%>();
+  static factory redirect<T extends core::Object? = dynamic>() → self::Class<self::Class::redirect::T%>
+    return new self::Class::•<self::Class::redirect::T%>();
+  static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#redirect#tearOff::T%>
+    return new self::Class::•<self::Class::_#redirect#tearOff::T%>();
+}
+static const field <T extends core::Object? = dynamic>() → self::Class<T%> a = #C2;
+static const field <T extends core::Object? = dynamic>() → self::Class<T%> b = #C3;
+static const field <T extends core::Object? = dynamic>() → self::Class<T%> c = #C4;
+static const field <T extends core::num>() → self::Class<T> d = #C5;
+static const field <T extends core::num>() → self::Class<T> e = #C6;
+static const field <T extends core::num>() → self::Class<T> f = #C7;
+static method main() → dynamic {
+  core::print("${#C2}${#C3}${#C4}${#C5}${#C6}${#C7}");
+}
+static method _#Alias#new#tearOff<T extends core::num>() → self::Class<self::_#Alias#new#tearOff::T>
+  return new self::Class::•<self::_#Alias#new#tearOff::T>();
+static method _#Alias#fact#tearOff<T extends core::num>() → self::Class<self::_#Alias#fact#tearOff::T>
+  return self::Class::fact<self::_#Alias#fact#tearOff::T>();
+static method _#Alias#redirect#tearOff<T extends core::num>() → self::Class<self::_#Alias#redirect#tearOff::T>
+  return self::Class::_#redirect#tearOff<self::_#Alias#redirect#tearOff::T>();
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirect
+  #C2 = static-tearoff self::Class::_#new#tearOff
+  #C3 = static-tearoff self::Class::_#fact#tearOff
+  #C4 = static-tearoff self::Class::_#redirect#tearOff
+  #C5 = static-tearoff self::_#Alias#new#tearOff
+  #C6 = static-tearoff self::_#Alias#fact#tearOff
+  #C7 = static-tearoff self::_#Alias#redirect#tearOff
+}
diff --git a/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.textual_outline.expect b/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.textual_outline.expect
new file mode 100644
index 0000000..89d865d
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+typedef Alias<T extends num> = Class<T>;
+
+class Class<T> {
+  Class();
+  factory Class.fact() => Class<T>();
+  factory Class.redirect() = Class<T>;
+}
+
+const a = Class.new;
+const b = Class.fact;
+const c = Class.redirect;
+const d = Alias.new;
+const e = Alias.fact;
+const f = Alias.redirect;
+main() {}
diff --git a/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3f714c9
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.textual_outline_modelled.expect
@@ -0,0 +1,14 @@
+class Class<T> {
+  Class();
+  factory Class.fact() => Class<T>();
+  factory Class.redirect() = Class<T>;
+}
+
+const a = Class.new;
+const b = Class.fact;
+const c = Class.redirect;
+const d = Alias.new;
+const e = Alias.fact;
+const f = Alias.redirect;
+main() {}
+typedef Alias<T extends num> = Class<T>;
diff --git a/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.weak.expect b/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.weak.expect
new file mode 100644
index 0000000..46e4364
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.weak.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef Alias<T extends core::num> = self::Class<T>;
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#new#tearOff::T%>
+    return new self::Class::•<self::Class::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class<self::Class::fact::T%>
+    return new self::Class::•<self::Class::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#fact#tearOff::T%>
+    return self::Class::fact<self::Class::_#fact#tearOff::T%>();
+  static factory redirect<T extends core::Object? = dynamic>() → self::Class<self::Class::redirect::T%>
+    return new self::Class::•<self::Class::redirect::T%>();
+  static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#redirect#tearOff::T%>
+    return new self::Class::•<self::Class::_#redirect#tearOff::T%>();
+}
+static const field <T extends core::Object? = dynamic>() → self::Class<T%> a = #C2;
+static const field <T extends core::Object? = dynamic>() → self::Class<T%> b = #C3;
+static const field <T extends core::Object? = dynamic>() → self::Class<T%> c = #C4;
+static const field <T extends core::num>() → self::Class<T> d = #C5;
+static const field <T extends core::num>() → self::Class<T> e = #C6;
+static const field <T extends core::num>() → self::Class<T> f = #C7;
+static method main() → dynamic {
+  core::print("${#C2}${#C3}${#C4}${#C5}${#C6}${#C7}");
+}
+static method _#Alias#new#tearOff<T extends core::num>() → self::Class<self::_#Alias#new#tearOff::T>
+  return new self::Class::•<self::_#Alias#new#tearOff::T>();
+static method _#Alias#fact#tearOff<T extends core::num>() → self::Class<self::_#Alias#fact#tearOff::T>
+  return self::Class::fact<self::_#Alias#fact#tearOff::T>();
+static method _#Alias#redirect#tearOff<T extends core::num>() → self::Class<self::_#Alias#redirect#tearOff::T>
+  return self::Class::_#redirect#tearOff<self::_#Alias#redirect#tearOff::T>();
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirect
+  #C2 = static-tearoff self::Class::_#new#tearOff
+  #C3 = static-tearoff self::Class::_#fact#tearOff
+  #C4 = static-tearoff self::Class::_#redirect#tearOff
+  #C5 = static-tearoff self::_#Alias#new#tearOff
+  #C6 = static-tearoff self::_#Alias#fact#tearOff
+  #C7 = static-tearoff self::_#Alias#redirect#tearOff
+}
diff --git a/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.weak.outline.expect
new file mode 100644
index 0000000..48c9e36
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.weak.outline.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef Alias<T extends core::num> = self::Class<T>;
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+  constructor •() → self::Class<self::Class::T%>
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#new#tearOff::T%>
+    return new self::Class::•<self::Class::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class<self::Class::fact::T%>
+    ;
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#fact#tearOff::T%>
+    return self::Class::fact<self::Class::_#fact#tearOff::T%>();
+  static factory redirect<T extends core::Object? = dynamic>() → self::Class<self::Class::redirect::T%>
+    return new self::Class::•<self::Class::redirect::T%>();
+  static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#redirect#tearOff::T%>
+    return new self::Class::•<self::Class::_#redirect#tearOff::T%>();
+}
+static const field <T extends core::Object? = dynamic>() → self::Class<T%> a = self::Class::_#new#tearOff;
+static const field <T extends core::Object? = dynamic>() → self::Class<T%> b = self::Class::_#fact#tearOff;
+static const field <T extends core::Object? = dynamic>() → self::Class<T%> c = self::Class::_#redirect#tearOff;
+static const field <T extends core::num>() → self::Class<T> d = self::_#Alias#new#tearOff;
+static const field <T extends core::num>() → self::Class<T> e = self::_#Alias#fact#tearOff;
+static const field <T extends core::num>() → self::Class<T> f = self::_#Alias#redirect#tearOff;
+static method main() → dynamic
+  ;
+static method _#Alias#new#tearOff<T extends core::num>() → self::Class<self::_#Alias#new#tearOff::T>
+  return new self::Class::•<self::_#Alias#new#tearOff::T>();
+static method _#Alias#fact#tearOff<T extends core::num>() → self::Class<self::_#Alias#fact#tearOff::T>
+  return self::Class::fact<self::_#Alias#fact#tearOff::T>();
+static method _#Alias#redirect#tearOff<T extends core::num>() → self::Class<self::_#Alias#redirect#tearOff::T>
+  return self::Class::_#redirect#tearOff<self::_#Alias#redirect#tearOff::T>();
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///constructor_tearoff.dart:7:7 -> ConstructorTearOffConstant(Class.redirect)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///constructor_tearoff.dart:13:11 -> StaticTearOffConstant(Class._#new#tearOff)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///constructor_tearoff.dart:14:11 -> StaticTearOffConstant(Class._#fact#tearOff)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///constructor_tearoff.dart:15:11 -> StaticTearOffConstant(Class._#redirect#tearOff)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///constructor_tearoff.dart:16:11 -> StaticTearOffConstant(_#Alias#new#tearOff)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///constructor_tearoff.dart:17:11 -> StaticTearOffConstant(_#Alias#fact#tearOff)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///constructor_tearoff.dart:18:11 -> StaticTearOffConstant(_#Alias#redirect#tearOff)
+Extra constant evaluation: evaluated: 15, effectively constant: 7
diff --git a/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.weak.transformed.expect
new file mode 100644
index 0000000..46e4364
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/constructor_tearoff.dart.weak.transformed.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef Alias<T extends core::num> = self::Class<T>;
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#new#tearOff::T%>
+    return new self::Class::•<self::Class::_#new#tearOff::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → self::Class<self::Class::fact::T%>
+    return new self::Class::•<self::Class::fact::T%>();
+  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#fact#tearOff::T%>
+    return self::Class::fact<self::Class::_#fact#tearOff::T%>();
+  static factory redirect<T extends core::Object? = dynamic>() → self::Class<self::Class::redirect::T%>
+    return new self::Class::•<self::Class::redirect::T%>();
+  static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::Class<self::Class::_#redirect#tearOff::T%>
+    return new self::Class::•<self::Class::_#redirect#tearOff::T%>();
+}
+static const field <T extends core::Object? = dynamic>() → self::Class<T%> a = #C2;
+static const field <T extends core::Object? = dynamic>() → self::Class<T%> b = #C3;
+static const field <T extends core::Object? = dynamic>() → self::Class<T%> c = #C4;
+static const field <T extends core::num>() → self::Class<T> d = #C5;
+static const field <T extends core::num>() → self::Class<T> e = #C6;
+static const field <T extends core::num>() → self::Class<T> f = #C7;
+static method main() → dynamic {
+  core::print("${#C2}${#C3}${#C4}${#C5}${#C6}${#C7}");
+}
+static method _#Alias#new#tearOff<T extends core::num>() → self::Class<self::_#Alias#new#tearOff::T>
+  return new self::Class::•<self::_#Alias#new#tearOff::T>();
+static method _#Alias#fact#tearOff<T extends core::num>() → self::Class<self::_#Alias#fact#tearOff::T>
+  return self::Class::fact<self::_#Alias#fact#tearOff::T>();
+static method _#Alias#redirect#tearOff<T extends core::num>() → self::Class<self::_#Alias#redirect#tearOff::T>
+  return self::Class::_#redirect#tearOff<self::_#Alias#redirect#tearOff::T>();
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirect
+  #C2 = static-tearoff self::Class::_#new#tearOff
+  #C3 = static-tearoff self::Class::_#fact#tearOff
+  #C4 = static-tearoff self::Class::_#redirect#tearOff
+  #C5 = static-tearoff self::_#Alias#new#tearOff
+  #C6 = static-tearoff self::_#Alias#fact#tearOff
+  #C7 = static-tearoff self::_#Alias#redirect#tearOff
+}
diff --git a/pkg/front_end/testcases/dart2js/flutter_issue94561/main.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/flutter_issue94561/main.dart.weak.modular.expect
new file mode 100644
index 0000000..e99296f
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/flutter_issue94561/main.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dart2js/flutter_issue94561/main.dart:8:9: Error: Setter not found: 'a'.
+//   MyInt.a = 42;
+//         ^
+//
+// pkg/front_end/testcases/dart2js/flutter_issue94561/main.dart:10:9: Error: Setter not found: 'b'.
+//   MyInt.b = 87;
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+static method main() → dynamic {
+  invalid-expression "pkg/front_end/testcases/dart2js/flutter_issue94561/main.dart:8:9: Error: Setter not found: 'a'.
+  MyInt.a = 42;
+        ^";
+  core::print(mai::_#MyInt|a);
+  invalid-expression "pkg/front_end/testcases/dart2js/flutter_issue94561/main.dart:10:9: Error: Setter not found: 'b'.
+  MyInt.b = 87;
+        ^";
+  core::print(mai::_#MyInt|b);
+}
diff --git a/pkg/front_end/testcases/dart2js/flutter_issue94561/main.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/flutter_issue94561/main.no_link.dart.weak.modular.expect
new file mode 100644
index 0000000..212c4ea
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/flutter_issue94561/main.no_link.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+static method main() → dynamic {
+  mai::MyInt|a = 42;
+  core::print(mai::MyInt|a);
+  mai::MyInt|b = 87;
+  core::print(mai::MyInt|b);
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+extension MyInt on core::int {
+  static field a = mai::MyInt|a;
+  static field b = mai::MyInt|b;
+}
+late static field core::int MyInt|a;
+late static field core::int MyInt|b = 42;
diff --git a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.modular.expect
new file mode 100644
index 0000000..d249938
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  get idFunction() → <S extends core::Object? = dynamic>(S%) → S%
+    return #C1;
+  get dynFunction() → dynamic
+    return #C1;
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  let final self::Class #t1 = c in let final core::int #t2 = 0 in #t1.{self::Class::idFunction}<core::int>(#t2){(core::int) → core::int};
+  let final self::Class #t3 = c in let final core::int #t4 = 0 in #t3.{self::Class::idFunction}<core::int>(#t4){(core::int) → core::int};
+  let final self::Class #t5 = c in let final core::int #t6 = 0 in #t5.{self::Class::dynFunction}(#t6);
+}
+
+constants  {
+  #C1 = static-tearoff self::id
+}
diff --git a/pkg/front_end/testcases/dart2js/late_fields.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/late_fields.dart.weak.modular.expect
new file mode 100644
index 0000000..a546427
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/late_fields.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  late field core::int a;
+  late final [setter] field core::int b;
+  late field core::int c = 1.{core::int::unary-}(){() → core::int};
+  late final field core::int d = 1.{core::int::unary-}(){() → core::int};
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::C
+    return new self::C::•();
+}
+static field self::C c = new self::C::•();
+static method main() → void {
+  self::testUninitializedNonFinalInstanceField();
+  self::testUninitializedFinalInstanceField();
+  self::testInitializedNonFinalInstanceField();
+  self::testInitializedFinalInstanceField();
+}
+static method testUninitializedNonFinalInstanceField() → void {
+  core::print(self::c.{self::C::a}{core::int});
+  self::c.{self::C::a} = 42;
+  core::print(self::c.{self::C::a}{core::int});
+}
+static method testUninitializedFinalInstanceField() → void {
+  core::print(self::c.{self::C::b}{core::int});
+  self::c.{self::C::b} = 42;
+  core::print(self::c.{self::C::b}{core::int});
+}
+static method testInitializedNonFinalInstanceField() → void {
+  core::print(self::c.{self::C::c}{core::int});
+  self::c.{self::C::c} = 42;
+  core::print(self::c.{self::C::c}{core::int});
+}
+static method testInitializedFinalInstanceField() → void {
+  core::print(self::c.{self::C::d}{core::int});
+}
diff --git a/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.weak.modular.expect
new file mode 100644
index 0000000..ece489e
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.weak.modular.expect
@@ -0,0 +1,86 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib1.dart" as mai;
+import "dart:core" as core;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+import "org-dartlang-testcase:///main_lib2.dart" as lib;
+
+static field mai::C c = new mai::C::•();
+static method main() → void {
+  self::testUninitializedNonFinalInstanceField();
+  self::testUninitializedFinalInstanceField();
+  self::testInitializedNonFinalInstanceField();
+  self::testInitializedFinalInstanceField();
+  mai::testNullableUninitializedNonFinalLocal();
+  mai::testNonNullableUninitializedNonFinalLocal();
+  mai::testNullableUninitializedFinalLocal();
+  mai::testNonNullableUninitializedFinalLocal();
+  mai::testNullableInitializedNonFinalLocal();
+  mai::testNonNullableInitializedNonFinalLocal();
+  mai::testNullableInitializedFinalLocal();
+  mai::testNonNullableInitializedFinalLocal();
+  self::testUninitializedNonFinalStaticField();
+  self::testUninitializedFinalStaticField();
+  self::testInitializedNonFinalStaticField();
+  self::testInitializedFinalStaticField();
+  self::testUninitializedNonFinalTopLevelField();
+  self::testUninitializedFinalTopLevelField();
+  self::testInitializedNonFinalTopLevelField();
+  self::testInitializedFinalTopLevelField();
+}
+static method testUninitializedNonFinalInstanceField() → void {
+  core::print(self::c.{mai::C::a}{core::int});
+  self::c.{mai::C::a} = 42;
+  core::print(self::c.{mai::C::a}{core::int});
+}
+static method testUninitializedFinalInstanceField() → void {
+  core::print(self::c.{mai::C::b}{core::int});
+  self::c.{mai::C::b} = 42;
+  core::print(self::c.{mai::C::b}{core::int});
+}
+static method testInitializedNonFinalInstanceField() → void {
+  core::print(self::c.{mai::C::c}{core::int});
+  self::c.{mai::C::c} = 42;
+  core::print(self::c.{mai::C::c}{core::int});
+}
+static method testInitializedFinalInstanceField() → void {
+  core::print(self::c.{mai::C::d}{core::int});
+}
+static method testUninitializedNonFinalStaticField() → void {
+  core::print(mai::Statics::a);
+  mai::Statics::a = 42;
+  core::print(mai::Statics::a);
+}
+static method testUninitializedFinalStaticField() → void {
+  core::print(mai::Statics::b);
+  mai::Statics::b = 42;
+  core::print(mai::Statics::b);
+}
+static method testInitializedNonFinalStaticField() → void {
+  core::print(mai::Statics::c);
+  mai::Statics::c = 42;
+  core::print(mai::Statics::c);
+}
+static method testInitializedFinalStaticField() → void {
+  core::print(mai::Statics::d);
+}
+static method testUninitializedNonFinalTopLevelField() → void {
+  core::print(mai2::a);
+  mai2::a = 42;
+  core::print(mai2::a);
+}
+static method testUninitializedFinalTopLevelField() → void {
+  core::print(mai2::b);
+  mai2::b = 42;
+  core::print(mai2::b);
+}
+static method testInitializedNonFinalTopLevelField() → void {
+  core::print(mai2::c);
+  mai2::c = 42;
+  core::print(mai2::c);
+}
+static method testInitializedFinalTopLevelField() → void {
+  core::print(mai2::d);
+}
diff --git a/pkg/front_end/testcases/dart2js/late_locals.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/late_locals.dart.weak.modular.expect
new file mode 100644
index 0000000..0ecd84b
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/late_locals.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → void {
+  self::testNullableUninitializedNonFinalLocal();
+  self::testNonNullableUninitializedNonFinalLocal();
+  self::testNullableUninitializedFinalLocal();
+  self::testNonNullableUninitializedFinalLocal();
+  self::testNullableInitializedNonFinalLocal();
+  self::testNonNullableInitializedNonFinalLocal();
+  self::testNullableInitializedFinalLocal();
+  self::testNonNullableInitializedFinalLocal();
+}
+static method testNullableUninitializedNonFinalLocal() → void {
+  late core::int? x;
+  x = 42;
+  core::print(x{core::int});
+}
+static method testNonNullableUninitializedNonFinalLocal() → void {
+  late core::int x;
+  x = 42;
+  core::print(x);
+}
+static method testNullableUninitializedFinalLocal() → void {
+  late final core::int? x;
+  x = 42;
+  core::print(x{core::int});
+}
+static method testNonNullableUninitializedFinalLocal() → void {
+  late final core::int x;
+  x = 42;
+  core::print(x);
+}
+static method testNullableInitializedNonFinalLocal() → void {
+  late core::int? x = 1.{core::int::unary-}(){() → core::int};
+  core::print(x{core::int});
+  x = 42;
+  core::print(x{core::int});
+  late core::int? y = null;
+  core::print(y);
+  y = 42;
+  core::print(y{core::int});
+}
+static method testNonNullableInitializedNonFinalLocal() → void {
+  late core::int x = 1.{core::int::unary-}(){() → core::int};
+  core::print(x);
+  x = 42;
+  core::print(x);
+}
+static method testNullableInitializedFinalLocal() → void {
+  late final core::int? x = 1.{core::int::unary-}(){() → core::int};
+  core::print(x);
+  late final core::int? y = null;
+  core::print(y);
+}
+static method testNonNullableInitializedFinalLocal() → void {
+  late final core::int x = 1.{core::int::unary-}(){() → core::int};
+  core::print(x);
+}
diff --git a/pkg/front_end/testcases/dart2js/late_statics.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/late_statics.dart.weak.modular.expect
new file mode 100644
index 0000000..c2128f7
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/late_statics.dart.weak.modular.expect
@@ -0,0 +1,81 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "late_statics_lib.dart" as lat;
+additionalExports = (lat::a,
+  lat::a,
+  lat::b,
+  lat::b,
+  lat::c,
+  lat::c,
+  lat::d)
+
+import "org-dartlang-testcase:///late_statics_lib.dart" as lib;
+export "org-dartlang-testcase:///late_statics_lib.dart";
+
+class Statics extends core::Object {
+  late static field core::int a;
+  late static final [setter] field core::int b;
+  late static field core::int c = 1.{core::int::unary-}(){() → core::int};
+  late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
+  synthetic constructor •() → self::Statics
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::Statics
+    return new self::Statics::•();
+}
+static method main() → void {
+  self::testUninitializedNonFinalStaticField();
+  self::testUninitializedFinalStaticField();
+  self::testInitializedNonFinalStaticField();
+  self::testInitializedFinalStaticField();
+  self::testUninitializedNonFinalTopLevelField();
+  self::testUninitializedFinalTopLevelField();
+  self::testInitializedNonFinalTopLevelField();
+  self::testInitializedFinalTopLevelField();
+}
+static method testUninitializedNonFinalStaticField() → void {
+  core::print(self::Statics::a);
+  self::Statics::a = 42;
+  core::print(self::Statics::a);
+}
+static method testUninitializedFinalStaticField() → void {
+  core::print(self::Statics::b);
+  self::Statics::b = 42;
+  core::print(self::Statics::b);
+}
+static method testInitializedNonFinalStaticField() → void {
+  core::print(self::Statics::c);
+  self::Statics::c = 42;
+  core::print(self::Statics::c);
+}
+static method testInitializedFinalStaticField() → void {
+  core::print(self::Statics::d);
+}
+static method testUninitializedNonFinalTopLevelField() → void {
+  core::print(lat::a);
+  lat::a = 42;
+  core::print(lat::a);
+}
+static method testUninitializedFinalTopLevelField() → void {
+  core::print(lat::b);
+  lat::b = 42;
+  core::print(lat::b);
+}
+static method testInitializedNonFinalTopLevelField() → void {
+  core::print(lat::c);
+  lat::c = 42;
+  core::print(lat::c);
+}
+static method testInitializedFinalTopLevelField() → void {
+  core::print(lat::d);
+}
+
+library /*isNonNullableByDefault*/;
+import self as lat;
+import "dart:core" as core;
+
+late static field core::int a;
+late static final [setter] field core::int b;
+late static field core::int c = 1.{core::int::unary-}(){() → core::int};
+late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
diff --git a/pkg/front_end/testcases/dart2js/list_generate.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/list_generate.dart.weak.modular.expect
new file mode 100644
index 0000000..1d7d6ef
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/list_generate.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::List::generate<core::int>(10, (core::int i) → core::int => i.{core::num::*}(2){(core::num) → core::int});
+}
diff --git a/pkg/front_end/testcases/dart2js/list_generate_1.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/list_generate_1.dart.weak.modular.expect
new file mode 100644
index 0000000..ae26523
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/list_generate_1.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int> list1 = core::List::generate<core::int>(10, (core::int i) → core::int => i);
+static field core::List<core::int> list2 = core::List::generate<core::int>(10, (core::int i) → core::int => i, growable: true);
+static field core::List<core::int> list3 = core::List::generate<core::int>(10, (core::int i) → core::int => i, growable: false);
+static field core::List<core::int> list4 = core::List::generate<core::int>(10, (core::int i) → core::int => i, growable: self::someGrowable);
+static field core::bool someGrowable = true;
+static method main() → void {
+  self::someGrowable = !self::someGrowable;
+  core::print(<core::List<core::int>>[self::list1, self::list2, self::list3, self::list4]);
+}
diff --git a/pkg/front_end/testcases/dart2js/list_generate_2.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/list_generate_2.dart.weak.modular.expect
new file mode 100644
index 0000000..d3c85ea
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/list_generate_2.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → void {
+  core::print(core::List::generate<core::List<core::int>>(10, (core::int i) → core::List<core::int> => core::List::generate<core::int>(i, (core::int i) → core::int => i.{core::num::+}(1){(core::num) → core::int})));
+}
diff --git a/pkg/front_end/testcases/dart2js/list_generate_3.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/list_generate_3.dart.weak.modular.expect
new file mode 100644
index 0000000..4f4c5d2
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/list_generate_3.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int> list1 = core::List::generate<core::int>(10, (core::int i) → core::int {
+  return i;
+});
+static field core::List<core::int> list2 = core::List::generate<core::int>(10, (core::int i) → core::int {
+  return i;
+}, growable: true);
+static field core::List<core::int> list3 = core::List::generate<core::int>(10, (core::int i) → core::int {
+  return i;
+}, growable: false);
+static field core::List<core::int> list4 = core::List::generate<core::int>(10, (core::int i) → core::int {
+  return i;
+}, growable: self::someGrowable);
+static field core::List<core::int> list5 = core::List::generate<core::int>(10, (core::int i) → core::int {
+  if(i.{core::int::isEven}{core::bool})
+    return i.{core::num::+}(1){(core::num) → core::int};
+  return i.{core::num::-}(1){(core::num) → core::int};
+});
+static field core::List<core::int> list6 = core::List::generate<core::int>(10, #C1);
+static field core::List<core::int> list7 = core::List::generate<core::int>(10, self::bar);
+static field core::bool someGrowable = true;
+static method foo(core::int i) → core::int
+  return i;
+static get bar() → (core::int) → core::int
+  return #C1;
+static method main() → void {
+  self::someGrowable = !self::someGrowable;
+  core::print(<core::List<core::int>>[self::list1, self::list2, self::list3, self::list4, self::list5, self::list6, self::list7]);
+}
+
+constants  {
+  #C1 = static-tearoff self::foo
+}
diff --git a/pkg/front_end/testcases/dart2js/list_generate_local_function_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/list_generate_local_function_invocation.dart.weak.modular.expect
new file mode 100644
index 0000000..fa4652c
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/list_generate_local_function_invocation.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  function localFunction(core::int i) → core::int
+    return i.{core::num::*}(2){(core::num) → core::int};
+  core::List::generate<core::int>(10, (core::int i) → core::int => localFunction(i){(core::int) → core::int});
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_default_values/a_lib.dart b/pkg/front_end/testcases/dart2js/mixin_default_values/a_lib.dart
new file mode 100644
index 0000000..75c5e41
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_default_values/a_lib.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+import 't_lib.dart';
+
+String _defaultStringy(String t) => t.toLowerCase();
+
+class A {
+  A({
+    double d = 3.14,
+    StringyFunction<String> s = _defaultStringy,
+  }) : this.factoryConstructor(d: d, s: s);
+  A.factoryConstructor({
+    double d = 3.14,
+    StringyFunction<String> s = _defaultStringy,
+  })  : d = d,
+        _s = s;
+  String doStringy(String i) => _s(i);
+  final double d;
+  final StringyFunction<String> _s;
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_default_values/b_lib.dart b/pkg/front_end/testcases/dart2js/mixin_default_values/b_lib.dart
new file mode 100644
index 0000000..2e956fb
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_default_values/b_lib.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'a_lib.dart';
+import 'm_lib.dart';
+
+class B extends A with M {
+  B({double d = 2.71}) : super(d: d);
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_default_values/m_lib.dart b/pkg/front_end/testcases/dart2js/mixin_default_values/m_lib.dart
new file mode 100644
index 0000000..8ade71f
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_default_values/m_lib.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'a_lib.dart';
+
+mixin M on A {
+  m1() {}
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart
new file mode 100644
index 0000000..5f99d3e
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'b_lib.dart';
+
+main() {
+  var bInst = B();
+  expect(2.71, bInst.d);
+  expect('default', bInst.doStringy('DEFAULT'));
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual.';
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.strong.expect b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.strong.expect
new file mode 100644
index 0000000..e58f841
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.strong.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "b_lib.dart" as b_l;
+import "a_lib.dart" as a_l;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///b_lib.dart";
+
+static method main() → dynamic {
+  b_l::B bInst = new b_l::B::•();
+  self::expect(2.71, bInst.{a_l::A::d}{core::double});
+  self::expect("default", bInst.{a_l::A::doStringy}("DEFAULT"){(core::String) → core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}.";
+}
+
+library /*isNonNullableByDefault*/;
+import self as b_l;
+import "a_lib.dart" as a_l;
+import "m_lib.dart" as m_l;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///a_lib.dart";
+import "org-dartlang-testcase:///m_lib.dart";
+
+abstract class _B&A&M = a_l::A with m_l::M /*isAnonymousMixin*/  {
+  synthetic constructor •({core::double d = #C1, (core::String) → core::String s = #C2}) → b_l::_B&A&M
+    : super a_l::A::•(d: d, s: s)
+    ;
+  synthetic constructor factoryConstructor({core::double d = #C1, (core::String) → core::String s = #C2}) → b_l::_B&A&M
+    : super a_l::A::factoryConstructor(d: d, s: s)
+    ;
+  mixin-super-stub method m1() → dynamic
+    return super.{m_l::M::m1}();
+}
+class B extends b_l::_B&A&M {
+  constructor •({core::double d = #C3}) → b_l::B
+    : super b_l::_B&A&M::•(d: d)
+    ;
+  static method _#new#tearOff({core::double d = #C3}) → b_l::B
+    return new b_l::B::•(d: d);
+}
+
+library /*isNonNullableByDefault*/;
+import self as m_l;
+import "a_lib.dart" as a_l;
+
+import "org-dartlang-testcase:///a_lib.dart";
+
+abstract class M extends a_l::A /*isMixinDeclaration*/  {
+  method m1() → dynamic {}
+}
+
+library /*isNonNullableByDefault*/;
+import self as a_l;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///t_lib.dart";
+
+class A extends core::Object {
+  final field core::double d;
+  final field (core::String) → core::String _s;
+  constructor •({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
+    : this a_l::A::factoryConstructor(d: d, s: s)
+    ;
+  constructor factoryConstructor({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
+    : a_l::A::d = d, a_l::A::_s = s, super core::Object::•()
+    ;
+  static method _#new#tearOff({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
+    return new a_l::A::•(d: d, s: s);
+  static method _#factoryConstructor#tearOff({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
+    return new a_l::A::factoryConstructor(d: d, s: s);
+  method doStringy(core::String i) → core::String
+    return let final core::String #t1 = i in this.{a_l::A::_s}(#t1){(core::String) → core::String};
+}
+static method _defaultStringy(core::String t) → core::String
+  return t.{core::String::toLowerCase}(){() → core::String};
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+typedef StringyFunction<contravariant T extends core::Object? = dynamic> = (T%) → core::String;
+
+constants  {
+  #C1 = 3.14
+  #C2 = static-tearoff a_l::_defaultStringy
+  #C3 = 2.71
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.strong.transformed.expect
new file mode 100644
index 0000000..e58f841
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.strong.transformed.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "b_lib.dart" as b_l;
+import "a_lib.dart" as a_l;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///b_lib.dart";
+
+static method main() → dynamic {
+  b_l::B bInst = new b_l::B::•();
+  self::expect(2.71, bInst.{a_l::A::d}{core::double});
+  self::expect("default", bInst.{a_l::A::doStringy}("DEFAULT"){(core::String) → core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}.";
+}
+
+library /*isNonNullableByDefault*/;
+import self as b_l;
+import "a_lib.dart" as a_l;
+import "m_lib.dart" as m_l;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///a_lib.dart";
+import "org-dartlang-testcase:///m_lib.dart";
+
+abstract class _B&A&M = a_l::A with m_l::M /*isAnonymousMixin*/  {
+  synthetic constructor •({core::double d = #C1, (core::String) → core::String s = #C2}) → b_l::_B&A&M
+    : super a_l::A::•(d: d, s: s)
+    ;
+  synthetic constructor factoryConstructor({core::double d = #C1, (core::String) → core::String s = #C2}) → b_l::_B&A&M
+    : super a_l::A::factoryConstructor(d: d, s: s)
+    ;
+  mixin-super-stub method m1() → dynamic
+    return super.{m_l::M::m1}();
+}
+class B extends b_l::_B&A&M {
+  constructor •({core::double d = #C3}) → b_l::B
+    : super b_l::_B&A&M::•(d: d)
+    ;
+  static method _#new#tearOff({core::double d = #C3}) → b_l::B
+    return new b_l::B::•(d: d);
+}
+
+library /*isNonNullableByDefault*/;
+import self as m_l;
+import "a_lib.dart" as a_l;
+
+import "org-dartlang-testcase:///a_lib.dart";
+
+abstract class M extends a_l::A /*isMixinDeclaration*/  {
+  method m1() → dynamic {}
+}
+
+library /*isNonNullableByDefault*/;
+import self as a_l;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///t_lib.dart";
+
+class A extends core::Object {
+  final field core::double d;
+  final field (core::String) → core::String _s;
+  constructor •({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
+    : this a_l::A::factoryConstructor(d: d, s: s)
+    ;
+  constructor factoryConstructor({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
+    : a_l::A::d = d, a_l::A::_s = s, super core::Object::•()
+    ;
+  static method _#new#tearOff({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
+    return new a_l::A::•(d: d, s: s);
+  static method _#factoryConstructor#tearOff({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
+    return new a_l::A::factoryConstructor(d: d, s: s);
+  method doStringy(core::String i) → core::String
+    return let final core::String #t1 = i in this.{a_l::A::_s}(#t1){(core::String) → core::String};
+}
+static method _defaultStringy(core::String t) → core::String
+  return t.{core::String::toLowerCase}(){() → core::String};
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+typedef StringyFunction<contravariant T extends core::Object? = dynamic> = (T%) → core::String;
+
+constants  {
+  #C1 = 3.14
+  #C2 = static-tearoff a_l::_defaultStringy
+  #C3 = 2.71
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.textual_outline.expect b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.textual_outline.expect
new file mode 100644
index 0000000..0833ebd
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+import 'b_lib.dart';
+
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..029cb69
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+import 'b_lib.dart';
+
+expect(expected, actual) {}
+main() {}
diff --git a/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.expect b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.expect
new file mode 100644
index 0000000..e58f841
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "b_lib.dart" as b_l;
+import "a_lib.dart" as a_l;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///b_lib.dart";
+
+static method main() → dynamic {
+  b_l::B bInst = new b_l::B::•();
+  self::expect(2.71, bInst.{a_l::A::d}{core::double});
+  self::expect("default", bInst.{a_l::A::doStringy}("DEFAULT"){(core::String) → core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}.";
+}
+
+library /*isNonNullableByDefault*/;
+import self as b_l;
+import "a_lib.dart" as a_l;
+import "m_lib.dart" as m_l;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///a_lib.dart";
+import "org-dartlang-testcase:///m_lib.dart";
+
+abstract class _B&A&M = a_l::A with m_l::M /*isAnonymousMixin*/  {
+  synthetic constructor •({core::double d = #C1, (core::String) → core::String s = #C2}) → b_l::_B&A&M
+    : super a_l::A::•(d: d, s: s)
+    ;
+  synthetic constructor factoryConstructor({core::double d = #C1, (core::String) → core::String s = #C2}) → b_l::_B&A&M
+    : super a_l::A::factoryConstructor(d: d, s: s)
+    ;
+  mixin-super-stub method m1() → dynamic
+    return super.{m_l::M::m1}();
+}
+class B extends b_l::_B&A&M {
+  constructor •({core::double d = #C3}) → b_l::B
+    : super b_l::_B&A&M::•(d: d)
+    ;
+  static method _#new#tearOff({core::double d = #C3}) → b_l::B
+    return new b_l::B::•(d: d);
+}
+
+library /*isNonNullableByDefault*/;
+import self as m_l;
+import "a_lib.dart" as a_l;
+
+import "org-dartlang-testcase:///a_lib.dart";
+
+abstract class M extends a_l::A /*isMixinDeclaration*/  {
+  method m1() → dynamic {}
+}
+
+library /*isNonNullableByDefault*/;
+import self as a_l;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///t_lib.dart";
+
+class A extends core::Object {
+  final field core::double d;
+  final field (core::String) → core::String _s;
+  constructor •({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
+    : this a_l::A::factoryConstructor(d: d, s: s)
+    ;
+  constructor factoryConstructor({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
+    : a_l::A::d = d, a_l::A::_s = s, super core::Object::•()
+    ;
+  static method _#new#tearOff({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
+    return new a_l::A::•(d: d, s: s);
+  static method _#factoryConstructor#tearOff({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
+    return new a_l::A::factoryConstructor(d: d, s: s);
+  method doStringy(core::String i) → core::String
+    return let final core::String #t1 = i in this.{a_l::A::_s}(#t1){(core::String) → core::String};
+}
+static method _defaultStringy(core::String t) → core::String
+  return t.{core::String::toLowerCase}(){() → core::String};
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+typedef StringyFunction<contravariant T extends core::Object? = dynamic> = (T%) → core::String;
+
+constants  {
+  #C1 = 3.14
+  #C2 = static-tearoff a_l::_defaultStringy
+  #C3 = 2.71
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.modular.expect
new file mode 100644
index 0000000..1c7ef8f
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "b_lib.dart" as b_l;
+import "a_lib.dart" as a_l;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///b_lib.dart";
+
+static method main() → dynamic {
+  b_l::B bInst = new b_l::B::•();
+  self::expect(2.71, bInst.{a_l::A::d}{core::double});
+  self::expect("default", bInst.{a_l::A::doStringy}("DEFAULT"){(core::String) → core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}.";
+}
+
+library /*isNonNullableByDefault*/;
+import self as b_l;
+import "a_lib.dart" as a_l;
+import "m_lib.dart" as m_l;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///a_lib.dart";
+import "org-dartlang-testcase:///m_lib.dart";
+
+abstract class _B&A&M = a_l::A with m_l::M /*isAnonymousMixin*/  {
+  synthetic constructor •({core::double d, (core::String) → core::String s}) → b_l::_B&A&M
+    : super a_l::A::•(d: d, s: s)
+    ;
+  synthetic constructor factoryConstructor({core::double d, (core::String) → core::String s}) → b_l::_B&A&M
+    : super a_l::A::factoryConstructor(d: d, s: s)
+    ;
+  mixin-super-stub method m1() → dynamic
+    return super.{m_l::M::m1}();
+}
+class B extends b_l::_B&A&M {
+  constructor •({core::double d = #C1}) → b_l::B
+    : super b_l::_B&A&M::•(d: d)
+    ;
+  static method _#new#tearOff({core::double d = #C1}) → b_l::B
+    return new b_l::B::•(d: d);
+}
+
+library /*isNonNullableByDefault*/;
+import self as m_l;
+import "a_lib.dart" as a_l;
+
+import "org-dartlang-testcase:///a_lib.dart";
+
+abstract class M extends a_l::A /*isMixinDeclaration*/  {
+  method m1() → dynamic {}
+}
+
+constants  {
+  #C1 = 2.71
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.outline.expect
new file mode 100644
index 0000000..1aa4284
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.outline.expect
@@ -0,0 +1,75 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "org-dartlang-testcase:///b_lib.dart";
+
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "a_lib.dart" as a_l;
+import "m_lib.dart" as m_l;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///a_lib.dart";
+import "org-dartlang-testcase:///m_lib.dart";
+
+abstract class _B&A&M = a_l::A with m_l::M /*isAnonymousMixin*/  {
+  synthetic constructor •({core::double d, (core::String) → core::String s}) → self2::_B&A&M
+    : super a_l::A::•(d: d, s: s)
+    ;
+  synthetic constructor factoryConstructor({core::double d, (core::String) → core::String s}) → self2::_B&A&M
+    : super a_l::A::factoryConstructor(d: d, s: s)
+    ;
+  mixin-super-stub method m1() → dynamic
+    return super.{m_l::M::m1}();
+}
+class B extends self2::_B&A&M {
+  constructor •({core::double d}) → self2::B
+    ;
+  static method _#new#tearOff({core::double d}) → self2::B
+    return new self2::B::•(d: d);
+}
+
+library /*isNonNullableByDefault*/;
+import self as m_l;
+import "a_lib.dart" as a_l;
+
+import "org-dartlang-testcase:///a_lib.dart";
+
+abstract class M extends a_l::A /*isMixinDeclaration*/  {
+  method m1() → dynamic
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as a_l;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///t_lib.dart";
+
+class A extends core::Object {
+  final field core::double d;
+  final field (core::String) → core::String _s;
+  constructor •({core::double d, (core::String) → core::String s}) → a_l::A
+    ;
+  constructor factoryConstructor({core::double d, (core::String) → core::String s}) → a_l::A
+    ;
+  static method _#new#tearOff({core::double d, (core::String) → core::String s}) → a_l::A
+    return new a_l::A::•(d: d, s: s);
+  static method _#factoryConstructor#tearOff({core::double d, (core::String) → core::String s}) → a_l::A
+    return new a_l::A::factoryConstructor(d: d, s: s);
+  method doStringy(core::String i) → core::String
+    ;
+}
+static method _defaultStringy(core::String t) → core::String
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as self3;
+import "dart:core" as core;
+
+typedef StringyFunction<contravariant T extends core::Object? = dynamic> = (T%) → core::String;
diff --git a/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..e58f841
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_default_values/main.dart.weak.transformed.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "b_lib.dart" as b_l;
+import "a_lib.dart" as a_l;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///b_lib.dart";
+
+static method main() → dynamic {
+  b_l::B bInst = new b_l::B::•();
+  self::expect(2.71, bInst.{a_l::A::d}{core::double});
+  self::expect("default", bInst.{a_l::A::doStringy}("DEFAULT"){(core::String) → core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}.";
+}
+
+library /*isNonNullableByDefault*/;
+import self as b_l;
+import "a_lib.dart" as a_l;
+import "m_lib.dart" as m_l;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///a_lib.dart";
+import "org-dartlang-testcase:///m_lib.dart";
+
+abstract class _B&A&M = a_l::A with m_l::M /*isAnonymousMixin*/  {
+  synthetic constructor •({core::double d = #C1, (core::String) → core::String s = #C2}) → b_l::_B&A&M
+    : super a_l::A::•(d: d, s: s)
+    ;
+  synthetic constructor factoryConstructor({core::double d = #C1, (core::String) → core::String s = #C2}) → b_l::_B&A&M
+    : super a_l::A::factoryConstructor(d: d, s: s)
+    ;
+  mixin-super-stub method m1() → dynamic
+    return super.{m_l::M::m1}();
+}
+class B extends b_l::_B&A&M {
+  constructor •({core::double d = #C3}) → b_l::B
+    : super b_l::_B&A&M::•(d: d)
+    ;
+  static method _#new#tearOff({core::double d = #C3}) → b_l::B
+    return new b_l::B::•(d: d);
+}
+
+library /*isNonNullableByDefault*/;
+import self as m_l;
+import "a_lib.dart" as a_l;
+
+import "org-dartlang-testcase:///a_lib.dart";
+
+abstract class M extends a_l::A /*isMixinDeclaration*/  {
+  method m1() → dynamic {}
+}
+
+library /*isNonNullableByDefault*/;
+import self as a_l;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///t_lib.dart";
+
+class A extends core::Object {
+  final field core::double d;
+  final field (core::String) → core::String _s;
+  constructor •({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
+    : this a_l::A::factoryConstructor(d: d, s: s)
+    ;
+  constructor factoryConstructor({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
+    : a_l::A::d = d, a_l::A::_s = s, super core::Object::•()
+    ;
+  static method _#new#tearOff({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
+    return new a_l::A::•(d: d, s: s);
+  static method _#factoryConstructor#tearOff({core::double d = #C1, (core::String) → core::String s = #C2}) → a_l::A
+    return new a_l::A::factoryConstructor(d: d, s: s);
+  method doStringy(core::String i) → core::String
+    return let final core::String #t1 = i in this.{a_l::A::_s}(#t1){(core::String) → core::String};
+}
+static method _defaultStringy(core::String t) → core::String
+  return t.{core::String::toLowerCase}(){() → core::String};
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+typedef StringyFunction<contravariant T extends core::Object? = dynamic> = (T%) → core::String;
+
+constants  {
+  #C1 = 3.14
+  #C2 = static-tearoff a_l::_defaultStringy
+  #C3 = 2.71
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_default_values/t_lib.dart b/pkg/front_end/testcases/dart2js/mixin_default_values/t_lib.dart
new file mode 100644
index 0000000..ab0db0e
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_default_values/t_lib.dart
@@ -0,0 +1,5 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+typedef StringyFunction<T> = String Function(T item);
diff --git a/pkg/front_end/testcases/dart2js/mixin_default_values/test.options b/pkg/front_end/testcases/dart2js/mixin_default_values/test.options
new file mode 100644
index 0000000..d8aba59
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_default_values/test.options
@@ -0,0 +1,2 @@
+a_lib.dart
+t_lib.dart
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.weak.modular.expect
new file mode 100644
index 0000000..ccdd90a
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "test_lib.dart" as tes;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic {
+  tes::test();
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:27: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+//   int j = sub.mixinMethod(null);
+//                           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   int j = sub.mixinMethod(null);
+//               ^
+//
+// pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:12:25: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   sub.mixinField2 = sub.mixinField1;
+//                         ^
+//
+import self as tes;
+import "opt_out_lib.dart" as opt;
+import "dart:core" as core;
+import "opt_in_lib.dart" as opt2;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic {
+  opt::SubClass sub = new opt::SubClass::•();
+  core::int i = sub.{opt::_SubClass&Class&Mixin::classMethod}(null){(core::int*) →* core::int*};
+  core::int j = invalid-expression "pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  int j = sub.mixinMethod(null);
+              ^" in sub.{opt2::Mixin::mixinMethod}(invalid-expression "pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:10:27: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+  int j = sub.mixinMethod(null);
+                          ^" in null as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int?} as{TypeError,ForNonNullableByDefault} core::int;
+  sub.{opt::_SubClass&Class&Mixin::classField2} = sub.{opt::_SubClass&Class&Mixin::classField1}{core::int*};
+  sub.{opt2::Mixin::mixinField2} = invalid-expression "pkg/front_end/testcases/dart2js/mixin_from_opt_in/test_lib.dart:12:25: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  sub.mixinField2 = sub.mixinField1;
+                        ^" in sub.{opt2::Mixin::mixinField1}{core::int?} as{TypeError,ForNonNullableByDefault} core::int;
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.weak.modular.expect
new file mode 100644
index 0000000..4f8699d
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_from_opt_in/main.no_link.dart.weak.modular.expect
@@ -0,0 +1,86 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "test_lib.dart" as tes;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic {
+  tes::test();
+}
+
+library /*isNonNullableByDefault*/;
+import self as tes;
+import "opt_out_lib.dart" as opt;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic {
+  opt::SubClass sub = new opt::SubClass::•();
+  core::int i = sub.{opt::_SubClass&Class&Mixin::classMethod}(null){(core::int*) →* core::int*};
+  core::int j = sub.{opt::_SubClass&Class&Mixin::mixinMethod}(null){(core::int*) →* core::int*};
+  sub.{opt::_SubClass&Class&Mixin::classField2} = sub.{opt::_SubClass&Class&Mixin::classField1}{core::int*};
+  sub.{opt::_SubClass&Class&Mixin::mixinField2} = sub.{opt::_SubClass&Class&Mixin::mixinField1}{core::int*};
+}
+
+library;
+import self as opt;
+import "opt_in_lib.dart" as opt2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → opt::_SubClass&Class&Mixin*
+    : super opt2::Class::•()
+    ;
+  mixin-super-stub get mixinField1() → core::int*
+    return super.{opt2::Mixin::mixinField1};
+  mixin-super-stub set mixinField1(core::int* value) → void
+    return super.{opt2::Mixin::mixinField1} = value;
+  mixin-super-stub get mixinField2() → core::int*
+    return super.{opt2::Mixin::mixinField2};
+  mixin-super-stub set mixinField2(core::int* value) → void
+    return super.{opt2::Mixin::mixinField2} = value;
+  abstract member-signature get classField1() → core::int*; -> opt2::Class::classField1
+  abstract member-signature set classField1(core::int* value) → void; -> opt2::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
+  abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
+  mixin-super-stub method mixinMethod(core::int* i) → core::int*
+    return super.{opt2::Mixin::mixinMethod}(i);
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SubClass extends opt::_SubClass&Class&Mixin {
+  synthetic constructor •() → opt::SubClass*
+    : super opt::_SubClass&Class&Mixin::•()
+    ;
+  static method _#new#tearOff() → opt::SubClass*
+    return new opt::SubClass::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1 = null;
+  field core::int classField2 = 0;
+  synthetic constructor •() → opt2::Class
+    : super core::Object::•()
+    ;
+  method classMethod(core::int i) → core::int? {}
+  static method _#new#tearOff() → opt2::Class
+    return new opt2::Class::•();
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1 = null;
+  field core::int mixinField2 = 0;
+  method mixinMethod(core::int i) → core::int? {
+    super.{core::Object::toString}();
+  }
+}
diff --git a/pkg/front_end/testcases/dartdevc/conditional_import.dart.weak.modular.expect b/pkg/front_end/testcases/dartdevc/conditional_import.dart.weak.modular.expect
new file mode 100644
index 0000000..3b668f7
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/conditional_import.dart.weak.modular.expect
@@ -0,0 +1,84 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dartdevc/conditional_import.dart:18:11: Error: The getter 'readyState' isn't defined for the class 'HttpRequest'.
+//  - 'HttpRequest' is from 'dart:_http'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'readyState'.
+//   request.readyState; // ok (from dart:html)
+//           ^^^^^^^^^^
+//
+// pkg/front_end/testcases/dartdevc/conditional_import.dart:23:11: Error: The getter 'certificate' isn't defined for the class 'HttpRequest'.
+//  - 'HttpRequest' is from 'pkg/front_end/testcases/dartdevc/conditional_import.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'certificate'.
+//   request.certificate; // error
+//           ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/dartdevc/conditional_import.dart:24:11: Error: The getter 'response' isn't defined for the class 'HttpRequest'.
+//  - 'HttpRequest' is from 'pkg/front_end/testcases/dartdevc/conditional_import.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'response'.
+//   request.response; // error
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/dartdevc/conditional_import.dart:25:11: Error: The getter 'readyState' isn't defined for the class 'HttpRequest'.
+//  - 'HttpRequest' is from 'pkg/front_end/testcases/dartdevc/conditional_import.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'readyState'.
+//   request.readyState; // error
+//           ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_http" as _ht;
+import "dart:io" as io;
+
+import "dart:io" as a;
+import "org-dartlang-testcase:///conditional_import.dart" as b;
+
+class HttpRequest extends core::Object {
+  synthetic constructor •() → self::HttpRequest
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::HttpRequest
+    return new self::HttpRequest::•();
+}
+static method testA(_ht::HttpRequest request) → dynamic {
+  request.{_ht::HttpRequest::certificate}{io::X509Certificate?};
+  request.{_ht::HttpRequest::response}{_ht::HttpResponse};
+  invalid-expression "pkg/front_end/testcases/dartdevc/conditional_import.dart:18:11: Error: The getter 'readyState' isn't defined for the class 'HttpRequest'.
+ - 'HttpRequest' is from 'dart:_http'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'readyState'.
+  request.readyState; // ok (from dart:html)
+          ^^^^^^^^^^" in request{<unresolved>}.readyState;
+  request.{core::Object::hashCode}{core::int};
+}
+static method testB(self::HttpRequest request) → dynamic {
+  invalid-expression "pkg/front_end/testcases/dartdevc/conditional_import.dart:23:11: Error: The getter 'certificate' isn't defined for the class 'HttpRequest'.
+ - 'HttpRequest' is from 'pkg/front_end/testcases/dartdevc/conditional_import.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'certificate'.
+  request.certificate; // error
+          ^^^^^^^^^^^" in request{<unresolved>}.certificate;
+  invalid-expression "pkg/front_end/testcases/dartdevc/conditional_import.dart:24:11: Error: The getter 'response' isn't defined for the class 'HttpRequest'.
+ - 'HttpRequest' is from 'pkg/front_end/testcases/dartdevc/conditional_import.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'response'.
+  request.response; // error
+          ^^^^^^^^" in request{<unresolved>}.response;
+  invalid-expression "pkg/front_end/testcases/dartdevc/conditional_import.dart:25:11: Error: The getter 'readyState' isn't defined for the class 'HttpRequest'.
+ - 'HttpRequest' is from 'pkg/front_end/testcases/dartdevc/conditional_import.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'readyState'.
+  request.readyState; // error
+          ^^^^^^^^^^" in request{<unresolved>}.readyState;
+  request.{core::Object::hashCode}{core::int};
+}
+static method main() → void {
+  self::expect(false, #C1);
+  self::expect(true, #C1);
+  self::expect(false, #C1);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = false
+}
diff --git a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.modular.expect
new file mode 100644
index 0000000..3eaf932
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:test" as test;
+
+import "dart:test";
+
+static method main() → dynamic {
+  test::Class::fact();
+}
+
+library /*isNonNullableByDefault*/;
+import self as test;
+import "dart:_js_helper" as _js;
+import "dart:core" as core;
+
+import "dart:_js_helper";
+
+@#C1
+class Class extends core::Object {
+  final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
+  const constructor _internal({core::bool defaultValue = #C2}) → test::Class
+    : test::Class::defaultValue = defaultValue, super core::Object::•()
+    ;
+  @#C1
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C3}) → test::Class
+    return new test::Class::_internal(defaultValue: defaultValue);
+  static method _#fact#tearOff({core::bool defaultValue = #C3}) → test::Class
+    return test::Class::fact(defaultValue: defaultValue);
+  @#C1
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
+    return throw "unsupported";
+  static method _#constFact#tearOff({core::bool defaultValue = #C3}) → test::Class
+    return test::Class::constFact(defaultValue: defaultValue);
+  static method /* from org-dartlang-testcase:///patch_lib.dart */ _#_internal#tearOff({core::bool defaultValue = #C2}) → test::Class
+    return new test::Class::_internal(defaultValue: defaultValue);
+}
+
+constants  {
+  #C1 = _js::_Patch {}
+  #C2 = false
+  #C3 = true
+}
diff --git a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.modular.expect
new file mode 100644
index 0000000..d249938
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  get idFunction() → <S extends core::Object? = dynamic>(S%) → S%
+    return #C1;
+  get dynFunction() → dynamic
+    return #C1;
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  let final self::Class #t1 = c in let final core::int #t2 = 0 in #t1.{self::Class::idFunction}<core::int>(#t2){(core::int) → core::int};
+  let final self::Class #t3 = c in let final core::int #t4 = 0 in #t3.{self::Class::idFunction}<core::int>(#t4){(core::int) → core::int};
+  let final self::Class #t5 = c in let final core::int #t6 = 0 in #t5.{self::Class::dynFunction}(#t6);
+}
+
+constants  {
+  #C1 = static-tearoff self::id
+}
diff --git a/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.modular.expect b/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.modular.expect
new file mode 100644
index 0000000..39841ce
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/issue47108.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::T%>
+    return new self::C::•<self::C::_#new#tearOff::T%>();
+}
+static const field <T extends core::Object? = dynamic>() → self::C<T%> constructorTearOff = #C1;
+static method main() → dynamic {
+  const () → self::C<core::int> instantiatedTearOff = #C2;
+  const () → self::C<core::int> instantiatedTearOff2 = #C2;
+  core::print(core::identical(instantiatedTearOff, instantiatedTearOff2));
+  core::print(core::identical(#C3, #C3));
+}
+
+constants  {
+  #C1 = static-tearoff self::C::_#new#tearOff
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::String*>
+}
diff --git a/pkg/front_end/testcases/dartdevc/issue47313.dart.weak.modular.expect b/pkg/front_end/testcases/dartdevc/issue47313.dart.weak.modular.expect
new file mode 100644
index 0000000..26cc49c
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/issue47313.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff<X extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::X%>
+    return new self::A::•<self::A::_#new#tearOff::X%>();
+}
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+}
+class C<X extends core::Object? = dynamic> = self::A<self::C::X%> with self::M {
+  synthetic constructor •() → self::C<self::C::X%>
+    : super self::A::•()
+    ;
+  static method _#new#tearOff<X extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::X%>
+    return new self::C::•<self::C::_#new#tearOff::X%>();
+}
+static method main() → dynamic {
+  #C1;
+}
+
+constants  {
+  #C1 = static-tearoff self::C::_#new#tearOff
+}
diff --git a/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.modular.expect b/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.modular.expect
new file mode 100644
index 0000000..aaaca01
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method _privateMethod(covariant-by-declaration core::int i) → dynamic {}
+  static method _#new#tearOff() → self::Class
+    return new self::Class::•();
+}
+static method main() → dynamic {
+  new self::Class::•().{self::Class::_privateMethod}(0){(core::int) → dynamic};
+}
diff --git a/pkg/front_end/testcases/dartdevc/symbol.dart.weak.modular.expect b/pkg/front_end/testcases/dartdevc/symbol.dart.weak.modular.expect
new file mode 100644
index 0000000..d827f5b
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/symbol.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:_internal" as _in;
+
+static method main() → dynamic
+  return #C1;
+
+constants  {
+  #C1 = #a
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.modular.expect
new file mode 100644
index 0000000..a7d67d3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C10;
+  static const field self::E one = #C3;
+  static const field self::E two = #C6;
+  static const field self::E three = #C9;
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "one"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "two"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "three"
+  #C9 = self::E {index:#C7, _name:#C8}
+  #C10 = <self::E*>[#C3, #C6, #C9]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///entries_with_type_arguments.dart:
+- E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.modular.expect
new file mode 100644
index 0000000..5cc89c4
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C4;
+  static const field self::E a = #C3;
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:
+- E. (from org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/extension_types/access_setter_as_getter.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/access_setter_as_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..cd89df1
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/access_setter_as_getter.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/access_setter_as_getter.dart:16:5: Error: The getter 'foo' isn't defined for the extension 'E'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'foo'.
+//   e.foo; // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/extension_types/access_setter_as_getter.dart:17:5: Error: The setter 'bar' isn't defined for the extension 'E'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'bar'.
+//   e.bar = 42; // Error.
+//     ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+extension E on self::A {
+  get bar = self::E|get#bar;
+  set foo = self::E|set#foo;
+}
+static method E|set#foo(lowered final self::A #this, core::int value) → void {}
+static method E|get#bar(lowered final self::A #this) → core::int
+  return 42;
+static method test(self::E e) → dynamic {
+  self::E|set#foo(e, 42);
+  self::E|get#bar(e);
+  invalid-expression "pkg/front_end/testcases/extension_types/access_setter_as_getter.dart:16:5: Error: The getter 'foo' isn't defined for the extension 'E'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'foo'.
+  e.foo; // Error.
+    ^^^" in e{<unresolved>}.foo;
+  invalid-expression "pkg/front_end/testcases/extension_types/access_setter_as_getter.dart:17:5: Error: The setter 'bar' isn't defined for the extension 'E'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'bar'.
+  e.bar = 42; // Error.
+    ^^^" in e{<unresolved>}.bar = 42;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/basic_show.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/basic_show.dart.weak.modular.expect
new file mode 100644
index 0000000..35387e0
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/basic_show.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/basic_show.dart:9:26: Error: Expected an identifier, but got '{'.
+// Try inserting an identifier before '{'.
+// extension E3 on int show {} // Error.
+//                          ^
+//
+// pkg/front_end/testcases/extension_types/basic_show.dart:13:31: Error: Expected an identifier, but got '{'.
+// Try inserting an identifier before '{'.
+// extension E5 on int show num, {} // Error.
+//                               ^
+//
+// pkg/front_end/testcases/extension_types/basic_show.dart:15:26: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+// extension E6 on int show , num {} // Error.
+//                          ^
+//
+// pkg/front_end/testcases/extension_types/basic_show.dart:15:28: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E6 on int show , num {} // Error.
+//                            ^^^
+//
+// pkg/front_end/testcases/extension_types/basic_show.dart:15:28: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E6 on int show , num {} // Error.
+//                            ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension E1 on core::int show-types core::num {
+}
+extension E2 on core::int {
+}
+extension E3 on core::int {
+}
+extension E4 on core::int show-types core::num {
+}
+extension E5 on core::int show-types core::num {
+}
+extension E6 on core::int {
+}
+static method num() → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/call_not_get.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/call_not_get.dart.weak.modular.expect
new file mode 100644
index 0000000..a787e50
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/call_not_get.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/call_not_get.dart:9:5: Error: The method 'ceil' isn't defined for the extension 'E'.
+// Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
+//   e.ceil(); // Error.
+//     ^^^^
+//
+// pkg/front_end/testcases/extension_types/call_not_get.dart:10:5: Error: The setter 'ceil' isn't defined for the extension 'E'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'ceil'.
+//   e.ceil = 42; // Error.
+//     ^^^^
+//
+// pkg/front_end/testcases/extension_types/call_not_get.dart:12:5: Error: The getter 'floor' isn't defined for the extension 'E'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'floor'.
+//   e.floor; // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/extension_types/call_not_get.dart:14:5: Error: The setter 'ceil' isn't defined for the extension 'E'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'ceil'.
+//   e.ceil = 42; // Error.
+//     ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type E on core::int show-methods core::int::floor show-getters core::int::floor, core::int::ceil hide-getters core::int::floor {
+}
+static method test(self::E e) → dynamic {
+  e.{core::int::ceil}{() → core::int};
+  invalid-expression "pkg/front_end/testcases/extension_types/call_not_get.dart:9:5: Error: The method 'ceil' isn't defined for the extension 'E'.
+Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
+  e.ceil(); // Error.
+    ^^^^" in e{<unresolved>}.ceil();
+  invalid-expression "pkg/front_end/testcases/extension_types/call_not_get.dart:10:5: Error: The setter 'ceil' isn't defined for the extension 'E'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'ceil'.
+  e.ceil = 42; // Error.
+    ^^^^" in e{<unresolved>}.ceil = 42;
+  invalid-expression "pkg/front_end/testcases/extension_types/call_not_get.dart:12:5: Error: The getter 'floor' isn't defined for the extension 'E'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'floor'.
+  e.floor; // Error.
+    ^^^^^" in e{<unresolved>}.floor;
+  e.{core::int::floor}(){() → core::int};
+  invalid-expression "pkg/front_end/testcases/extension_types/call_not_get.dart:14:5: Error: The setter 'ceil' isn't defined for the extension 'E'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'ceil'.
+  e.ceil = 42; // Error.
+    ^^^^" in e{<unresolved>}.ceil = 42;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/extension_on_nullable.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/extension_on_nullable.dart.weak.modular.expect
new file mode 100644
index 0000000..3074033
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/extension_on_nullable.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+extension E on self::A? {
+  method foo = self::E|foo;
+  tearoff foo = self::E|get#foo;
+}
+static method E|foo(lowered final self::A? #this) → void {}
+static method E|get#foo(lowered final self::A? #this) → () → void
+  return () → void => self::E|foo(#this);
+static method bar(self::E e) → dynamic
+  return self::E|foo(e);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/extension_with_name_type.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/extension_with_name_type.dart.weak.modular.expect
new file mode 100644
index 0000000..626118a
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/extension_with_name_type.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+extension type on self::A {
+  method method = self::type|method;
+  tearoff method = self::type|get#method;
+}
+static method type|method(lowered final self::A #this) → dynamic {}
+static method type|get#method(lowered final self::A #this) → () → dynamic
+  return () → dynamic => self::type|method(#this);
+static method test() → dynamic {
+  self::type|method(new self::A::•());
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/issue45775.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/issue45775.dart.weak.modular.expect
new file mode 100644
index 0000000..4e10ba8
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/issue45775.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+}
+extension Bar on self::Foo {
+}
+static method main() → void {
+  self::Bar bar = new self::Foo::•();
+}
diff --git a/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.weak.modular.expect
new file mode 100644
index 0000000..6111f5a
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method mixin() → void {}
+  method as() → void {}
+}
+extension type E1 on self::A show-methods self::A::as, self::A::mixin show-getters self::A::as, self::A::mixin {
+}
+extension type E2 on self::A hide-methods self::A::as, self::A::mixin hide-getters self::A::as, self::A::mixin {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/show_and_run_ceil.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/show_and_run_ceil.dart.weak.modular.expect
new file mode 100644
index 0000000..61492c2
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/show_and_run_ceil.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension E on core::double show-types core::num {
+}
+static method expectIdentical(dynamic a, dynamic b) → dynamic {
+  if(!core::identical(a, b)) {
+    throw "Expected '${a}' and '${b}' to be identical.";
+  }
+}
+static method test(self::E e, core::int value) → dynamic {
+  self::expectIdentical(e.{core::num::ceil}(){() → core::int}, value);
+}
+static method main() → dynamic {
+  self::test(3.14, 4);
+}
diff --git a/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.weak.modular.expect
new file mode 100644
index 0000000..ba0e4db
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.weak.modular.expect
@@ -0,0 +1,70 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class B<X extends core::Object? = dynamic> extends self::A<self::B::X%> {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super self::A::•()
+    ;
+}
+class C extends self::B<core::int> {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  synthetic constructor •() → self::B2
+    : super self::A2::•()
+    ;
+}
+class C2 extends self::B2 {
+  synthetic constructor •() → self::C2
+    : super self::B2::•()
+    ;
+}
+class A3 extends core::Object {
+  field core::int? field = null;
+  field core::String? field2 = null;
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+  get getter() → core::int
+    return 42;
+  set setter(core::int value) → void {}
+  set setter2(core::int value) → void {}
+  set setter3(core::int value) → void {}
+  operator +(self::A3 other) → self::A3
+    return other;
+  operator *(self::A3 other) → self::A3
+    return this;
+}
+class B3 extends self::A3 {
+  synthetic constructor •() → self::B3
+    : super self::A3::•()
+    ;
+  method bar() → void {}
+}
+class C3 extends self::B3 {
+  synthetic constructor •() → self::C3
+    : super self::B3::•()
+    ;
+  method baz() → void {}
+}
+extension type E on self::C show-types self::B<core::int> hide-types self::A<core::int> {
+}
+extension type E2 on self::C2 show-types self::B2 hide-types self::A2 {
+}
+extension type E3 on self::C3 show-types self::B3 show-methods self::C3::baz show-getters self::A3::field, self::C3::baz show-setters self::A3::setter, self::A3::field, self::A3::field2 show-operators self::A3::+ hide-methods self::A3::foo hide-getters self::A3::getter, self::A3::foo, self::A3::field hide-setters self::A3::setter2, self::A3::setter3 hide-operators self::A3::* {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/simple.dart.weak.modular.expect
new file mode 100644
index 0000000..8f038ec
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::X%>
+    : super core::Object::•()
+    ;
+}
+class Bar<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::X%, self::Bar::Y%>
+    : super core::Object::•()
+    ;
+}
+extension A1 on dynamic {
+}
+extension A2<X extends core::Object? = dynamic> on self::Foo<X%> {
+}
+extension A3<X extends core::Object? = dynamic, Y extends (X%) → dynamic = (Never) → dynamic> on self::Bar<X%, Y> {
+}
+extension A4<X extends core::Object? = dynamic, Y extends (X%) → dynamic = (Never) → dynamic> on self::Foo<Y> {
+}
+static method foo1(self::A1 a) → self::A1
+  return throw 42;
+static method foo2(self::A2<core::int> a, self::A2<dynamic> ai) → self::A2<dynamic>
+  return throw 42;
+static method foo3(self::A3<core::int, (core::num) → dynamic> a, self::A3<dynamic, (Never) → dynamic> ai) → self::A3<dynamic, (Never) → dynamic>
+  return throw 42;
+static method foo4(self::A4<core::int, (core::num) → dynamic> a, self::A4<dynamic, (Never) → dynamic> ai) → self::A4<dynamic, (Never) → dynamic>
+  return throw 42;
+static method bar() → dynamic {
+  self::A1 a1;
+  self::A2<core::int> a2;
+  self::A2<dynamic> a2i;
+  self::A3<core::int, (core::num) → dynamic> a3;
+  self::A3<dynamic, (Never) → dynamic> a3i;
+  self::A4<core::int, (core::num) → dynamic> a4;
+  self::A4<dynamic, (Never) → dynamic> a4i;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.weak.modular.expect
new file mode 100644
index 0000000..b762cd5
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_getter_resolution.dart.weak.modular.expect
@@ -0,0 +1,78 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:20:5: Error: The getter 'baz' isn't defined for the class 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/extension_types/simple_getter_resolution.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'baz'.
+//   a.baz; // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:22:5: Error: The getter 'foo' isn't defined for the extension 'E'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'foo'.
+//   e.foo; // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:24:5: Error: The getter 'baz' isn't defined for the extension 'E'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'baz'.
+//   e.baz; // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:26:6: Error: The getter 'foo' isn't defined for the extension 'ET'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'foo'.
+//   et.foo; // Error.
+//      ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:27:6: Error: The getter 'bar' isn't defined for the extension 'ET'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'bar'.
+//   et.bar; // Error.
+//      ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  get foo() → core::int
+    return 42;
+}
+extension E on self::A {
+  get bar = self::E|get#bar;
+}
+extension type ET on self::A {
+  get baz = self::ET|get#baz;
+}
+static method E|get#bar(lowered final self::A #this) → core::double
+  return 3.14;
+static method ET|get#baz(lowered final self::A #this) → core::String
+  return "baz";
+static method test(self::A a, self::E e, self::ET et) → dynamic {
+  a.{self::A::foo}{core::int};
+  self::E|get#bar(a);
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:20:5: Error: The getter 'baz' isn't defined for the class 'A'.
+ - 'A' is from 'pkg/front_end/testcases/extension_types/simple_getter_resolution.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'baz'.
+  a.baz; // Error.
+    ^^^" in a{<unresolved>}.baz;
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:22:5: Error: The getter 'foo' isn't defined for the extension 'E'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'foo'.
+  e.foo; // Error.
+    ^^^" in e{<unresolved>}.foo;
+  self::E|get#bar(e);
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:24:5: Error: The getter 'baz' isn't defined for the extension 'E'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'baz'.
+  e.baz; // Error.
+    ^^^" in e{<unresolved>}.baz;
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:26:6: Error: The getter 'foo' isn't defined for the extension 'ET'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'foo'.
+  et.foo; // Error.
+     ^^^" in et{<unresolved>}.foo;
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_getter_resolution.dart:27:6: Error: The getter 'bar' isn't defined for the extension 'ET'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'bar'.
+  et.bar; // Error.
+     ^^^" in et{<unresolved>}.bar;
+  self::ET|get#baz(et);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.weak.modular.expect
new file mode 100644
index 0000000..ae7cf69
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_method_resolution.dart.weak.modular.expect
@@ -0,0 +1,83 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/simple_method_resolution.dart:20:5: Error: The method 'baz' isn't defined for the class 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/extension_types/simple_method_resolution.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'baz'.
+//   a.baz(); // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_method_resolution.dart:22:5: Error: The method 'foo' isn't defined for the extension 'E'.
+// Try correcting the name to the name of an existing method, or defining a method name 'foo'.
+//   e.foo(); // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_method_resolution.dart:24:5: Error: The method 'baz' isn't defined for the extension 'E'.
+// Try correcting the name to the name of an existing method, or defining a method name 'baz'.
+//   e.baz(); // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_method_resolution.dart:26:6: Error: The method 'foo' isn't defined for the extension 'ET'.
+// Try correcting the name to the name of an existing method, or defining a method name 'foo'.
+//   et.foo(); // Error.
+//      ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_method_resolution.dart:27:6: Error: The method 'bar' isn't defined for the extension 'ET'.
+// Try correcting the name to the name of an existing method, or defining a method name 'bar'.
+//   et.bar(); // Error.
+//      ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+}
+extension E on self::A {
+  method bar = self::E|bar;
+  tearoff bar = self::E|get#bar;
+}
+extension type ET on self::A {
+  method baz = self::ET|baz;
+  tearoff baz = self::ET|get#baz;
+}
+static method E|bar(lowered final self::A #this) → void
+  return #this.{self::A::foo}(){() → void};
+static method E|get#bar(lowered final self::A #this) → () → void
+  return () → void => self::E|bar(#this);
+static method ET|baz(lowered final self::A #this) → void
+  return #this.{self::A::foo}(){() → void};
+static method ET|get#baz(lowered final self::A #this) → () → void
+  return () → void => self::ET|baz(#this);
+static method test(self::A a, self::E e, self::ET et) → dynamic {
+  a.{self::A::foo}(){() → void};
+  self::E|bar(a);
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_method_resolution.dart:20:5: Error: The method 'baz' isn't defined for the class 'A'.
+ - 'A' is from 'pkg/front_end/testcases/extension_types/simple_method_resolution.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'baz'.
+  a.baz(); // Error.
+    ^^^" in a{<unresolved>}.baz();
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_method_resolution.dart:22:5: Error: The method 'foo' isn't defined for the extension 'E'.
+Try correcting the name to the name of an existing method, or defining a method name 'foo'.
+  e.foo(); // Error.
+    ^^^" in e{<unresolved>}.foo();
+  self::E|bar(e);
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_method_resolution.dart:24:5: Error: The method 'baz' isn't defined for the extension 'E'.
+Try correcting the name to the name of an existing method, or defining a method name 'baz'.
+  e.baz(); // Error.
+    ^^^" in e{<unresolved>}.baz();
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_method_resolution.dart:26:6: Error: The method 'foo' isn't defined for the extension 'ET'.
+Try correcting the name to the name of an existing method, or defining a method name 'foo'.
+  et.foo(); // Error.
+     ^^^" in et{<unresolved>}.foo();
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_method_resolution.dart:27:6: Error: The method 'bar' isn't defined for the extension 'ET'.
+Try correcting the name to the name of an existing method, or defining a method name 'bar'.
+  et.bar(); // Error.
+     ^^^" in et{<unresolved>}.bar();
+  self::ET|baz(et);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.weak.modular.expect
new file mode 100644
index 0000000..8a58ea2
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_operator_resolution.dart.weak.modular.expect
@@ -0,0 +1,140 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:26:5: Error: The operator '~/' isn't defined for the class 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/extension_types/simple_operator_resolution.dart'.
+// Try correcting the operator to an existing operator, or defining a '~/' operator.
+//   a ~/ "foobar"; // Error.
+//     ^^
+//
+// pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:28:5: Error: The operator '*' isn't defined for the extension 'E'.
+// Try correcting the operator to an existing operator, or defining a '*' operator.
+//   e * "foobar"; // Error.
+//     ^
+//
+// pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:29:4: Error: The operator '[]' isn't defined for the extension 'E'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
+//   e[0]; // Error.
+//    ^
+//
+// pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:30:4: Error: The operator '[]=' isn't defined for the extension 'E'.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
+//   e[0] = "foobar"; // Error.
+//    ^
+//
+// pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:31:3: Error: The operator 'unary-' isn't defined for the extension 'E'.
+// Try correcting the operator to an existing operator, or defining a 'unary-' operator.
+//   -e; // Error.
+//   ^
+//
+// pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:33:5: Error: The operator '~/' isn't defined for the extension 'E'.
+// Try correcting the operator to an existing operator, or defining a '~/' operator.
+//   e ~/ "foobar"; // Error.
+//     ^^
+//
+// pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:35:6: Error: The operator '*' isn't defined for the extension 'ET'.
+// Try correcting the operator to an existing operator, or defining a '*' operator.
+//   et * "foobar"; // Error.
+//      ^
+//
+// pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:36:5: Error: The operator '[]' isn't defined for the extension 'ET'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
+//   et[0]; // Error.
+//     ^
+//
+// pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:37:5: Error: The operator '[]=' isn't defined for the extension 'ET'.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
+//   et[0] = "foobar"; // Error.
+//     ^
+//
+// pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:38:3: Error: The operator 'unary-' isn't defined for the extension 'ET'.
+// Try correcting the operator to an existing operator, or defining a 'unary-' operator.
+//   -et; // Error.
+//   ^
+//
+// pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:39:6: Error: The operator '+' isn't defined for the extension 'ET'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//   et + "foobar"; // Error.
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  operator *(dynamic other) → dynamic
+    return 42;
+  operator [](core::int index) → dynamic
+    return 42;
+  operator []=(core::int index, dynamic value) → void {}
+  operator unary-() → dynamic
+    return 42;
+}
+extension E on self::A {
+  operator + = self::E|+;
+}
+extension type ET on self::A {
+  operator ~/ = self::ET|~/;
+}
+static method E|+(lowered final self::A #this, dynamic other) → dynamic
+  return 42;
+static method ET|~/(lowered final self::A #this, dynamic other) → dynamic
+  return 42;
+static method test(self::A a, self::E e, self::ET et) → dynamic {
+  a.{self::A::*}("foobar"){(dynamic) → dynamic};
+  a.{self::A::[]}(0){(core::int) → dynamic};
+  a.{self::A::[]=}(0, "foobar"){(core::int, dynamic) → void};
+  a.{self::A::unary-}(){() → dynamic};
+  self::E|+(a, "foobar");
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:26:5: Error: The operator '~/' isn't defined for the class 'A'.
+ - 'A' is from 'pkg/front_end/testcases/extension_types/simple_operator_resolution.dart'.
+Try correcting the operator to an existing operator, or defining a '~/' operator.
+  a ~/ \"foobar\"; // Error.
+    ^^" in a{<unresolved>}.~/("foobar");
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:28:5: Error: The operator '*' isn't defined for the extension 'E'.
+Try correcting the operator to an existing operator, or defining a '*' operator.
+  e * \"foobar\"; // Error.
+    ^" in e{<unresolved>}.*("foobar");
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:29:4: Error: The operator '[]' isn't defined for the extension 'E'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
+  e[0]; // Error.
+   ^" in e{<unresolved>}.[](0);
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:30:4: Error: The operator '[]=' isn't defined for the extension 'E'.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
+  e[0] = \"foobar\"; // Error.
+   ^" in e{<unresolved>}.[]=(0, "foobar");
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:31:3: Error: The operator 'unary-' isn't defined for the extension 'E'.
+Try correcting the operator to an existing operator, or defining a 'unary-' operator.
+  -e; // Error.
+  ^" in e{<unresolved>}.unary-();
+  self::E|+(e, "foobar");
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:33:5: Error: The operator '~/' isn't defined for the extension 'E'.
+Try correcting the operator to an existing operator, or defining a '~/' operator.
+  e ~/ \"foobar\"; // Error.
+    ^^" in e{<unresolved>}.~/("foobar");
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:35:6: Error: The operator '*' isn't defined for the extension 'ET'.
+Try correcting the operator to an existing operator, or defining a '*' operator.
+  et * \"foobar\"; // Error.
+     ^" in et{<unresolved>}.*("foobar");
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:36:5: Error: The operator '[]' isn't defined for the extension 'ET'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
+  et[0]; // Error.
+    ^" in et{<unresolved>}.[](0);
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:37:5: Error: The operator '[]=' isn't defined for the extension 'ET'.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
+  et[0] = \"foobar\"; // Error.
+    ^" in et{<unresolved>}.[]=(0, "foobar");
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:38:3: Error: The operator 'unary-' isn't defined for the extension 'ET'.
+Try correcting the operator to an existing operator, or defining a 'unary-' operator.
+  -et; // Error.
+  ^" in et{<unresolved>}.unary-();
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_operator_resolution.dart:39:6: Error: The operator '+' isn't defined for the extension 'ET'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+  et + \"foobar\"; // Error.
+     ^" in et{<unresolved>}.+("foobar");
+  self::ET|~/(et, "foobar");
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_setter_resolution.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/simple_setter_resolution.dart.weak.modular.expect
new file mode 100644
index 0000000..c9c618e
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_setter_resolution.dart.weak.modular.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:26:3: Error: Undefined name 'et'.
+//   et.foo = 42; // Error.
+//   ^^
+//
+// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:27:3: Error: Undefined name 'et'.
+//   et.bar = 42; // Error.
+//   ^^
+//
+// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:28:3: Error: Undefined name 'et'.
+//   et.baz = 42; // Ok.
+//   ^^
+//
+// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:20:5: Error: The setter 'baz' isn't defined for the class 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/extension_types/simple_setter_resolution.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
+//   a.baz = 42; // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:22:5: Error: The setter 'foo' isn't defined for the extension 'E'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'foo'.
+//   e.foo = 42; // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:24:5: Error: The setter 'baz' isn't defined for the extension 'E'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
+//   e.baz = 42; // Error.
+//     ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  set foo(core::int value) → void {}
+}
+extension E on self::A {
+  set bar = self::E|set#bar;
+}
+extension type ET on self::A {
+  set baz = self::ET|set#baz;
+}
+static method E|set#bar(lowered final self::A #this, core::int value) → void {}
+static method ET|set#baz(lowered final self::A #this, core::int value) → void {}
+static method test(self::A a, self::E e) → dynamic {
+  a.{self::A::foo} = 42;
+  self::E|set#bar(a, 42);
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:20:5: Error: The setter 'baz' isn't defined for the class 'A'.
+ - 'A' is from 'pkg/front_end/testcases/extension_types/simple_setter_resolution.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
+  a.baz = 42; // Error.
+    ^^^" in a{<unresolved>}.baz = 42;
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:22:5: Error: The setter 'foo' isn't defined for the extension 'E'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'foo'.
+  e.foo = 42; // Error.
+    ^^^" in e{<unresolved>}.foo = 42;
+  self::E|set#bar(e, 42);
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:24:5: Error: The setter 'baz' isn't defined for the extension 'E'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
+  e.baz = 42; // Error.
+    ^^^" in e{<unresolved>}.baz = 42;
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:26:3: Error: Undefined name 'et'.
+  et.foo = 42; // Error.
+  ^^"{<invalid>}.foo = 42;
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:27:3: Error: Undefined name 'et'.
+  et.bar = 42; // Error.
+  ^^"{<invalid>}.bar = 42;
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_setter_resolution.dart:28:3: Error: Undefined name 'et'.
+  et.baz = 42; // Ok.
+  ^^"{<invalid>}.baz = 42;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.weak.modular.expect
new file mode 100644
index 0000000..a785e78
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class I1<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I1<self::I1::X%, self::I1::Y%>
+    : super core::Object::•()
+    ;
+}
+class I2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I2<self::I2::X%, self::I2::Y%, self::I2::Z%>
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A implements self::I1<core::int, core::int> {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  method methodB() → void {}
+  method methodB2() → void {}
+  get getterB() → core::int
+    return throw 42;
+  set setterB(core::int value) → void {}
+  operator *(self::B other) → self::B
+    return throw 42;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class D extends self::C implements self::I2<core::int, core::int, core::int> {
+  synthetic constructor •() → self::D
+    : super self::C::•()
+    ;
+  method methodD() → void {}
+  get getterD() → core::int
+    return throw 42;
+  set setterD(core::int value) → void {}
+  operator +(self::D other) → self::D
+    return throw 42;
+}
+extension type E on self::D show-types self::I2<core::int, core::int, core::int>, self::C show-methods self::D::methodD show-getters self::D::methodD, self::D::getterD show-setters self::D::setterD show-operators self::D::+ hide-types self::I1<core::int, core::int>, self::A hide-methods self::B::methodB2, self::B::methodB hide-getters self::B::methodB2, self::B::methodB, self::B::getterB hide-setters self::B::setterB hide-operators self::B::* {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/simple_show_hide.dart.weak.modular.expect
new file mode 100644
index 0000000..a7bbb4c
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide.dart.weak.modular.expect
@@ -0,0 +1,95 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:9:3: Error: Undefined name 'e2'.
+//   e2.floor(); // Ok.
+//   ^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:10:6: Error: The getter 'isEven' isn't defined for the extension 'E1'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+//   e1.isEven; // Error.
+//      ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:16:6: Error: The method 'ceil' isn't defined for the extension 'E2'.
+// Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
+//   e2.ceil(); // Error.
+//      ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:18:6: Error: The getter 'isEven' isn't defined for the extension 'E2'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+//   e2.isEven; // Error.
+//      ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:24:6: Error: The getter 'isOdd' isn't defined for the extension 'E3'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isOdd'.
+//   e3.isOdd; // Ok.
+//      ^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:25:6: Error: The getter 'isEven' isn't defined for the extension 'E3'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+//   e3.isEven; // Error.
+//      ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:38:5: Error: The method 'floor' isn't defined for the extension 'MyInt'.
+// Try correcting the name to the name of an existing method, or defining a method name 'floor'.
+//   m.floor(); // Error, hidden.
+//     ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension E1 on core::int show-types core::num {
+}
+extension E2 on core::int show-types core::num hide-methods core::int::ceil hide-getters core::int::ceil {
+}
+extension E3 on core::int hide-getters core::int::isEven {
+}
+extension type MyInt on core::int show-types core::num show-getters core::int::isEven hide-methods core::int::floor hide-getters core::int::floor {
+  get twice = self::MyInt|get#twice;
+}
+static method test1(self::E1 e1) → dynamic {
+  e1.{core::num::ceil}(){() → core::int};
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:9:3: Error: Undefined name 'e2'.
+  e2.floor(); // Ok.
+  ^^"{dynamic}.floor();
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:10:6: Error: The getter 'isEven' isn't defined for the extension 'E1'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+  e1.isEven; // Error.
+     ^^^^^^" in e1{<unresolved>}.isEven;
+}
+static method test2(self::E2 e2) → dynamic {
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:16:6: Error: The method 'ceil' isn't defined for the extension 'E2'.
+Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
+  e2.ceil(); // Error.
+     ^^^^" in e2{<unresolved>}.ceil();
+  e2.{core::num::floor}(){() → core::int};
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:18:6: Error: The getter 'isEven' isn't defined for the extension 'E2'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+  e2.isEven; // Error.
+     ^^^^^^" in e2{<unresolved>}.isEven;
+}
+static method test3(self::E3 e3) → dynamic {
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:24:6: Error: The getter 'isOdd' isn't defined for the extension 'E3'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'isOdd'.
+  e3.isOdd; // Ok.
+     ^^^^^" in e3{<unresolved>}.isOdd;
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:25:6: Error: The getter 'isEven' isn't defined for the extension 'E3'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+  e3.isEven; // Error.
+     ^^^^^^" in e3{<unresolved>}.isEven;
+}
+static method MyInt|get#twice(lowered final core::int #this) → core::int
+  return 2.{core::num::*}(#this){(core::num) → core::int};
+static method test() → dynamic {
+  self::MyInt m = 42;
+  self::MyInt|get#twice(m);
+  m.{core::int::isEven}{core::bool};
+  m.{core::num::ceil}(){() → core::int};
+  m.{core::Object::toString}(){() → core::String};
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:38:5: Error: The method 'floor' isn't defined for the extension 'MyInt'.
+Try correcting the name to the name of an existing method, or defining a method name 'floor'.
+  m.floor(); // Error, hidden.
+    ^^^^^" in m{<unresolved>}.floor();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.modular.expect
new file mode 100644
index 0000000..70175c9
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:7: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   int ceil() {} // Error.
+//       ^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:7: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   int ceil() {} // Ok.
+//       ^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:7: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   int floor() {} // Error.
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension E1 on core::int show-types core::num {
+  method ceil = self::E1|ceil;
+  tearoff ceil = self::E1|get#ceil;
+}
+extension E2 on core::int show-types core::num hide-methods core::int::ceil hide-getters core::int::ceil {
+  method ceil = self::E2|ceil;
+  tearoff ceil = self::E2|get#ceil;
+  method floor = self::E2|floor;
+  tearoff floor = self::E2|get#floor;
+}
+extension E3 on core::int hide-getters core::int::isEven {
+  get isOdd = self::E3|get#isOdd;
+  get isEven = self::E3|get#isEven;
+}
+static method E1|ceil(lowered final core::int #this) → core::int {
+  return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:7: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  int ceil() {} // Error.
+      ^" in null;
+}
+static method E1|get#ceil(lowered final core::int #this) → () → core::int
+  return () → core::int => self::E1|ceil(#this);
+static method E2|ceil(lowered final core::int #this) → core::int {
+  return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:7: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  int ceil() {} // Ok.
+      ^" in null;
+}
+static method E2|get#ceil(lowered final core::int #this) → () → core::int
+  return () → core::int => self::E2|ceil(#this);
+static method E2|floor(lowered final core::int #this) → core::int {
+  return invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:7: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  int floor() {} // Error.
+      ^" in null;
+}
+static method E2|get#floor(lowered final core::int #this) → () → core::int
+  return () → core::int => self::E2|floor(#this);
+static method E3|get#isOdd(lowered final core::int #this) → core::bool
+  return throw 42;
+static method E3|get#isEven(lowered final core::int #this) → core::bool
+  return throw 42;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.modular.expect
new file mode 100644
index 0000000..7f95ca4
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:26: Error: Type variables can't be used in static members.
+//   static A<T>? method1(A<T> arg) {
+//                          ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:12: Error: Type variables can't be used in static members.
+//   static A<T>? method1(A<T> arg) {
+//            ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:31: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method2(A<A<T>> arg) {
+//                               ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:14: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method2(A<A<T>> arg) {
+//              ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:9:7: Error: Type variables can't be used in static members.
+//     A<T>? local;
+//       ^
+//
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:12:9: Error: Type variables can't be used in static members.
+//     A<A<T>>? local;
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  static method method1(self::A<invalid-type> arg) → self::A<invalid-type>? {
+    self::A<invalid-type>? local;
+  }
+  static method method2(self::A<self::A<invalid-type>> arg) → self::A<self::A<invalid-type>>? {
+    self::A<self::A<invalid-type>>? local;
+  }
+}
+extension type A<T extends core::Object? = dynamic> on self::Class<T%> {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/various_hide_elements.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/various_hide_elements.dart.weak.modular.expect
new file mode 100644
index 0000000..65db982
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/various_hide_elements.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:core" as prefixedCore;
+import "dart:core";
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  abstract operator *(self::A other) → self::A;
+}
+class B<X extends core::Object? = dynamic> extends core::Object implements self::A {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+  get foo() → core::bool
+    return throw 42;
+  operator *(self::A other) → self::A
+    return throw 42;
+}
+class C extends self::B<core::int> {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+  set bar(core::int value) → void {}
+  method baz() → void {}
+}
+extension type E0 on core::int hide-operators core::num::* {
+}
+extension type E1 on core::int hide-getters core::int::isEven {
+}
+extension type E2<T extends core::Object? = dynamic> on core::List<T%> hide-setters core::List::length {
+}
+extension type E3 on core::int hide-types core::num {
+}
+extension type E4 on core::List<core::int> hide-types core::Iterable<core::int> {
+}
+extension type E5 on core::List<dynamic> hide-types core::Iterable<dynamic> {
+}
+extension type E6 on core::List<core::int> hide-types core::Iterable<core::int> {
+}
+extension type E on self::C hide-types self::B<core::int> hide-methods self::C::baz hide-getters self::C::baz, self::B::foo hide-setters self::C::bar hide-operators self::B::* {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/various_show_elements.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/various_show_elements.dart.weak.modular.expect
new file mode 100644
index 0000000..0aae661
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/various_show_elements.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:core" as prefixedCore;
+import "dart:core";
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  abstract operator *(self::A other) → self::A;
+}
+class B<X extends core::Object? = dynamic> extends core::Object implements self::A {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+  get foo() → core::bool
+    return throw 42;
+  operator *(self::A other) → self::A
+    return throw 42;
+}
+class C extends self::B<core::int> {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+  set bar(core::int value) → void {}
+  method baz() → void {}
+}
+extension type E0 on core::int show-operators core::num::* {
+}
+extension type E1 on core::int show-getters core::int::isEven {
+}
+extension type E2<T extends core::Object? = dynamic> on core::List<T%> show-setters core::List::length {
+}
+extension type E3 on core::int show-types core::num {
+}
+extension type E4 on core::List<core::int> show-types core::Iterable<core::int> {
+}
+extension type E5 on core::List<dynamic> show-types core::Iterable<dynamic> {
+}
+extension type E6 on core::List<core::int> show-types core::Iterable<core::int> {
+}
+extension type E on self::C show-types self::B<core::int> show-methods self::C::baz show-getters self::C::baz, self::B::foo show-setters self::C::bar show-operators self::B::* {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/ambiguous.dart.weak.modular.expect
new file mode 100644
index 0000000..1dca435
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart.weak.modular.expect
@@ -0,0 +1,275 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:28:5: Error: The method 'method' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.method();
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:6:8: Context: This is one of the extension members.
+//   void method() {}
+//        ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:16:8: Context: This is one of the extension members.
+//   void method() {}
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:29:5: Error: The property 'method' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.method;
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:6:8: Context: This is one of the extension members.
+//   void method() {}
+//        ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:16:8: Context: This is one of the extension members.
+//   void method() {}
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:30:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.getter;
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:7:11: Context: This is one of the extension members.
+//   int get getter => 42;
+//           ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:17:11: Context: This is one of the extension members.
+//   int get getter => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:31:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.setter;
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:8:12: Context: This is one of the extension members.
+//   void set setter(int value) {}
+//            ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:18:12: Context: This is one of the extension members.
+//   void set setter(int value) {}
+//            ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:32:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.getter = 42;
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:7:11: Context: This is one of the extension members.
+//   int get getter => 42;
+//           ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:17:11: Context: This is one of the extension members.
+//   int get getter => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:33:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.setter = 42;
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:8:12: Context: This is one of the extension members.
+//   void set setter(int value) {}
+//            ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:18:12: Context: This is one of the extension members.
+//   void set setter(int value) {}
+//            ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:34:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.property;
+//     ^^^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:9:11: Context: This is one of the extension members.
+//   int get property => 42;
+//           ^^^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:19:12: Context: This is one of the extension members.
+//   void set property(int value) {}
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:35:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.property = 42;
+//     ^^^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:9:11: Context: This is one of the extension members.
+//   int get property => 42;
+//           ^^^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:19:12: Context: This is one of the extension members.
+//   void set property(int value) {}
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:36:5: Error: The operator '+' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c + 0;
+//     ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:10:16: Context: This is one of the extension members.
+//   int operator +(int i) => i;
+//                ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:20:16: Context: This is one of the extension members.
+//   int operator +(int i) => i;
+//                ^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:37:3: Error: The operator 'unary-' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   -c;
+//   ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:11:16: Context: This is one of the extension members.
+//   int operator -() => 0;
+//                ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:21:16: Context: This is one of the extension members.
+//   int operator -() => 0;
+//                ^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:38:4: Error: The operator '[]' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c[42];
+//    ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:12:16: Context: This is one of the extension members.
+//   int operator [](int i) => i;
+//                ^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:22:17: Context: This is one of the extension members.
+//   void operator []=(int i, int j) {}
+//                 ^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:39:4: Error: The operator '[]=' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c[42] = 0;
+//    ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:12:16: Context: This is one of the extension members.
+//   int operator [](int i) => i;
+//                ^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:22:17: Context: This is one of the extension members.
+//   void operator []=(int i, int j) {}
+//                 ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension A on self::C* {
+  method method = self::A|method;
+  tearoff method = self::A|get#method;
+  get getter = self::A|get#getter;
+  get property = self::A|get#property;
+  operator + = self::A|+;
+  operator unary- = self::A|unary-;
+  operator [] = self::A|[];
+  set setter = self::A|set#setter;
+}
+extension B on self::C* {
+  method method = self::B|method;
+  tearoff method = self::B|get#method;
+  get getter = self::B|get#getter;
+  operator + = self::B|+;
+  operator unary- = self::B|unary-;
+  operator []= = self::B|[]=;
+  set setter = self::B|set#setter;
+  set property = self::B|set#property;
+}
+static method A|method(lowered final self::C* #this) → void {}
+static method A|get#method(lowered final self::C* #this) → () →* void
+  return () → void => self::A|method(#this);
+static method A|get#getter(lowered final self::C* #this) → core::int*
+  return 42;
+static method A|set#setter(lowered final self::C* #this, core::int* value) → void {}
+static method A|get#property(lowered final self::C* #this) → core::int*
+  return 42;
+static method A|+(lowered final self::C* #this, core::int* i) → core::int*
+  return i;
+static method A|unary-(lowered final self::C* #this) → core::int*
+  return 0;
+static method A|[](lowered final self::C* #this, core::int* i) → core::int*
+  return i;
+static method B|method(lowered final self::C* #this) → void {}
+static method B|get#method(lowered final self::C* #this) → () →* void
+  return () → void => self::B|method(#this);
+static method B|get#getter(lowered final self::C* #this) → core::int*
+  return 42;
+static method B|set#setter(lowered final self::C* #this, core::int* value) → void {}
+static method B|set#property(lowered final self::C* #this, core::int* value) → void {}
+static method B|+(lowered final self::C* #this, core::int* i) → core::int*
+  return i;
+static method B|unary-(lowered final self::C* #this) → core::int*
+  return 0;
+static method B|[]=(lowered final self::C* #this, core::int* i, core::int* j) → void {}
+static method errors(self::C* c) → dynamic {
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:28:5: Error: The method 'method' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.method();
+    ^^^^^^" in c{<unresolved>}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:29:5: Error: The property 'method' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.method;
+    ^^^^^^" in c{<unresolved>}.method;
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:30:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.getter;
+    ^^^^^^" in c{<unresolved>}.getter;
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:31:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.setter;
+    ^^^^^^" in c{<unresolved>}.setter;
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:32:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.getter = 42;
+    ^^^^^^" in c{<unresolved>}.getter = 42;
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:33:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.setter = 42;
+    ^^^^^^" in c{<unresolved>}.setter = 42;
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:34:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.property;
+    ^^^^^^^^" in c{<unresolved>}.property;
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:35:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.property = 42;
+    ^^^^^^^^" in c{<unresolved>}.property = 42;
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:36:5: Error: The operator '+' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c + 0;
+    ^" in c{<unresolved>}.+(0);
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:37:3: Error: The operator 'unary-' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  -c;
+  ^" in c{<unresolved>}.unary-();
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:38:4: Error: The operator '[]' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c[42];
+   ^" in c{<unresolved>}.[](42);
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:39:4: Error: The operator '[]=' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c[42] = 0;
+   ^" in c{<unresolved>}.[]=(42, 0);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/annotations.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/annotations.dart.weak.modular.expect
new file mode 100644
index 0000000..61a26a4
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/annotations.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  @#C3
+  method instanceMethod() → dynamic {}
+  @#C3
+  static method staticMethod() → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on self::Class* {
+  method extensionInstanceMethod = self::Extension|extensionInstanceMethod;
+  tearoff extensionInstanceMethod = self::Extension|get#extensionInstanceMethod;
+  static method extensionStaticMethod = self::Extension|extensionStaticMethod;
+}
+@#C3
+static method Extension|extensionInstanceMethod(lowered final self::Class* #this) → dynamic {}
+static method Extension|get#extensionInstanceMethod(lowered final self::Class* #this) → () →* dynamic
+  return () → dynamic => self::Extension|extensionInstanceMethod(#this);
+@#C3
+static method Extension|extensionStaticMethod() → dynamic {}
+@#C3
+static method topLevelMethod() → dynamic {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "dart2js:noInline"
+  #C2 = null
+  #C3 = core::pragma {name:#C1, options:#C2}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///annotations.dart:
+- pragma._ (from org-dartlang-sdk:///sdk/lib/core/annotations.dart:188:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/extensions/annotations_scope.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/annotations_scope.dart.weak.modular.expect
new file mode 100644
index 0000000..1fc63c7
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/annotations_scope.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension E on core::int {
+  static field constField = self::E|constField;
+  static field constField1 = self::E|constField1;
+  static field constField2 = self::E|constField2;
+  static method staticMethod = self::E|staticMethod;
+  method instanceMethod = self::E|instanceMethod;
+  tearoff instanceMethod = self::E|get#instanceMethod;
+}
+@#C1
+static const field core::int E|constField = #C1;
+@#C2
+static const field core::int E|constField1 = #C3;
+@#C3
+static const field core::int E|constField2 = #C2;
+@#C1
+static method E|staticMethod() → void {}
+@#C1
+static method E|instanceMethod(lowered final core::int #this) → void {}
+static method E|get#instanceMethod(lowered final core::int #this) → () → void
+  return () → void => self::E|instanceMethod(#this);
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 3
+  #C3 = 2
+}
diff --git a/pkg/front_end/testcases/extensions/async_extensions.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.modular.expect
new file mode 100644
index 0000000..f053e58
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+extension Extension on core::int* {
+  method syncStarMethod = self::Extension|syncStarMethod;
+  tearoff syncStarMethod = self::Extension|get#syncStarMethod;
+  method asyncMethod = self::Extension|asyncMethod;
+  tearoff asyncMethod = self::Extension|get#asyncMethod;
+  method asyncStarMethod = self::Extension|asyncStarMethod;
+  tearoff asyncStarMethod = self::Extension|get#asyncStarMethod;
+}
+static method Extension|syncStarMethod(lowered final core::int* #this) → dynamic sync* {}
+static method Extension|get#syncStarMethod(lowered final core::int* #this) → () →* dynamic
+  return () → dynamic => self::Extension|syncStarMethod(#this);
+static method Extension|asyncMethod(lowered final core::int* #this) → dynamic async {}
+static method Extension|get#asyncMethod(lowered final core::int* #this) → () →* dynamic
+  return () → dynamic => self::Extension|asyncMethod(#this);
+static method Extension|asyncStarMethod(lowered final core::int* #this) → dynamic async* {}
+static method Extension|get#asyncStarMethod(lowered final core::int* #this) → () →* dynamic
+  return () → dynamic => self::Extension|asyncStarMethod(#this);
+static method main() → dynamic {
+  self::Extension|syncStarMethod(0);
+  self::Extension|get#syncStarMethod(0);
+  self::Extension|asyncMethod(0);
+  self::Extension|get#asyncMethod(0);
+  self::Extension|asyncStarMethod(0);
+  self::Extension|get#asyncStarMethod(0);
+}
diff --git a/pkg/front_end/testcases/extensions/bounds.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/bounds.dart.weak.modular.expect
new file mode 100644
index 0000000..8c13b5c
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/bounds.dart.weak.modular.expect
@@ -0,0 +1,93 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+extension Extension1<T extends core::Object*> on T* {
+  method method1 = self::Extension1|method1;
+  tearoff method1 = self::Extension1|get#method1;
+  method method2 = self::Extension1|method2;
+  tearoff method2 = self::Extension1|get#method2;
+  method method3 = self::Extension1|method3;
+  tearoff method3 = self::Extension1|get#method3;
+  method method4 = self::Extension1|method4;
+  tearoff method4 = self::Extension1|get#method4;
+}
+extension Extension2<T extends core::String*> on T* {
+  method method1 = self::Extension2|method1;
+  tearoff method1 = self::Extension2|get#method1;
+  method method2 = self::Extension2|method2;
+  tearoff method2 = self::Extension2|get#method2;
+  method method3 = self::Extension2|method3;
+  tearoff method3 = self::Extension2|get#method3;
+  method method4 = self::Extension2|method4;
+  tearoff method4 = self::Extension2|get#method4;
+}
+extension Extension3<T extends dynamic> on T* {
+  method method1 = self::Extension3|method1;
+  tearoff method1 = self::Extension3|get#method1;
+  method method2 = self::Extension3|method2;
+  tearoff method2 = self::Extension3|get#method2;
+  method method3 = self::Extension3|method3;
+  tearoff method3 = self::Extension3|get#method3;
+  method method4 = self::Extension3|method4;
+  tearoff method4 = self::Extension3|get#method4;
+}
+extension Extension4<T extends core::Object* = dynamic> on T* {
+  method method1 = self::Extension4|method1;
+  tearoff method1 = self::Extension4|get#method1;
+  method method2 = self::Extension4|method2;
+  tearoff method2 = self::Extension4|get#method2;
+  method method3 = self::Extension4|method3;
+  tearoff method3 = self::Extension4|get#method3;
+  method method4 = self::Extension4|method4;
+  tearoff method4 = self::Extension4|get#method4;
+}
+static method Extension1|method1<T extends core::Object*, S extends core::Object*>(lowered final self::Extension1|method1::T* #this) → dynamic {}
+static method Extension1|get#method1<T extends core::Object*>(lowered final self::Extension1|get#method1::T* #this) → <S extends core::Object*>() →* dynamic
+  return <S extends core::Object*>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T*, S*>(#this);
+static method Extension1|method2<T extends core::Object*, S extends core::String*>(lowered final self::Extension1|method2::T* #this) → dynamic {}
+static method Extension1|get#method2<T extends core::Object*>(lowered final self::Extension1|get#method2::T* #this) → <S extends core::String*>() →* dynamic
+  return <S extends core::String*>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T*, S*>(#this);
+static method Extension1|method3<T extends core::Object*, S extends dynamic>(lowered final self::Extension1|method3::T* #this) → dynamic {}
+static method Extension1|get#method3<T extends core::Object*>(lowered final self::Extension1|get#method3::T* #this) → <S extends dynamic>() →* dynamic
+  return <S extends dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T*, S%>(#this);
+static method Extension1|method4<T extends core::Object*, S extends core::Object* = dynamic>(lowered final self::Extension1|method4::T* #this) → dynamic {}
+static method Extension1|get#method4<T extends core::Object*>(lowered final self::Extension1|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
+  return <S extends core::Object* = dynamic>() → dynamic => self::Extension1|method4<self::Extension1|get#method4::T*, S*>(#this);
+static method Extension2|method1<T extends core::String*, S extends core::Object*>(lowered final self::Extension2|method1::T* #this) → dynamic {}
+static method Extension2|get#method1<T extends core::String*>(lowered final self::Extension2|get#method1::T* #this) → <S extends core::Object*>() →* dynamic
+  return <S extends core::Object*>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T*, S*>(#this);
+static method Extension2|method2<T extends core::String*, S extends core::String*>(lowered final self::Extension2|method2::T* #this) → dynamic {}
+static method Extension2|get#method2<T extends core::String*>(lowered final self::Extension2|get#method2::T* #this) → <S extends core::String*>() →* dynamic
+  return <S extends core::String*>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T*, S*>(#this);
+static method Extension2|method3<T extends core::String*, S extends dynamic>(lowered final self::Extension2|method3::T* #this) → dynamic {}
+static method Extension2|get#method3<T extends core::String*>(lowered final self::Extension2|get#method3::T* #this) → <S extends dynamic>() →* dynamic
+  return <S extends dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T*, S%>(#this);
+static method Extension2|method4<T extends core::String*, S extends core::Object* = dynamic>(lowered final self::Extension2|method4::T* #this) → dynamic {}
+static method Extension2|get#method4<T extends core::String*>(lowered final self::Extension2|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
+  return <S extends core::Object* = dynamic>() → dynamic => self::Extension2|method4<self::Extension2|get#method4::T*, S*>(#this);
+static method Extension3|method1<T extends dynamic, S extends core::Object*>(lowered final self::Extension3|method1::T* #this) → dynamic {}
+static method Extension3|get#method1<T extends dynamic>(lowered final self::Extension3|get#method1::T* #this) → <S extends core::Object*>() →* dynamic
+  return <S extends core::Object*>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S*>(#this);
+static method Extension3|method2<T extends dynamic, S extends core::String*>(lowered final self::Extension3|method2::T* #this) → dynamic {}
+static method Extension3|get#method2<T extends dynamic>(lowered final self::Extension3|get#method2::T* #this) → <S extends core::String*>() →* dynamic
+  return <S extends core::String*>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S*>(#this);
+static method Extension3|method3<T extends dynamic, S extends dynamic>(lowered final self::Extension3|method3::T* #this) → dynamic {}
+static method Extension3|get#method3<T extends dynamic>(lowered final self::Extension3|get#method3::T* #this) → <S extends dynamic>() →* dynamic
+  return <S extends dynamic>() → dynamic => self::Extension3|method3<self::Extension3|get#method3::T%, S%>(#this);
+static method Extension3|method4<T extends dynamic, S extends core::Object* = dynamic>(lowered final self::Extension3|method4::T* #this) → dynamic {}
+static method Extension3|get#method4<T extends dynamic>(lowered final self::Extension3|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
+  return <S extends core::Object* = dynamic>() → dynamic => self::Extension3|method4<self::Extension3|get#method4::T%, S*>(#this);
+static method Extension4|method1<T extends core::Object* = dynamic, S extends core::Object*>(lowered final self::Extension4|method1::T* #this) → dynamic {}
+static method Extension4|get#method1<T extends core::Object* = dynamic>(lowered final self::Extension4|get#method1::T* #this) → <S extends core::Object*>() →* dynamic
+  return <S extends core::Object*>() → dynamic => self::Extension4|method1<self::Extension4|get#method1::T*, S*>(#this);
+static method Extension4|method2<T extends core::Object* = dynamic, S extends core::String*>(lowered final self::Extension4|method2::T* #this) → dynamic {}
+static method Extension4|get#method2<T extends core::Object* = dynamic>(lowered final self::Extension4|get#method2::T* #this) → <S extends core::String*>() →* dynamic
+  return <S extends core::String*>() → dynamic => self::Extension4|method2<self::Extension4|get#method2::T*, S*>(#this);
+static method Extension4|method3<T extends core::Object* = dynamic, S extends dynamic>(lowered final self::Extension4|method3::T* #this) → dynamic {}
+static method Extension4|get#method3<T extends core::Object* = dynamic>(lowered final self::Extension4|get#method3::T* #this) → <S extends dynamic>() →* dynamic
+  return <S extends dynamic>() → dynamic => self::Extension4|method3<self::Extension4|get#method3::T*, S%>(#this);
+static method Extension4|method4<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::Extension4|method4::T* #this) → dynamic {}
+static method Extension4|get#method4<T extends core::Object* = dynamic>(lowered final self::Extension4|get#method4::T* #this) → <S extends core::Object* = dynamic>() →* dynamic
+  return <S extends core::Object* = dynamic>() → dynamic => self::Extension4|method4<self::Extension4|get#method4::T*, S*>(#this);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.modular.expect
new file mode 100644
index 0000000..dba880e
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/builtin_identifiers.dart:5:11: Error: Can't use 'mixin' as a name here.
+// extension mixin on int {}
+//           ^^^^^
+//
+// pkg/front_end/testcases/extensions/builtin_identifiers.dart:7:11: Error: Can't use 'extension' as a name here.
+// extension extension on int {}
+//           ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/builtin_identifiers.dart:9:11: Error: Can't use 'as' as a name here.
+// extension as on int {}
+//           ^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension mixin on core::int* {
+}
+extension extension on core::int* {
+}
+extension as on core::int* {
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/call_methods.dart.weak.modular.expect
new file mode 100644
index 0000000..d38841f
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.weak.modular.expect
@@ -0,0 +1,192 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:29:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+// var topLevel1 = 1(10);
+//                  ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:30:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+// var topLevel2 = 1("10");
+//                  ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:31:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+// var topLevel3 = 1.0(10);
+//                    ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:32:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+// var topLevel4 = 1.0("10");
+//                    ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var topLevel5 = a(2);
+//                  ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var topLevel6 = a(2, "3");
+//                  ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:39:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   1(10);
+//    ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:40:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   1("10");
+//    ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:41:6: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   1.0(10);
+//      ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:42:6: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   1.0("10");
+//      ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   a(2);
+//    ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:45:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   a(2, "3");
+//    ^
+//
+// pkg/front_end/testcases/extensions/call_methods.dart:47:4: Error: Cannot invoke an instance of 'B' because it declares 'call' to be something other than a method.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   b();
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  get call() → core::String*
+    return "My name is A";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get call() → () →* core::String*
+    return () → core::String* => "My name is B";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension _extension#0 on core::int* {
+  get call = self::_extension#0|get#call;
+}
+extension _extension#1 on core::num* {
+  get call = self::_extension#1|get#call;
+}
+extension _extension#2 on core::String* {
+  get call = self::_extension#2|get#call;
+}
+static field core::String* topLevel1 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:29:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+var topLevel1 = 1(10);
+                 ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.(10);
+static field core::String* topLevel2 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:30:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+var topLevel2 = 1(\"10\");
+                 ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.("10");
+static field core::String* topLevel3 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:31:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+var topLevel3 = 1.0(10);
+                   ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.(10);
+static field core::String* topLevel4 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:32:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+var topLevel4 = 1.0(\"10\");
+                   ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
+static field self::A* a = new self::A::•();
+static field invalid-type topLevel5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+ - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var topLevel5 = a(2);
+                 ^";
+static field self::B* b = new self::B::•();
+static field invalid-type topLevel6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+ - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var topLevel6 = a(2, \"3\");
+                 ^";
+static method _extension#0|get#call(lowered final core::int* #this) → core::String*
+  return "My name is int";
+static method _extension#1|get#call(lowered final core::num* #this) → core::String*
+  return "My name is num";
+static method _extension#2|get#call(lowered final core::String* #this) → () →* core::String*
+  return () → core::String* => "My name is String";
+static method main() → dynamic {
+  self::_extension#2|get#call("")(){() →* core::String*};
+}
+static method errors() → dynamic {
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:39:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  1(10);
+   ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.(10);
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:40:4: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  1(\"10\");
+   ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.("10");
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:41:6: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  1.0(10);
+     ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.(10);
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:42:6: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  1.0(\"10\");
+     ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
+  self::A* a = new self::A::•();
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+ - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  a(2);
+   ^";
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:45:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
+ - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  a(2, \"3\");
+   ^";
+  self::B* b = new self::B::•();
+  invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:47:4: Error: Cannot invoke an instance of 'B' because it declares 'call' to be something other than a method.
+ - 'B' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  b();
+   ^";
+}
diff --git a/pkg/front_end/testcases/extensions/check_bounds.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/check_bounds.dart.weak.modular.expect
new file mode 100644
index 0000000..0e8aa01
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/check_bounds.dart.weak.modular.expect
@@ -0,0 +1,972 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:24:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
+//  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'method'.
+//   classA.method(); // Expect method not found.
+//          ^^^^^^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:25:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension(classA).method(); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:26:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classA).method(); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:28:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension(classA).genericMethod(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:28:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension(classA).genericMethod(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:29:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:29:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:30:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:31:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classA).genericMethod(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:31:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension<A>(classA).genericMethod(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:32:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:32:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:33:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:34:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension<B>(classA).genericMethod(a); // Expect bounds mismatch.
+//                        ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:35:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<B>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//                        ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:41:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classB).method(); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:44:10: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   classB.genericMethod(a); // Expect bounds mismatch.
+//          ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:45:10: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   classB.genericMethod<A>(a); // Expect bounds mismatch.
+//          ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:47:21: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension(classB).genericMethod(a); // Expect bounds mismatch.
+//                     ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:48:21: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension(classB).genericMethod<A>(a); // Expect bounds mismatch.
+//                     ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:50:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classB).genericMethod(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:50:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension<A>(classB).genericMethod(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:51:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classB).genericMethod<A>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:51:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classB).genericMethod<A>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:52:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:53:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
+//                        ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:54:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
+//                        ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:60:23: Error: The method 'method' isn't defined for the class 'Class<A>'.
+//  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'method'.
+// final field1 = classA.method(); // Expect method not found.
+//                       ^^^^^^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:61:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// final field2 = Extension(classA).method(); // Expect bounds mismatch.
+//                ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:62:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// final field3 = Extension<A>(classA).method(); // Expect bounds mismatch.
+//                ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:64:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// final field5 = Extension(classA).genericMethod(a); // Expect bounds mismatch.
+//                ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:64:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// final field5 = Extension(classA).genericMethod(a); // Expect bounds mismatch.
+//                ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:65:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// final field6 = Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//                ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:65:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// final field6 = Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//                ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:66:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// final field7 = Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:67:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// final field8 = Extension<A>(classA).genericMethod(a); // Expect bounds mismatch.
+//                ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:67:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// final field8 = Extension<A>(classA).genericMethod(a); // Expect bounds mismatch.
+//                ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:69:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     Extension<A>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//     ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:69:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     Extension<A>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//     ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:71:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//     ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:73:26: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     Extension<B>(classA).genericMethod(a); // Expect bounds mismatch.
+//                          ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:75:26: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     Extension<B>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//                          ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:81:17: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// final field16 = Extension<A>(classB).method(); // Expect bounds mismatch.
+//                 ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:84:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// final field18 = classB.genericMethod(a); // Expect bounds mismatch.
+//                        ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:85:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// final field19 = classB.genericMethod<A>(a); // Expect bounds mismatch.
+//                        ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:87:35: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// final field21 = Extension(classB).genericMethod(a); // Expect bounds mismatch.
+//                                   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:89:23: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     Extension(classB).genericMethod<A>(a); // Expect bounds mismatch.
+//                       ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:92:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     Extension<A>(classB).genericMethod(a); // Expect bounds mismatch.
+//     ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:92:5: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     Extension<A>(classB).genericMethod(a); // Expect bounds mismatch.
+//     ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:94:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     Extension<A>(classB).genericMethod<A>(a); // Expect bounds mismatch.
+//     ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:94:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     Extension<A>(classB).genericMethod<A>(a); // Expect bounds mismatch.
+//     ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:96:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+//     ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:98:26: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
+//                          ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:100:26: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
+//                          ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:11:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
+//  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'method'.
+//   classA.method();
+//          ^^^^^^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:12:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension(classA).method(); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:13:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classA).method(); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:15:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension(classA).genericMethod(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:15:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension(classA).genericMethod(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:16:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:16:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:17:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:18:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classA).genericMethod(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:18:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension<A>(classA).genericMethod(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:19:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:19:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:20:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:21:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension<B>(classA).genericMethod(a); // Expect bounds mismatch.
+//                        ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:22:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<B>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//                        ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:28:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classB).method(); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:31:10: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   classB.genericMethod(a); // Expect bounds mismatch.
+//          ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:32:10: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   classB.genericMethod<A>(a); // Expect bounds mismatch.
+//          ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:34:21: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension(classB).genericMethod(a); // Expect bounds mismatch.
+//                     ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:35:21: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension(classB).genericMethod<A>(a); // Expect bounds mismatch.
+//                     ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:37:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classB).genericMethod(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:37:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension<A>(classB).genericMethod(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classB).genericMethod<A>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classB).genericMethod<A>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:39:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+//   ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:40:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
+//                        ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:41:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
+//                        ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+part check_bounds_lib.dart;
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class Class<T extends self::A*> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension<T extends self::B*> on self::Class<T*>* {
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  method genericMethod = self::Extension|genericMethod;
+  tearoff genericMethod = self::Extension|get#genericMethod;
+}
+static final field self::A* a = new self::A::•();
+static final field self::Class<self::A*>* classA = new self::Class::•<self::A*>();
+static final field dynamic field1 = invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:60:23: Error: The method 'method' isn't defined for the class 'Class<A>'.
+ - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'method'.
+final field1 = classA.method(); // Expect method not found.
+                      ^^^^^^" in self::classA{<unresolved>}.method();
+static final field dynamic field2 = self::Extension|method<self::A*>(self::classA);
+static final field dynamic field3 = self::Extension|method<self::A*>(self::classA);
+static final field dynamic field4 = self::Extension|method<self::B*>(self::classA as{TypeError} self::Class<self::B*>*);
+static final field dynamic field5 = self::Extension|genericMethod<self::A*, self::A*>(self::classA, self::a);
+static final field dynamic field6 = self::Extension|genericMethod<self::A*, self::A*>(self::classA, self::a);
+static final field dynamic field7 = self::Extension|genericMethod<self::A*, self::B*>(self::classA, self::a as{TypeError} self::B*);
+static final field dynamic field8 = self::Extension|genericMethod<self::A*, self::A*>(self::classA, self::a);
+static final field dynamic field9 = self::Extension|genericMethod<self::A*, self::A*>(self::classA, self::a);
+static final field dynamic field10 = self::Extension|genericMethod<self::A*, self::B*>(self::classA, self::a as{TypeError} self::B*);
+static final field dynamic field11 = self::Extension|genericMethod<self::B*, self::A*>(self::classA as{TypeError} self::Class<self::B*>*, self::a);
+static final field dynamic field12 = self::Extension|genericMethod<self::B*, self::A*>(self::classA as{TypeError} self::Class<self::B*>*, self::a);
+static final field dynamic field13 = self::Extension|genericMethod<self::B*, self::B*>(self::classA as{TypeError} self::Class<self::B*>*, self::a as{TypeError} self::B*);
+static final field self::Class<self::B*>* classB = new self::Class::•<self::B*>();
+static final field dynamic field14 = self::Extension|method<self::B*>(self::classB);
+static final field dynamic field15 = self::Extension|method<self::B*>(self::classB);
+static final field dynamic field16 = self::Extension|method<self::A*>(self::classB);
+static final field dynamic field17 = self::Extension|method<self::B*>(self::classB);
+static final field dynamic field18 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
+static final field dynamic field19 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
+static final field dynamic field20 = self::Extension|genericMethod<self::B*, self::B*>(self::classB, self::a as{TypeError} self::B*);
+static final field dynamic field21 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
+static final field dynamic field22 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
+static final field dynamic field23 = self::Extension|genericMethod<self::B*, self::B*>(self::classB, self::a as{TypeError} self::B*);
+static final field dynamic field24 = self::Extension|genericMethod<self::A*, self::A*>(self::classB, self::a);
+static final field dynamic field25 = self::Extension|genericMethod<self::A*, self::A*>(self::classB, self::a);
+static final field dynamic field26 = self::Extension|genericMethod<self::A*, self::B*>(self::classB, self::a as{TypeError} self::B*);
+static final field dynamic field27 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
+static final field dynamic field28 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
+static final field dynamic field29 = self::Extension|genericMethod<self::B*, self::B*>(self::classB, self::a as{TypeError} self::B*);
+static method Extension|method<T extends self::B*>(lowered final self::Class<self::Extension|method::T*>* #this) → dynamic {}
+static method Extension|get#method<T extends self::B*>(lowered final self::Class<self::Extension|get#method::T*>* #this) → () →* dynamic
+  return () → dynamic => self::Extension|method<self::Extension|get#method::T*>(#this);
+static method Extension|genericMethod<T extends self::B*, S extends self::B*>(lowered final self::Class<self::Extension|genericMethod::T*>* #this, self::Extension|genericMethod::S* s) → dynamic {}
+static method Extension|get#genericMethod<T extends self::B*>(lowered final self::Class<self::Extension|get#genericMethod::T*>* #this) → <S extends self::B*>(S*) →* dynamic
+  return <S extends self::B*>(S* s) → dynamic => self::Extension|genericMethod<self::Extension|get#genericMethod::T*, S*>(#this, s);
+static method main() → dynamic {}
+static method test() → dynamic {
+  self::A* a;
+  self::Class<self::A*>* classA = new self::Class::•<self::A*>();
+  invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:24:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
+ - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'method'.
+  classA.method(); // Expect method not found.
+         ^^^^^^" in classA{<unresolved>}.method();
+  self::Extension|method<self::A*>(classA);
+  self::Extension|method<self::A*>(classA);
+  self::Extension|method<self::B*>(classA as{TypeError} self::Class<self::B*>*);
+  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
+  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
+  self::Extension|genericMethod<self::A*, self::B*>(classA, a as{TypeError} self::B*);
+  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
+  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
+  self::Extension|genericMethod<self::A*, self::B*>(classA, a as{TypeError} self::B*);
+  self::Extension|genericMethod<self::B*, self::A*>(classA as{TypeError} self::Class<self::B*>*, a);
+  self::Extension|genericMethod<self::B*, self::A*>(classA as{TypeError} self::Class<self::B*>*, a);
+  self::Extension|genericMethod<self::B*, self::B*>(classA as{TypeError} self::Class<self::B*>*, a as{TypeError} self::B*);
+  self::Class<self::B*>* classB = new self::Class::•<self::B*>();
+  self::Extension|method<self::B*>(classB);
+  self::Extension|method<self::B*>(classB);
+  self::Extension|method<self::A*>(classB);
+  self::Extension|method<self::B*>(classB);
+  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
+  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
+  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
+  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
+  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
+  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
+  self::Extension|genericMethod<self::A*, self::A*>(classB, a);
+  self::Extension|genericMethod<self::A*, self::A*>(classB, a);
+  self::Extension|genericMethod<self::A*, self::B*>(classB, a as{TypeError} self::B*);
+  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
+  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
+  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
+}
+static method /* from org-dartlang-testcase:///check_bounds_lib.dart */ testInPart() → dynamic {
+  self::A* a;
+  self::Class<self::A*>* classA = new self::Class::•<self::A*>();
+  invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:11:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
+ - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'method'.
+  classA.method();
+         ^^^^^^" in classA{<unresolved>}.method();
+  self::Extension|method<self::A*>(classA);
+  self::Extension|method<self::A*>(classA);
+  self::Extension|method<self::B*>(classA as{TypeError} self::Class<self::B*>*);
+  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
+  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
+  self::Extension|genericMethod<self::A*, self::B*>(classA, a as{TypeError} self::B*);
+  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
+  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
+  self::Extension|genericMethod<self::A*, self::B*>(classA, a as{TypeError} self::B*);
+  self::Extension|genericMethod<self::B*, self::A*>(classA as{TypeError} self::Class<self::B*>*, a);
+  self::Extension|genericMethod<self::B*, self::A*>(classA as{TypeError} self::Class<self::B*>*, a);
+  self::Extension|genericMethod<self::B*, self::B*>(classA as{TypeError} self::Class<self::B*>*, a as{TypeError} self::B*);
+  self::Class<self::B*>* classB = new self::Class::•<self::B*>();
+  self::Extension|method<self::B*>(classB);
+  self::Extension|method<self::B*>(classB);
+  self::Extension|method<self::A*>(classB);
+  self::Extension|method<self::B*>(classB);
+  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
+  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
+  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
+  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
+  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
+  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
+  self::Extension|genericMethod<self::A*, self::A*>(classB, a);
+  self::Extension|genericMethod<self::A*, self::A*>(classB, a);
+  self::Extension|genericMethod<self::A*, self::B*>(classB, a as{TypeError} self::B*);
+  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
+  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
+  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
+}
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/compounds.dart.weak.modular.expect
new file mode 100644
index 0000000..ccd5bd4
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/compounds.dart.weak.modular.expect
@@ -0,0 +1,514 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Number extends core::Object {
+  final field core::int* value;
+  constructor •(core::int* value) → self::Number*
+    : self::Number::value = value, super core::Object::•()
+    ;
+  get hashCode() → core::int*
+    return this.{self::Number::value}{core::int*}.{core::num::hashCode}{core::int*};
+  operator ==(core::Object* other) → core::bool*
+    return other is self::Number* && this.{self::Number::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Number*}.{self::Number::value}{core::int*};
+  method toString() → core::String*
+    return "Number(${this.{self::Number::value}{core::int*}})";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class extends core::Object {
+  field self::Number* field;
+  constructor •(self::Number* field) → self::Class*
+    : self::Class::field = field, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class IntClass extends core::Object {
+  field core::int* field;
+  constructor •(core::int* field) → self::IntClass*
+    : self::IntClass::field = field, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension NumberExtension on self::Number* {
+  operator + = self::NumberExtension|+;
+  operator - = self::NumberExtension|-;
+}
+extension ClassExtension on self::Class* {
+  get property = self::ClassExtension|get#property;
+  method testImplicitProperties = self::ClassExtension|testImplicitProperties;
+  tearoff testImplicitProperties = self::ClassExtension|get#testImplicitProperties;
+  set property = self::ClassExtension|set#property;
+}
+extension IntClassExtension on self::IntClass* {
+  get property = self::IntClassExtension|get#property;
+  method testImplicitProperties = self::IntClassExtension|testImplicitProperties;
+  tearoff testImplicitProperties = self::IntClassExtension|get#testImplicitProperties;
+  set property = self::IntClassExtension|set#property;
+}
+static method NumberExtension|+(lowered final self::Number* #this, core::Object* other) → self::Number* {
+  if(other is core::int*) {
+    return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::+}(other{core::int*}){(core::num*) →* core::int*});
+  }
+  else
+    if(other is self::Number*) {
+      return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::+}(other{self::Number*}.{self::Number::value}{core::int*}){(core::num*) →* core::int*});
+    }
+    else {
+      throw new core::ArgumentError::•("${other}");
+    }
+}
+static method NumberExtension|-(lowered final self::Number* #this, core::Object* other) → self::Number* {
+  if(other is core::int*) {
+    return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::-}(other{core::int*}){(core::num*) →* core::int*});
+  }
+  else
+    if(other is self::Number*) {
+      return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::-}(other{self::Number*}.{self::Number::value}{core::int*}){(core::num*) →* core::int*});
+    }
+    else {
+      throw new core::ArgumentError::•("${other}");
+    }
+}
+static method ClassExtension|get#property(lowered final self::Class* #this) → self::Number*
+  return #this.{self::Class::field}{self::Number*};
+static method ClassExtension|set#property(lowered final self::Class* #this, self::Number* value) → void {
+  #this.{self::Class::field} = value;
+}
+static method ClassExtension|testImplicitProperties(lowered final self::Class* #this) → dynamic {
+  self::Number* n0 = new self::Number::•(0);
+  self::Number* n1 = new self::Number::•(1);
+  self::Number* n2 = new self::Number::•(2);
+  self::expect(n0, self::ClassExtension|get#property(#this));
+  self::expect(n1, let final self::Number* #t1 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t2 = self::ClassExtension|set#property(#this, #t1) in #t1);
+  self::expect(n2, let final self::Number* #t3 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t4 = self::ClassExtension|set#property(#this, #t3) in #t3);
+  self::expect(n0, let final self::Number* #t5 = self::NumberExtension|-(self::ClassExtension|get#property(#this), n2) in let final void #t6 = self::ClassExtension|set#property(#this, #t5) in #t5);
+  self::expect(n1, let final self::Number* #t7 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t8 = self::ClassExtension|set#property(#this, #t7) in #t7);
+  self::expect(n0, let final self::Number* #t9 = self::NumberExtension|-(self::ClassExtension|get#property(#this), n1) in let final void #t10 = self::ClassExtension|set#property(#this, #t9) in #t9);
+  self::expect(n1, let final self::Number* #t11 = self::NumberExtension|+(self::ClassExtension|get#property(#this), 1) in let final void #t12 = self::ClassExtension|set#property(#this, #t11) in #t11);
+  self::expect(n0, let final self::Number* #t13 = self::NumberExtension|-(self::ClassExtension|get#property(#this), 1) in let final void #t14 = self::ClassExtension|set#property(#this, #t13) in #t13);
+  self::expect(n0, let final self::Number* #t15 = self::ClassExtension|get#property(#this) in let final self::Number* #t16 = self::ClassExtension|set#property(#this, self::NumberExtension|+(#t15, 1)) in #t15);
+  self::expect(n1, let final self::Number* #t17 = self::ClassExtension|get#property(#this) in let final self::Number* #t18 = self::ClassExtension|set#property(#this, self::NumberExtension|-(#t17, 1)) in #t17);
+  self::expect(n0, self::ClassExtension|get#property(#this));
+  self::expect(n0, self::ClassExtension|get#property(#this));
+  self::ClassExtension|set#property(#this, self::NumberExtension|+(self::ClassExtension|get#property(#this), n1));
+  self::expect(n1, self::ClassExtension|get#property(#this));
+  self::ClassExtension|set#property(#this, self::NumberExtension|+(self::ClassExtension|get#property(#this), n1));
+  self::expect(n2, self::ClassExtension|get#property(#this));
+  self::ClassExtension|set#property(#this, self::NumberExtension|-(self::ClassExtension|get#property(#this), n2));
+  self::expect(n0, self::ClassExtension|get#property(#this));
+  self::ClassExtension|set#property(#this, self::NumberExtension|+(self::ClassExtension|get#property(#this), n1));
+  self::expect(n1, self::ClassExtension|get#property(#this));
+  self::ClassExtension|set#property(#this, self::NumberExtension|-(self::ClassExtension|get#property(#this), n1));
+  self::expect(n0, self::ClassExtension|get#property(#this));
+  let final self::Number* #t19 = self::NumberExtension|+(self::ClassExtension|get#property(#this), 1) in let final void #t20 = self::ClassExtension|set#property(#this, #t19) in #t19;
+  self::expect(n1, self::ClassExtension|get#property(#this));
+  let final self::Number* #t21 = self::NumberExtension|-(self::ClassExtension|get#property(#this), 1) in let final void #t22 = self::ClassExtension|set#property(#this, #t21) in #t21;
+  self::expect(n0, self::ClassExtension|get#property(#this));
+  self::ClassExtension|set#property(#this, self::NumberExtension|+(self::ClassExtension|get#property(#this), 1));
+  self::expect(n1, self::ClassExtension|get#property(#this));
+  self::ClassExtension|set#property(#this, self::NumberExtension|-(self::ClassExtension|get#property(#this), 1));
+  self::expect(n0, self::ClassExtension|get#property(#this));
+}
+static method ClassExtension|get#testImplicitProperties(lowered final self::Class* #this) → () →* dynamic
+  return () → dynamic => self::ClassExtension|testImplicitProperties(#this);
+static method IntClassExtension|get#property(lowered final self::IntClass* #this) → core::int*
+  return #this.{self::IntClass::field}{core::int*};
+static method IntClassExtension|set#property(lowered final self::IntClass* #this, core::int* value) → void {
+  #this.{self::IntClass::field} = value;
+}
+static method IntClassExtension|testImplicitProperties(lowered final self::IntClass* #this) → dynamic {
+  core::int* n0 = 0;
+  core::int* n1 = 1;
+  core::int* n2 = 2;
+  self::expect(n0, self::IntClassExtension|get#property(#this));
+  self::expect(n1, let final core::int* #t23 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t24 = self::IntClassExtension|set#property(#this, #t23) in #t23);
+  self::expect(n2, let final core::int* #t25 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t26 = self::IntClassExtension|set#property(#this, #t25) in #t25);
+  self::expect(n0, let final core::int* #t27 = self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t28 = self::IntClassExtension|set#property(#this, #t27) in #t27);
+  self::expect(n1, let final core::int* #t29 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t30 = self::IntClassExtension|set#property(#this, #t29) in #t29);
+  self::expect(n0, let final core::int* #t31 = self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t32 = self::IntClassExtension|set#property(#this, #t31) in #t31);
+  self::expect(n1, let final core::int* #t33 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t34 = self::IntClassExtension|set#property(#this, #t33) in #t33);
+  self::expect(n0, let final core::int* #t35 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t36 = self::IntClassExtension|set#property(#this, #t35) in #t35);
+  self::expect(n0, let final core::int* #t37 = self::IntClassExtension|get#property(#this) in let final core::int* #t38 = self::IntClassExtension|set#property(#this, #t37.{core::num::+}(1){(core::num*) →* core::int*}) in #t37);
+  self::expect(n1, let final core::int* #t39 = self::IntClassExtension|get#property(#this) in let final core::int* #t40 = self::IntClassExtension|set#property(#this, #t39.{core::num::-}(1){(core::num*) →* core::int*}) in #t39);
+  self::expect(n0, self::IntClassExtension|get#property(#this));
+  self::expect(n0, self::IntClassExtension|get#property(#this));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n1, self::IntClassExtension|get#property(#this));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n2, self::IntClassExtension|get#property(#this));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num*) →* core::int*});
+  self::expect(n0, self::IntClassExtension|get#property(#this));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n1, self::IntClassExtension|get#property(#this));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num*) →* core::int*});
+  self::expect(n0, self::IntClassExtension|get#property(#this));
+  let final core::int* #t41 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t42 = self::IntClassExtension|set#property(#this, #t41) in #t41;
+  self::expect(n1, self::IntClassExtension|get#property(#this));
+  let final core::int* #t43 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t44 = self::IntClassExtension|set#property(#this, #t43) in #t43;
+  self::expect(n0, self::IntClassExtension|get#property(#this));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*});
+  self::expect(n1, self::IntClassExtension|get#property(#this));
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*});
+  self::expect(n0, self::IntClassExtension|get#property(#this));
+}
+static method IntClassExtension|get#testImplicitProperties(lowered final self::IntClass* #this) → () →* dynamic
+  return () → dynamic => self::IntClassExtension|testImplicitProperties(#this);
+static method main() → dynamic {
+  self::testLocals();
+  self::testProperties();
+  self::testIntProperties();
+  self::testExplicitProperties();
+  self::testExplicitIntProperties();
+  self::testExplicitNullAwareProperties(null);
+  self::testExplicitNullAwareProperties(new self::Class::•(new self::Number::•(0)));
+  self::testExplicitNullAwareIntProperties(null);
+  self::testExplicitNullAwareIntProperties(new self::IntClass::•(0));
+  self::ClassExtension|testImplicitProperties(new self::Class::•(new self::Number::•(0)));
+  self::IntClassExtension|testImplicitProperties(new self::IntClass::•(0));
+}
+static method testLocals() → dynamic {
+  self::Number* n0 = new self::Number::•(0);
+  self::Number* n1 = new self::Number::•(1);
+  self::Number* n2 = new self::Number::•(2);
+  self::Number* v = n0;
+  self::expect(n0, v);
+  self::expect(n1, v = self::NumberExtension|+(v, n1));
+  self::expect(n2, v = self::NumberExtension|+(v, n1));
+  self::expect(n0, v = self::NumberExtension|-(v, n2));
+  self::expect(n1, v = self::NumberExtension|+(v, n1));
+  self::expect(n0, v = self::NumberExtension|-(v, n1));
+  self::expect(n1, v = self::NumberExtension|+(v, 1));
+  self::expect(n0, v = self::NumberExtension|-(v, 1));
+  self::expect(n0, let final self::Number* #t45 = v in let final self::Number* #t46 = v = self::NumberExtension|+(#t45, 1) in #t45);
+  self::expect(n1, let final self::Number* #t47 = v in let final self::Number* #t48 = v = self::NumberExtension|-(#t47, 1) in #t47);
+  self::expect(n0, v);
+  self::expect(n0, v);
+  v = self::NumberExtension|+(v, n1);
+  self::expect(n1, v);
+  v = self::NumberExtension|+(v, n1);
+  self::expect(n2, v);
+  v = self::NumberExtension|-(v, n2);
+  self::expect(n0, v);
+  v = self::NumberExtension|+(v, n1);
+  self::expect(n1, v);
+  v = self::NumberExtension|-(v, n1);
+  self::expect(n0, v);
+  v = self::NumberExtension|+(v, 1);
+  self::expect(n1, v);
+  v = self::NumberExtension|-(v, 1);
+  self::expect(n0, v);
+  v = self::NumberExtension|+(v, 1);
+  self::expect(n1, v);
+  v = self::NumberExtension|-(v, 1);
+  self::expect(n0, v);
+}
+static method testProperties() → dynamic {
+  self::Number* n0 = new self::Number::•(0);
+  self::Number* n1 = new self::Number::•(1);
+  self::Number* n2 = new self::Number::•(2);
+  self::Class* v = new self::Class::•(n0);
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  self::expect(n1, let final self::Class* #t49 = v in #t49.{self::Class::field} = self::NumberExtension|+(#t49.{self::Class::field}{self::Number*}, n1));
+  self::expect(n2, let final self::Class* #t50 = v in #t50.{self::Class::field} = self::NumberExtension|+(#t50.{self::Class::field}{self::Number*}, n1));
+  self::expect(n0, let final self::Class* #t51 = v in #t51.{self::Class::field} = self::NumberExtension|-(#t51.{self::Class::field}{self::Number*}, n2));
+  self::expect(n1, let final self::Class* #t52 = v in #t52.{self::Class::field} = self::NumberExtension|+(#t52.{self::Class::field}{self::Number*}, n1));
+  self::expect(n0, let final self::Class* #t53 = v in #t53.{self::Class::field} = self::NumberExtension|-(#t53.{self::Class::field}{self::Number*}, n1));
+  self::expect(n1, let final self::Class* #t54 = v in #t54.{self::Class::field} = self::NumberExtension|+(#t54.{self::Class::field}{self::Number*}, 1));
+  self::expect(n0, let final self::Class* #t55 = v in #t55.{self::Class::field} = self::NumberExtension|-(#t55.{self::Class::field}{self::Number*}, 1));
+  self::expect(n0, let final self::Class* #t56 = v in let final self::Number* #t57 = #t56.{self::Class::field}{self::Number*} in let final self::Number* #t58 = #t56.{self::Class::field} = self::NumberExtension|+(#t57, 1) in #t57);
+  self::expect(n1, let final self::Class* #t59 = v in let final self::Number* #t60 = #t59.{self::Class::field}{self::Number*} in let final self::Number* #t61 = #t59.{self::Class::field} = self::NumberExtension|-(#t60, 1) in #t60);
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t62 = v in #t62.{self::Class::field} = self::NumberExtension|+(#t62.{self::Class::field}{self::Number*}, n1);
+  self::expect(n1, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t63 = v in #t63.{self::Class::field} = self::NumberExtension|+(#t63.{self::Class::field}{self::Number*}, n1);
+  self::expect(n2, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t64 = v in #t64.{self::Class::field} = self::NumberExtension|-(#t64.{self::Class::field}{self::Number*}, n2);
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t65 = v in #t65.{self::Class::field} = self::NumberExtension|+(#t65.{self::Class::field}{self::Number*}, n1);
+  self::expect(n1, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t66 = v in #t66.{self::Class::field} = self::NumberExtension|-(#t66.{self::Class::field}{self::Number*}, n1);
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t67 = v in #t67.{self::Class::field} = self::NumberExtension|+(#t67.{self::Class::field}{self::Number*}, 1);
+  self::expect(n1, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t68 = v in #t68.{self::Class::field} = self::NumberExtension|-(#t68.{self::Class::field}{self::Number*}, 1);
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t69 = v in #t69.{self::Class::field} = self::NumberExtension|+(#t69.{self::Class::field}{self::Number*}, 1);
+  self::expect(n1, v.{self::Class::field}{self::Number*});
+  let final self::Class* #t70 = v in #t70.{self::Class::field} = self::NumberExtension|-(#t70.{self::Class::field}{self::Number*}, 1);
+  self::expect(n0, v.{self::Class::field}{self::Number*});
+  self::expect(n0, self::ClassExtension|get#property(v));
+  self::expect(n1, let final self::Class* #t71 = v in let final self::Number* #t72 = self::NumberExtension|+(self::ClassExtension|get#property(#t71), n1) in let final void #t73 = self::ClassExtension|set#property(#t71, #t72) in #t72);
+  self::expect(n2, let final self::Class* #t74 = v in let final self::Number* #t75 = self::NumberExtension|+(self::ClassExtension|get#property(#t74), n1) in let final void #t76 = self::ClassExtension|set#property(#t74, #t75) in #t75);
+  self::expect(n0, let final self::Class* #t77 = v in let final self::Number* #t78 = self::NumberExtension|-(self::ClassExtension|get#property(#t77), n2) in let final void #t79 = self::ClassExtension|set#property(#t77, #t78) in #t78);
+  self::expect(n1, let final self::Class* #t80 = v in let final self::Number* #t81 = self::NumberExtension|+(self::ClassExtension|get#property(#t80), n1) in let final void #t82 = self::ClassExtension|set#property(#t80, #t81) in #t81);
+  self::expect(n0, let final self::Class* #t83 = v in let final self::Number* #t84 = self::NumberExtension|-(self::ClassExtension|get#property(#t83), n1) in let final void #t85 = self::ClassExtension|set#property(#t83, #t84) in #t84);
+  self::expect(n1, let final self::Class* #t86 = v in let final self::Number* #t87 = self::NumberExtension|+(self::ClassExtension|get#property(#t86), 1) in let final void #t88 = self::ClassExtension|set#property(#t86, #t87) in #t87);
+  self::expect(n0, let final self::Class* #t89 = v in let final self::Number* #t90 = self::NumberExtension|-(self::ClassExtension|get#property(#t89), 1) in let final void #t91 = self::ClassExtension|set#property(#t89, #t90) in #t90);
+  self::expect(n0, let final self::Class* #t92 = v in let final self::Number* #t93 = self::ClassExtension|get#property(#t92) in let final self::Number* #t94 = self::ClassExtension|set#property(#t92, self::NumberExtension|+(#t93, 1)) in #t93);
+  self::expect(n1, let final self::Class* #t95 = v in let final self::Number* #t96 = self::ClassExtension|get#property(#t95) in let final self::Number* #t97 = self::ClassExtension|set#property(#t95, self::NumberExtension|-(#t96, 1)) in #t96);
+  self::expect(n0, self::ClassExtension|get#property(v));
+  self::expect(n0, self::ClassExtension|get#property(v));
+  let final self::Class* #t98 = v in self::ClassExtension|set#property(#t98, self::NumberExtension|+(self::ClassExtension|get#property(#t98), n1));
+  self::expect(n1, self::ClassExtension|get#property(v));
+  let final self::Class* #t99 = v in self::ClassExtension|set#property(#t99, self::NumberExtension|+(self::ClassExtension|get#property(#t99), n1));
+  self::expect(n2, self::ClassExtension|get#property(v));
+  let final self::Class* #t100 = v in self::ClassExtension|set#property(#t100, self::NumberExtension|-(self::ClassExtension|get#property(#t100), n2));
+  self::expect(n0, self::ClassExtension|get#property(v));
+  let final self::Class* #t101 = v in self::ClassExtension|set#property(#t101, self::NumberExtension|+(self::ClassExtension|get#property(#t101), n1));
+  self::expect(n1, self::ClassExtension|get#property(v));
+  let final self::Class* #t102 = v in self::ClassExtension|set#property(#t102, self::NumberExtension|-(self::ClassExtension|get#property(#t102), n1));
+  self::expect(n0, self::ClassExtension|get#property(v));
+  let final self::Class* #t103 = v in let final self::Number* #t104 = self::NumberExtension|+(self::ClassExtension|get#property(#t103), 1) in let final void #t105 = self::ClassExtension|set#property(#t103, #t104) in #t104;
+  self::expect(n1, self::ClassExtension|get#property(v));
+  let final self::Class* #t106 = v in let final self::Number* #t107 = self::NumberExtension|-(self::ClassExtension|get#property(#t106), 1) in let final void #t108 = self::ClassExtension|set#property(#t106, #t107) in #t107;
+  self::expect(n0, self::ClassExtension|get#property(v));
+  let final self::Class* #t109 = v in self::ClassExtension|set#property(#t109, self::NumberExtension|+(self::ClassExtension|get#property(#t109), 1));
+  self::expect(n1, self::ClassExtension|get#property(v));
+  let final self::Class* #t110 = v in self::ClassExtension|set#property(#t110, self::NumberExtension|-(self::ClassExtension|get#property(#t110), 1));
+  self::expect(n0, self::ClassExtension|get#property(v));
+}
+static method testIntProperties() → dynamic {
+  core::int* n0 = 0;
+  core::int* n1 = 1;
+  core::int* n2 = 2;
+  self::IntClass* v = new self::IntClass::•(n0);
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  self::expect(n1, let final self::IntClass* #t111 = v in #t111.{self::IntClass::field} = #t111.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n2, let final self::IntClass* #t112 = v in #t112.{self::IntClass::field} = #t112.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t113 = v in #t113.{self::IntClass::field} = #t113.{self::IntClass::field}{core::int*}.{core::num::-}(n2){(core::num*) →* core::int*});
+  self::expect(n1, let final self::IntClass* #t114 = v in #t114.{self::IntClass::field} = #t114.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t115 = v in #t115.{self::IntClass::field} = #t115.{self::IntClass::field}{core::int*}.{core::num::-}(n1){(core::num*) →* core::int*});
+  self::expect(n1, let final self::IntClass* #t116 = v in #t116.{self::IntClass::field} = #t116.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t117 = v in #t117.{self::IntClass::field} = #t117.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t118 = v in let final core::int* #t119 = #t118.{self::IntClass::field}{core::int*} in let final core::int* #t120 = #t118.{self::IntClass::field} = #t119.{core::num::+}(1){(core::num*) →* core::int*} in #t119);
+  self::expect(n1, let final self::IntClass* #t121 = v in let final core::int* #t122 = #t121.{self::IntClass::field}{core::int*} in let final core::int* #t123 = #t121.{self::IntClass::field} = #t122.{core::num::-}(1){(core::num*) →* core::int*} in #t122);
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t124 = v in #t124.{self::IntClass::field} = #t124.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
+  self::expect(n1, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t125 = v in #t125.{self::IntClass::field} = #t125.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
+  self::expect(n2, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t126 = v in #t126.{self::IntClass::field} = #t126.{self::IntClass::field}{core::int*}.{core::num::-}(n2){(core::num*) →* core::int*};
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t127 = v in #t127.{self::IntClass::field} = #t127.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
+  self::expect(n1, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t128 = v in #t128.{self::IntClass::field} = #t128.{self::IntClass::field}{core::int*}.{core::num::-}(n1){(core::num*) →* core::int*};
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t129 = v in #t129.{self::IntClass::field} = #t129.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+  self::expect(n1, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t130 = v in #t130.{self::IntClass::field} = #t130.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t131 = v in #t131.{self::IntClass::field} = #t131.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+  self::expect(n1, v.{self::IntClass::field}{core::int*});
+  let final self::IntClass* #t132 = v in #t132.{self::IntClass::field} = #t132.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
+  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  self::expect(n0, self::IntClassExtension|get#property(v));
+  self::expect(n1, let final self::IntClass* #t133 = v in let final core::int* #t134 = self::IntClassExtension|get#property(#t133).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t135 = self::IntClassExtension|set#property(#t133, #t134) in #t134);
+  self::expect(n2, let final self::IntClass* #t136 = v in let final core::int* #t137 = self::IntClassExtension|get#property(#t136).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t138 = self::IntClassExtension|set#property(#t136, #t137) in #t137);
+  self::expect(n0, let final self::IntClass* #t139 = v in let final core::int* #t140 = self::IntClassExtension|get#property(#t139).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t141 = self::IntClassExtension|set#property(#t139, #t140) in #t140);
+  self::expect(n1, let final self::IntClass* #t142 = v in let final core::int* #t143 = self::IntClassExtension|get#property(#t142).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t144 = self::IntClassExtension|set#property(#t142, #t143) in #t143);
+  self::expect(n0, let final self::IntClass* #t145 = v in let final core::int* #t146 = self::IntClassExtension|get#property(#t145).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t147 = self::IntClassExtension|set#property(#t145, #t146) in #t146);
+  self::expect(n1, let final self::IntClass* #t148 = v in let final core::int* #t149 = self::IntClassExtension|get#property(#t148).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t150 = self::IntClassExtension|set#property(#t148, #t149) in #t149);
+  self::expect(n0, let final self::IntClass* #t151 = v in let final core::int* #t152 = self::IntClassExtension|get#property(#t151).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t153 = self::IntClassExtension|set#property(#t151, #t152) in #t152);
+  self::expect(n0, let final self::IntClass* #t154 = v in let final core::int* #t155 = self::IntClassExtension|get#property(#t154) in let final core::int* #t156 = self::IntClassExtension|set#property(#t154, #t155.{core::num::+}(1){(core::num*) →* core::int*}) in #t155);
+  self::expect(n1, let final self::IntClass* #t157 = v in let final core::int* #t158 = self::IntClassExtension|get#property(#t157) in let final core::int* #t159 = self::IntClassExtension|set#property(#t157, #t158.{core::num::-}(1){(core::num*) →* core::int*}) in #t158);
+  self::expect(n0, self::IntClassExtension|get#property(v));
+  self::expect(n0, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t160 = v in self::IntClassExtension|set#property(#t160, self::IntClassExtension|get#property(#t160).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n1, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t161 = v in self::IntClassExtension|set#property(#t161, self::IntClassExtension|get#property(#t161).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n2, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t162 = v in self::IntClassExtension|set#property(#t162, self::IntClassExtension|get#property(#t162).{core::num::-}(n2){(core::num*) →* core::int*});
+  self::expect(n0, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t163 = v in self::IntClassExtension|set#property(#t163, self::IntClassExtension|get#property(#t163).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n1, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t164 = v in self::IntClassExtension|set#property(#t164, self::IntClassExtension|get#property(#t164).{core::num::-}(n1){(core::num*) →* core::int*});
+  self::expect(n0, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t165 = v in let final core::int* #t166 = self::IntClassExtension|get#property(#t165).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t167 = self::IntClassExtension|set#property(#t165, #t166) in #t166;
+  self::expect(n1, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t168 = v in let final core::int* #t169 = self::IntClassExtension|get#property(#t168).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t170 = self::IntClassExtension|set#property(#t168, #t169) in #t169;
+  self::expect(n0, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t171 = v in self::IntClassExtension|set#property(#t171, self::IntClassExtension|get#property(#t171).{core::num::+}(1){(core::num*) →* core::int*});
+  self::expect(n1, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t172 = v in self::IntClassExtension|set#property(#t172, self::IntClassExtension|get#property(#t172).{core::num::-}(1){(core::num*) →* core::int*});
+  self::expect(n0, self::IntClassExtension|get#property(v));
+}
+static method testExplicitProperties() → dynamic {
+  self::Number* n0 = new self::Number::•(0);
+  self::Number* n1 = new self::Number::•(1);
+  self::Number* n2 = new self::Number::•(2);
+  self::Class* v = new self::Class::•(n0);
+  self::expect(n0, self::ClassExtension|get#property(v));
+  self::expect(n1, let final self::Class* #t173 = v in let final self::Number* #t174 = self::NumberExtension|+(self::ClassExtension|get#property(#t173), n1) in let final void #t175 = self::ClassExtension|set#property(#t173, #t174) in #t174);
+  self::expect(n2, let final self::Class* #t176 = v in let final self::Number* #t177 = self::NumberExtension|+(self::ClassExtension|get#property(#t176), n1) in let final void #t178 = self::ClassExtension|set#property(#t176, #t177) in #t177);
+  self::expect(n0, let final self::Class* #t179 = v in let final self::Number* #t180 = self::NumberExtension|-(self::ClassExtension|get#property(#t179), n2) in let final void #t181 = self::ClassExtension|set#property(#t179, #t180) in #t180);
+  self::expect(n1, let final self::Class* #t182 = v in let final self::Number* #t183 = self::NumberExtension|+(self::ClassExtension|get#property(#t182), n1) in let final void #t184 = self::ClassExtension|set#property(#t182, #t183) in #t183);
+  self::expect(n0, let final self::Class* #t185 = v in let final self::Number* #t186 = self::NumberExtension|-(self::ClassExtension|get#property(#t185), n1) in let final void #t187 = self::ClassExtension|set#property(#t185, #t186) in #t186);
+  self::expect(n1, let final self::Class* #t188 = v in let final self::Number* #t189 = self::NumberExtension|+(self::ClassExtension|get#property(#t188), 1) in let final void #t190 = self::ClassExtension|set#property(#t188, #t189) in #t189);
+  self::expect(n0, let final self::Class* #t191 = v in let final self::Number* #t192 = self::NumberExtension|-(self::ClassExtension|get#property(#t191), 1) in let final void #t193 = self::ClassExtension|set#property(#t191, #t192) in #t192);
+  self::expect(n0, let final self::Class* #t194 = v in let final self::Number* #t195 = self::ClassExtension|get#property(#t194) in let final self::Number* #t196 = let final self::Number* #t197 = self::NumberExtension|+(#t195, 1) in let final void #t198 = self::ClassExtension|set#property(#t194, #t197) in #t197 in #t195);
+  self::expect(n1, let final self::Class* #t199 = v in let final self::Number* #t200 = self::ClassExtension|get#property(#t199) in let final self::Number* #t201 = let final self::Number* #t202 = self::NumberExtension|-(#t200, 1) in let final void #t203 = self::ClassExtension|set#property(#t199, #t202) in #t202 in #t200);
+  self::expect(n0, self::ClassExtension|get#property(v));
+  self::expect(n0, self::ClassExtension|get#property(v));
+  let final self::Class* #t204 = v in self::ClassExtension|set#property(#t204, self::NumberExtension|+(self::ClassExtension|get#property(#t204), n1));
+  self::expect(n1, self::ClassExtension|get#property(v));
+  let final self::Class* #t205 = v in self::ClassExtension|set#property(#t205, self::NumberExtension|+(self::ClassExtension|get#property(#t205), n1));
+  self::expect(n2, self::ClassExtension|get#property(v));
+  let final self::Class* #t206 = v in self::ClassExtension|set#property(#t206, self::NumberExtension|-(self::ClassExtension|get#property(#t206), n2));
+  self::expect(n0, self::ClassExtension|get#property(v));
+  let final self::Class* #t207 = v in self::ClassExtension|set#property(#t207, self::NumberExtension|+(self::ClassExtension|get#property(#t207), n1));
+  self::expect(n1, self::ClassExtension|get#property(v));
+  let final self::Class* #t208 = v in self::ClassExtension|set#property(#t208, self::NumberExtension|-(self::ClassExtension|get#property(#t208), n1));
+  self::expect(n0, self::ClassExtension|get#property(v));
+  let final self::Class* #t209 = v in let final self::Number* #t210 = self::NumberExtension|+(self::ClassExtension|get#property(#t209), 1) in let final void #t211 = self::ClassExtension|set#property(#t209, #t210) in #t210;
+  self::expect(n1, self::ClassExtension|get#property(v));
+  let final self::Class* #t212 = v in let final self::Number* #t213 = self::NumberExtension|-(self::ClassExtension|get#property(#t212), 1) in let final void #t214 = self::ClassExtension|set#property(#t212, #t213) in #t213;
+  self::expect(n0, self::ClassExtension|get#property(v));
+  let final self::Class* #t215 = v in self::ClassExtension|set#property(#t215, self::NumberExtension|+(self::ClassExtension|get#property(#t215), 1));
+  self::expect(n1, self::ClassExtension|get#property(v));
+  let final self::Class* #t216 = v in self::ClassExtension|set#property(#t216, self::NumberExtension|-(self::ClassExtension|get#property(#t216), 1));
+  self::expect(n0, self::ClassExtension|get#property(v));
+}
+static method testExplicitIntProperties() → dynamic {
+  core::int* n0 = 0;
+  core::int* n1 = 1;
+  core::int* n2 = 2;
+  self::IntClass* v = new self::IntClass::•(n0);
+  self::expect(n0, self::IntClassExtension|get#property(v));
+  self::expect(n1, let final self::IntClass* #t217 = v in let final core::int* #t218 = self::IntClassExtension|get#property(#t217).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t219 = self::IntClassExtension|set#property(#t217, #t218) in #t218);
+  self::expect(n2, let final self::IntClass* #t220 = v in let final core::int* #t221 = self::IntClassExtension|get#property(#t220).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t222 = self::IntClassExtension|set#property(#t220, #t221) in #t221);
+  self::expect(n0, let final self::IntClass* #t223 = v in let final core::int* #t224 = self::IntClassExtension|get#property(#t223).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t225 = self::IntClassExtension|set#property(#t223, #t224) in #t224);
+  self::expect(n1, let final self::IntClass* #t226 = v in let final core::int* #t227 = self::IntClassExtension|get#property(#t226).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t228 = self::IntClassExtension|set#property(#t226, #t227) in #t227);
+  self::expect(n0, let final self::IntClass* #t229 = v in let final core::int* #t230 = self::IntClassExtension|get#property(#t229).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t231 = self::IntClassExtension|set#property(#t229, #t230) in #t230);
+  self::expect(n1, let final self::IntClass* #t232 = v in let final core::int* #t233 = self::IntClassExtension|get#property(#t232).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t234 = self::IntClassExtension|set#property(#t232, #t233) in #t233);
+  self::expect(n0, let final self::IntClass* #t235 = v in let final core::int* #t236 = self::IntClassExtension|get#property(#t235).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t237 = self::IntClassExtension|set#property(#t235, #t236) in #t236);
+  self::expect(n0, let final self::IntClass* #t238 = v in let final core::int* #t239 = self::IntClassExtension|get#property(#t238) in let final core::int* #t240 = let final core::int* #t241 = #t239.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t242 = self::IntClassExtension|set#property(#t238, #t241) in #t241 in #t239);
+  self::expect(n1, let final self::IntClass* #t243 = v in let final core::int* #t244 = self::IntClassExtension|get#property(#t243) in let final core::int* #t245 = let final core::int* #t246 = #t244.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t247 = self::IntClassExtension|set#property(#t243, #t246) in #t246 in #t244);
+  self::expect(n0, self::IntClassExtension|get#property(v));
+  self::expect(n0, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t248 = v in self::IntClassExtension|set#property(#t248, self::IntClassExtension|get#property(#t248).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n1, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t249 = v in self::IntClassExtension|set#property(#t249, self::IntClassExtension|get#property(#t249).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n2, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t250 = v in self::IntClassExtension|set#property(#t250, self::IntClassExtension|get#property(#t250).{core::num::-}(n2){(core::num*) →* core::int*});
+  self::expect(n0, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t251 = v in self::IntClassExtension|set#property(#t251, self::IntClassExtension|get#property(#t251).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n1, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t252 = v in self::IntClassExtension|set#property(#t252, self::IntClassExtension|get#property(#t252).{core::num::-}(n1){(core::num*) →* core::int*});
+  self::expect(n0, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t253 = v in let final core::int* #t254 = self::IntClassExtension|get#property(#t253).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t255 = self::IntClassExtension|set#property(#t253, #t254) in #t254;
+  self::expect(n1, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t256 = v in let final core::int* #t257 = self::IntClassExtension|get#property(#t256).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t258 = self::IntClassExtension|set#property(#t256, #t257) in #t257;
+  self::expect(n0, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t259 = v in self::IntClassExtension|set#property(#t259, self::IntClassExtension|get#property(#t259).{core::num::+}(1){(core::num*) →* core::int*});
+  self::expect(n1, self::IntClassExtension|get#property(v));
+  let final self::IntClass* #t260 = v in self::IntClassExtension|set#property(#t260, self::IntClassExtension|get#property(#t260).{core::num::-}(1){(core::num*) →* core::int*});
+  self::expect(n0, self::IntClassExtension|get#property(v));
+}
+static method testExplicitNullAwareProperties(self::Class* v) → dynamic {
+  self::Number* n0 = new self::Number::•(0);
+  self::Number* n1 = new self::Number::•(1);
+  self::Number* n2 = new self::Number::•(2);
+  self::expect(n0, let final self::Class* #t261 = v in #t261 == null ?{self::Number*} null : self::ClassExtension|get#property(#t261), v == null);
+  self::expect(n1, let final self::Class* #t262 = v in #t262 == null ?{self::Number*} null : let final self::Number* #t263 = self::NumberExtension|+(self::ClassExtension|get#property(#t262), n1) in let final void #t264 = self::ClassExtension|set#property(#t262, #t263) in #t263, v == null);
+  self::expect(n2, let final self::Class* #t265 = v in #t265 == null ?{self::Number*} null : let final self::Number* #t266 = self::NumberExtension|+(self::ClassExtension|get#property(#t265), n1) in let final void #t267 = self::ClassExtension|set#property(#t265, #t266) in #t266, v == null);
+  self::expect(n0, let final self::Class* #t268 = v in #t268 == null ?{self::Number*} null : let final self::Number* #t269 = self::NumberExtension|-(self::ClassExtension|get#property(#t268), n2) in let final void #t270 = self::ClassExtension|set#property(#t268, #t269) in #t269, v == null);
+  self::expect(n1, let final self::Class* #t271 = v in #t271 == null ?{self::Number*} null : let final self::Number* #t272 = self::NumberExtension|+(self::ClassExtension|get#property(#t271), n1) in let final void #t273 = self::ClassExtension|set#property(#t271, #t272) in #t272, v == null);
+  self::expect(n0, let final self::Class* #t274 = v in #t274 == null ?{self::Number*} null : let final self::Number* #t275 = self::NumberExtension|-(self::ClassExtension|get#property(#t274), n1) in let final void #t276 = self::ClassExtension|set#property(#t274, #t275) in #t275, v == null);
+  self::expect(n1, let final self::Class* #t277 = v in #t277 == null ?{self::Number*} null : let final self::Number* #t278 = self::NumberExtension|+(self::ClassExtension|get#property(#t277), 1) in let final void #t279 = self::ClassExtension|set#property(#t277, #t278) in #t278, v == null);
+  self::expect(n0, let final self::Class* #t280 = v in #t280 == null ?{self::Number*} null : let final self::Number* #t281 = self::NumberExtension|-(self::ClassExtension|get#property(#t280), 1) in let final void #t282 = self::ClassExtension|set#property(#t280, #t281) in #t281, v == null);
+  self::expect(n0, let final self::Class* #t283 = v in #t283 == null ?{self::Number*} null : let final self::Number* #t284 = self::ClassExtension|get#property(#t283) in let final self::Number* #t285 = let final self::Number* #t286 = self::NumberExtension|+(#t284, 1) in let final void #t287 = self::ClassExtension|set#property(#t283, #t286) in #t286 in #t284, v == null);
+  self::expect(n1, let final self::Class* #t288 = v in #t288 == null ?{self::Number*} null : let final self::Number* #t289 = self::ClassExtension|get#property(#t288) in let final self::Number* #t290 = let final self::Number* #t291 = self::NumberExtension|-(#t289, 1) in let final void #t292 = self::ClassExtension|set#property(#t288, #t291) in #t291 in #t289, v == null);
+  self::expect(n0, let final self::Class* #t293 = v in #t293 == null ?{self::Number*} null : self::ClassExtension|get#property(#t293), v == null);
+  self::expect(n0, let final self::Class* #t294 = v in #t294 == null ?{self::Number*} null : self::ClassExtension|get#property(#t294), v == null);
+  let final self::Class* #t295 = v in #t295 == null ?{self::Number*} null : self::ClassExtension|set#property(#t295, self::NumberExtension|+(self::ClassExtension|get#property(#t295), n1));
+  self::expect(n1, let final self::Class* #t296 = v in #t296 == null ?{self::Number*} null : self::ClassExtension|get#property(#t296), v == null);
+  let final self::Class* #t297 = v in #t297 == null ?{self::Number*} null : self::ClassExtension|set#property(#t297, self::NumberExtension|+(self::ClassExtension|get#property(#t297), n1));
+  self::expect(n2, let final self::Class* #t298 = v in #t298 == null ?{self::Number*} null : self::ClassExtension|get#property(#t298), v == null);
+  let final self::Class* #t299 = v in #t299 == null ?{self::Number*} null : self::ClassExtension|set#property(#t299, self::NumberExtension|-(self::ClassExtension|get#property(#t299), n2));
+  self::expect(n0, let final self::Class* #t300 = v in #t300 == null ?{self::Number*} null : self::ClassExtension|get#property(#t300), v == null);
+  let final self::Class* #t301 = v in #t301 == null ?{self::Number*} null : self::ClassExtension|set#property(#t301, self::NumberExtension|+(self::ClassExtension|get#property(#t301), n1));
+  self::expect(n1, let final self::Class* #t302 = v in #t302 == null ?{self::Number*} null : self::ClassExtension|get#property(#t302), v == null);
+  let final self::Class* #t303 = v in #t303 == null ?{self::Number*} null : self::ClassExtension|set#property(#t303, self::NumberExtension|-(self::ClassExtension|get#property(#t303), n1));
+  self::expect(n0, let final self::Class* #t304 = v in #t304 == null ?{self::Number*} null : self::ClassExtension|get#property(#t304), v == null);
+  let final self::Class* #t305 = v in #t305 == null ?{self::Number*} null : let final self::Number* #t306 = self::NumberExtension|+(self::ClassExtension|get#property(#t305), 1) in let final void #t307 = self::ClassExtension|set#property(#t305, #t306) in #t306;
+  self::expect(n1, let final self::Class* #t308 = v in #t308 == null ?{self::Number*} null : self::ClassExtension|get#property(#t308), v == null);
+  let final self::Class* #t309 = v in #t309 == null ?{self::Number*} null : let final self::Number* #t310 = self::NumberExtension|-(self::ClassExtension|get#property(#t309), 1) in let final void #t311 = self::ClassExtension|set#property(#t309, #t310) in #t310;
+  self::expect(n0, let final self::Class* #t312 = v in #t312 == null ?{self::Number*} null : self::ClassExtension|get#property(#t312), v == null);
+  let final self::Class* #t313 = v in #t313 == null ?{self::Number*} null : self::ClassExtension|set#property(#t313, self::NumberExtension|+(self::ClassExtension|get#property(#t313), 1));
+  self::expect(n1, let final self::Class* #t314 = v in #t314 == null ?{self::Number*} null : self::ClassExtension|get#property(#t314), v == null);
+  let final self::Class* #t315 = v in #t315 == null ?{self::Number*} null : self::ClassExtension|set#property(#t315, self::NumberExtension|-(self::ClassExtension|get#property(#t315), 1));
+  self::expect(n0, let final self::Class* #t316 = v in #t316 == null ?{self::Number*} null : self::ClassExtension|get#property(#t316), v == null);
+}
+static method testExplicitNullAwareIntProperties(self::IntClass* v) → dynamic {
+  core::int* n0 = 0;
+  core::int* n1 = 1;
+  core::int* n2 = 2;
+  self::expect(n0, let final self::IntClass* #t317 = v in #t317 == null ?{core::int*} null : self::IntClassExtension|get#property(#t317), v == null);
+  self::expect(n1, let final self::IntClass* #t318 = v in #t318 == null ?{core::int*} null : let final core::int* #t319 = self::IntClassExtension|get#property(#t318).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t320 = self::IntClassExtension|set#property(#t318, #t319) in #t319, v == null);
+  self::expect(n2, let final self::IntClass* #t321 = v in #t321 == null ?{core::int*} null : let final core::int* #t322 = self::IntClassExtension|get#property(#t321).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t323 = self::IntClassExtension|set#property(#t321, #t322) in #t322, v == null);
+  self::expect(n0, let final self::IntClass* #t324 = v in #t324 == null ?{core::int*} null : let final core::int* #t325 = self::IntClassExtension|get#property(#t324).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t326 = self::IntClassExtension|set#property(#t324, #t325) in #t325, v == null);
+  self::expect(n1, let final self::IntClass* #t327 = v in #t327 == null ?{core::int*} null : let final core::int* #t328 = self::IntClassExtension|get#property(#t327).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t329 = self::IntClassExtension|set#property(#t327, #t328) in #t328, v == null);
+  self::expect(n0, let final self::IntClass* #t330 = v in #t330 == null ?{core::int*} null : let final core::int* #t331 = self::IntClassExtension|get#property(#t330).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t332 = self::IntClassExtension|set#property(#t330, #t331) in #t331, v == null);
+  self::expect(n1, let final self::IntClass* #t333 = v in #t333 == null ?{core::int*} null : let final core::int* #t334 = self::IntClassExtension|get#property(#t333).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t335 = self::IntClassExtension|set#property(#t333, #t334) in #t334, v == null);
+  self::expect(n0, let final self::IntClass* #t336 = v in #t336 == null ?{core::int*} null : let final core::int* #t337 = self::IntClassExtension|get#property(#t336).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t338 = self::IntClassExtension|set#property(#t336, #t337) in #t337, v == null);
+  self::expect(n0, let final self::IntClass* #t339 = v in #t339 == null ?{core::int*} null : let final core::int* #t340 = self::IntClassExtension|get#property(#t339) in let final core::int* #t341 = let final core::int* #t342 = #t340.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t343 = self::IntClassExtension|set#property(#t339, #t342) in #t342 in #t340, v == null);
+  self::expect(n1, let final self::IntClass* #t344 = v in #t344 == null ?{core::int*} null : let final core::int* #t345 = self::IntClassExtension|get#property(#t344) in let final core::int* #t346 = let final core::int* #t347 = #t345.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t348 = self::IntClassExtension|set#property(#t344, #t347) in #t347 in #t345, v == null);
+  self::expect(n0, let final self::IntClass* #t349 = v in #t349 == null ?{core::int*} null : self::IntClassExtension|get#property(#t349), v == null);
+  self::expect(n0, let final self::IntClass* #t350 = v in #t350 == null ?{core::int*} null : self::IntClassExtension|get#property(#t350), v == null);
+  let final self::IntClass* #t351 = v in #t351 == null ?{core::int*} null : self::IntClassExtension|set#property(#t351, self::IntClassExtension|get#property(#t351).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n1, let final self::IntClass* #t352 = v in #t352 == null ?{core::int*} null : self::IntClassExtension|get#property(#t352), v == null);
+  let final self::IntClass* #t353 = v in #t353 == null ?{core::int*} null : self::IntClassExtension|set#property(#t353, self::IntClassExtension|get#property(#t353).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n2, let final self::IntClass* #t354 = v in #t354 == null ?{core::int*} null : self::IntClassExtension|get#property(#t354), v == null);
+  let final self::IntClass* #t355 = v in #t355 == null ?{core::int*} null : self::IntClassExtension|set#property(#t355, self::IntClassExtension|get#property(#t355).{core::num::-}(n2){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t356 = v in #t356 == null ?{core::int*} null : self::IntClassExtension|get#property(#t356), v == null);
+  let final self::IntClass* #t357 = v in #t357 == null ?{core::int*} null : self::IntClassExtension|set#property(#t357, self::IntClassExtension|get#property(#t357).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::expect(n1, let final self::IntClass* #t358 = v in #t358 == null ?{core::int*} null : self::IntClassExtension|get#property(#t358), v == null);
+  let final self::IntClass* #t359 = v in #t359 == null ?{core::int*} null : self::IntClassExtension|set#property(#t359, self::IntClassExtension|get#property(#t359).{core::num::-}(n1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t360 = v in #t360 == null ?{core::int*} null : self::IntClassExtension|get#property(#t360), v == null);
+  let final self::IntClass* #t361 = v in #t361 == null ?{core::int*} null : let final core::int* #t362 = self::IntClassExtension|get#property(#t361).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t363 = self::IntClassExtension|set#property(#t361, #t362) in #t362;
+  self::expect(n1, let final self::IntClass* #t364 = v in #t364 == null ?{core::int*} null : self::IntClassExtension|get#property(#t364), v == null);
+  let final self::IntClass* #t365 = v in #t365 == null ?{core::int*} null : let final core::int* #t366 = self::IntClassExtension|get#property(#t365).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t367 = self::IntClassExtension|set#property(#t365, #t366) in #t366;
+  self::expect(n0, let final self::IntClass* #t368 = v in #t368 == null ?{core::int*} null : self::IntClassExtension|get#property(#t368), v == null);
+  let final self::IntClass* #t369 = v in #t369 == null ?{core::int*} null : self::IntClassExtension|set#property(#t369, self::IntClassExtension|get#property(#t369).{core::num::+}(1){(core::num*) →* core::int*});
+  self::expect(n1, let final self::IntClass* #t370 = v in #t370 == null ?{core::int*} null : self::IntClassExtension|get#property(#t370), v == null);
+  let final self::IntClass* #t371 = v in #t371 == null ?{core::int*} null : self::IntClassExtension|set#property(#t371, self::IntClassExtension|get#property(#t371).{core::num::-}(1){(core::num*) →* core::int*});
+  self::expect(n0, let final self::IntClass* #t372 = v in #t372 == null ?{core::int*} null : self::IntClassExtension|get#property(#t372), v == null);
+}
+static method expect(dynamic expected, dynamic actual, [dynamic expectNull = #C1]) → dynamic {
+  if(expectNull as{TypeError,ForDynamic} core::bool*) {
+    expected = null;
+  }
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
+
+constants  {
+  #C1 = false
+}
diff --git a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.modular.expect
new file mode 100644
index 0000000..101c651
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.modular.expect
@@ -0,0 +1,91 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/conflict_with_object.dart:6:11: Error: This extension member conflicts with Object member 'noSuchMethod'.
+//   int get noSuchMethod => 42;
+//           ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/conflict_with_object.dart:8:7: Error: This extension member conflicts with Object member 'runtimeType'.
+//   int runtimeType() {}
+//       ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/conflict_with_object.dart:9:12: Error: This extension member conflicts with Object member '=='.
+//   operator ==(other) => false;
+//            ^^
+//
+// pkg/front_end/testcases/extensions/conflict_with_object.dart:10:17: Error: This extension member conflicts with Object member 'toString'.
+//   static String toString() => 'Foo';
+//                 ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/conflict_with_object.dart:7:12: Error: This extension member conflicts with Object member 'hashCode'.
+//   void set hashCode(int value) {}
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/conflict_with_object.dart:27:14: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'int'.
+//  - 'Invocation' is from 'dart:core'.
+//   value = "".noSuchMethod;
+//              ^
+//
+// pkg/front_end/testcases/extensions/conflict_with_object.dart:28:6: Error: The setter 'hashCode' isn't defined for the class 'String'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'hashCode'.
+//   "".hashCode = 42;
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/conflict_with_object.dart:29:14: Error: A value of type 'Type' can't be assigned to a variable of type 'int'.
+//  - 'Type' is from 'dart:core'.
+//   value = "".runtimeType;
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension Extension on core::String* {
+  get noSuchMethod = self::Extension|get#noSuchMethod;
+  method runtimeType = self::Extension|runtimeType;
+  tearoff runtimeType = self::Extension|get#runtimeType;
+  operator == = self::Extension|==;
+  static method toString = self::Extension|toString;
+  set hashCode = self::Extension|set#hashCode;
+}
+static method Extension|get#noSuchMethod(lowered final core::String* #this) → core::int*
+  return 42;
+static method Extension|set#hashCode(lowered final core::String* #this, core::int* value) → void {}
+static method Extension|runtimeType(lowered final core::String* #this) → core::int* {}
+static method Extension|get#runtimeType(lowered final core::String* #this) → () →* core::int*
+  return () → core::int* => self::Extension|runtimeType(#this);
+static method Extension|==(lowered final core::String* #this, dynamic other) → dynamic
+  return false;
+static method Extension|toString() → core::String*
+  return "Foo";
+static method main() → dynamic {
+  core::int* value;
+  self::expect(true, "".{core::Object::noSuchMethod}{(core::Invocation*) →* dynamic} is core::Function*);
+  value = self::Extension|get#noSuchMethod("");
+  self::Extension|set#hashCode("", 42);
+  self::expect(true, "".{core::Object::runtimeType}{core::Type*} is core::Type*);
+  self::expect(true, self::Extension|get#runtimeType("") is core::Function*);
+  value = self::Extension|runtimeType("");
+  self::expect(true, "" =={core::String::==}{(core::Object*) →* core::bool*} "");
+  self::expect("Foo", self::Extension|toString());
+}
+static method errors() → dynamic {
+  core::int* value;
+  value = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:27:14: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'int'.
+ - 'Invocation' is from 'dart:core'.
+  value = \"\".noSuchMethod;
+             ^" in "".{core::Object::noSuchMethod}{(core::Invocation*) →* dynamic} as{TypeError} core::int*;
+  invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:28:6: Error: The setter 'hashCode' isn't defined for the class 'String'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'hashCode'.
+  \"\".hashCode = 42;
+     ^^^^^^^^" in ""{<unresolved>}.hashCode = 42;
+  value = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:29:14: Error: A value of type 'Type' can't be assigned to a variable of type 'int'.
+ - 'Type' is from 'dart:core'.
+  value = \"\".runtimeType;
+             ^" in "".{core::Object::runtimeType}{core::Type*} as{TypeError} core::int*;
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/conflicts.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/conflicts.dart.weak.modular.expect
new file mode 100644
index 0000000..3373345
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/conflicts.dart.weak.modular.expect
@@ -0,0 +1,90 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/conflicts.dart:14:11: Error: 'DuplicateExtensionName' is already declared in this scope.
+// extension DuplicateExtensionName on Class2 {
+//           ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/conflicts.dart:9:11: Context: Previous declaration of 'DuplicateExtensionName'.
+// extension DuplicateExtensionName on Class1 {
+//           ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/conflicts.dart:21:3: Error: 'duplicateMethodName1' is already declared in this scope.
+//   duplicateMethodName1() => 2;
+//   ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/conflicts.dart:20:3: Context: Previous declaration of 'duplicateMethodName1'.
+//   duplicateMethodName1() => 1;
+//   ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/conflicts.dart:31:6: Error: The method 'uniqueMethod2' isn't defined for the class 'Class2'.
+//  - 'Class2' is from 'pkg/front_end/testcases/extensions/conflicts.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'uniqueMethod2'.
+//   c2.uniqueMethod2();
+//      ^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension DuplicateExtensionName on self::Class1* {
+  method uniqueMethod1 = self::DuplicateExtensionName|uniqueMethod1;
+  tearoff uniqueMethod1 = self::DuplicateExtensionName|get#uniqueMethod1;
+  method duplicateMethodName2 = self::DuplicateExtensionName|duplicateMethodName2;
+  tearoff duplicateMethodName2 = self::DuplicateExtensionName|get#duplicateMethodName2;
+}
+extension UniqueExtensionName on self::Class1* {
+  method duplicateMethodName1 = self::UniqueExtensionName|duplicateMethodName1;
+  tearoff duplicateMethodName1 = self::UniqueExtensionName|get#duplicateMethodName1;
+}
+static method DuplicateExtensionName|uniqueMethod1(lowered final self::Class1* #this) → dynamic {}
+static method DuplicateExtensionName|get#uniqueMethod1(lowered final self::Class1* #this) → () →* dynamic
+  return () → dynamic => self::DuplicateExtensionName|uniqueMethod1(#this);
+static method DuplicateExtensionName|duplicateMethodName2(lowered final self::Class1* #this) → dynamic
+  return 1;
+static method DuplicateExtensionName|get#duplicateMethodName2(lowered final self::Class1* #this) → () →* dynamic
+  return () → dynamic => self::DuplicateExtensionName|duplicateMethodName2(#this);
+static method UniqueExtensionName|duplicateMethodName1(lowered final self::Class1* #this) → dynamic
+  return 1;
+static method UniqueExtensionName|get#duplicateMethodName1(lowered final self::Class1* #this) → () →* dynamic
+  return () → dynamic => self::UniqueExtensionName|duplicateMethodName1(#this);
+static method main() → dynamic {
+  self::Class1* c1 = new self::Class1::•();
+  self::DuplicateExtensionName|uniqueMethod1(c1);
+}
+static method errors() → dynamic {
+  self::Class2* c2 = new self::Class2::•();
+  invalid-expression "pkg/front_end/testcases/extensions/conflicts.dart:31:6: Error: The method 'uniqueMethod2' isn't defined for the class 'Class2'.
+ - 'Class2' is from 'pkg/front_end/testcases/extensions/conflicts.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'uniqueMethod2'.
+  c2.uniqueMethod2();
+     ^^^^^^^^^^^^^" in c2{<unresolved>}.uniqueMethod2();
+}
diff --git a/pkg/front_end/testcases/extensions/default_values.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/default_values.dart.weak.modular.expect
new file mode 100644
index 0000000..99dd7ec
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/default_values.dart.weak.modular.expect
@@ -0,0 +1,75 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on self::Class* {
+  method method0 = self::Extension|method0;
+  tearoff method0 = self::Extension|get#method0;
+  method method1 = self::Extension|method1;
+  tearoff method1 = self::Extension|get#method1;
+  method method2 = self::Extension|method2;
+  tearoff method2 = self::Extension|get#method2;
+  method method3 = self::Extension|method3;
+  tearoff method3 = self::Extension|get#method3;
+  static method staticMethod = self::Extension|staticMethod;
+}
+static method Extension|method0(lowered final self::Class* #this, [dynamic a = #C1]) → dynamic
+  return a;
+static method Extension|get#method0(lowered final self::Class* #this) → ([dynamic]) →* dynamic
+  return ([dynamic a = #C1]) → dynamic => self::Extension|method0(#this, a);
+static method Extension|method1(lowered final self::Class* #this, [dynamic a = #C2]) → dynamic
+  return a;
+static method Extension|get#method1(lowered final self::Class* #this) → ([dynamic]) →* dynamic
+  return ([dynamic a = #C2]) → dynamic => self::Extension|method1(#this, a);
+static method Extension|method2(lowered final self::Class* #this, {dynamic b = #C3}) → dynamic
+  return b;
+static method Extension|get#method2(lowered final self::Class* #this) → ({b: dynamic}) →* dynamic
+  return ({dynamic b = #C3}) → dynamic => self::Extension|method2(#this, b: b);
+static method Extension|method3(lowered final self::Class* #this, {dynamic c = #C4}) → dynamic
+  return c{dynamic}.call();
+static method Extension|get#method3(lowered final self::Class* #this) → ({c: dynamic}) →* dynamic
+  return ({dynamic c = #C4}) → dynamic => self::Extension|method3(#this, c: c);
+static method Extension|staticMethod() → dynamic
+  return 123;
+static method main() → dynamic {
+  self::Class* c = new self::Class::•();
+  ([dynamic]) →* dynamic tearOff0 = self::Extension|get#method0(c);
+  self::expect(0, tearOff0(0){([dynamic]) →* dynamic});
+  self::expect(null, tearOff0(){([dynamic]) →* dynamic});
+  ([dynamic]) →* dynamic tearOff1 = self::Extension|get#method1(c);
+  self::expect(0, tearOff1(0){([dynamic]) →* dynamic});
+  self::expect(42, tearOff1(){([dynamic]) →* dynamic});
+  ({b: dynamic}) →* dynamic tearOff2 = self::Extension|get#method2(c);
+  self::expect(0, tearOff2(b: 0){({b: dynamic}) →* dynamic});
+  self::expect(87, tearOff2(){({b: dynamic}) →* dynamic});
+  ({c: dynamic}) →* dynamic tearOff3 = self::Extension|get#method3(c);
+  self::expect(0, tearOff3(c: () → core::int* => 0){({c: dynamic}) →* dynamic});
+  self::expect(123, tearOff3(){({c: dynamic}) →* dynamic});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
+
+constants  {
+  #C1 = null
+  #C2 = 42
+  #C3 = 87
+  #C4 = static-tearoff self::Extension|staticMethod
+}
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.modular.expect
new file mode 100644
index 0000000..a3e0d9a
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.modular.expect
@@ -0,0 +1,70 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/deferred_explicit_access.dart:5:1: Error: Extension 'Extension' cannot be imported through a deferred import.
+// Try adding the `hide Extension` to the import.
+// import 'deferred_explicit_access_lib.dart' deferred as prefix;
+// ^
+//
+import self as self;
+import "deferred_explicit_access_lib.dart" as def;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///deferred_explicit_access_lib.dart" deferred as prefix;
+
+static method main() → dynamic async {
+  await LoadLibrary(prefix);
+  self::expect(0, let final dynamic #t1 = CheckLibraryIsLoaded(prefix) in def::Extension|staticField);
+  self::expect(0, let final dynamic #t2 = CheckLibraryIsLoaded(prefix) in def::Extension|get#property(0));
+  self::expect(42, let final dynamic #t3 = CheckLibraryIsLoaded(prefix) in let final core::int* #t4 = 0 in let final core::int* #t5 = 42 in let final void #t6 = def::Extension|set#property(#t4, #t5) in #t5);
+  self::expect(84, let final dynamic #t7 = CheckLibraryIsLoaded(prefix) in def::Extension|get#property(42));
+  self::expect(85, let final dynamic #t8 = CheckLibraryIsLoaded(prefix) in def::Extension|method(43));
+  self::expect(42, let final dynamic #t9 = CheckLibraryIsLoaded(prefix) in def::Extension|staticProperty);
+  self::expect(87, let final dynamic #t10 = CheckLibraryIsLoaded(prefix) in def::Extension|staticProperty = 87);
+  self::expect(87, let final dynamic #t11 = CheckLibraryIsLoaded(prefix) in def::Extension|staticMethod());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+library;
+import self as def;
+import "dart:core" as core;
+
+extension Extension on core::int* {
+  static field staticField = def::Extension|staticField;
+  static get staticProperty = get def::Extension|staticProperty;
+  static method staticMethod = def::Extension|staticMethod;
+  get property = def::Extension|get#property;
+  method method = def::Extension|method;
+  tearoff method = def::Extension|get#method;
+  static set staticProperty = set def::Extension|staticProperty;
+  set property = def::Extension|set#property;
+}
+static field core::int* Extension|staticField = 0;
+static field core::int* topLevelField = def::Extension|staticField;
+static get Extension|staticProperty() → core::int*
+  return def::Extension|staticField;
+static set Extension|staticProperty(core::int* value) → void {
+  def::Extension|staticField = value;
+}
+static method Extension|staticMethod() → core::int*
+  return def::Extension|staticField;
+static method Extension|get#property(lowered final core::int* #this) → core::int*
+  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
+static method Extension|set#property(lowered final core::int* #this, core::int* value) → void {
+  def::Extension|staticField = value;
+}
+static method Extension|method(lowered final core::int* #this) → core::int*
+  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
+static method Extension|get#method(lowered final core::int* #this) → () →* core::int*
+  return () → core::int* => def::Extension|method(#this);
+static get topLevelProperty() → core::int*
+  return def::Extension|staticField;
+static set topLevelProperty(core::int* value) → void {
+  def::Extension|staticField = value;
+}
+static method topLevelMethod() → dynamic
+  return def::Extension|staticField;
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.modular.expect
new file mode 100644
index 0000000..ddd41d6
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.modular.expect
@@ -0,0 +1,61 @@
+library;
+import self as self;
+import "deferred_explicit_access_lib.dart" as def;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///deferred_explicit_access_lib.dart" deferred as prefix hide Extension;
+
+static method main() → dynamic async {
+  await LoadLibrary(prefix);
+  self::expect(0, let final dynamic #t1 = CheckLibraryIsLoaded(prefix) in def::topLevelField);
+  self::expect(42, let final dynamic #t2 = CheckLibraryIsLoaded(prefix) in def::topLevelField = 42);
+  self::expect(42, let final dynamic #t3 = CheckLibraryIsLoaded(prefix) in def::topLevelField);
+  self::expect(0, let final dynamic #t4 = CheckLibraryIsLoaded(prefix) in def::topLevelProperty);
+  self::expect(87, let final dynamic #t5 = CheckLibraryIsLoaded(prefix) in def::topLevelProperty = 87);
+  self::expect(87, let final dynamic #t6 = CheckLibraryIsLoaded(prefix) in def::topLevelProperty);
+  self::expect(87, let final dynamic #t7 = CheckLibraryIsLoaded(prefix) in def::topLevelMethod());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+library;
+import self as def;
+import "dart:core" as core;
+
+extension Extension on core::int* {
+  static field staticField = def::Extension|staticField;
+  static get staticProperty = get def::Extension|staticProperty;
+  static method staticMethod = def::Extension|staticMethod;
+  get property = def::Extension|get#property;
+  method method = def::Extension|method;
+  tearoff method = def::Extension|get#method;
+  static set staticProperty = set def::Extension|staticProperty;
+  set property = def::Extension|set#property;
+}
+static field core::int* Extension|staticField = 0;
+static field core::int* topLevelField = def::Extension|staticField;
+static get Extension|staticProperty() → core::int*
+  return def::Extension|staticField;
+static set Extension|staticProperty(core::int* value) → void {
+  def::Extension|staticField = value;
+}
+static method Extension|staticMethod() → core::int*
+  return def::Extension|staticField;
+static method Extension|get#property(lowered final core::int* #this) → core::int*
+  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
+static method Extension|set#property(lowered final core::int* #this, core::int* value) → void {
+  def::Extension|staticField = value;
+}
+static method Extension|method(lowered final core::int* #this) → core::int*
+  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
+static method Extension|get#method(lowered final core::int* #this) → () →* core::int*
+  return () → core::int* => def::Extension|method(#this);
+static get topLevelProperty() → core::int*
+  return def::Extension|staticField;
+static set topLevelProperty(core::int* value) → void {
+  def::Extension|staticField = value;
+}
+static method topLevelMethod() → dynamic
+  return def::Extension|staticField;
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.modular.expect
new file mode 100644
index 0000000..d892e0f
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.modular.expect
@@ -0,0 +1,297 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field dynamic field = null;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class GenericClass<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::GenericClass::T* field = null;
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on self::Class* {
+  method readGetter = self::Extension|readGetter;
+  tearoff readGetter = self::Extension|get#readGetter;
+  method writeSetterRequired = self::Extension|writeSetterRequired;
+  tearoff writeSetterRequired = self::Extension|get#writeSetterRequired;
+  method writeSetterOptional = self::Extension|writeSetterOptional;
+  tearoff writeSetterOptional = self::Extension|get#writeSetterOptional;
+  method writeSetterNamed = self::Extension|writeSetterNamed;
+  tearoff writeSetterNamed = self::Extension|get#writeSetterNamed;
+  get tearOffGetterNoArgs = self::Extension|get#tearOffGetterNoArgs;
+  get tearOffGetterRequired = self::Extension|get#tearOffGetterRequired;
+  get tearOffGetterOptional = self::Extension|get#tearOffGetterOptional;
+  get tearOffGetterNamed = self::Extension|get#tearOffGetterNamed;
+  get property = self::Extension|get#property;
+  method invocations = self::Extension|invocations;
+  tearoff invocations = self::Extension|get#invocations;
+  method tearOffs = self::Extension|tearOffs;
+  tearoff tearOffs = self::Extension|get#tearOffs;
+  method getterCalls = self::Extension|getterCalls;
+  tearoff getterCalls = self::Extension|get#getterCalls;
+  set property = self::Extension|set#property;
+}
+extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+  method readGetter = self::GenericExtension|readGetter;
+  tearoff readGetter = self::GenericExtension|get#readGetter;
+  method writeSetterRequired = self::GenericExtension|writeSetterRequired;
+  tearoff writeSetterRequired = self::GenericExtension|get#writeSetterRequired;
+  method writeSetterOptional = self::GenericExtension|writeSetterOptional;
+  tearoff writeSetterOptional = self::GenericExtension|get#writeSetterOptional;
+  method writeSetterNamed = self::GenericExtension|writeSetterNamed;
+  tearoff writeSetterNamed = self::GenericExtension|get#writeSetterNamed;
+  method genericWriteSetterRequired = self::GenericExtension|genericWriteSetterRequired;
+  tearoff genericWriteSetterRequired = self::GenericExtension|get#genericWriteSetterRequired;
+  method genericWriteSetterOptional = self::GenericExtension|genericWriteSetterOptional;
+  tearoff genericWriteSetterOptional = self::GenericExtension|get#genericWriteSetterOptional;
+  method genericWriteSetterNamed = self::GenericExtension|genericWriteSetterNamed;
+  tearoff genericWriteSetterNamed = self::GenericExtension|get#genericWriteSetterNamed;
+  get property = self::GenericExtension|get#property;
+  get tearOffGetterNoArgs = self::GenericExtension|get#tearOffGetterNoArgs;
+  get tearOffGetterRequired = self::GenericExtension|get#tearOffGetterRequired;
+  get tearOffGetterOptional = self::GenericExtension|get#tearOffGetterOptional;
+  get tearOffGetterNamed = self::GenericExtension|get#tearOffGetterNamed;
+  get tearOffGetterGenericRequired = self::GenericExtension|get#tearOffGetterGenericRequired;
+  get tearOffGetterGenericOptional = self::GenericExtension|get#tearOffGetterGenericOptional;
+  get tearOffGetterGenericNamed = self::GenericExtension|get#tearOffGetterGenericNamed;
+  method invocations = self::GenericExtension|invocations;
+  tearoff invocations = self::GenericExtension|get#invocations;
+  method tearOffs = self::GenericExtension|tearOffs;
+  tearoff tearOffs = self::GenericExtension|get#tearOffs;
+  method getterCalls = self::GenericExtension|getterCalls;
+  tearoff getterCalls = self::GenericExtension|get#getterCalls;
+  set property = self::GenericExtension|set#property;
+}
+static method Extension|get#readGetter(lowered final self::Class* #this) → () →* dynamic
+  return () → dynamic => self::Extension|readGetter(#this);
+static method Extension|readGetter(lowered final self::Class* #this) → dynamic {
+  return self::Extension|get#property(#this);
+}
+static method Extension|writeSetterRequired(lowered final self::Class* #this, dynamic value) → dynamic {
+  self::Extension|set#property(#this, value);
+}
+static method Extension|get#writeSetterRequired(lowered final self::Class* #this) → (dynamic) →* dynamic
+  return (dynamic value) → dynamic => self::Extension|writeSetterRequired(#this, value);
+static method Extension|writeSetterOptional(lowered final self::Class* #this, [dynamic value = #C1]) → dynamic {
+  self::Extension|set#property(#this, value);
+}
+static method Extension|get#writeSetterOptional(lowered final self::Class* #this) → ([dynamic]) →* dynamic
+  return ([dynamic value = #C1]) → dynamic => self::Extension|writeSetterOptional(#this, value);
+static method Extension|writeSetterNamed(lowered final self::Class* #this, {dynamic value = #C1}) → dynamic {
+  self::Extension|set#property(#this, value);
+}
+static method Extension|get#writeSetterNamed(lowered final self::Class* #this) → ({value: dynamic}) →* dynamic
+  return ({dynamic value = #C1}) → dynamic => self::Extension|writeSetterNamed(#this, value: value);
+static method Extension|get#tearOffGetterNoArgs(lowered final self::Class* #this) → dynamic
+  return self::Extension|get#readGetter(#this);
+static method Extension|get#tearOffGetterRequired(lowered final self::Class* #this) → dynamic
+  return self::Extension|get#writeSetterRequired(#this);
+static method Extension|get#tearOffGetterOptional(lowered final self::Class* #this) → dynamic
+  return self::Extension|get#writeSetterOptional(#this);
+static method Extension|get#tearOffGetterNamed(lowered final self::Class* #this) → dynamic
+  return self::Extension|get#writeSetterNamed(#this);
+static method Extension|get#property(lowered final self::Class* #this) → dynamic
+  return #this.{self::Class::field}{dynamic};
+static method Extension|set#property(lowered final self::Class* #this, dynamic value) → void {
+  #this.{self::Class::field} = value;
+}
+static method Extension|invocations(lowered final self::Class* #this, dynamic value) → dynamic {
+  self::Extension|readGetter(#this);
+  self::Extension|writeSetterRequired(#this, value);
+  self::Extension|writeSetterOptional(#this);
+  self::Extension|writeSetterOptional(#this, value);
+  self::Extension|writeSetterNamed(#this);
+  self::Extension|writeSetterNamed(#this, value: value);
+}
+static method Extension|get#invocations(lowered final self::Class* #this) → (dynamic) →* dynamic
+  return (dynamic value) → dynamic => self::Extension|invocations(#this, value);
+static method Extension|get#tearOffs(lowered final self::Class* #this) → (dynamic) →* dynamic
+  return (dynamic value) → dynamic => self::Extension|tearOffs(#this, value);
+static method Extension|tearOffs(lowered final self::Class* #this, dynamic value) → dynamic {
+  () →* dynamic tearOffNoArgs = self::Extension|get#readGetter(#this);
+  tearOffNoArgs(){() →* dynamic};
+  (dynamic) →* dynamic tearOffRequired = self::Extension|get#writeSetterRequired(#this);
+  tearOffRequired(value){(dynamic) →* dynamic};
+  ([dynamic]) →* dynamic tearOffOptional = self::Extension|get#writeSetterOptional(#this);
+  tearOffOptional(){([dynamic]) →* dynamic};
+  tearOffOptional(value){([dynamic]) →* dynamic};
+  ({value: dynamic}) →* dynamic tearOffNamed = self::Extension|get#writeSetterNamed(#this);
+  tearOffNamed(){({value: dynamic}) →* dynamic};
+  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
+}
+static method Extension|getterCalls(lowered final self::Class* #this, dynamic value) → dynamic {
+  self::Extension|get#tearOffGetterNoArgs(#this){dynamic}.call();
+  self::Extension|get#tearOffGetterRequired(#this){dynamic}.call(value);
+  self::Extension|get#tearOffGetterOptional(#this){dynamic}.call();
+  self::Extension|get#tearOffGetterOptional(#this){dynamic}.call(value);
+  self::Extension|get#tearOffGetterNamed(#this){dynamic}.call();
+  self::Extension|get#tearOffGetterNamed(#this){dynamic}.call(value: value);
+}
+static method Extension|get#getterCalls(lowered final self::Class* #this) → (dynamic) →* dynamic
+  return (dynamic value) → dynamic => self::Extension|getterCalls(#this, value);
+static method GenericExtension|readGetter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|readGetter::T*>* #this) → self::GenericExtension|readGetter::T* {
+  return self::GenericExtension|get#property<self::GenericExtension|readGetter::T*>(#this);
+}
+static method GenericExtension|get#readGetter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#readGetter::T*>* #this) → () →* self::GenericExtension|get#readGetter::T*
+  return () → self::GenericExtension|get#readGetter::T* => self::GenericExtension|readGetter<self::GenericExtension|get#readGetter::T*>(#this);
+static method GenericExtension|writeSetterRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|writeSetterRequired::T*>* #this, self::GenericExtension|writeSetterRequired::T* value) → dynamic {
+  self::GenericExtension|set#property<self::GenericExtension|writeSetterRequired::T*>(#this, value);
+}
+static method GenericExtension|get#writeSetterRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#writeSetterRequired::T*>* #this) → (self::GenericExtension|get#writeSetterRequired::T*) →* dynamic
+  return (self::GenericExtension|get#writeSetterRequired::T* value) → dynamic => self::GenericExtension|writeSetterRequired<self::GenericExtension|get#writeSetterRequired::T*>(#this, value);
+static method GenericExtension|writeSetterOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|writeSetterOptional::T*>* #this, [self::GenericExtension|writeSetterOptional::T* value = #C1]) → dynamic {
+  self::GenericExtension|set#property<self::GenericExtension|writeSetterOptional::T*>(#this, value);
+}
+static method GenericExtension|get#writeSetterOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#writeSetterOptional::T*>* #this) → ([self::GenericExtension|get#writeSetterOptional::T*]) →* dynamic
+  return ([self::GenericExtension|get#writeSetterOptional::T* value = #C1]) → dynamic => self::GenericExtension|writeSetterOptional<self::GenericExtension|get#writeSetterOptional::T*>(#this, value);
+static method GenericExtension|writeSetterNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|writeSetterNamed::T*>* #this, {self::GenericExtension|writeSetterNamed::T* value = #C1}) → dynamic {
+  self::GenericExtension|set#property<self::GenericExtension|writeSetterNamed::T*>(#this, value);
+}
+static method GenericExtension|get#writeSetterNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#writeSetterNamed::T*>* #this) → ({value: self::GenericExtension|get#writeSetterNamed::T*}) →* dynamic
+  return ({self::GenericExtension|get#writeSetterNamed::T* value = #C1}) → dynamic => self::GenericExtension|writeSetterNamed<self::GenericExtension|get#writeSetterNamed::T*>(#this, value: value);
+static method GenericExtension|genericWriteSetterRequired<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterRequired::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericWriteSetterRequired::T*>* #this, self::GenericExtension|genericWriteSetterRequired::S* value) → dynamic {
+  self::GenericExtension|set#property<self::GenericExtension|genericWriteSetterRequired::T*>(#this, value);
+}
+static method GenericExtension|get#genericWriteSetterRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericWriteSetterRequired::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterRequired::T* = dynamic>(S*) →* dynamic
+  return <S extends self::GenericExtension|get#genericWriteSetterRequired::T* = dynamic>(S* value) → dynamic => self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|get#genericWriteSetterRequired::T*, S*>(#this, value);
+static method GenericExtension|genericWriteSetterOptional<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterOptional::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericWriteSetterOptional::T*>* #this, [self::GenericExtension|genericWriteSetterOptional::S* value = #C1]) → dynamic {
+  self::GenericExtension|set#property<self::GenericExtension|genericWriteSetterOptional::T*>(#this, value);
+}
+static method GenericExtension|get#genericWriteSetterOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericWriteSetterOptional::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterOptional::T* = dynamic>([S*]) →* dynamic
+  return <S extends self::GenericExtension|get#genericWriteSetterOptional::T* = dynamic>([S* value = #C1]) → dynamic => self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|get#genericWriteSetterOptional::T*, S*>(#this, value);
+static method GenericExtension|get#genericWriteSetterNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericWriteSetterNamed::T*>* #this) → <S extends self::GenericExtension|get#genericWriteSetterNamed::T* = dynamic>({value: S*}) →* dynamic
+  return <S extends self::GenericExtension|get#genericWriteSetterNamed::T* = dynamic>({S* value = #C1}) → dynamic => self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|get#genericWriteSetterNamed::T*, S*>(#this, value: value);
+static method GenericExtension|genericWriteSetterNamed<T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterNamed::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericWriteSetterNamed::T*>* #this, {self::GenericExtension|genericWriteSetterNamed::S* value = #C1}) → dynamic {
+  self::GenericExtension|set#property<self::GenericExtension|genericWriteSetterNamed::T*>(#this, value);
+}
+static method GenericExtension|get#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
+  return #this.{self::GenericClass::field}{self::GenericExtension|get#property::T*};
+static method GenericExtension|set#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|set#property::T*>* #this, self::GenericExtension|set#property::T* value) → void {
+  #this.{self::GenericClass::field} = value;
+}
+static method GenericExtension|get#tearOffGetterNoArgs<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterNoArgs::T*>* #this) → dynamic
+  return self::GenericExtension|get#readGetter<self::GenericExtension|get#tearOffGetterNoArgs::T*>(#this);
+static method GenericExtension|get#tearOffGetterRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterRequired::T*>* #this) → dynamic
+  return self::GenericExtension|get#writeSetterRequired<self::GenericExtension|get#tearOffGetterRequired::T*>(#this);
+static method GenericExtension|get#tearOffGetterOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterOptional::T*>* #this) → dynamic
+  return self::GenericExtension|get#writeSetterOptional<self::GenericExtension|get#tearOffGetterOptional::T*>(#this);
+static method GenericExtension|get#tearOffGetterNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterNamed::T*>* #this) → dynamic
+  return self::GenericExtension|get#writeSetterNamed<self::GenericExtension|get#tearOffGetterNamed::T*>(#this);
+static method GenericExtension|get#tearOffGetterGenericRequired<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericRequired::T*>* #this) → dynamic
+  return self::GenericExtension|get#genericWriteSetterRequired<self::GenericExtension|get#tearOffGetterGenericRequired::T*>(#this);
+static method GenericExtension|get#tearOffGetterGenericOptional<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericOptional::T*>* #this) → dynamic
+  return self::GenericExtension|get#genericWriteSetterOptional<self::GenericExtension|get#tearOffGetterGenericOptional::T*>(#this);
+static method GenericExtension|get#tearOffGetterGenericNamed<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericNamed::T*>* #this) → dynamic
+  return self::GenericExtension|get#genericWriteSetterNamed<self::GenericExtension|get#tearOffGetterGenericNamed::T*>(#this);
+static method GenericExtension|invocations<T extends core::Object* = dynamic, S extends self::GenericExtension|invocations::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|invocations::T*>* #this, self::GenericExtension|invocations::S* value) → dynamic {
+  self::GenericExtension|readGetter<self::GenericExtension|invocations::T*>(#this);
+  self::GenericExtension|writeSetterRequired<self::GenericExtension|invocations::T*>(#this, value);
+  self::GenericExtension|writeSetterOptional<self::GenericExtension|invocations::T*>(#this);
+  self::GenericExtension|writeSetterOptional<self::GenericExtension|invocations::T*>(#this, value);
+  self::GenericExtension|writeSetterNamed<self::GenericExtension|invocations::T*>(#this);
+  self::GenericExtension|writeSetterNamed<self::GenericExtension|invocations::T*>(#this, value: value);
+  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value);
+  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this, value);
+  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this, value);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value: value);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this, value: value);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value: value);
+}
+static method GenericExtension|get#invocations<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#invocations::T*>* #this) → <S extends self::GenericExtension|get#invocations::T* = dynamic>(S*) →* dynamic
+  return <S extends self::GenericExtension|get#invocations::T* = dynamic>(S* value) → dynamic => self::GenericExtension|invocations<self::GenericExtension|get#invocations::T*, S*>(#this, value);
+static method GenericExtension|tearOffs<T extends core::Object* = dynamic, S extends self::GenericExtension|tearOffs::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|tearOffs::T*>* #this, self::GenericExtension|tearOffs::S* value) → dynamic {
+  () →* self::GenericExtension|tearOffs::T* tearOffNoArgs = self::GenericExtension|get#readGetter<self::GenericExtension|tearOffs::T*>(#this);
+  tearOffNoArgs(){() →* self::GenericExtension|tearOffs::T*};
+  (self::GenericExtension|tearOffs::T*) →* dynamic tearOffRequired = self::GenericExtension|get#writeSetterRequired<self::GenericExtension|tearOffs::T*>(#this);
+  tearOffRequired(value){(self::GenericExtension|tearOffs::T*) →* dynamic};
+  ([self::GenericExtension|tearOffs::T*]) →* dynamic tearOffOptional = self::GenericExtension|get#writeSetterOptional<self::GenericExtension|tearOffs::T*>(#this);
+  tearOffOptional(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
+  tearOffOptional(value){([self::GenericExtension|tearOffs::T*]) →* dynamic};
+  ({value: self::GenericExtension|tearOffs::T*}) →* dynamic tearOffNamed = self::GenericExtension|get#writeSetterNamed<self::GenericExtension|tearOffs::T*>(#this);
+  tearOffNamed(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
+  tearOffNamed(value: value){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
+  <S extends self::GenericExtension|tearOffs::T* = dynamic>(S*) →* dynamic genericTearOffRequired = self::GenericExtension|get#genericWriteSetterRequired<self::GenericExtension|tearOffs::T*>(#this);
+  genericTearOffRequired<self::GenericExtension|tearOffs::S*>(value){(self::GenericExtension|tearOffs::S*) →* dynamic};
+  genericTearOffRequired<self::GenericExtension|tearOffs::T*>(value){(self::GenericExtension|tearOffs::T*) →* dynamic};
+  genericTearOffRequired<self::GenericExtension|tearOffs::S*>(value){(self::GenericExtension|tearOffs::S*) →* dynamic};
+  <S extends self::GenericExtension|tearOffs::T* = dynamic>([S*]) →* dynamic genericTearOffOptional = self::GenericExtension|get#genericWriteSetterOptional<self::GenericExtension|tearOffs::T*>(#this);
+  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(){([self::GenericExtension|tearOffs::S*]) →* dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(value){([self::GenericExtension|tearOffs::S*]) →* dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(value){([self::GenericExtension|tearOffs::T*]) →* dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(value){([self::GenericExtension|tearOffs::S*]) →* dynamic};
+  <S extends self::GenericExtension|tearOffs::T* = dynamic>({value: S*}) →* dynamic genericTearOffNamed = self::GenericExtension|get#genericWriteSetterNamed<self::GenericExtension|tearOffs::T*>(#this);
+  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(){({value: self::GenericExtension|tearOffs::S*}) →* dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(value: value){({value: self::GenericExtension|tearOffs::S*}) →* dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(value: value){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(value: value){({value: self::GenericExtension|tearOffs::S*}) →* dynamic};
+}
+static method GenericExtension|get#tearOffs<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#tearOffs::T*>* #this) → <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S*) →* dynamic
+  return <S extends self::GenericExtension|get#tearOffs::T* = dynamic>(S* value) → dynamic => self::GenericExtension|tearOffs<self::GenericExtension|get#tearOffs::T*, S*>(#this, value);
+static method GenericExtension|getterCalls<T extends core::Object* = dynamic, S extends self::GenericExtension|getterCalls::T* = dynamic>(lowered final self::GenericClass<self::GenericExtension|getterCalls::T*>* #this, self::GenericExtension|getterCalls::S* value) → dynamic {
+  self::GenericExtension|get#tearOffGetterNoArgs<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value: value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value: value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value: value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value: value);
+}
+static method GenericExtension|get#getterCalls<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#getterCalls::T*>* #this) → <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S*) →* dynamic
+  return <S extends self::GenericExtension|get#getterCalls::T* = dynamic>(S* value) → dynamic => self::GenericExtension|getterCalls<self::GenericExtension|get#getterCalls::T*, S*>(#this, value);
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.modular.expect
new file mode 100644
index 0000000..942973c
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.modular.expect
@@ -0,0 +1,242 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object* = dynamic> extends core::Object {
+  static field dynamic field = null;
+  synthetic constructor •() → self::Class<self::Class::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+  static get property = get self::Extension|property;
+  static field field = self::Extension|field;
+  static method readGetter = self::Extension|readGetter;
+  static method writeSetterRequired = self::Extension|writeSetterRequired;
+  static method writeSetterOptional = self::Extension|writeSetterOptional;
+  static method writeSetterNamed = self::Extension|writeSetterNamed;
+  static method genericWriteSetterRequired = self::Extension|genericWriteSetterRequired;
+  static method genericWriteSetterOptional = self::Extension|genericWriteSetterOptional;
+  static method genericWriteSetterNamed = self::Extension|genericWriteSetterNamed;
+  static get tearOffGetterNoArgs = get self::Extension|tearOffGetterNoArgs;
+  static get tearOffGetterRequired = get self::Extension|tearOffGetterRequired;
+  static get tearOffGetterOptional = get self::Extension|tearOffGetterOptional;
+  static get tearOffGetterNamed = get self::Extension|tearOffGetterNamed;
+  static get tearOffGetterGenericRequired = get self::Extension|tearOffGetterGenericRequired;
+  static get tearOffGetterGenericOptional = get self::Extension|tearOffGetterGenericOptional;
+  static get tearOffGetterGenericNamed = get self::Extension|tearOffGetterGenericNamed;
+  static method invocationsFromStaticContext = self::Extension|invocationsFromStaticContext;
+  static method tearOffsFromStaticContext = self::Extension|tearOffsFromStaticContext;
+  static method fieldAccessFromStaticContext = self::Extension|fieldAccessFromStaticContext;
+  static method getterCallsFromStaticContext = self::Extension|getterCallsFromStaticContext;
+  method invocationsFromInstanceContext = self::Extension|invocationsFromInstanceContext;
+  tearoff invocationsFromInstanceContext = self::Extension|get#invocationsFromInstanceContext;
+  method tearOffsFromInstanceContext = self::Extension|tearOffsFromInstanceContext;
+  tearoff tearOffsFromInstanceContext = self::Extension|get#tearOffsFromInstanceContext;
+  method fieldAccessFromInstanceContext = self::Extension|fieldAccessFromInstanceContext;
+  tearoff fieldAccessFromInstanceContext = self::Extension|get#fieldAccessFromInstanceContext;
+  method getterCallsFromInstanceContext = self::Extension|getterCallsFromInstanceContext;
+  tearoff getterCallsFromInstanceContext = self::Extension|get#getterCallsFromInstanceContext;
+  static set property = set self::Extension|property;
+}
+static field dynamic Extension|field;
+static get Extension|property() → dynamic
+  return self::Class::field;
+static set Extension|property(dynamic value) → void {
+  self::Class::field = value;
+}
+static method Extension|readGetter() → dynamic {
+  return self::Extension|property;
+}
+static method Extension|writeSetterRequired(dynamic value) → dynamic {
+  self::Extension|property = value;
+}
+static method Extension|writeSetterOptional([dynamic value = #C1]) → dynamic {
+  self::Extension|property = value;
+}
+static method Extension|writeSetterNamed({dynamic value = #C1}) → dynamic {
+  self::Extension|property = value;
+}
+static method Extension|genericWriteSetterRequired<S extends core::Object* = dynamic>(self::Extension|genericWriteSetterRequired::S* value) → dynamic {
+  self::Extension|property = value;
+}
+static method Extension|genericWriteSetterOptional<S extends core::Object* = dynamic>([self::Extension|genericWriteSetterOptional::S* value = #C1]) → dynamic {
+  self::Extension|property = value;
+}
+static method Extension|genericWriteSetterNamed<S extends core::Object* = dynamic>({self::Extension|genericWriteSetterNamed::S* value = #C1}) → dynamic {
+  self::Extension|property = value;
+}
+static get Extension|tearOffGetterNoArgs() → dynamic
+  return #C2;
+static get Extension|tearOffGetterRequired() → dynamic
+  return #C3;
+static get Extension|tearOffGetterOptional() → dynamic
+  return #C4;
+static get Extension|tearOffGetterNamed() → dynamic
+  return #C5;
+static get Extension|tearOffGetterGenericRequired() → dynamic
+  return #C6;
+static get Extension|tearOffGetterGenericOptional() → dynamic
+  return #C7;
+static get Extension|tearOffGetterGenericNamed() → dynamic
+  return #C8;
+static method Extension|invocationsFromStaticContext(core::int* value) → dynamic {
+  self::Extension|readGetter();
+  self::Extension|writeSetterRequired(value);
+  self::Extension|writeSetterOptional();
+  self::Extension|writeSetterOptional(value);
+  self::Extension|writeSetterNamed();
+  self::Extension|writeSetterNamed(value: value);
+  self::Extension|genericWriteSetterRequired<core::int*>(value);
+  self::Extension|genericWriteSetterRequired<core::int*>(value);
+  self::Extension|genericWriteSetterOptional<dynamic>();
+  self::Extension|genericWriteSetterOptional<core::int*>();
+  self::Extension|genericWriteSetterOptional<core::int*>(value);
+  self::Extension|genericWriteSetterOptional<core::int*>(value);
+  self::Extension|genericWriteSetterNamed<dynamic>();
+  self::Extension|genericWriteSetterNamed<core::int*>();
+  self::Extension|genericWriteSetterNamed<core::int*>(value: value);
+  self::Extension|genericWriteSetterNamed<core::int*>(value: value);
+}
+static method Extension|tearOffsFromStaticContext(core::int* value) → dynamic {
+  () →* dynamic tearOffNoArgs = #C2;
+  tearOffNoArgs(){() →* dynamic};
+  (dynamic) →* dynamic tearOffRequired = #C3;
+  tearOffRequired(value){(dynamic) →* dynamic};
+  ([dynamic]) →* dynamic tearOffOptional = #C4;
+  tearOffOptional(){([dynamic]) →* dynamic};
+  tearOffOptional(value){([dynamic]) →* dynamic};
+  ({value: dynamic}) →* dynamic tearOffNamed = #C5;
+  tearOffNamed(){({value: dynamic}) →* dynamic};
+  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
+  <S extends core::Object* = dynamic>(S*) →* dynamic tearOffGenericRequired = #C6;
+  tearOffGenericRequired<core::int*>(value){(core::int*) →* dynamic};
+  tearOffGenericRequired<core::int*>(value){(core::int*) →* dynamic};
+  <S extends core::Object* = dynamic>([S*]) →* dynamic tearOffGenericOptional = #C7;
+  tearOffGenericOptional<dynamic>(){([dynamic]) →* dynamic};
+  tearOffGenericOptional<core::int*>(){([core::int*]) →* dynamic};
+  tearOffGenericOptional<core::int*>(value){([core::int*]) →* dynamic};
+  tearOffGenericOptional<core::int*>(value){([core::int*]) →* dynamic};
+  <S extends core::Object* = dynamic>({value: S*}) →* dynamic tearOffGenericNamed = #C8;
+  tearOffGenericNamed<dynamic>(){({value: dynamic}) →* dynamic};
+  tearOffGenericNamed<core::int*>(){({value: core::int*}) →* dynamic};
+  tearOffGenericNamed<core::int*>(value: value){({value: core::int*}) →* dynamic};
+  tearOffGenericNamed<core::int*>(value: value){({value: core::int*}) →* dynamic};
+}
+static method Extension|fieldAccessFromStaticContext() → dynamic {
+  self::Extension|field = self::Extension|property;
+  self::Extension|property = self::Extension|field;
+}
+static method Extension|getterCallsFromStaticContext(core::int* value) → dynamic {
+  self::Extension|tearOffGetterNoArgs{dynamic}.call();
+  self::Extension|tearOffGetterRequired{dynamic}.call(value);
+  self::Extension|tearOffGetterOptional{dynamic}.call();
+  self::Extension|tearOffGetterOptional{dynamic}.call(value);
+  self::Extension|tearOffGetterNamed{dynamic}.call();
+  self::Extension|tearOffGetterNamed{dynamic}.call(value: value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call(value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call<core::int*>(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int*>();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int*>(value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int*>();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call(value: value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int*>(value: value);
+}
+static method Extension|invocationsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|invocationsFromInstanceContext::T*>* #this, self::Extension|invocationsFromInstanceContext::T* value) → dynamic {
+  self::Extension|readGetter();
+  self::Extension|writeSetterRequired(value);
+  self::Extension|writeSetterOptional();
+  self::Extension|writeSetterOptional(value);
+  self::Extension|writeSetterNamed();
+  self::Extension|writeSetterNamed(value: value);
+  self::Extension|genericWriteSetterRequired<self::Extension|invocationsFromInstanceContext::T*>(value);
+  self::Extension|genericWriteSetterRequired<self::Extension|invocationsFromInstanceContext::T*>(value);
+  self::Extension|genericWriteSetterOptional<dynamic>();
+  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T*>();
+  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T*>(value);
+  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T*>(value);
+  self::Extension|genericWriteSetterNamed<dynamic>();
+  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T*>();
+  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T*>(value: value);
+  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T*>(value: value);
+}
+static method Extension|get#invocationsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#invocationsFromInstanceContext::T*>* #this) → (self::Extension|get#invocationsFromInstanceContext::T*) →* dynamic
+  return (self::Extension|get#invocationsFromInstanceContext::T* value) → dynamic => self::Extension|invocationsFromInstanceContext<self::Extension|get#invocationsFromInstanceContext::T*>(#this, value);
+static method Extension|tearOffsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|tearOffsFromInstanceContext::T*>* #this, self::Extension|tearOffsFromInstanceContext::T* value) → dynamic {
+  () →* dynamic tearOffNoArgs = #C2;
+  tearOffNoArgs(){() →* dynamic};
+  (dynamic) →* dynamic tearOffRequired = #C3;
+  tearOffRequired(value){(dynamic) →* dynamic};
+  ([dynamic]) →* dynamic tearOffOptional = #C4;
+  tearOffOptional(){([dynamic]) →* dynamic};
+  tearOffOptional(value){([dynamic]) →* dynamic};
+  ({value: dynamic}) →* dynamic tearOffNamed = #C5;
+  tearOffNamed(){({value: dynamic}) →* dynamic};
+  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
+  <S extends core::Object* = dynamic>(S*) →* dynamic tearOffGenericRequired = #C6;
+  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T*>(value){(self::Extension|tearOffsFromInstanceContext::T*) →* dynamic};
+  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T*>(value){(self::Extension|tearOffsFromInstanceContext::T*) →* dynamic};
+  <S extends core::Object* = dynamic>([S*]) →* dynamic tearOffGenericOptional = #C7;
+  tearOffGenericOptional<dynamic>(){([dynamic]) →* dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(value){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(value){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
+  <S extends core::Object* = dynamic>({value: S*}) →* dynamic tearOffGenericNamed = #C8;
+  tearOffGenericNamed<dynamic>(){({value: dynamic}) →* dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(){({value: self::Extension|tearOffsFromInstanceContext::T*}) →* dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(value: value){({value: self::Extension|tearOffsFromInstanceContext::T*}) →* dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(value: value){({value: self::Extension|tearOffsFromInstanceContext::T*}) →* dynamic};
+}
+static method Extension|get#tearOffsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#tearOffsFromInstanceContext::T*>* #this) → (self::Extension|get#tearOffsFromInstanceContext::T*) →* dynamic
+  return (self::Extension|get#tearOffsFromInstanceContext::T* value) → dynamic => self::Extension|tearOffsFromInstanceContext<self::Extension|get#tearOffsFromInstanceContext::T*>(#this, value);
+static method Extension|fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|fieldAccessFromInstanceContext::T*>* #this) → dynamic {
+  self::Extension|field = self::Extension|property;
+  self::Extension|property = self::Extension|field;
+}
+static method Extension|get#fieldAccessFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#fieldAccessFromInstanceContext::T*>* #this) → () →* dynamic
+  return () → dynamic => self::Extension|fieldAccessFromInstanceContext<self::Extension|get#fieldAccessFromInstanceContext::T*>(#this);
+static method Extension|getterCallsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|getterCallsFromInstanceContext::T*>* #this, self::Extension|getterCallsFromInstanceContext::T* value) → dynamic {
+  self::Extension|tearOffGetterNoArgs{dynamic}.call();
+  self::Extension|tearOffGetterRequired{dynamic}.call(value);
+  self::Extension|tearOffGetterOptional{dynamic}.call();
+  self::Extension|tearOffGetterOptional{dynamic}.call(value);
+  self::Extension|tearOffGetterNamed{dynamic}.call();
+  self::Extension|tearOffGetterNamed{dynamic}.call(value: value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call(value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call(value: value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value: value);
+}
+static method Extension|get#getterCallsFromInstanceContext<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#getterCallsFromInstanceContext::T*>* #this) → (self::Extension|get#getterCallsFromInstanceContext::T*) →* dynamic
+  return (self::Extension|get#getterCallsFromInstanceContext::T* value) → dynamic => self::Extension|getterCallsFromInstanceContext<self::Extension|get#getterCallsFromInstanceContext::T*>(#this, value);
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = static-tearoff self::Extension|readGetter
+  #C3 = static-tearoff self::Extension|writeSetterRequired
+  #C4 = static-tearoff self::Extension|writeSetterOptional
+  #C5 = static-tearoff self::Extension|writeSetterNamed
+  #C6 = static-tearoff self::Extension|genericWriteSetterRequired
+  #C7 = static-tearoff self::Extension|genericWriteSetterOptional
+  #C8 = static-tearoff self::Extension|genericWriteSetterNamed
+}
diff --git a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.modular.expect
new file mode 100644
index 0000000..8289cb4
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic
+    return 123;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension ClassExtension on self::Class* {
+  method method = self::ClassExtension|method;
+  tearoff method = self::ClassExtension|get#method;
+}
+extension Extension on dynamic {
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+}
+static method ClassExtension|method(lowered final self::Class* #this) → core::int*
+  return 42;
+static method ClassExtension|get#method(lowered final self::Class* #this) → () →* core::int*
+  return () → core::int* => self::ClassExtension|method(#this);
+static method Extension|method(lowered final dynamic #this) → core::int*
+  return 87;
+static method Extension|get#method(lowered final dynamic #this) → () →* core::int*
+  return () → core::int* => self::Extension|method(#this);
+static method main() → dynamic {
+  dynamic c0 = new self::Class::•();
+  core::Object* c1 = new self::Class::•();
+  self::Class* c2 = new self::Class::•();
+  self::expect(123, c0{dynamic}.method());
+  self::expect(87, self::Extension|method(c1));
+  self::expect(42, self::ClassExtension|method(c2));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.modular.expect
new file mode 100644
index 0000000..b2bd40c
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.modular.expect
@@ -0,0 +1,93 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int* field1 = 42;
+  field core::int* field2 = 87;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension1 on self::Class* {
+  get field = self::Extension1|get#field;
+  method method = self::Extension1|method;
+  tearoff method = self::Extension1|get#method;
+  method genericMethod = self::Extension1|genericMethod;
+  tearoff genericMethod = self::Extension1|get#genericMethod;
+  set field = self::Extension1|set#field;
+}
+extension Extension2 on self::Class* {
+  get field = self::Extension2|get#field;
+  method method = self::Extension2|method;
+  tearoff method = self::Extension2|get#method;
+  method genericMethod = self::Extension2|genericMethod;
+  tearoff genericMethod = self::Extension2|get#genericMethod;
+  set field = self::Extension2|set#field;
+}
+static method Extension1|get#field(lowered final self::Class* #this) → core::int*
+  return #this.{self::Class::field1}{core::int*};
+static method Extension1|set#field(lowered final self::Class* #this, core::int* value) → void {
+  #this.{self::Class::field1} = value;
+}
+static method Extension1|method(lowered final self::Class* #this) → core::int*
+  return #this.{self::Class::field1}{core::int*};
+static method Extension1|get#method(lowered final self::Class* #this) → () →* core::int*
+  return () → core::int* => self::Extension1|method(#this);
+static method Extension1|genericMethod<T extends core::num*>(lowered final self::Class* #this, self::Extension1|genericMethod::T* t) → core::int*
+  return #this.{self::Class::field1}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
+static method Extension1|get#genericMethod(lowered final self::Class* #this) → <T extends core::num*>(T*) →* core::int*
+  return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
+static method Extension2|get#field(lowered final self::Class* #this) → core::int*
+  return #this.{self::Class::field2}{core::int*};
+static method Extension2|set#field(lowered final self::Class* #this, core::int* value) → void {
+  #this.{self::Class::field2} = value;
+}
+static method Extension2|method(lowered final self::Class* #this) → core::int*
+  return #this.{self::Class::field2}{core::int*};
+static method Extension2|get#method(lowered final self::Class* #this) → () →* core::int*
+  return () → core::int* => self::Extension2|method(#this);
+static method Extension2|genericMethod<T extends core::num*>(lowered final self::Class* #this, self::Extension2|genericMethod::T* t) → core::int*
+  return #this.{self::Class::field2}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
+static method Extension2|get#genericMethod(lowered final self::Class* #this) → <T extends core::num*>(T*) →* core::int*
+  return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
+static method main() → dynamic {
+  self::Class* c = new self::Class::•();
+  self::expect(42, self::Extension1|get#field(c));
+  self::expect(87, self::Extension2|get#field(c));
+  self::expect(42, self::Extension1|method(c));
+  self::expect(87, self::Extension2|method(c));
+  () →* core::int* tearOff1 = self::Extension1|get#method(c);
+  () →* core::int* tearOff2 = self::Extension2|get#method(c);
+  self::expect(42, tearOff1(){() →* core::int*});
+  self::expect(87, tearOff2(){() →* core::int*});
+  self::expect(52, self::Extension1|genericMethod<core::int*>(c, 10));
+  self::expect(97, self::Extension2|genericMethod<core::int*>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::num*>(c, 10));
+  self::expect(97, self::Extension2|genericMethod<core::num*>(c, 10));
+  <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension1|get#genericMethod(c);
+  <T extends core::num*>(T*) →* core::int* genericTearOff2 = self::Extension2|get#genericMethod(c);
+  self::expect(52, genericTearOff1<core::int*>(10){(core::int*) →* core::int*});
+  self::expect(97, genericTearOff2<core::int*>(10){(core::int*) →* core::int*});
+  self::expect(52, genericTearOff1<core::num*>(10){(core::num*) →* core::int*});
+  self::expect(97, genericTearOff2<core::num*>(10){(core::num*) →* core::int*});
+  self::expect(23, let final self::Class* #t1 = c in let final core::int* #t2 = 23 in let final void #t3 = self::Extension1|set#field(#t1, #t2) in #t2);
+  self::expect(67, let final self::Class* #t4 = c in let final core::int* #t5 = 67 in let final void #t6 = self::Extension2|set#field(#t4, #t5) in #t5);
+  self::expect(23, self::Extension1|get#field(c));
+  self::expect(67, self::Extension2|get#field(c));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_inference.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/explicit_extension_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..429ac83
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/explicit_extension_inference.dart.weak.modular.expect
@@ -0,0 +1,140 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class GenericClass<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+  get property = self::GenericExtension|get#property;
+  method method = self::GenericExtension|method;
+  tearoff method = self::GenericExtension|get#method;
+  method genericMethod1 = self::GenericExtension|genericMethod1;
+  tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
+}
+static method GenericExtension|get#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
+  return null;
+static method GenericExtension|method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|method::T*>* #this, self::GenericExtension|method::T* t) → self::GenericExtension|method::T*
+  return null;
+static method GenericExtension|get#method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → (self::GenericExtension|get#method::T*) →* self::GenericExtension|get#method::T*
+  return (self::GenericExtension|get#method::T* t) → self::GenericExtension|get#method::T* => self::GenericExtension|method<self::GenericExtension|get#method::T*>(#this, t);
+static method GenericExtension|genericMethod1<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericMethod1::T*>* #this, self::GenericExtension|genericMethod1::S* s) → self::GenericExtension|genericMethod1::S*
+  return null;
+static method GenericExtension|get#genericMethod1<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericMethod1::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* S*
+  return <S extends core::Object* = dynamic>(S* s) → S* => self::GenericExtension|genericMethod1<self::GenericExtension|get#genericMethod1::T*, S*>(#this, s);
+static method main() → dynamic {
+  self::A* aVariable;
+  self::C* cVariable;
+  self::GenericClass<self::A*>* aClass;
+  self::GenericClass<self::B*>* bClass;
+  self::GenericClass<self::C*>* cClass;
+  cVariable = self::GenericExtension|get#property<self::A*>(aClass) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|get#property<self::A*>(aClass) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|get#property<self::B*>(aClass as{TypeError} self::GenericClass<self::B*>*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|get#property<self::C*>(aClass as{TypeError} self::GenericClass<self::C*>*);
+  cVariable = self::GenericExtension|get#property<self::B*>(bClass) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|get#property<self::A*>(bClass) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|get#property<self::B*>(bClass) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|get#property<self::C*>(bClass as{TypeError} self::GenericClass<self::C*>*);
+  aVariable = self::GenericExtension|get#property<self::C*>(cClass);
+  aVariable = self::GenericExtension|get#property<self::A*>(cClass);
+  aVariable = self::GenericExtension|get#property<self::B*>(cClass);
+  aVariable = self::GenericExtension|get#property<self::C*>(cClass);
+  cVariable = self::GenericExtension|method<self::A*>(aClass, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|method<self::A*>(aClass, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|method<self::B*>(aClass as{TypeError} self::GenericClass<self::B*>*, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|method<self::C*>(aClass as{TypeError} self::GenericClass<self::C*>*, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|method<self::B*>(bClass, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|method<self::A*>(bClass, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|method<self::B*>(bClass, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|method<self::C*>(bClass as{TypeError} self::GenericClass<self::C*>*, aVariable as{TypeError} self::C*);
+  aVariable = self::GenericExtension|method<self::C*>(cClass, aVariable as{TypeError} self::C*);
+  aVariable = self::GenericExtension|method<self::A*>(cClass, aVariable);
+  aVariable = self::GenericExtension|method<self::B*>(cClass, aVariable as{TypeError} self::B*);
+  aVariable = self::GenericExtension|method<self::C*>(cClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::C*>(aClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::A*>(aClass, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::B*>(aClass, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::C*>(aClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::C*>(aClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::A*>(aClass, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::B*>(aClass, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::C*>(aClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::C*>(aClass as{TypeError} self::GenericClass<self::B*>*, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::A*>(aClass as{TypeError} self::GenericClass<self::B*>*, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::B*>(aClass as{TypeError} self::GenericClass<self::B*>*, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::C*>(aClass as{TypeError} self::GenericClass<self::B*>*, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::C*>(aClass as{TypeError} self::GenericClass<self::C*>*, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::A*>(aClass as{TypeError} self::GenericClass<self::C*>*, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::B*>(aClass as{TypeError} self::GenericClass<self::C*>*, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::C*>(aClass as{TypeError} self::GenericClass<self::C*>*, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::C*>(bClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::A*>(bClass, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::B*>(bClass, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::C*>(bClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::C*>(bClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::A*>(bClass, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::B*>(bClass, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::C*>(bClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::C*>(bClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::A*>(bClass, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::B*>(bClass, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::C*>(bClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::C*>(bClass as{TypeError} self::GenericClass<self::C*>*, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::A*>(bClass as{TypeError} self::GenericClass<self::C*>*, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::B*>(bClass as{TypeError} self::GenericClass<self::C*>*, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::C*>(bClass as{TypeError} self::GenericClass<self::C*>*, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::C*>(cClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::A*>(cClass, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::B*>(cClass, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::C*>(cClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::C*>(cClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::A*>(cClass, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::B*>(cClass, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::C*>(cClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::C*>(cClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::A*>(cClass, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::B*>(cClass, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::C*>(cClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::C*>(cClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::A*>(cClass, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::B*>(cClass, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::C*>(cClass, aVariable as{TypeError} self::C*);
+}
diff --git a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.modular.expect
new file mode 100644
index 0000000..ad69a00
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.modular.expect
@@ -0,0 +1,134 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::num*> extends core::Object {
+  covariant-by-class field self::Class::T* field1;
+  covariant-by-class field self::Class::T* field2;
+  constructor •(self::Class::T* field1, self::Class::T* field2) → self::Class<self::Class::T*>*
+    : self::Class::field1 = field1, self::Class::field2 = field2, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension1<T extends core::num*> on self::Class<T*>* {
+  static field latestType = self::Extension1|latestType;
+  get field = self::Extension1|get#field;
+  method method = self::Extension1|method;
+  tearoff method = self::Extension1|get#method;
+  method genericMethod = self::Extension1|genericMethod;
+  tearoff genericMethod = self::Extension1|get#genericMethod;
+  set field = self::Extension1|set#field;
+}
+extension Extension2<T extends core::num*> on self::Class<T*>* {
+  get field = self::Extension2|get#field;
+  method method = self::Extension2|method;
+  tearoff method = self::Extension2|get#method;
+  method genericMethod = self::Extension2|genericMethod;
+  tearoff genericMethod = self::Extension2|get#genericMethod;
+  set field = self::Extension2|set#field;
+}
+static field core::String* Extension1|latestType;
+static method Extension1|get#field<T extends core::num*>(lowered final self::Class<self::Extension1|get#field::T*>* #this) → self::Extension1|get#field::T* {
+  self::Extension1|latestType = "${self::Extension1|get#field::T*}";
+  return #this.{self::Class::field1}{self::Extension1|get#field::T*};
+}
+static method Extension1|set#field<T extends core::num*>(lowered final self::Class<self::Extension1|set#field::T*>* #this, self::Extension1|set#field::T* value) → void {
+  self::Extension1|latestType = "${self::Extension1|set#field::T*}";
+  #this.{self::Class::field1} = value;
+}
+static method Extension1|method<T extends core::num*>(lowered final self::Class<self::Extension1|method::T*>* #this) → self::Extension1|method::T* {
+  self::Extension1|latestType = "${self::Extension1|method::T*}";
+  return #this.{self::Class::field1}{self::Extension1|method::T*};
+}
+static method Extension1|get#method<T extends core::num*>(lowered final self::Class<self::Extension1|get#method::T*>* #this) → () →* self::Extension1|get#method::T*
+  return () → self::Extension1|get#method::T* => self::Extension1|method<self::Extension1|get#method::T*>(#this);
+static method Extension1|genericMethod<T extends core::num*, S extends core::num*>(lowered final self::Class<self::Extension1|genericMethod::T*>* #this, self::Extension1|genericMethod::S* t) → self::Extension1|genericMethod::T* {
+  self::Extension1|latestType = "${self::Extension1|genericMethod::T*}:${self::Extension1|genericMethod::S*}";
+  return #this.{self::Class::field1}{self::Extension1|genericMethod::T*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} self::Extension1|genericMethod::T*;
+}
+static method Extension1|get#genericMethod<T extends core::num*>(lowered final self::Class<self::Extension1|get#genericMethod::T*>* #this) → <S extends core::num*>(S*) →* self::Extension1|get#genericMethod::T*
+  return <S extends core::num*>(S* t) → self::Extension1|get#genericMethod::T* => self::Extension1|genericMethod<self::Extension1|get#genericMethod::T*, S*>(#this, t);
+static method Extension2|get#field<T extends core::num*>(lowered final self::Class<self::Extension2|get#field::T*>* #this) → self::Extension2|get#field::T*
+  return #this.{self::Class::field2}{self::Extension2|get#field::T*};
+static method Extension2|set#field<T extends core::num*>(lowered final self::Class<self::Extension2|set#field::T*>* #this, self::Extension2|set#field::T* value) → void {
+  #this.{self::Class::field2} = value;
+}
+static method Extension2|method<T extends core::num*>(lowered final self::Class<self::Extension2|method::T*>* #this) → self::Extension2|method::T*
+  return #this.{self::Class::field2}{self::Extension2|method::T*};
+static method Extension2|get#method<T extends core::num*>(lowered final self::Class<self::Extension2|get#method::T*>* #this) → () →* self::Extension2|get#method::T*
+  return () → self::Extension2|get#method::T* => self::Extension2|method<self::Extension2|get#method::T*>(#this);
+static method Extension2|genericMethod<T extends core::num*, S extends core::num*>(lowered final self::Class<self::Extension2|genericMethod::T*>* #this, self::Extension2|genericMethod::S* t) → self::Extension2|genericMethod::T*
+  return #this.{self::Class::field2}{self::Extension2|genericMethod::T*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} self::Extension2|genericMethod::T*;
+static method Extension2|get#genericMethod<T extends core::num*>(lowered final self::Class<self::Extension2|get#genericMethod::T*>* #this) → <S extends core::num*>(S*) →* self::Extension2|get#genericMethod::T*
+  return <S extends core::num*>(S* t) → self::Extension2|get#genericMethod::T* => self::Extension2|genericMethod<self::Extension2|get#genericMethod::T*, S*>(#this, t);
+static method main() → dynamic {
+  self::Class<core::int*>* c = new self::Class::•<core::int*>(42, 87);
+  self::expect(42, self::Extension1|get#field<core::num*>(c));
+  self::expect("num", self::Extension1|latestType);
+  self::expect(42, self::Extension1|get#field<core::int*>(c));
+  self::expect("int", self::Extension1|latestType);
+  self::expect(87, self::Extension2|get#field<core::num*>(c));
+  self::expect(42, self::Extension1|method<core::num*>(c));
+  self::expect("num", self::Extension1|latestType);
+  self::expect(42, self::Extension1|method<core::int*>(c));
+  self::expect("int", self::Extension1|latestType);
+  self::expect(87, self::Extension2|method<core::num*>(c));
+  () →* core::num* tearOffNumber1 = self::Extension1|get#method<core::num*>(c);
+  () →* core::int* tearOffInteger1 = self::Extension1|get#method<core::int*>(c);
+  () →* core::num* tearOff2 = self::Extension2|get#method<core::num*>(c);
+  self::expect(42, tearOffNumber1(){() →* core::num*});
+  self::expect("num", self::Extension1|latestType);
+  self::expect(42, tearOffInteger1(){() →* core::int*});
+  self::expect("int", self::Extension1|latestType);
+  self::expect(87, tearOff2(){() →* core::num*});
+  self::expect(52, self::Extension1|genericMethod<core::num*, core::int*>(c, 10));
+  self::expect("num:int", self::Extension1|latestType);
+  self::expect(52, self::Extension1|genericMethod<core::int*, core::int*>(c, 10));
+  self::expect("int:int", self::Extension1|latestType);
+  self::expect(97, self::Extension2|genericMethod<core::num*, core::int*>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::num*, core::num*>(c, 10));
+  self::expect("num:num", self::Extension1|latestType);
+  self::expect(52, self::Extension1|genericMethod<core::int*, core::num*>(c, 10));
+  self::expect("int:num", self::Extension1|latestType);
+  self::expect(97, self::Extension2|genericMethod<core::num*, core::num*>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::int*, core::int*>(c, 10));
+  self::expect("int:int", self::Extension1|latestType);
+  self::expect(52, self::Extension1|genericMethod<core::int*, core::num*>(c, 10));
+  self::expect("int:num", self::Extension1|latestType);
+  self::expect(52, self::Extension1|genericMethod<core::int*, core::int*>(c, 10));
+  self::expect("int:int", self::Extension1|latestType);
+  <S extends core::num*>(S*) →* core::num* genericTearOffNumber1 = self::Extension1|get#genericMethod<core::num*>(c);
+  <S extends core::num*>(S*) →* core::int* genericTearOffInteger1 = self::Extension1|get#genericMethod<core::int*>(c);
+  <S extends core::num*>(S*) →* core::num* genericTearOff2 = self::Extension2|get#genericMethod<core::num*>(c);
+  self::expect(52, genericTearOffNumber1<core::int*>(10){(core::int*) →* core::num*});
+  self::expect("num:int", self::Extension1|latestType);
+  self::expect(52, genericTearOffInteger1<core::int*>(10){(core::int*) →* core::int*});
+  self::expect("int:int", self::Extension1|latestType);
+  self::expect(97, genericTearOff2<core::int*>(10){(core::int*) →* core::num*});
+  self::expect(52, genericTearOffNumber1<core::num*>(10){(core::num*) →* core::num*});
+  self::expect("num:num", self::Extension1|latestType);
+  self::expect(52, genericTearOffInteger1<core::num*>(10){(core::num*) →* core::int*});
+  self::expect("int:num", self::Extension1|latestType);
+  self::expect(97, genericTearOff2<core::num*>(10){(core::num*) →* core::num*});
+  self::expect(23, let final self::Class<core::int*>* #t1 = c in let final core::int* #t2 = 23 in let final void #t3 = self::Extension1|set#field<core::num*>(#t1, #t2) in #t2);
+  self::expect("num", self::Extension1|latestType);
+  self::expect(23, let final self::Class<core::int*>* #t4 = c in let final core::int* #t5 = 23 in let final void #t6 = self::Extension1|set#field<core::int*>(#t4, #t5) in #t5);
+  self::expect("int", self::Extension1|latestType);
+  self::expect(67, let final self::Class<core::int*>* #t7 = c in let final core::int* #t8 = 67 in let final void #t9 = self::Extension2|set#field<core::num*>(#t7, #t8) in #t8);
+  self::expect(23, self::Extension1|get#field<core::num*>(c));
+  self::expect(67, self::Extension2|get#field<core::num*>(c));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.modular.expect
new file mode 100644
index 0000000..f0bae7e
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/explicit_invalid_access.dart:10:3: Error: Explicit extension application cannot be used as an expression.
+//   Extension(c);
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/explicit_invalid_access.dart:11:3: Error: Explicit extension application cannot be a target for assignment.
+//   Extension(c) = 42;
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/explicit_invalid_access.dart:12:3: Error: Explicit extension application cannot be used as an expression.
+//   Extension(c) += 42;
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/explicit_invalid_access.dart:13:3: Error: Explicit extension application cannot be used as an expression.
+//   Extension(c)++;
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/explicit_invalid_access.dart:14:5: Error: Explicit extension application cannot be used as an expression.
+//   ++Extension(c);
+//     ^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on self::Class* {
+}
+static method errors(self::Class* c) → dynamic {
+  invalid-expression "pkg/front_end/testcases/extensions/explicit_invalid_access.dart:10:3: Error: Explicit extension application cannot be used as an expression.
+  Extension(c);
+  ^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/explicit_invalid_access.dart:11:3: Error: Explicit extension application cannot be a target for assignment.
+  Extension(c) = 42;
+  ^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/explicit_invalid_access.dart:12:3: Error: Explicit extension application cannot be used as an expression.
+  Extension(c) += 42;
+  ^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/explicit_invalid_access.dart:13:3: Error: Explicit extension application cannot be used as an expression.
+  Extension(c)++;
+  ^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/explicit_invalid_access.dart:14:5: Error: Explicit extension application cannot be used as an expression.
+  ++Extension(c);
+    ^^^^^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/explicit_this.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/explicit_this.dart.weak.modular.expect
new file mode 100644
index 0000000..9328ef6
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/explicit_this.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  field core::Object* field = null;
+  synthetic constructor •() → self::A1*
+    : super core::Object::•()
+    ;
+  method method1() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension A2 on self::A1* {
+  method method2 = self::A2|method2;
+  tearoff method2 = self::A2|get#method2;
+  method method3 = self::A2|method3;
+  tearoff method3 = self::A2|get#method3;
+  method method4 = self::A2|method4;
+  tearoff method4 = self::A2|get#method4;
+}
+static method A2|method2(lowered final self::A1* #this) → void
+  return #this.{self::A1::method1}(){() →* void};
+static method A2|get#method2(lowered final self::A1* #this) → () →* void
+  return () → void => self::A2|method2(#this);
+static method A2|method3(lowered final self::A1* #this) → core::Object*
+  return #this.{self::A1::field}{core::Object*};
+static method A2|get#method3(lowered final self::A1* #this) → () →* core::Object*
+  return () → core::Object* => self::A2|method3(#this);
+static method A2|method4(lowered final self::A1* #this, core::Object* o) → void {
+  #this.{self::A1::field} = o;
+}
+static method A2|get#method4(lowered final self::A1* #this) → (core::Object*) →* void
+  return (core::Object* o) → void => self::A2|method4(#this, o);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.modular.expect
new file mode 100644
index 0000000..6a3bebc
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library;
+import self as self;
+import "main_lib2.dart" as mai;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+
+static method main() → dynamic {
+  mai::Extension|set#instanceProperty(0, mai::Extension|get#instanceProperty(1));
+  mai::Extension|instanceMethod(2);
+  mai::Extension|get#instanceMethod(3);
+  mai::Extension|staticField = #C1;
+  mai::Extension|set#instanceProperty(3, mai::Extension|staticFinalField);
+  mai::Extension|staticProperty = mai::Extension|staticProperty;
+  mai::Extension|staticMethod();
+  #C2;
+}
+
+constants  {
+  #C1 = 42
+  #C2 = static-tearoff mai::Extension|staticMethod
+}
diff --git a/pkg/front_end/testcases/extensions/export_twice.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/export_twice.dart.weak.modular.expect
new file mode 100644
index 0000000..d7eef99
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/export_twice.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library;
+import self as self;
+import "export_twice_lib1.dart" as exp;
+
+import "org-dartlang-testcase:///export_twice_lib1.dart";
+import "org-dartlang-testcase:///export_twice_lib2.dart";
+
+static method main() → dynamic {
+  exp::Extension|method(new exp::Class::•());
+}
+
+library;
+import self as exp;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → exp::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on exp::Class* {
+  method method = exp::Extension|method;
+  tearoff method = exp::Extension|get#method;
+}
+static method Extension|method(lowered final exp::Class* #this) → dynamic {}
+static method Extension|get#method(lowered final exp::Class* #this) → () →* dynamic
+  return () → dynamic => exp::Extension|method(#this);
+
+library;
+import self as self2;
+import "export_twice_lib1.dart" as exp;
+additionalExports = (exp::Extension)
+
+export "org-dartlang-testcase:///export_twice_lib1.dart" show Extension;
diff --git a/pkg/front_end/testcases/extensions/extension_call.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/extension_call.dart.weak.modular.expect
new file mode 100644
index 0000000..13106a6
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/extension_call.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T*>*
+    : super core::Object::•()
+    ;
+  method method(covariant-by-class self::Class::T* a) → self::Class::T*
+    return a;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+  method call = self::Extension|call;
+  tearoff call = self::Extension|get#call;
+}
+static method Extension|call<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|call::T*>* #this, self::Extension|call::T* a) → self::Extension|call::T*
+  return #this.{self::Class::method}(a){(self::Extension|call::T*) →* self::Extension|call::T*};
+static method Extension|get#call<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#call::T*>* #this) → (self::Extension|get#call::T*) →* self::Extension|get#call::T*
+  return (self::Extension|get#call::T* a) → self::Extension|get#call::T* => self::Extension|call<self::Extension|get#call::T*>(#this, a);
+static method main() → dynamic {
+  self::Class<core::int*>* c = new self::Class::•<core::int*>();
+  self::expect(42, self::Extension|call<core::int*>(c, 42));
+  self::expect(87, self::Extension|call<core::int*>(c, 87));
+  self::expect(123, self::Extension|call<core::int*>(c, 123));
+  self::expect(42, self::Extension|call<core::int*>(c, 42));
+  self::expect(87, self::Extension|call<core::int*>(c, 87));
+  self::expect(123, self::Extension|call<core::int*>(c, 123));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/extension_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/extension_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..8400d5d
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/extension_constructor.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/extension_constructor.dart:8:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   Extension() {}
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_constructor.dart:9:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   Extension.named() {}
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_constructor.dart:10:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   factory Extension.fact() => null;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_constructor.dart:11:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   factory Extension.redirect() = Extension;
+//   ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on self::Class* {
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+}
+static method Extension|method(lowered final self::Class* #this) → dynamic {}
+static method Extension|get#method(lowered final self::Class* #this) → () →* dynamic
+  return () → dynamic => self::Extension|method(#this);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.modular.expect
new file mode 100644
index 0000000..1539e4a
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart.weak.modular.expect
@@ -0,0 +1,79 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:6:5: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   U field1 = null;
+//     ^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:7:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int? field2 = () { U x = null; return null; }();
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:8:12: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   List<U>? field3 = null;
+//            ^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:9:18: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   U Function(U)? field4 = null;
+//                  ^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:10:30: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   List<U> Function(List<U>)? field5 = null;
+//                              ^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:11:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int? field6 = <E>() { E? x = null; return null; }<String>();
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:12:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int? field7 = <E>() { E? x = null; return null; }<U>();
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_field_with_type_parameter_usage.dart:13:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   Type field8 = U;
+//        ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension E<U extends core::Object? = dynamic> on core::String {
+  field field1 = self::E|field1;
+  field field2 = self::E|field2;
+  field field3 = self::E|field3;
+  field field4 = self::E|field4;
+  field field5 = self::E|field5;
+  field field6 = self::E|field6;
+  field field7 = self::E|field7;
+  field field8 = self::E|field8;
+}
+static field invalid-type E|field1 = null;
+static field core::int? E|field2 = (() → Null {
+  invalid-type x = null;
+  return null;
+})(){() → Null};
+static field core::List<invalid-type>? E|field3 = null;
+static field (invalid-type) →? invalid-type E|field4 = null;
+static field (core::List<invalid-type>) →? core::List<invalid-type> E|field5 = null;
+static field core::int? E|field6 = (<E extends core::Object? = dynamic>() → Null {
+  E? x = null;
+  return null;
+})<core::String>(){() → Null};
+static field core::int? E|field7 = (<E extends core::Object? = dynamic>() → Null {
+  E? x = null;
+  return null;
+})<invalid-type>(){() → Null};
+static field core::Type E|field8 = #C1;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(invalid-type)
+}
diff --git a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.modular.expect
new file mode 100644
index 0000000..fd72cf1
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.modular.expect
@@ -0,0 +1,209 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:7:11: Error: 'duplicateInstanceGetter' is already declared in this scope.
+//   int get duplicateInstanceGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:6:11: Context: Previous declaration of 'duplicateInstanceGetter'.
+//   int get duplicateInstanceGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:10:12: Error: 'duplicateInstanceSetter' is already declared in this scope.
+//   void set duplicateInstanceSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:9:12: Context: Previous declaration of 'duplicateInstanceSetter'.
+//   void set duplicateInstanceSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:13:8: Error: 'duplicateInstanceMethod' is already declared in this scope.
+//   void duplicateInstanceMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:12:8: Context: Previous declaration of 'duplicateInstanceMethod'.
+//   void duplicateInstanceMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:16:14: Error: 'duplicateStaticField' is already declared in this scope.
+//   static int duplicateStaticField = 0;
+//              ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:15:14: Context: Previous declaration of 'duplicateStaticField'.
+//   static int duplicateStaticField = 0;
+//              ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:19:18: Error: 'duplicateStaticGetter' is already declared in this scope.
+//   static int get duplicateStaticGetter => 0;
+//                  ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:18:18: Context: Previous declaration of 'duplicateStaticGetter'.
+//   static int get duplicateStaticGetter => 0;
+//                  ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:22:19: Error: 'duplicateStaticSetter' is already declared in this scope.
+//   static void set duplicateStaticSetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:21:19: Context: Previous declaration of 'duplicateStaticSetter'.
+//   static void set duplicateStaticSetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:25:15: Error: 'duplicateStaticMethod' is already declared in this scope.
+//   static void duplicateStaticMethod() {}
+//               ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:24:15: Context: Previous declaration of 'duplicateStaticMethod'.
+//   static void duplicateStaticMethod() {}
+//               ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:28:11: Error: 'duplicateInstanceGetterPlusSetter' is already declared in this scope.
+//   int get duplicateInstanceGetterPlusSetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:27:11: Context: Previous declaration of 'duplicateInstanceGetterPlusSetter'.
+//   int get duplicateInstanceGetterPlusSetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:33:12: Error: 'duplicateInstanceSetterPlusGetter' is already declared in this scope.
+//   void set duplicateInstanceSetterPlusGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:32:12: Context: Previous declaration of 'duplicateInstanceSetterPlusGetter'.
+//   void set duplicateInstanceSetterPlusGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:36:11: Error: 'duplicateInstanceGetterAndSetter' is already declared in this scope.
+//   int get duplicateInstanceGetterAndSetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:35:11: Context: Previous declaration of 'duplicateInstanceGetterAndSetter'.
+//   int get duplicateInstanceGetterAndSetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:38:12: Error: 'duplicateInstanceGetterAndSetter' is already declared in this scope.
+//   void set duplicateInstanceGetterAndSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:37:12: Context: Previous declaration of 'duplicateInstanceGetterAndSetter'.
+//   void set duplicateInstanceGetterAndSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:41:18: Error: 'duplicateStaticGetterPlusSetter' is already declared in this scope.
+//   static int get duplicateStaticGetterPlusSetter => 0;
+//                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:40:18: Context: Previous declaration of 'duplicateStaticGetterPlusSetter'.
+//   static int get duplicateStaticGetterPlusSetter => 0;
+//                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:46:19: Error: 'duplicateStaticSetterPlusGetter' is already declared in this scope.
+//   static void set duplicateStaticSetterPlusGetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:45:19: Context: Previous declaration of 'duplicateStaticSetterPlusGetter'.
+//   static void set duplicateStaticSetterPlusGetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:49:18: Error: 'duplicateStaticGetterAndSetter' is already declared in this scope.
+//   static int get duplicateStaticGetterAndSetter => 0;
+//                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:48:18: Context: Previous declaration of 'duplicateStaticGetterAndSetter'.
+//   static int get duplicateStaticGetterAndSetter => 0;
+//                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:51:19: Error: 'duplicateStaticGetterAndSetter' is already declared in this scope.
+//   static void set duplicateStaticGetterAndSetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:50:19: Context: Previous declaration of 'duplicateStaticGetterAndSetter'.
+//   static void set duplicateStaticGetterAndSetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:60:14: Error: 'instanceGetterAndStaticField' is already declared in this scope.
+//   static int instanceGetterAndStaticField = 0;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:59:11: Context: Previous declaration of 'instanceGetterAndStaticField'.
+//   int get instanceGetterAndStaticField => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:63:20: Error: 'instanceGetterAndStaticField' is already declared in this scope.
+//   static final int instanceGetterAndStaticField = 0;
+//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:60:14: Context: Previous declaration of 'instanceGetterAndStaticField'.
+//   static int instanceGetterAndStaticField = 0;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:54:19: Error: Conflicts with member 'instanceGetterAndStaticSetter'.
+//   static void set instanceGetterAndStaticSetter(int value) {}
+//                   ^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:53:11: Error: Conflicts with setter 'instanceGetterAndStaticSetter'.
+//   int get instanceGetterAndStaticSetter => 0;
+//           ^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:57:12: Error: Conflicts with member 'instanceSetterAndStaticGetter'.
+//   void set instanceSetterAndStaticGetter(int value) {}
+//            ^
+//
+// pkg/front_end/testcases/extensions/extension_member_conflict.dart:56:18: Error: Conflicts with setter 'instanceSetterAndStaticGetter'.
+//   static int get instanceSetterAndStaticGetter => 0;
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension Extension<T extends core::Object* = dynamic> on core::int* {
+  get duplicateInstanceGetter = self::Extension|get#duplicateInstanceGetter;
+  method duplicateInstanceMethod = self::Extension|duplicateInstanceMethod;
+  tearoff duplicateInstanceMethod = self::Extension|get#duplicateInstanceMethod;
+  static field duplicateStaticField = self::Extension|duplicateStaticField;
+  static get duplicateStaticGetter = get self::Extension|duplicateStaticGetter;
+  static method duplicateStaticMethod = self::Extension|duplicateStaticMethod;
+  get duplicateInstanceGetterPlusSetter = self::Extension|get#duplicateInstanceGetterPlusSetter;
+  get duplicateInstanceSetterPlusGetter = self::Extension|get#duplicateInstanceSetterPlusGetter;
+  get duplicateInstanceGetterAndSetter = self::Extension|get#duplicateInstanceGetterAndSetter;
+  static get duplicateStaticGetterPlusSetter = get self::Extension|duplicateStaticGetterPlusSetter;
+  static get duplicateStaticSetterPlusGetter = get self::Extension|duplicateStaticSetterPlusGetter;
+  static get duplicateStaticGetterAndSetter = get self::Extension|duplicateStaticGetterAndSetter;
+  get instanceGetterAndStaticSetter = self::Extension|get#instanceGetterAndStaticSetter;
+  static get instanceSetterAndStaticGetter = get self::Extension|instanceSetterAndStaticGetter;
+  get instanceGetterAndStaticField = self::Extension|get#instanceGetterAndStaticField;
+  set duplicateInstanceSetter = self::Extension|set#duplicateInstanceSetter;
+  static set duplicateStaticSetter = set self::Extension|duplicateStaticSetter;
+  set duplicateInstanceGetterPlusSetter = self::Extension|set#duplicateInstanceGetterPlusSetter;
+  set duplicateInstanceSetterPlusGetter = self::Extension|set#duplicateInstanceSetterPlusGetter;
+  set duplicateInstanceGetterAndSetter = self::Extension|set#duplicateInstanceGetterAndSetter;
+  static set duplicateStaticGetterPlusSetter = set self::Extension|duplicateStaticGetterPlusSetter;
+  static set duplicateStaticSetterPlusGetter = set self::Extension|duplicateStaticSetterPlusGetter;
+  static set duplicateStaticGetterAndSetter = set self::Extension|duplicateStaticGetterAndSetter;
+  static set instanceGetterAndStaticSetter = set self::Extension|instanceGetterAndStaticSetter;
+  set instanceSetterAndStaticGetter = self::Extension|set#instanceSetterAndStaticGetter;
+  set instanceSetterAndStaticField = self::Extension|set#instanceSetterAndStaticField;
+}
+static field core::int* Extension|duplicateStaticField;
+static method Extension|get#duplicateInstanceGetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
+  return 0;
+static method Extension|set#duplicateInstanceSetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
+static method Extension|duplicateInstanceMethod<T extends core::Object* = dynamic>(lowered final core::int* #this) → void {}
+static method Extension|get#duplicateInstanceMethod<T extends core::Object* = dynamic>(lowered final core::int* #this) → () →* void
+  return () → void => self::Extension|duplicateInstanceMethod<self::Extension|get#duplicateInstanceMethod::T*>(#this);
+static get Extension|duplicateStaticGetter() → core::int*
+  return 0;
+static set Extension|duplicateStaticSetter(core::int* value) → void {}
+static method Extension|duplicateStaticMethod() → void {}
+static method Extension|get#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
+  return 0;
+static method Extension|set#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
+static method Extension|get#duplicateInstanceSetterPlusGetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
+  return 0;
+static method Extension|set#duplicateInstanceSetterPlusGetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
+static method Extension|get#duplicateInstanceGetterAndSetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
+  return 0;
+static method Extension|set#duplicateInstanceGetterAndSetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
+static get Extension|duplicateStaticGetterPlusSetter() → core::int*
+  return 0;
+static set Extension|duplicateStaticGetterPlusSetter(core::int* value) → void {}
+static get Extension|duplicateStaticSetterPlusGetter() → core::int*
+  return 0;
+static set Extension|duplicateStaticSetterPlusGetter(core::int* value) → void {}
+static get Extension|duplicateStaticGetterAndSetter() → core::int*
+  return 0;
+static set Extension|duplicateStaticGetterAndSetter(core::int* value) → void {}
+static method Extension|get#instanceGetterAndStaticSetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
+  return 0;
+static set Extension|instanceGetterAndStaticSetter(core::int* value) → void {}
+static get Extension|instanceSetterAndStaticGetter() → core::int*
+  return 0;
+static method Extension|set#instanceSetterAndStaticGetter<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
+static method Extension|get#instanceGetterAndStaticField<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
+  return 0;
+static method Extension|set#instanceSetterAndStaticField<T extends core::Object* = dynamic>(lowered final core::int* #this, core::int* value) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/extension_methods.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/extension_methods.dart.weak.modular.expect
new file mode 100644
index 0000000..dd3ee97
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/extension_methods.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  get one() → core::int*
+    return 1;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension E on self::C* {
+  get two = self::E|get#two;
+}
+static method E|get#two(lowered final self::C* #this) → core::int*
+  return 2;
+static method main() → dynamic {
+  self::C* c = new self::C::•();
+  core::int* result = c.{self::C::one}{core::int*}.{core::num::+}(self::E|get#two(c)){(core::num*) →* core::int*};
+  exp::Expect::equals(result, 3);
+}
diff --git a/pkg/front_end/testcases/extensions/extension_setter.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/extension_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..049dae0
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/extension_setter.dart.weak.modular.expect
@@ -0,0 +1,223 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int* field = null;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class GenericClass<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on self::Class* {
+  get simpleSetter = self::Extension|get#simpleSetter;
+  get mutatingSetter = self::Extension|get#mutatingSetter;
+  get setterWithReturn = self::Extension|get#setterWithReturn;
+  get setterWithClosure = self::Extension|get#setterWithClosure;
+  method testInternal = self::Extension|testInternal;
+  tearoff testInternal = self::Extension|get#testInternal;
+  set simpleSetter = self::Extension|set#simpleSetter;
+  set mutatingSetter = self::Extension|set#mutatingSetter;
+  set setterWithReturn = self::Extension|set#setterWithReturn;
+  set setterWithClosure = self::Extension|set#setterWithClosure;
+}
+extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+  set setter = self::GenericExtension|set#setter;
+}
+static method Extension|get#simpleSetter(lowered final self::Class* #this) → core::int*
+  return #this.{self::Class::field}{core::int*};
+static method Extension|set#simpleSetter(lowered final self::Class* #this, core::int* value) → void {
+  #this.{self::Class::field} = value;
+}
+static method Extension|get#mutatingSetter(lowered final self::Class* #this) → core::int*
+  return #this.{self::Class::field}{core::int*};
+static method Extension|set#mutatingSetter(lowered final self::Class* #this, core::int* value) → void {
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
+  #this.{self::Class::field} = value;
+}
+static method Extension|get#setterWithReturn(lowered final self::Class* #this) → core::int*
+  return #this.{self::Class::field}{core::int*};
+static method Extension|set#setterWithReturn(lowered final self::Class* #this, core::int* value) → void {
+  if(value.{core::num::<}(0){(core::num*) →* core::bool*}) {
+    #this.{self::Class::field} = value.{core::int::unary-}(){() →* core::int*};
+    return;
+  }
+  #this.{self::Class::field} = value;
+}
+static method Extension|get#setterWithClosure(lowered final self::Class* #this) → core::int*
+  return #this.{self::Class::field}{core::int*};
+static method Extension|set#setterWithClosure(lowered final self::Class* #this, core::int* value) → void {
+  function abs(dynamic value) → dynamic {
+    return value{dynamic}.<(0) as{TypeError,ForDynamic} core::bool* ?{dynamic} value{dynamic}.unary-() : value;
+  }
+  #this.{self::Class::field} = abs(value){(dynamic) →* dynamic} as{TypeError,ForDynamic} core::int*;
+}
+static method Extension|testInternal(lowered final self::Class* #this) → dynamic {
+  self::expect(null, #this.{self::Class::field}{core::int*});
+  self::Extension|set#simpleSetter(#this, 0);
+  self::expect(0, #this.{self::Class::field}{core::int*});
+  self::expect(1, let final core::int* #t1 = 1 in let final void #t2 = self::Extension|set#simpleSetter(#this, #t1) in #t1);
+  self::Extension|set#mutatingSetter(#this, 0);
+  self::expect(1, #this.{self::Class::field}{core::int*});
+  self::expect(2, let final core::int* #t3 = 2 in let final void #t4 = self::Extension|set#mutatingSetter(#this, #t3) in #t3);
+  self::expect(3, #this.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithReturn(#this, 1);
+  self::expect(1, #this.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithReturn(#this, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, #this.{self::Class::field}{core::int*});
+  self::expect(3, let final core::int* #t5 = 3 in let final void #t6 = self::Extension|set#setterWithReturn(#this, #t5) in #t5);
+  self::expect(3, #this.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final core::int* #t7 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t8 = self::Extension|set#setterWithReturn(#this, #t7) in #t7);
+  self::expect(4, #this.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithClosure(#this, 1);
+  self::expect(1, #this.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithClosure(#this, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, #this.{self::Class::field}{core::int*});
+  self::expect(3, let final core::int* #t9 = 3 in let final void #t10 = self::Extension|set#setterWithClosure(#this, #t9) in #t9);
+  self::expect(3, #this.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final core::int* #t11 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t12 = self::Extension|set#setterWithClosure(#this, #t11) in #t11);
+  self::expect(4, #this.{self::Class::field}{core::int*});
+}
+static method Extension|get#testInternal(lowered final self::Class* #this) → () →* dynamic
+  return () → dynamic => self::Extension|testInternal(#this);
+static method GenericExtension|set#setter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|set#setter::T*>* #this, self::GenericExtension|set#setter::T* value) → void {}
+static method main() → dynamic {
+  self::Class* c = new self::Class::•();
+  self::expect(null, c.{self::Class::field}{core::int*});
+  self::Extension|set#simpleSetter(c, 0);
+  self::expect(0, c.{self::Class::field}{core::int*});
+  self::expect(1, let final core::int* #t13 = 1 in let final void #t14 = self::Extension|set#simpleSetter(c, #t13) in #t13);
+  self::Extension|set#simpleSetter(c, 2);
+  self::expect(2, c.{self::Class::field}{core::int*});
+  self::expect(3, let final self::Class* #t15 = c in let final core::int* #t16 = 3 in let final void #t17 = self::Extension|set#simpleSetter(#t15, #t16) in #t16);
+  self::Extension|set#mutatingSetter(c, 0);
+  self::expect(1, c.{self::Class::field}{core::int*});
+  self::expect(2, let final core::int* #t18 = 2 in let final void #t19 = self::Extension|set#mutatingSetter(c, #t18) in #t18);
+  self::expect(3, c.{self::Class::field}{core::int*});
+  self::Extension|set#mutatingSetter(c, 4);
+  self::expect(5, c.{self::Class::field}{core::int*});
+  self::expect(6, let final self::Class* #t20 = c in let final core::int* #t21 = 6 in let final void #t22 = self::Extension|set#mutatingSetter(#t20, #t21) in #t21);
+  self::expect(7, c.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithReturn(c, 1);
+  self::expect(1, c.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithReturn(c, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, c.{self::Class::field}{core::int*});
+  self::expect(3, let final core::int* #t23 = 3 in let final void #t24 = self::Extension|set#setterWithReturn(c, #t23) in #t23);
+  self::expect(3, c.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final core::int* #t25 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t26 = self::Extension|set#setterWithReturn(c, #t25) in #t25);
+  self::expect(4, c.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithReturn(c, 5);
+  self::expect(5, c.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}(){() →* core::int*});
+  self::expect(6, c.{self::Class::field}{core::int*});
+  self::expect(7, let final self::Class* #t27 = c in let final core::int* #t28 = 7 in let final void #t29 = self::Extension|set#setterWithReturn(#t27, #t28) in #t28);
+  self::expect(7, c.{self::Class::field}{core::int*});
+  self::expect(8.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t30 = c in let final core::int* #t31 = 8.{core::int::unary-}(){() →* core::int*} in let final void #t32 = self::Extension|set#setterWithReturn(#t30, #t31) in #t31);
+  self::expect(8, c.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithClosure(c, 1);
+  self::expect(1, c.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithClosure(c, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, c.{self::Class::field}{core::int*});
+  self::expect(3, let final core::int* #t33 = 3 in let final void #t34 = self::Extension|set#setterWithClosure(c, #t33) in #t33);
+  self::expect(3, c.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final core::int* #t35 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t36 = self::Extension|set#setterWithClosure(c, #t35) in #t35);
+  self::expect(4, c.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithClosure(c, 5);
+  self::expect(5, c.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}(){() →* core::int*});
+  self::expect(6, c.{self::Class::field}{core::int*});
+  self::expect(7, let final self::Class* #t37 = c in let final core::int* #t38 = 7 in let final void #t39 = self::Extension|set#setterWithClosure(#t37, #t38) in #t38);
+  self::expect(7, c.{self::Class::field}{core::int*});
+  self::expect(8.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t40 = c in let final core::int* #t41 = 8.{core::int::unary-}(){() →* core::int*} in let final void #t42 = self::Extension|set#setterWithClosure(#t40, #t41) in #t41);
+  self::expect(8, c.{self::Class::field}{core::int*});
+  self::Extension|set#simpleSetter(c, 0);
+  self::expect(0, let final self::Class* #t43 = c in #t43 == null ?{core::int*} null : #t43.{self::Class::field}{core::int*});
+  self::expect(1, let final self::Class* #t44 = c in #t44 == null ?{core::int*} null : let final core::int* #t45 = 1 in let final void #t46 = self::Extension|set#simpleSetter(#t44, #t45) in #t45);
+  self::Extension|set#simpleSetter(c, 2);
+  self::expect(2, let final self::Class* #t47 = c in #t47 == null ?{core::int*} null : #t47.{self::Class::field}{core::int*});
+  self::expect(3, let final self::Class* #t48 = c in let final core::int* #t49 = 3 in let final void #t50 = self::Extension|set#simpleSetter(#t48, #t49) in #t49);
+  self::Extension|set#mutatingSetter(c, 0);
+  self::expect(1, let final self::Class* #t51 = c in #t51 == null ?{core::int*} null : #t51.{self::Class::field}{core::int*});
+  self::expect(2, let final self::Class* #t52 = c in #t52 == null ?{core::int*} null : let final core::int* #t53 = 2 in let final void #t54 = self::Extension|set#mutatingSetter(#t52, #t53) in #t53);
+  self::expect(3, let final self::Class* #t55 = c in #t55 == null ?{core::int*} null : #t55.{self::Class::field}{core::int*});
+  self::Extension|set#mutatingSetter(c, 4);
+  self::expect(5, let final self::Class* #t56 = c in #t56 == null ?{core::int*} null : #t56.{self::Class::field}{core::int*});
+  self::expect(6, let final self::Class* #t57 = c in let final core::int* #t58 = 6 in let final void #t59 = self::Extension|set#mutatingSetter(#t57, #t58) in #t58);
+  self::expect(7, let final self::Class* #t60 = c in #t60 == null ?{core::int*} null : #t60.{self::Class::field}{core::int*});
+  let final self::Class* #t61 = c in #t61 == null ?{core::int*} null : self::Extension|set#setterWithReturn(#t61, 1);
+  self::expect(1, let final self::Class* #t62 = c in #t62 == null ?{core::int*} null : #t62.{self::Class::field}{core::int*});
+  let final self::Class* #t63 = c in #t63 == null ?{core::int*} null : self::Extension|set#setterWithReturn(#t63, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, let final self::Class* #t64 = c in #t64 == null ?{core::int*} null : #t64.{self::Class::field}{core::int*});
+  self::expect(3, let final self::Class* #t65 = c in #t65 == null ?{core::int*} null : let final core::int* #t66 = 3 in let final void #t67 = self::Extension|set#setterWithReturn(#t65, #t66) in #t66);
+  self::expect(3, let final self::Class* #t68 = c in #t68 == null ?{core::int*} null : #t68.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t69 = c in #t69 == null ?{core::int*} null : let final core::int* #t70 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t71 = self::Extension|set#setterWithReturn(#t69, #t70) in #t70);
+  self::expect(4, let final self::Class* #t72 = c in #t72 == null ?{core::int*} null : #t72.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithReturn(c, 5);
+  self::expect(5, let final self::Class* #t73 = c in #t73 == null ?{core::int*} null : #t73.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}(){() →* core::int*});
+  self::expect(6, let final self::Class* #t74 = c in #t74 == null ?{core::int*} null : #t74.{self::Class::field}{core::int*});
+  self::expect(7, let final self::Class* #t75 = c in let final core::int* #t76 = 7 in let final void #t77 = self::Extension|set#setterWithReturn(#t75, #t76) in #t76);
+  self::expect(7, let final self::Class* #t78 = c in #t78 == null ?{core::int*} null : #t78.{self::Class::field}{core::int*});
+  self::expect(8.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t79 = c in let final core::int* #t80 = 8.{core::int::unary-}(){() →* core::int*} in let final void #t81 = self::Extension|set#setterWithReturn(#t79, #t80) in #t80);
+  self::expect(8, let final self::Class* #t82 = c in #t82 == null ?{core::int*} null : #t82.{self::Class::field}{core::int*});
+  let final self::Class* #t83 = c in #t83 == null ?{core::int*} null : self::Extension|set#setterWithClosure(#t83, 1);
+  self::expect(1, let final self::Class* #t84 = c in #t84 == null ?{core::int*} null : #t84.{self::Class::field}{core::int*});
+  let final self::Class* #t85 = c in #t85 == null ?{core::int*} null : self::Extension|set#setterWithClosure(#t85, 2.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, let final self::Class* #t86 = c in #t86 == null ?{core::int*} null : #t86.{self::Class::field}{core::int*});
+  self::expect(3, let final self::Class* #t87 = c in #t87 == null ?{core::int*} null : let final core::int* #t88 = 3 in let final void #t89 = self::Extension|set#setterWithClosure(#t87, #t88) in #t88);
+  self::expect(3, let final self::Class* #t90 = c in #t90 == null ?{core::int*} null : #t90.{self::Class::field}{core::int*});
+  self::expect(4.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t91 = c in #t91 == null ?{core::int*} null : let final core::int* #t92 = 4.{core::int::unary-}(){() →* core::int*} in let final void #t93 = self::Extension|set#setterWithClosure(#t91, #t92) in #t92);
+  self::expect(4, let final self::Class* #t94 = c in #t94 == null ?{core::int*} null : #t94.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithClosure(c, 5);
+  self::expect(5, let final self::Class* #t95 = c in #t95 == null ?{core::int*} null : #t95.{self::Class::field}{core::int*});
+  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}(){() →* core::int*});
+  self::expect(6, let final self::Class* #t96 = c in #t96 == null ?{core::int*} null : #t96.{self::Class::field}{core::int*});
+  self::expect(7, let final self::Class* #t97 = c in let final core::int* #t98 = 7 in let final void #t99 = self::Extension|set#setterWithClosure(#t97, #t98) in #t98);
+  self::expect(7, let final self::Class* #t100 = c in #t100 == null ?{core::int*} null : #t100.{self::Class::field}{core::int*});
+  self::expect(8.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t101 = c in let final core::int* #t102 = 8.{core::int::unary-}(){() →* core::int*} in let final void #t103 = self::Extension|set#setterWithClosure(#t101, #t102) in #t102);
+  self::expect(8, let final self::Class* #t104 = c in #t104 == null ?{core::int*} null : #t104.{self::Class::field}{core::int*});
+  c.{self::Class::field} = null;
+  let final self::Class* #t105 = c in self::Extension|get#simpleSetter(#t105) == null ?{core::int*} self::Extension|set#simpleSetter(#t105, 1) : null;
+  self::expect(1, c.{self::Class::field}{core::int*});
+  self::expect(1, let final self::Class* #t106 = c in let final core::int* #t107 = self::Extension|get#simpleSetter(#t106) in #t107 == null ?{core::int*} let final core::int* #t108 = 2 in let final void #t109 = self::Extension|set#simpleSetter(#t106, #t108) in #t108 : #t107);
+  c.{self::Class::field} = null;
+  self::expect(2, let final self::Class* #t110 = c in let final core::int* #t111 = self::Extension|get#simpleSetter(#t110) in #t111 == null ?{core::int*} let final core::int* #t112 = 2 in let final void #t113 = self::Extension|set#simpleSetter(#t110, #t112) in #t112 : #t111);
+  let final self::Class* #t114 = c in #t114 == null ?{Null} null : #t114.{self::Class::field} = null;
+  let final self::Class* #t115 = c in #t115 == null ?{core::int*} null : self::Extension|get#simpleSetter(#t115) == null ?{core::int*} self::Extension|set#simpleSetter(#t115, 1) : null;
+  self::expect(1, let final self::Class* #t116 = c in #t116 == null ?{core::int*} null : #t116.{self::Class::field}{core::int*});
+  self::expect(1, let final self::Class* #t117 = c in #t117 == null ?{core::int*} null : let final core::int* #t118 = self::Extension|get#simpleSetter(#t117) in #t118 == null ?{core::int*} let final core::int* #t119 = 2 in let final void #t120 = self::Extension|set#simpleSetter(#t117, #t119) in #t119 : #t118);
+  let final self::Class* #t121 = c in #t121 == null ?{Null} null : #t121.{self::Class::field} = null;
+  self::expect(2, let final self::Class* #t122 = c in #t122 == null ?{core::int*} null : let final core::int* #t123 = self::Extension|get#simpleSetter(#t122) in #t123 == null ?{core::int*} let final core::int* #t124 = 2 in let final void #t125 = self::Extension|set#simpleSetter(#t122, #t124) in #t124 : #t123);
+  self::Extension|testInternal(new self::Class::•());
+  self::GenericClass<core::int*>* genericClass = new self::GenericClass::•<core::int*>();
+  self::expect(1, let final self::GenericClass<core::int*>* #t126 = genericClass in let final core::int* #t127 = 1 in let final void #t128 = self::GenericExtension|set#setter<core::int*>(#t126, #t127) in #t127);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.modular.expect
new file mode 100644
index 0000000..9811ed6
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/extension_setter_error.dart:13:41: Error: A value of type 'GenericClass<int>' can't be assigned to a variable of type 'GenericClass<double>'.
+//  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/extension_setter_error.dart'.
+//   expect(null, GenericExtension<double>(genericClass).setter = null);
+//                                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class GenericClass<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+  set setter = self::GenericExtension|set#setter;
+}
+static method GenericExtension|set#setter<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|set#setter::T*>* #this, self::GenericExtension|set#setter::T* value) → void {}
+static method error() → dynamic {
+  self::GenericClass<core::int*>* genericClass = new self::GenericClass::•<core::int*>();
+  self::expect(null, let final self::GenericClass<core::int*>* #t1 = invalid-expression "pkg/front_end/testcases/extensions/extension_setter_error.dart:13:41: Error: A value of type 'GenericClass<int>' can't be assigned to a variable of type 'GenericClass<double>'.
+ - 'GenericClass' is from 'pkg/front_end/testcases/extensions/extension_setter_error.dart'.
+  expect(null, GenericExtension<double>(genericClass).setter = null);
+                                        ^" in genericClass as{TypeError} self::GenericClass<core::double*>* in let final Null #t2 = null in let final void #t3 = self::GenericExtension|set#setter<core::double*>(#t1, #t2) in #t2);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/external.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/external.dart.weak.modular.expect
new file mode 100644
index 0000000..f9c3590
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/external.dart.weak.modular.expect
@@ -0,0 +1,84 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension Extension<T extends core::num> on core::List<T> {
+  get field = self::Extension|get#field;
+  set field = self::Extension|set#field;
+  static get staticField = get self::Extension|staticField;
+  static set staticField = set self::Extension|staticField;
+  get finalField = self::Extension|get#finalField;
+  static get staticFinalField = get self::Extension|staticFinalField;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  static method staticMethod = self::Extension|staticMethod;
+  get getter = self::Extension|get#getter;
+  static get staticGetter = get self::Extension|staticGetter;
+  get property = self::Extension|get#property;
+  static get staticProperty = get self::Extension|staticProperty;
+  get fieldSetter = self::Extension|get#fieldSetter;
+  static get staticFieldSetter = get self::Extension|staticFieldSetter;
+  set setter = self::Extension|set#setter;
+  static set staticSetter = set self::Extension|staticSetter;
+  set property = self::Extension|set#property;
+  static set staticProperty = set self::Extension|staticProperty;
+  set fieldSetter = self::Extension|set#fieldSetter;
+  static set staticFieldSetter = set self::Extension|staticFieldSetter;
+}
+external static method Extension|get#field<T extends core::num>(core::List<self::Extension|get#field::T> #this) → self::Extension|get#field::T;
+external static method Extension|set#field<T extends core::num>(core::List<self::Extension|set#field::T> #this, self::Extension|set#field::T #externalFieldValue) → void;
+external static get Extension|staticField() → core::int;
+external static set Extension|staticField(core::int #externalFieldValue) → void;
+external static method Extension|get#finalField<T extends core::num>(core::List<self::Extension|get#finalField::T> #this) → self::Extension|get#finalField::T;
+external static get Extension|staticFinalField() → core::int;
+external static method Extension|method<T extends core::num>(lowered final core::List<self::Extension|method::T> #this) → self::Extension|method::T;
+static method Extension|get#method<T extends core::num>(lowered final core::List<self::Extension|get#method::T> #this) → () → self::Extension|get#method::T
+  return () → self::Extension|get#method::T => self::Extension|method<self::Extension|get#method::T>(#this);
+external static method Extension|staticMethod() → core::int;
+external static method Extension|get#getter<T extends core::num>(lowered final core::List<self::Extension|get#getter::T> #this) → self::Extension|get#getter::T;
+external static get Extension|staticGetter() → core::int;
+external static method Extension|set#setter<T extends core::num>(lowered final core::List<self::Extension|set#setter::T> #this, self::Extension|set#setter::T value) → void;
+external static set Extension|staticSetter(core::int value) → void;
+external static method Extension|get#property<T extends core::num>(lowered final core::List<self::Extension|get#property::T> #this) → self::Extension|get#property::T;
+external static method Extension|set#property<T extends core::num>(lowered final core::List<self::Extension|set#property::T> #this, self::Extension|set#property::T value) → void;
+external static get Extension|staticProperty() → core::int;
+external static set Extension|staticProperty(core::int value) → void;
+external static method Extension|get#fieldSetter<T extends core::num>(core::List<self::Extension|get#fieldSetter::T> #this) → self::Extension|get#fieldSetter::T;
+external static method Extension|set#fieldSetter<T extends core::num>(lowered final core::List<self::Extension|set#fieldSetter::T> #this, self::Extension|set#fieldSetter::T value) → void;
+external static get Extension|staticFieldSetter() → core::int;
+external static set Extension|staticFieldSetter(core::int value) → void;
+static method test() → dynamic {
+  core::List<core::int> list = <core::int>[];
+  core::int value = self::Extension|get#field<core::int>(list);
+  self::Extension|set#field<core::int>(list, value);
+  value = self::Extension|get#finalField<core::int>(list);
+  value = self::Extension|method<core::int>(list);
+  value = self::Extension|get#getter<core::int>(list);
+  self::Extension|set#setter<core::int>(list, value);
+  value = self::Extension|get#property<core::int>(list);
+  self::Extension|set#property<core::int>(list, value);
+  value = self::Extension|get#fieldSetter<core::int>(list);
+  self::Extension|set#fieldSetter<core::int>(list, value);
+  core::List<core::int> iterable = list;
+  core::num n = self::Extension|get#field<core::num>(iterable);
+  self::Extension|set#field<core::num>(iterable, n);
+  n = self::Extension|get#finalField<core::num>(iterable);
+  n = self::Extension|method<core::num>(iterable);
+  n = self::Extension|get#getter<core::num>(iterable);
+  self::Extension|set#setter<core::num>(iterable, n);
+  n = self::Extension|get#property<core::num>(iterable);
+  self::Extension|set#property<core::num>(iterable, n);
+  n = self::Extension|get#fieldSetter<core::num>(iterable);
+  self::Extension|set#fieldSetter<core::num>(iterable, n);
+  value = self::Extension|staticField;
+  self::Extension|staticField = value;
+  value = self::Extension|staticFinalField;
+  value = self::Extension|staticMethod();
+  value = self::Extension|staticGetter;
+  self::Extension|staticSetter = value;
+  value = self::Extension|staticProperty;
+  self::Extension|staticProperty = value;
+  value = self::Extension|staticFieldSetter;
+  self::Extension|staticFieldSetter = value;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.modular.expect
new file mode 100644
index 0000000..47243334
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+}
+static method Extension|method<T extends core::Object* = dynamic, R extends core::Object* = dynamic>(lowered final self::Class<self::Extension|method::T*>* #this, self::Extension|method::T* t) → self::Extension|method::R*
+  return null;
+static method Extension|get#method<T extends core::Object* = dynamic>(lowered final self::Class<self::Extension|get#method::T*>* #this) → <R extends core::Object* = dynamic>(self::Extension|get#method::T*) →* R*
+  return <R extends core::Object* = dynamic>(self::Extension|get#method::T* t) → R* => self::Extension|method<self::Extension|get#method::T*, R*>(#this, t);
+static method main() → dynamic {
+  let final dynamic #t1 = self::Extension|method<core::int*, dynamic>(new self::Class::•<core::int*>(), 0) in #t1 == null ?{core::String*} null : #t1.{core::Object::toString}(){() →* core::String*};
+}
diff --git a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.modular.expect
new file mode 100644
index 0000000..6666d8f
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.modular.expect
@@ -0,0 +1,147 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:30:15: Error: The getter 'm2' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'm2'.
+//   expect(0, c.m2);
+//               ^^
+//
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:31:5: Error: The setter 'm1' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'm1'.
+//   c.m1 = 2;
+//     ^^
+//
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:32:5: Error: The property 'm3' is defined in multiple extensions for 'Class' and neither is more specific.
+//  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.m3;
+//     ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:13:12: Context: This is one of the extension members.
+//   void set m3(int x) {}
+//            ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:18:11: Context: This is one of the extension members.
+//   int get m3 => 0;
+//           ^^
+//
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:33:5: Error: The property 'm3' is defined in multiple extensions for 'Class' and neither is more specific.
+//  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.m3 = 2;
+//     ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:13:12: Context: This is one of the extension members.
+//   void set m3(int x) {}
+//            ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:18:11: Context: This is one of the extension members.
+//   int get m3 => 0;
+//           ^^
+//
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:34:5: Error: The property 'm4' is defined in multiple extensions for 'Class' and neither is more specific.
+//  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.m4;
+//     ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:14:11: Context: This is one of the extension members.
+//   int get m4 => 0;
+//           ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:19:12: Context: This is one of the extension members.
+//   void set m4(int x) {}
+//            ^^
+//
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:35:5: Error: The property 'm4' is defined in multiple extensions for 'Class' and neither is more specific.
+//  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.m4 = 2;
+//     ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:14:11: Context: This is one of the extension members.
+//   int get m4 => 0;
+//           ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:19:12: Context: This is one of the extension members.
+//   void set m4(int x) {}
+//            ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  get m1() → core::int*
+    return 0;
+  set m2(core::int* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension0 on self::Class* {
+  get m2 = self::Extension0|get#m2;
+  get m4 = self::Extension0|get#m4;
+  set m1 = self::Extension0|set#m1;
+  set m3 = self::Extension0|set#m3;
+}
+extension Extension1 on self::Class* {
+  get m3 = self::Extension1|get#m3;
+  set m4 = self::Extension1|set#m4;
+}
+static method Extension0|set#m1(lowered final self::Class* #this, core::int* x) → void {}
+static method Extension0|get#m2(lowered final self::Class* #this) → core::int*
+  return 0;
+static method Extension0|set#m3(lowered final self::Class* #this, core::int* x) → void {}
+static method Extension0|get#m4(lowered final self::Class* #this) → core::int*
+  return 0;
+static method Extension1|get#m3(lowered final self::Class* #this) → core::int*
+  return 0;
+static method Extension1|set#m4(lowered final self::Class* #this, core::int* x) → void {}
+static method main() → dynamic {
+  self::Class* c = new self::Class::•();
+  self::expect(0, c.{self::Class::m1}{core::int*});
+  c.{self::Class::m2} = 2;
+}
+static method errors() → dynamic {
+  self::Class* c = new self::Class::•();
+  self::expect(0, invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:30:15: Error: The getter 'm2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'm2'.
+  expect(0, c.m2);
+              ^^" in c{<unresolved>}.m2);
+  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:31:5: Error: The setter 'm1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'm1'.
+  c.m1 = 2;
+    ^^" in c{<unresolved>}.m1 = 2;
+  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:32:5: Error: The property 'm3' is defined in multiple extensions for 'Class' and neither is more specific.
+ - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.m3;
+    ^^" in c{<unresolved>}.m3;
+  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:33:5: Error: The property 'm3' is defined in multiple extensions for 'Class' and neither is more specific.
+ - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.m3 = 2;
+    ^^" in c{<unresolved>}.m3 = 2;
+  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:34:5: Error: The property 'm4' is defined in multiple extensions for 'Class' and neither is more specific.
+ - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.m4;
+    ^^" in c{<unresolved>}.m4;
+  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:35:5: Error: The property 'm4' is defined in multiple extensions for 'Class' and neither is more specific.
+ - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.m4 = 2;
+    ^^" in c{<unresolved>}.m4 = 2;
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/if_null.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/if_null.dart.weak.modular.expect
new file mode 100644
index 0000000..34aa9aa
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/if_null.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int* field = null;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on self::Class* {
+  get property = self::Extension|get#property;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  set property = self::Extension|set#property;
+}
+static method Extension|get#property(lowered final self::Class* #this) → core::int*
+  return #this.{self::Class::field}{core::int*};
+static method Extension|set#property(lowered final self::Class* #this, core::int* value) → void {
+  #this.{self::Class::field} = value;
+}
+static method Extension|method(lowered final self::Class* #this) → core::int*
+  return #this.{self::Class::field}{core::int*};
+static method Extension|get#method(lowered final self::Class* #this) → () →* core::int*
+  return () → core::int* => self::Extension|method(#this);
+static method main() → dynamic {
+  self::Class* c;
+  let final core::int* #t1 = let final self::Class* #t2 = c in #t2 == null ?{core::int*} null : self::Extension|get#property(#t2) in #t1 == null ?{core::int*} 0 : #t1;
+  let final core::int* #t3 = let final self::Class* #t4 = c in #t4 == null ?{core::int*} null : self::Extension|get#property(#t4) in #t3 == null ?{core::int*} 0 : #t3;
+  let final self::Class* #t5 = c in #t5 == null ?{core::int*} null : self::Extension|set#property(#t5, let final core::int* #t6 = 42 in #t6 == null ?{core::int*} 0 : #t6);
+  let final self::Class* #t7 = c in #t7 == null ?{core::int*} null : self::Extension|set#property(#t7, let final core::int* #t8 = 42 in #t8 == null ?{core::int*} 0 : #t8);
+  let final core::int* #t9 = let final self::Class* #t10 = c in #t10 == null ?{core::int*} null : let final core::int* #t11 = 42 in let final void #t12 = self::Extension|set#property(#t10, #t11) in #t11 in #t9 == null ?{core::int*} 0 : #t9;
+  let final core::int* #t13 = let final self::Class* #t14 = c in #t14 == null ?{core::int*} null : let final core::int* #t15 = 42 in let final void #t16 = self::Extension|set#property(#t14, #t15) in #t15 in #t13 == null ?{core::int*} 0 : #t13;
+  let final core::int* #t17 = let final self::Class* #t18 = c in #t18 == null ?{core::int*} null : self::Extension|method(#t18) in #t17 == null ?{core::int*} 0 : #t17;
+  let final core::int* #t19 = let final self::Class* #t20 = c in #t20 == null ?{core::int*} null : self::Extension|method(#t20) in #t19 == null ?{core::int*} 0 : #t19;
+  c = new self::Class::•();
+  let final core::int* #t21 = self::Extension|get#property(c) in #t21 == null ?{core::int*} 0 : #t21;
+  let final core::int* #t22 = self::Extension|get#property(c) in #t22 == null ?{core::int*} 0 : #t22;
+}
diff --git a/pkg/front_end/testcases/extensions/implicit_extension_inference.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/implicit_extension_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..68819f0
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/implicit_extension_inference.dart.weak.modular.expect
@@ -0,0 +1,86 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class GenericClass<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+  get property = self::GenericExtension|get#property;
+  method method = self::GenericExtension|method;
+  tearoff method = self::GenericExtension|get#method;
+  method genericMethod1 = self::GenericExtension|genericMethod1;
+  tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
+}
+static method GenericExtension|get#property<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
+  return null;
+static method GenericExtension|method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|method::T*>* #this, self::GenericExtension|method::T* t) → self::GenericExtension|method::T*
+  return null;
+static method GenericExtension|get#method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → (self::GenericExtension|get#method::T*) →* self::GenericExtension|get#method::T*
+  return (self::GenericExtension|get#method::T* t) → self::GenericExtension|get#method::T* => self::GenericExtension|method<self::GenericExtension|get#method::T*>(#this, t);
+static method GenericExtension|genericMethod1<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericMethod1::T*>* #this, self::GenericExtension|genericMethod1::S* s) → self::GenericExtension|genericMethod1::S*
+  return null;
+static method GenericExtension|get#genericMethod1<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericMethod1::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* S*
+  return <S extends core::Object* = dynamic>(S* s) → S* => self::GenericExtension|genericMethod1<self::GenericExtension|get#genericMethod1::T*, S*>(#this, s);
+static method main() → dynamic {
+  self::A* aVariable;
+  self::C* cVariable;
+  self::GenericClass<self::A*>* aClass;
+  self::GenericClass<self::B*>* bClass;
+  self::GenericClass<self::C*>* cClass;
+  cVariable = self::GenericExtension|get#property<self::A*>(aClass) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|get#property<self::B*>(bClass) as{TypeError} self::C*;
+  aVariable = self::GenericExtension|get#property<self::C*>(cClass);
+  cVariable = self::GenericExtension|method<self::A*>(aClass, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|method<self::B*>(bClass, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  aVariable = self::GenericExtension|method<self::C*>(cClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::C*>(aClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::A*>(aClass, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::B*>(aClass, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::A*, self::C*>(aClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::C*>(bClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::A*>(bClass, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::B*>(bClass, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::B*, self::C*>(bClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::C*>(cClass, aVariable as{TypeError} self::C*);
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::A*>(cClass, aVariable) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::B*>(cClass, aVariable as{TypeError} self::B*) as{TypeError} self::C*;
+  cVariable = self::GenericExtension|genericMethod1<self::C*, self::C*>(cClass, aVariable as{TypeError} self::C*);
+}
diff --git a/pkg/front_end/testcases/extensions/implicit_this.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/implicit_this.dart.weak.modular.expect
new file mode 100644
index 0000000..9328ef6
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/implicit_this.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  field core::Object* field = null;
+  synthetic constructor •() → self::A1*
+    : super core::Object::•()
+    ;
+  method method1() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension A2 on self::A1* {
+  method method2 = self::A2|method2;
+  tearoff method2 = self::A2|get#method2;
+  method method3 = self::A2|method3;
+  tearoff method3 = self::A2|get#method3;
+  method method4 = self::A2|method4;
+  tearoff method4 = self::A2|get#method4;
+}
+static method A2|method2(lowered final self::A1* #this) → void
+  return #this.{self::A1::method1}(){() →* void};
+static method A2|get#method2(lowered final self::A1* #this) → () →* void
+  return () → void => self::A2|method2(#this);
+static method A2|method3(lowered final self::A1* #this) → core::Object*
+  return #this.{self::A1::field}{core::Object*};
+static method A2|get#method3(lowered final self::A1* #this) → () →* core::Object*
+  return () → core::Object* => self::A2|method3(#this);
+static method A2|method4(lowered final self::A1* #this, core::Object* o) → void {
+  #this.{self::A1::field} = o;
+}
+static method A2|get#method4(lowered final self::A1* #this) → (core::Object*) →* void
+  return (core::Object* o) → void => self::A2|method4(#this, o);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.modular.expect
new file mode 100644
index 0000000..216ab75
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library;
+import self as self;
+import "main_lib1.dart" as mai;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+
+static method main() → dynamic {
+  mai::Extension|set#instanceProperty(0, mai::Extension|get#instanceProperty(1));
+  mai::Extension|instanceMethod(2);
+  mai::Extension|get#instanceMethod(3);
+  mai::Extension|staticField = #C1;
+  mai::Extension|set#instanceProperty(3, mai::Extension|staticFinalField);
+  mai::Extension|staticProperty = mai::Extension|staticProperty;
+  mai::Extension|staticMethod();
+  #C2;
+}
+
+constants  {
+  #C1 = 42
+  #C2 = static-tearoff mai::Extension|staticMethod
+}
diff --git a/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.modular.expect
new file mode 100644
index 0000000..0b2f376
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "import_via_prefix_lib.dart" as imp;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///import_via_prefix_lib.dart" as prefix;
+
+static method main() → dynamic {
+  self::expect(3, imp::Extension|method("foo"));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+library;
+import self as imp;
+import "dart:core" as core;
+
+extension Extension on core::String* {
+  method method = imp::Extension|method;
+  tearoff method = imp::Extension|get#method;
+}
+static method Extension|method(lowered final core::String* #this) → core::int*
+  return #this.{core::String::length}{core::int*};
+static method Extension|get#method(lowered final core::String* #this) → () →* core::int*
+  return () → core::int* => imp::Extension|method(#this);
diff --git a/pkg/front_end/testcases/extensions/index.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/index.dart.weak.modular.expect
new file mode 100644
index 0000000..e91fc4b
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/index.dart.weak.modular.expect
@@ -0,0 +1,123 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class MapLike<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object {
+  final field core::Map<self::MapLike::K*, self::MapLike::V*>* _map = <self::MapLike::K*, self::MapLike::V*>{};
+  synthetic constructor •() → self::MapLike<self::MapLike::K*, self::MapLike::V*>*
+    : super core::Object::•()
+    ;
+  method get(core::Object* key) → self::MapLike::V*
+    return this.{self::MapLike::_map}{core::Map<self::MapLike::K*, self::MapLike::V*>*}.{core::Map::[]}(key){(core::Object*) →* self::MapLike::V*};
+  method put(covariant-by-class self::MapLike::K* key, covariant-by-class self::MapLike::V* value) → self::MapLike::V*
+    return let final core::Map<self::MapLike::K*, self::MapLike::V*>* #t1 = this.{self::MapLike::_map}{core::Map<self::MapLike::K*, self::MapLike::V*>*} in let final self::MapLike::K* #t2 = key in let final self::MapLike::V* #t3 = value in let final void #t4 = #t1.{core::Map::[]=}(#t2, #t3){(self::MapLike::K*, self::MapLike::V*) →* void} in #t3;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension<K extends core::Object* = dynamic, V extends core::Object* = dynamic> on self::MapLike<K*, V*>* {
+  operator [] = self::Extension|[];
+  operator []= = self::Extension|[]=;
+}
+static method Extension|[]<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(lowered final self::MapLike<self::Extension|[]::K*, self::Extension|[]::V*>* #this, core::Object* key) → self::Extension|[]::V*
+  return #this.{self::MapLike::get}(key){(core::Object*) →* self::Extension|[]::V*};
+static method Extension|[]=<K extends core::Object* = dynamic, V extends core::Object* = dynamic>(lowered final self::MapLike<self::Extension|[]=::K*, self::Extension|[]=::V*>* #this, self::Extension|[]=::K* key, self::Extension|[]=::V* value) → void
+  return #this.{self::MapLike::put}(key, value){(self::Extension|[]=::K*, self::Extension|[]=::V*) →* self::Extension|[]=::V*};
+static method main() → dynamic {
+  self::implicit();
+  self::explicitWithTypeArguments();
+  self::explicitInferredTypeArguments();
+}
+static method implicit() → dynamic {
+  self::MapLike<core::int*, core::String*>* map1 = new self::MapLike::•<core::int*, core::String*>();
+  self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 0));
+  map1.{self::MapLike::put}(0, "0"){(core::int*, core::String*) →* core::String*};
+  self::expect("0", self::Extension|[]<core::int*, core::String*>(map1, 0));
+  self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 1));
+  self::Extension|[]=<core::int*, core::String*>(map1, 1, "1");
+  self::expect("1", self::Extension|[]<core::int*, core::String*>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t5 = map1 in let final core::int* #t6 = 1 in let final core::String* #t7 = "2" in let final void #t8 = self::Extension|[]=<core::int*, core::String*>(#t5, #t6, #t7) in #t7);
+  self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
+  let final self::MapLike<core::int*, core::String*>* #t9 = map1 in let final core::int* #t10 = 1 in self::Extension|[]<core::int*, core::String*>(#t9, #t10) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t9, #t10, "3") : null;
+  self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t11 = map1 in let final core::int* #t12 = 1 in let final core::String* #t13 = self::Extension|[]<core::int*, core::String*>(#t11, #t12) in #t13 == null ?{core::String*} let final core::String* #t14 = "4" in let final void #t15 = self::Extension|[]=<core::int*, core::String*>(#t11, #t12, #t14) in #t14 : #t13);
+  self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
+  let final self::MapLike<core::int*, core::String*>* #t16 = map1 in let final core::int* #t17 = 2 in self::Extension|[]<core::int*, core::String*>(#t16, #t17) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t16, #t17, "2") : null;
+  self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 2));
+  self::expect("3", let final self::MapLike<core::int*, core::String*>* #t18 = map1 in let final core::int* #t19 = 3 in let final core::String* #t20 = self::Extension|[]<core::int*, core::String*>(#t18, #t19) in #t20 == null ?{core::String*} let final core::String* #t21 = "3" in let final void #t22 = self::Extension|[]=<core::int*, core::String*>(#t18, #t19, #t21) in #t21 : #t20);
+  self::expect("3", self::Extension|[]<core::int*, core::String*>(map1, 3));
+  self::MapLike<core::int*, core::int*>* map2 = new self::MapLike::•<core::int*, core::int*>();
+  self::expect(1, let final self::MapLike<core::int*, core::int*>* #t23 = map2 in let final core::int* #t24 = 0 in let final core::int* #t25 = 1 in let final void #t26 = self::Extension|[]=<core::int*, core::int*>(#t23, #t24, #t25) in #t25);
+  self::expect(3, let final self::MapLike<core::int*, core::int*>* #t27 = map2 in let final core::int* #t28 = 0 in let final core::int* #t29 = self::Extension|[]<core::int*, core::int*>(#t27, #t28).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t30 = self::Extension|[]=<core::int*, core::int*>(#t27, #t28, #t29) in #t29);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t31 = map2 in let final core::int* #t32 = 0 in let final core::int* #t33 = self::Extension|[]<core::int*, core::int*>(#t31, #t32).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t34 = self::Extension|[]=<core::int*, core::int*>(#t31, #t32, #t33) in #t33);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t35 = map2 in let final core::int* #t36 = 0 in let final core::int* #t37 = self::Extension|[]<core::int*, core::int*>(#t35, #t36) in let final void #t38 = self::Extension|[]=<core::int*, core::int*>(#t35, #t36, #t37.{core::num::+}(1){(core::num*) →* core::int*}) in #t37);
+  self::expect(6, self::Extension|[]<core::int*, core::int*>(map2, 0));
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t39 = map2 in let final core::int* #t40 = 0 in let final core::int* #t41 = self::Extension|[]<core::int*, core::int*>(#t39, #t40).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t42 = self::Extension|[]=<core::int*, core::int*>(#t39, #t40, #t41) in #t41);
+  self::expect(5, self::Extension|[]<core::int*, core::int*>(map2, 0));
+}
+static method explicitWithTypeArguments() → dynamic {
+  self::MapLike<core::int*, core::String*>* map1 = new self::MapLike::•<core::int*, core::String*>();
+  self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 0));
+  map1.{self::MapLike::put}(0, "0"){(core::int*, core::String*) →* core::String*};
+  self::expect("0", self::Extension|[]<core::int*, core::String*>(map1, 0));
+  self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 1));
+  self::Extension|[]=<core::int*, core::String*>(map1, 1, "1");
+  self::expect("1", self::Extension|[]<core::int*, core::String*>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t43 = map1 in let final core::String* #t44 = "2" in let final void #t45 = self::Extension|[]=<core::int*, core::String*>(#t43, 1, #t44) in #t44);
+  self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
+  let final self::MapLike<core::int*, core::String*>* #t46 = map1 in let final core::int* #t47 = 1 in self::Extension|[]<core::int*, core::String*>(#t46, #t47) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t46, #t47, "3") : null;
+  self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t48 = map1 in let final core::int* #t49 = 1 in let final core::String* #t50 = self::Extension|[]<core::int*, core::String*>(#t48, #t49) in #t50 == null ?{core::String*} let final core::String* #t51 = "4" in let final void #t52 = self::Extension|[]=<core::int*, core::String*>(#t48, #t49, #t51) in #t51 : #t50);
+  self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
+  let final self::MapLike<core::int*, core::String*>* #t53 = map1 in let final core::int* #t54 = 2 in self::Extension|[]<core::int*, core::String*>(#t53, #t54) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t53, #t54, "2") : null;
+  self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 2));
+  self::expect("3", let final self::MapLike<core::int*, core::String*>* #t55 = map1 in let final core::int* #t56 = 3 in let final core::String* #t57 = self::Extension|[]<core::int*, core::String*>(#t55, #t56) in #t57 == null ?{core::String*} let final core::String* #t58 = "3" in let final void #t59 = self::Extension|[]=<core::int*, core::String*>(#t55, #t56, #t58) in #t58 : #t57);
+  self::expect("3", self::Extension|[]<core::int*, core::String*>(map1, 3));
+  self::MapLike<core::int*, core::int*>* map2 = new self::MapLike::•<core::int*, core::int*>();
+  self::expect(1, let final self::MapLike<core::int*, core::int*>* #t60 = map2 in let final core::int* #t61 = 1 in let final void #t62 = self::Extension|[]=<core::int*, core::int*>(#t60, 0, #t61) in #t61);
+  self::expect(3, let final self::MapLike<core::int*, core::int*>* #t63 = map2 in let final core::int* #t64 = 0 in let final core::int* #t65 = self::Extension|[]<core::int*, core::int*>(#t63, #t64).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t66 = self::Extension|[]=<core::int*, core::int*>(#t63, #t64, #t65) in #t65);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t67 = map2 in let final core::int* #t68 = 0 in let final core::int* #t69 = self::Extension|[]<core::int*, core::int*>(#t67, #t68).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t70 = self::Extension|[]=<core::int*, core::int*>(#t67, #t68, #t69) in #t69);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t71 = map2 in let final core::int* #t72 = 0 in let final core::int* #t73 = self::Extension|[]<core::int*, core::int*>(#t71, #t72) in let final void #t74 = self::Extension|[]=<core::int*, core::int*>(#t71, #t72, #t73.{core::num::+}(1){(core::num*) →* core::int*}) in #t73);
+  self::expect(6, self::Extension|[]<core::int*, core::int*>(map2, 0));
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t75 = map2 in let final core::int* #t76 = 0 in let final core::int* #t77 = self::Extension|[]<core::int*, core::int*>(#t75, #t76).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t78 = self::Extension|[]=<core::int*, core::int*>(#t75, #t76, #t77) in #t77);
+  self::expect(5, self::Extension|[]<core::int*, core::int*>(map2, 0));
+}
+static method explicitInferredTypeArguments() → dynamic {
+  self::MapLike<core::int*, core::String*>* map1 = new self::MapLike::•<core::int*, core::String*>();
+  self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 0));
+  map1.{self::MapLike::put}(0, "0"){(core::int*, core::String*) →* core::String*};
+  self::expect("0", self::Extension|[]<core::int*, core::String*>(map1, 0));
+  self::expect(null, self::Extension|[]<core::int*, core::String*>(map1, 1));
+  self::Extension|[]=<core::int*, core::String*>(map1, 1, "1");
+  self::expect("1", self::Extension|[]<core::int*, core::String*>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t79 = map1 in let final core::String* #t80 = "2" in let final void #t81 = self::Extension|[]=<core::int*, core::String*>(#t79, 1, #t80) in #t80);
+  self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
+  let final self::MapLike<core::int*, core::String*>* #t82 = map1 in let final core::int* #t83 = 1 in self::Extension|[]<core::int*, core::String*>(#t82, #t83) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t82, #t83, "3") : null;
+  self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int*, core::String*>* #t84 = map1 in let final core::int* #t85 = 1 in let final core::String* #t86 = self::Extension|[]<core::int*, core::String*>(#t84, #t85) in #t86 == null ?{core::String*} let final core::String* #t87 = "4" in let final void #t88 = self::Extension|[]=<core::int*, core::String*>(#t84, #t85, #t87) in #t87 : #t86);
+  self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 1));
+  let final self::MapLike<core::int*, core::String*>* #t89 = map1 in let final core::int* #t90 = 2 in self::Extension|[]<core::int*, core::String*>(#t89, #t90) == null ?{core::String*} self::Extension|[]=<core::int*, core::String*>(#t89, #t90, "2") : null;
+  self::expect("2", self::Extension|[]<core::int*, core::String*>(map1, 2));
+  self::expect("3", let final self::MapLike<core::int*, core::String*>* #t91 = map1 in let final core::int* #t92 = 3 in let final core::String* #t93 = self::Extension|[]<core::int*, core::String*>(#t91, #t92) in #t93 == null ?{core::String*} let final core::String* #t94 = "3" in let final void #t95 = self::Extension|[]=<core::int*, core::String*>(#t91, #t92, #t94) in #t94 : #t93);
+  self::expect("3", self::Extension|[]<core::int*, core::String*>(map1, 3));
+  self::MapLike<core::int*, core::int*>* map2 = new self::MapLike::•<core::int*, core::int*>();
+  self::expect(1, let final self::MapLike<core::int*, core::int*>* #t96 = map2 in let final core::int* #t97 = 1 in let final void #t98 = self::Extension|[]=<core::int*, core::int*>(#t96, 0, #t97) in #t97);
+  self::expect(3, let final self::MapLike<core::int*, core::int*>* #t99 = map2 in let final core::int* #t100 = 0 in let final core::int* #t101 = self::Extension|[]<core::int*, core::int*>(#t99, #t100).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t102 = self::Extension|[]=<core::int*, core::int*>(#t99, #t100, #t101) in #t101);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t103 = map2 in let final core::int* #t104 = 0 in let final core::int* #t105 = self::Extension|[]<core::int*, core::int*>(#t103, #t104).{core::num::+}(2){(core::num*) →* core::int*} in let final void #t106 = self::Extension|[]=<core::int*, core::int*>(#t103, #t104, #t105) in #t105);
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t107 = map2 in let final core::int* #t108 = 0 in let final core::int* #t109 = self::Extension|[]<core::int*, core::int*>(#t107, #t108) in let final void #t110 = self::Extension|[]=<core::int*, core::int*>(#t107, #t108, #t109.{core::num::+}(1){(core::num*) →* core::int*}) in #t109);
+  self::expect(6, self::Extension|[]<core::int*, core::int*>(map2, 0));
+  self::expect(5, let final self::MapLike<core::int*, core::int*>* #t111 = map2 in let final core::int* #t112 = 0 in let final core::int* #t113 = self::Extension|[]<core::int*, core::int*>(#t111, #t112).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t114 = self::Extension|[]=<core::int*, core::int*>(#t111, #t112, #t113) in #t113);
+  self::expect(5, self::Extension|[]<core::int*, core::int*>(map2, 0));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/instance_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/instance_access.dart.weak.modular.expect
new file mode 100644
index 0000000..215028e
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/instance_access.dart.weak.modular.expect
@@ -0,0 +1,147 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  field core::int* field;
+  constructor •(core::int* field) → self::Class1*
+    : self::Class1::field = field, super core::Object::•()
+    ;
+  method toString() → core::String*
+    return "Class1(${this.{self::Class1::field}{core::int*}})";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class2 extends core::Object {
+  field core::int* field;
+  constructor •(core::int* field) → self::Class2*
+    : self::Class2::field = field, super core::Object::•()
+    ;
+  method toString() → core::String*
+    return "Class2(${this.{self::Class2::field}{core::int*}})";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension1 on self::Class1* {
+  method method = self::Extension1|method;
+  tearoff method = self::Extension1|get#method;
+  method genericMethod = self::Extension1|genericMethod;
+  tearoff genericMethod = self::Extension1|get#genericMethod;
+  get property = self::Extension1|get#property;
+  set property = self::Extension1|set#property;
+}
+extension Extension2 on self::Class2* {
+  method method = self::Extension2|method;
+  tearoff method = self::Extension2|get#method;
+  method genericMethod = self::Extension2|genericMethod;
+  tearoff genericMethod = self::Extension2|get#genericMethod;
+  get property = self::Extension2|get#property;
+  set property = self::Extension2|set#property;
+}
+static method Extension1|method(lowered final self::Class1* #this) → core::int* {
+  core::print("Extension1.method on ${#this}");
+  return #this.{self::Class1::field}{core::int*};
+}
+static method Extension1|get#method(lowered final self::Class1* #this) → () →* core::int*
+  return () → core::int* => self::Extension1|method(#this);
+static method Extension1|genericMethod<T extends core::num*>(lowered final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int* {
+  core::print("Extension1.genericMethod<${self::Extension1|genericMethod::T*}>(${t}) on ${#this}");
+  return #this.{self::Class1::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
+}
+static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
+  return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
+static method Extension1|get#property(lowered final self::Class1* #this) → core::int* {
+  core::print("Extension1.property get on ${#this}");
+  return #this.{self::Class1::field}{core::int*};
+}
+static method Extension1|set#property(lowered final self::Class1* #this, core::int* value) → void {
+  #this.{self::Class1::field} = value;
+  core::print("Extension1.property set(${value}) on ${#this}");
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
+}
+static method Extension2|method(lowered final self::Class2* #this) → core::int* {
+  core::print("Extension2.method on ${#this}");
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*};
+}
+static method Extension2|get#method(lowered final self::Class2* #this) → () →* core::int*
+  return () → core::int* => self::Extension2|method(#this);
+static method Extension2|genericMethod<T extends core::num*>(lowered final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int* {
+  core::print("Extension2.genericMethod<${self::Extension2|genericMethod::T*}>(${t}) on ${#this}");
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(4){(core::num*) →* core::num*} as{TypeError} core::int*;
+}
+static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
+  return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
+static method Extension2|get#property(lowered final self::Class2* #this) → core::int* {
+  core::print("Extension2.property get on ${#this}");
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(5){(core::num*) →* core::int*};
+}
+static method Extension2|set#property(lowered final self::Class2* #this, core::int* value) → void {
+  core::print("Extension2.property set(${value}) on ${#this}");
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
+  #this.{self::Class2::field} = value;
+}
+static method main() → dynamic {
+  self::testExtension1();
+  self::testExtension2();
+}
+static method testExtension1() → dynamic {
+  self::Class1* c0 = new self::Class1::•(0);
+  self::Class1* c1 = new self::Class1::•(1);
+  self::expect(0, self::Extension1|method(c0));
+  self::expect(1, self::Extension1|method(c1));
+  self::expect(1, let final self::Class1* #t1 = c1 in #t1 == null ?{core::int*} null : self::Extension1|method(#t1));
+  self::expect(42, self::Extension1|genericMethod<core::int*>(c0, 42));
+  self::expect(43, self::Extension1|genericMethod<core::num*>(c0, 43));
+  self::expect(88, self::Extension1|genericMethod<core::int*>(c1, 87));
+  self::expect(89, self::Extension1|genericMethod<core::num*>(c1, 88));
+  self::expect(0, self::Extension1|get#property(c0));
+  self::expect(0, let final self::Class1* #t2 = c0 in #t2 == null ?{core::int*} null : self::Extension1|get#property(#t2));
+  self::expect(42, let final core::int* #t3 = 42 in let final void #t4 = self::Extension1|set#property(c0, #t3) in #t3);
+  self::expect(1, self::Extension1|get#property(c1));
+  self::expect(87, let final core::int* #t5 = 87 in let final void #t6 = self::Extension1|set#property(c0, #t5) in #t5);
+  self::expect(27, let final core::int* #t7 = let final core::int* #t8 = 27 in let final void #t9 = self::Extension1|set#property(c1, #t8) in #t8 in let final void #t10 = self::Extension1|set#property(c0, #t7) in #t7);
+  self::expect(37, let final core::int* #t11 = let final core::int* #t12 = 37 in let final void #t13 = self::Extension1|set#property(c0, #t12) in #t12 in let final void #t14 = self::Extension1|set#property(c1, #t11) in #t11);
+  self::expect(77, let final core::int* #t15 = let final core::int* #t16 = let final core::int* #t17 = 77 in let final void #t18 = self::Extension1|set#property(c1, #t17) in #t17 in let final void #t19 = self::Extension1|set#property(c0, #t16) in #t16 in let final void #t20 = self::Extension1|set#property(c1, #t15) in #t15);
+  self::expect(67, let final core::int* #t21 = let final core::int* #t22 = let final core::int* #t23 = 67 in let final void #t24 = self::Extension1|set#property(c0, #t23) in #t23 in let final void #t25 = self::Extension1|set#property(c1, #t22) in #t22 in let final void #t26 = self::Extension1|set#property(c0, #t21) in #t21);
+}
+static method testExtension2() → dynamic {
+  self::Class2* c0 = new self::Class2::•(0);
+  self::Class2* c1 = new self::Class2::•(1);
+  self::expect(3, self::Extension2|method(c0));
+  self::expect(3, let final self::Class2* #t27 = c0 in #t27 == null ?{core::int*} null : self::Extension2|method(#t27));
+  self::expect(4, self::Extension2|method(c1));
+  self::expect(46, self::Extension2|genericMethod<core::int*>(c0, 42));
+  self::expect(47, self::Extension2|genericMethod<core::num*>(c0, 43));
+  self::expect(92, self::Extension2|genericMethod<core::int*>(c1, 87));
+  self::expect(93, self::Extension2|genericMethod<core::num*>(c1, 88));
+  self::expect(5, self::Extension2|get#property(c0));
+  self::expect(5, let final self::Class2* #t28 = c0 in #t28 == null ?{core::int*} null : self::Extension2|get#property(#t28));
+  self::expect(42, let final core::int* #t29 = 42 in let final void #t30 = self::Extension2|set#property(c0, #t29) in #t29);
+  self::expect(48, self::Extension2|get#property(c0));
+  self::expect(6, self::Extension2|get#property(c1));
+  self::expect(43, let final core::int* #t31 = 43 in let final void #t32 = self::Extension2|set#property(c1, #t31) in #t31);
+  self::expect(49, self::Extension2|get#property(c1));
+  self::expect(49, let final core::int* #t33 = self::Extension2|get#property(c1) in let final void #t34 = self::Extension2|set#property(c0, #t33) in #t33);
+  self::expect(55, let final core::int* #t35 = self::Extension2|get#property(c0) in let final void #t36 = self::Extension2|set#property(c1, #t35) in #t35);
+  self::expect(61, let final core::int* #t37 = let final core::int* #t38 = self::Extension2|get#property(c1) in let final void #t39 = self::Extension2|set#property(c0, #t38) in #t38 in let final void #t40 = self::Extension2|set#property(c1, #t37) in #t37);
+  self::expect(67, let final core::int* #t41 = let final core::int* #t42 = self::Extension2|get#property(c0) in let final void #t43 = self::Extension2|set#property(c1, #t42) in #t42 in let final void #t44 = self::Extension2|set#property(c0, #t41) in #t41);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.modular.expect
new file mode 100644
index 0000000..1dadbb1
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.modular.expect
@@ -0,0 +1,108 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:26:5: Error: The method 'staticMethod' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'staticMethod'.
+//   c.staticMethod();
+//     ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:27:5: Error: The getter 'staticMethod' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticMethod'.
+//   c.staticMethod;
+//     ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:28:5: Error: The getter 'staticProperty' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticProperty'.
+//   c.staticProperty;
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:29:5: Error: The setter 'staticProperty' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticProperty'.
+//   c.staticProperty = 42;
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:30:5: Error: The getter 'staticField' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticField'.
+//   c.staticField;
+//     ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:31:5: Error: The setter 'staticField' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticField'.
+//   c.staticField = 42;
+//     ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension1 on self::Class1* {
+  static method staticMethod = self::Extension1|staticMethod;
+  static get staticProperty = get self::Extension1|staticProperty;
+  static field staticField = self::Extension1|staticField;
+  static set staticProperty = set self::Extension1|staticProperty;
+}
+static field core::int* Extension1|staticField = 42;
+static method Extension1|staticMethod() → dynamic {
+  core::print("Extension1.staticMethod()");
+}
+static get Extension1|staticProperty() → dynamic {
+  core::print("Extension1.staticProperty()");
+}
+static set Extension1|staticProperty(core::int* value) → void {
+  core::print("Extension1.staticProperty(${value})");
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
+}
+static method main() → dynamic {
+  self::Class1* c = new self::Class1::•();
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:26:5: Error: The method 'staticMethod' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'staticMethod'.
+  c.staticMethod();
+    ^^^^^^^^^^^^" in c{<unresolved>}.staticMethod();
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:27:5: Error: The getter 'staticMethod' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticMethod'.
+  c.staticMethod;
+    ^^^^^^^^^^^^" in c{<unresolved>}.staticMethod;
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:28:5: Error: The getter 'staticProperty' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticProperty'.
+  c.staticProperty;
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.staticProperty;
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:29:5: Error: The setter 'staticProperty' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticProperty'.
+  c.staticProperty = 42;
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.staticProperty = 42;
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:30:5: Error: The getter 'staticField' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticField'.
+  c.staticField;
+    ^^^^^^^^^^^" in c{<unresolved>}.staticField;
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:31:5: Error: The setter 'staticField' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticField'.
+  c.staticField = 42;
+    ^^^^^^^^^^^" in c{<unresolved>}.staticField = 42;
+}
diff --git a/pkg/front_end/testcases/extensions/instance_members.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/instance_members.dart.weak.modular.expect
new file mode 100644
index 0000000..d189b6d
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/instance_members.dart.weak.modular.expect
@@ -0,0 +1,89 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  synthetic constructor •() → self::A1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B1<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B1<self::B1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension A2 on self::A1* {
+  method method1 = self::A2|method1;
+  tearoff method1 = self::A2|get#method1;
+  method method2 = self::A2|method2;
+  tearoff method2 = self::A2|get#method2;
+  method method3 = self::A2|method3;
+  tearoff method3 = self::A2|get#method3;
+  method method4 = self::A2|method4;
+  tearoff method4 = self::A2|get#method4;
+}
+extension B2<T extends core::Object* = dynamic> on self::B1<T*>* {
+  method method1 = self::B2|method1;
+  tearoff method1 = self::B2|get#method1;
+  method method2 = self::B2|method2;
+  tearoff method2 = self::B2|get#method2;
+}
+static method A2|method1(lowered final self::A1* #this) → self::A1* {
+  return #this;
+}
+static method A2|get#method1(lowered final self::A1* #this) → () →* self::A1*
+  return () → self::A1* => self::A2|method1(#this);
+static method A2|method2<T extends core::Object* = dynamic>(lowered final self::A1* #this, self::A2|method2::T* o) → self::A1* {
+  core::print(o);
+  return #this;
+}
+static method A2|get#method2(lowered final self::A1* #this) → <T extends core::Object* = dynamic>(T*) →* self::A1*
+  return <T extends core::Object* = dynamic>(T* o) → self::A1* => self::A2|method2<T*>(#this, o);
+static method A2|method3<T extends core::Object* = dynamic>(lowered final self::A1* #this, [self::A2|method3::T* o = #C1]) → self::A1* {
+  core::print(o);
+  return #this;
+}
+static method A2|get#method3(lowered final self::A1* #this) → <T extends core::Object* = dynamic>([T*]) →* self::A1*
+  return <T extends core::Object* = dynamic>([T* o = #C1]) → self::A1* => self::A2|method3<T*>(#this, o);
+static method A2|method4<T extends core::Object* = dynamic>(lowered final self::A1* #this, {self::A2|method4::T* o = #C1}) → self::A1* {
+  core::print(o);
+  return #this;
+}
+static method A2|get#method4(lowered final self::A1* #this) → <T extends core::Object* = dynamic>({o: T*}) →* self::A1*
+  return <T extends core::Object* = dynamic>({T* o = #C1}) → self::A1* => self::A2|method4<T*>(#this, o: o);
+static method B2|method1<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>* {
+  return #this;
+}
+static method B2|get#method1<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|get#method1::T*>* #this) → () →* self::B1<self::B2|get#method1::T*>*
+  return () → self::B1<self::B2|get#method1::T*>* => self::B2|method1<self::B2|get#method1::T*>(#this);
+static method B2|method2<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::T*>* {
+  core::print(o);
+  return #this;
+}
+static method B2|get#method2<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|get#method2::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* self::B1<self::B2|get#method2::T*>*
+  return <S extends core::Object* = dynamic>(S* o) → self::B1<self::B2|get#method2::T*>* => self::B2|method2<self::B2|get#method2::T*, S*>(#this, o);
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.modular.expect
new file mode 100644
index 0000000..1240994
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.modular.expect
@@ -0,0 +1,119 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  field core::int* field;
+  constructor •(core::int* field) → self::Class1*
+    : self::Class1::field = field, super core::Object::•()
+    ;
+  method toString() → core::String*
+    return "Class1(${this.{self::Class1::field}{core::int*}})";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class2 extends core::Object {
+  field core::int* field;
+  constructor •(core::int* field) → self::Class2*
+    : self::Class2::field = field, super core::Object::•()
+    ;
+  method toString() → core::String*
+    return "Class2(${this.{self::Class2::field}{core::int*}})";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension1 on self::Class1* {
+  method method = self::Extension1|method;
+  tearoff method = self::Extension1|get#method;
+  method genericMethod = self::Extension1|genericMethod;
+  tearoff genericMethod = self::Extension1|get#genericMethod;
+}
+extension Extension2 on self::Class2* {
+  method method = self::Extension2|method;
+  tearoff method = self::Extension2|get#method;
+  method genericMethod = self::Extension2|genericMethod;
+  tearoff genericMethod = self::Extension2|get#genericMethod;
+}
+static method Extension1|method(lowered final self::Class1* #this) → core::int* {
+  core::print("Extension1.method on ${#this}");
+  return #this.{self::Class1::field}{core::int*};
+}
+static method Extension1|get#method(lowered final self::Class1* #this) → () →* core::int*
+  return () → core::int* => self::Extension1|method(#this);
+static method Extension1|genericMethod<T extends core::num*>(lowered final self::Class1* #this, self::Extension1|genericMethod::T* t) → core::int* {
+  core::print("Extension1.genericMethod<${self::Extension1|genericMethod::T*}>(${t}) on ${#this}");
+  return #this.{self::Class1::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
+}
+static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
+  return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
+static method Extension2|method(lowered final self::Class2* #this) → core::int* {
+  core::print("Extension2.method on ${#this}");
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(2){(core::num*) →* core::int*};
+}
+static method Extension2|get#method(lowered final self::Class2* #this) → () →* core::int*
+  return () → core::int* => self::Extension2|method(#this);
+static method Extension2|genericMethod<T extends core::num*>(lowered final self::Class2* #this, self::Extension2|genericMethod::T* t) → core::int* {
+  core::print("Extension2.genericMethod<${self::Extension2|genericMethod::T*}>(${t}) on ${#this}");
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(3){(core::num*) →* core::num*} as{TypeError} core::int*;
+}
+static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
+  return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
+static method main() → dynamic {
+  self::testExtension1();
+  self::testExtension2();
+}
+static method testExtension1() → dynamic {
+  self::Class1* c0 = new self::Class1::•(0);
+  self::Class1* c1 = new self::Class1::•(1);
+  () →* core::int* tearOff0 = self::Extension1|get#method(c0);
+  self::expect(0, tearOff0(){() →* core::int*});
+  c0 = new self::Class1::•(4.{core::int::unary-}(){() →* core::int*});
+  self::expect(0, tearOff0(){() →* core::int*});
+  () →* core::int* tearOff1 = self::Extension1|get#method(c1);
+  self::expect(1, tearOff1(){() →* core::int*});
+  c1 = new self::Class1::•(7.{core::int::unary-}(){() →* core::int*});
+  self::expect(1, tearOff1(){() →* core::int*});
+  <T extends core::num*>(T*) →* core::int* genericTearOff0 = self::Extension1|get#genericMethod(c0);
+  self::expect(38, genericTearOff0<core::int*>(42){(core::int*) →* core::int*});
+  self::expect(38, genericTearOff0<core::num*>(42){(core::num*) →* core::int*});
+  <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension1|get#genericMethod(c1);
+  self::expect(35, genericTearOff1<core::int*>(42){(core::int*) →* core::int*});
+  self::expect(35, genericTearOff1<core::num*>(42){(core::num*) →* core::int*});
+}
+static method testExtension2() → dynamic {
+  self::Class2* c0 = new self::Class2::•(0);
+  self::Class2* c1 = new self::Class2::•(1);
+  () →* core::int* tearOff0 = self::Extension2|get#method(c0);
+  self::expect(2, tearOff0(){() →* core::int*});
+  c0 = new self::Class2::•(4.{core::int::unary-}(){() →* core::int*});
+  self::expect(2, tearOff0(){() →* core::int*});
+  () →* core::int* tearOff1 = self::Extension2|get#method(c1);
+  self::expect(3, tearOff1(){() →* core::int*});
+  c1 = new self::Class2::•(7.{core::int::unary-}(){() →* core::int*});
+  self::expect(3, tearOff1(){() →* core::int*});
+  <T extends core::num*>(T*) →* core::int* genericTearOff0 = self::Extension2|get#genericMethod(c0);
+  self::expect(41, genericTearOff0<core::int*>(42){(core::int*) →* core::int*});
+  self::expect(41, genericTearOff0<core::num*>(42){(core::num*) →* core::int*});
+  <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension2|get#genericMethod(c1);
+  self::expect(38, genericTearOff1<core::int*>(42){(core::int*) →* core::int*});
+  self::expect(38, genericTearOff1<core::num*>(42){(core::num*) →* core::int*});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.modular.expect
new file mode 100644
index 0000000..80f8e09
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int* field = null;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension _extension#0 on self::Class* {
+  get property1 = self::_extension#0|get#property1;
+  set property1 = self::_extension#0|set#property1;
+}
+extension _extension#1 on self::Class* {
+  get property2 = self::_extension#1|get#property2;
+  set property2 = self::_extension#1|set#property2;
+}
+static method _extension#0|get#property1(lowered final self::Class* #this) → core::int*
+  return self::_extension#1|get#property2(#this);
+static method _extension#0|set#property1(lowered final self::Class* #this, core::int* value) → void
+  return #this.{self::Class::field} = value;
+static method _extension#1|get#property2(lowered final self::Class* #this) → core::int*
+  return #this.{self::Class::field}{core::int*};
+static method _extension#1|set#property2(lowered final self::Class* #this, core::int* value) → void
+  return let final core::int* #t1 = value in let final void #t2 = self::_extension#0|set#property1(#this, #t1) in #t1;
+static method main() → dynamic {
+  self::Class* c = new self::Class::•();
+  self::expect(null, self::_extension#0|get#property1(c));
+  self::expect(null, self::_extension#1|get#property2(c));
+  self::expect(42, let final core::int* #t3 = 42 in let final void #t4 = self::_extension#0|set#property1(c, #t3) in #t3);
+  self::expect(42, self::_extension#1|get#property2(c));
+  self::expect(87, let final core::int* #t5 = 87 in let final void #t6 = self::_extension#1|set#property2(c, #t5) in #t5);
+  self::expect(87, self::_extension#0|get#property1(c));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.modular.expect
new file mode 100644
index 0000000..0dd6942
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.modular.expect
@@ -0,0 +1,254 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:23:3: Error: Explicit extension application requires exactly 1 positional argument.
+//   Extension().method(null);
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:24:3: Error: Explicit extension application requires exactly 1 positional argument.
+//   Extension(c1, null).method(null);
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:25:3: Error: Explicit extension application requires exactly 1 positional argument.
+//   Extension(receiver: c1).method(null);
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:26:3: Error: Explicit extension application requires exactly 1 positional argument.
+//   Extension(c1, receiver: null).method(null);
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:27:3: Error: Explicit extension application of extension 'Extension' takes '0' type argument(s).
+//   Extension<int>(c1).method(null);
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:29:17: Error: Member not found: 'foo'.
+//   Extension(c1).foo;
+//                 ^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:30:17: Error: Setter not found: 'foo'.
+//   Extension(c1).foo = null;
+//                 ^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:31:17: Error: Method not found: 'foo'.
+//   Extension(c1).foo();
+//                 ^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:32:17: Error: Too few positional arguments: 1 required, 0 given.
+//   Extension(c1).method();
+//                 ^
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:8:3: Context: Found this candidate, but the arguments don't match.
+//   method(a) {}
+//   ^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:36:17: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   Extension(c1).method(1, 2);
+//                 ^
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:8:3: Context: Found this candidate, but the arguments don't match.
+//   method(a) {}
+//   ^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:37:17: Error: Too few positional arguments: 1 required, 0 given.
+//   Extension(c1).method(a: 1);
+//                 ^
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:8:3: Context: Found this candidate, but the arguments don't match.
+//   method(a) {}
+//   ^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:38:27: Error: No named parameter with the name 'a'.
+//   Extension(c1).method(1, a: 2);
+//                           ^
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:8:3: Context: Found this candidate, but the arguments don't match.
+//   method(a) {}
+//   ^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:39:17: Error: Expected 0 type arguments.
+//   Extension(c1).method<int>(null);
+//                 ^
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:8:3: Context: Found this candidate, but the arguments don't match.
+//   method(a) {}
+//   ^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:42:3: Error: Explicit extension application requires exactly 1 positional argument.
+//   GenericExtension().method();
+//   ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:43:3: Error: Explicit extension application requires exactly 1 positional argument.
+//   GenericExtension<int>().method();
+//   ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:44:3: Error: Explicit extension application requires exactly 1 positional argument.
+//   GenericExtension(c2, null).method();
+//   ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:45:3: Error: Explicit extension application requires exactly 1 positional argument.
+//   GenericExtension<int>(c2, null).method();
+//   ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:46:3: Error: Explicit extension application requires exactly 1 positional argument.
+//   GenericExtension(receiver: c2).method();
+//   ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:47:3: Error: Explicit extension application requires exactly 1 positional argument.
+//   GenericExtension<int>(receiver: c2).method();
+//   ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:48:3: Error: Explicit extension application requires exactly 1 positional argument.
+//   GenericExtension(c2, receiver: null).method();
+//   ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:49:3: Error: Explicit extension application requires exactly 1 positional argument.
+//   GenericExtension<int>(c2, receiver: null).method();
+//   ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:50:3: Error: Explicit extension application of extension 'GenericExtension' takes '1' type argument(s).
+//   GenericExtension<int, String>(c2).method();
+//   ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:28:13: Error: The argument type 'String' can't be assigned to the parameter type 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
+//   Extension(s).method(null);
+//             ^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:51:20: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<dynamic>'.
+//  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
+//   GenericExtension(s).method();
+//                    ^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_access.dart:52:25: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<int>'.
+//  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
+//   GenericExtension<int>(s).method();
+//                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class GenericClass<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on self::Class* {
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+}
+extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+  method method = self::GenericExtension|method;
+  tearoff method = self::GenericExtension|get#method;
+}
+static method Extension|method(lowered final self::Class* #this, dynamic a) → dynamic {}
+static method Extension|get#method(lowered final self::Class* #this) → (dynamic) →* dynamic
+  return (dynamic a) → dynamic => self::Extension|method(#this, a);
+static method GenericExtension|method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|method::T*>* #this) → dynamic {}
+static method GenericExtension|get#method<T extends core::Object* = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → () →* dynamic
+  return () → dynamic => self::GenericExtension|method<self::GenericExtension|get#method::T*>(#this);
+static method main() → dynamic {
+  core::String* s = "";
+  self::Class* c1 = new self::Class::•();
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:23:3: Error: Explicit extension application requires exactly 1 positional argument.
+  Extension().method(null);
+  ^^^^^^^^^"{dynamic}.method(null);
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:24:3: Error: Explicit extension application requires exactly 1 positional argument.
+  Extension(c1, null).method(null);
+  ^^^^^^^^^"{dynamic}.method(null);
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:25:3: Error: Explicit extension application requires exactly 1 positional argument.
+  Extension(receiver: c1).method(null);
+  ^^^^^^^^^"{dynamic}.method(null);
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:26:3: Error: Explicit extension application requires exactly 1 positional argument.
+  Extension(c1, receiver: null).method(null);
+  ^^^^^^^^^"{dynamic}.method(null);
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:27:3: Error: Explicit extension application of extension 'Extension' takes '0' type argument(s).
+  Extension<int>(c1).method(null);
+  ^^^^^^^^^"{dynamic}.method(null);
+  self::Extension|method(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:28:13: Error: The argument type 'String' can't be assigned to the parameter type 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
+  Extension(s).method(null);
+            ^" in s as{TypeError} self::Class*, null);
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:29:17: Error: Member not found: 'foo'.
+  Extension(c1).foo;
+                ^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:30:17: Error: Setter not found: 'foo'.
+  Extension(c1).foo = null;
+                ^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:31:17: Error: Method not found: 'foo'.
+  Extension(c1).foo();
+                ^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:32:17: Error: Too few positional arguments: 1 required, 0 given.
+  Extension(c1).method();
+                ^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:36:17: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+  Extension(c1).method(1, 2);
+                ^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:37:17: Error: Too few positional arguments: 1 required, 0 given.
+  Extension(c1).method(a: 1);
+                ^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:38:27: Error: No named parameter with the name 'a'.
+  Extension(c1).method(1, a: 2);
+                          ^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:39:17: Error: Expected 0 type arguments.
+  Extension(c1).method<int>(null);
+                ^";
+  self::GenericClass<core::int*>* c2 = new self::GenericClass::•<core::int*>();
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:42:3: Error: Explicit extension application requires exactly 1 positional argument.
+  GenericExtension().method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:43:3: Error: Explicit extension application requires exactly 1 positional argument.
+  GenericExtension<int>().method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:44:3: Error: Explicit extension application requires exactly 1 positional argument.
+  GenericExtension(c2, null).method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:45:3: Error: Explicit extension application requires exactly 1 positional argument.
+  GenericExtension<int>(c2, null).method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:46:3: Error: Explicit extension application requires exactly 1 positional argument.
+  GenericExtension(receiver: c2).method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:47:3: Error: Explicit extension application requires exactly 1 positional argument.
+  GenericExtension<int>(receiver: c2).method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:48:3: Error: Explicit extension application requires exactly 1 positional argument.
+  GenericExtension(c2, receiver: null).method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:49:3: Error: Explicit extension application requires exactly 1 positional argument.
+  GenericExtension<int>(c2, receiver: null).method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:50:3: Error: Explicit extension application of extension 'GenericExtension' takes '1' type argument(s).
+  GenericExtension<int, String>(c2).method();
+  ^^^^^^^^^^^^^^^^"{dynamic}.method();
+  self::GenericExtension|method<dynamic>(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:51:20: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<dynamic>'.
+ - 'GenericClass' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
+  GenericExtension(s).method();
+                   ^" in s as{TypeError} self::GenericClass<dynamic>*);
+  self::GenericExtension|method<core::int*>(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:52:25: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<int>'.
+ - 'GenericClass' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
+  GenericExtension<int>(s).method();
+                        ^" in s as{TypeError} self::GenericClass<core::int*>*);
+}
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.modular.expect
new file mode 100644
index 0000000..94d05b9
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.modular.expect
@@ -0,0 +1,104 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:18:16: Error: Method not found: 'method'.
+//   Extension(s).method();
+//                ^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:19:16: Error: Member not found: 'method'.
+//   Extension(s).method;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:20:16: Error: Setter not found: 'method'.
+//   Extension(s).method = 42;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:21:16: Error: Member not found: 'getter'.
+//   Extension(s).getter;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:22:16: Error: Setter not found: 'getter'.
+//   Extension(s).getter = 42;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:23:16: Error: Member not found: 'setter'.
+//   Extension(s).setter;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:24:16: Error: Setter not found: 'setter'.
+//   Extension(s).setter = 42;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:25:16: Error: Member not found: 'property'.
+//   Extension(s).property;
+//                ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:26:16: Error: Setter not found: 'property'.
+//   Extension(s).property = 42;
+//                ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:27:16: Error: Member not found: 'field'.
+//   Extension(s).field;
+//                ^^^^^
+//
+// pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:28:16: Error: Setter not found: 'field'.
+//   Extension(s).field = 42;
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension Extension on core::String* {
+  static method method = self::Extension|method;
+  static get getter = get self::Extension|getter;
+  static get property = get self::Extension|property;
+  static field field = self::Extension|field;
+  static set setter = set self::Extension|setter;
+  static set property = set self::Extension|property;
+}
+static field dynamic Extension|field;
+static method Extension|method() → dynamic {}
+static get Extension|getter() → dynamic
+  return null;
+static set Extension|setter(dynamic _) → void {}
+static get Extension|property() → dynamic
+  return null;
+static set Extension|property(dynamic _) → void {}
+static method main() → dynamic {}
+static method errors() → dynamic {
+  core::String* s = "";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:18:16: Error: Method not found: 'method'.
+  Extension(s).method();
+               ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:19:16: Error: Member not found: 'method'.
+  Extension(s).method;
+               ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:20:16: Error: Setter not found: 'method'.
+  Extension(s).method = 42;
+               ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:21:16: Error: Member not found: 'getter'.
+  Extension(s).getter;
+               ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:22:16: Error: Setter not found: 'getter'.
+  Extension(s).getter = 42;
+               ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:23:16: Error: Member not found: 'setter'.
+  Extension(s).setter;
+               ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:24:16: Error: Setter not found: 'setter'.
+  Extension(s).setter = 42;
+               ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:25:16: Error: Member not found: 'property'.
+  Extension(s).property;
+               ^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:26:16: Error: Setter not found: 'property'.
+  Extension(s).property = 42;
+               ^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:27:16: Error: Member not found: 'field'.
+  Extension(s).field;
+               ^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:28:16: Error: Setter not found: 'field'.
+  Extension(s).field = 42;
+               ^^^^^";
+}
diff --git a/pkg/front_end/testcases/extensions/issue38600.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue38600.dart.weak.modular.expect
new file mode 100644
index 0000000..373bda2
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue38600.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/issue38600.dart:7:1: Error: Expected 'on' after this.
+// extension try<T> on Class<T> {}
+// ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38600.dart:7:11: Error: Expected a type, but got 'try'.
+// extension try<T> on Class<T> {}
+//           ^^^
+//
+// pkg/front_end/testcases/extensions/issue38600.dart:7:11: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension try<T> on Class<T> {}
+//           ^^^
+//
+// pkg/front_end/testcases/extensions/issue38600.dart:7:11: Error: 'try' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// extension try<T> on Class<T> {}
+//           ^^^
+//
+// pkg/front_end/testcases/extensions/issue38600.dart:7:11: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension try<T> on Class<T> {}
+//           ^^^
+//
+// pkg/front_end/testcases/extensions/issue38600.dart:7:18: Error: Expected '{' before this.
+// extension try<T> on Class<T> {}
+//                  ^^
+//
+// pkg/front_end/testcases/extensions/issue38600.dart:7:21: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension try<T> on Class<T> {}
+//                     ^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38600.dart:7:21: Error: 'Class' is already declared in this scope.
+// extension try<T> on Class<T> {}
+//                     ^^^^^
+// pkg/front_end/testcases/extensions/issue38600.dart:5:7: Context: Previous declaration of 'Class'.
+// class Class<T> {}
+//       ^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38600.dart:7:18: Error: Type 'on' not found.
+// extension try<T> on Class<T> {}
+//                  ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension _extension#0 on invalid-type {
+}
+static method try<T extends core::Object* = dynamic>() → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue38712.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue38712.dart.weak.modular.expect
new file mode 100644
index 0000000..464cf79
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue38712.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/issue38712.dart:5:11: Error: Expected 'on' after this.
+// extension C {
+//           ^
+//
+// pkg/front_end/testcases/extensions/issue38712.dart:5:13: Error: Expected a type, but got '{'.
+// extension C {
+//             ^
+//
+import self as self;
+
+extension C on invalid-type {
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/extensions/issue38713.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue38713.dart.weak.modular.expect
new file mode 100644
index 0000000..8dbe072
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue38713.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/issue38713.dart:7:19: Error: Conflicts with the implicit setter of the field 'property2'.
+//   static void set property2(int x) {}
+//                   ^
+//
+// pkg/front_end/testcases/extensions/issue38713.dart:6:14: Error: Conflicts with setter 'property2'.
+//   static int property2;
+//              ^
+//
+// pkg/front_end/testcases/extensions/issue38713.dart:9:19: Error: Conflicts with member 'property3'.
+//   static void set property3(int x) {}
+//                   ^
+//
+// pkg/front_end/testcases/extensions/issue38713.dart:10:11: Error: Conflicts with setter 'property3'.
+//   int get property3 => 1;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension C on core::int* {
+  static field property2 = self::C|property2;
+  get property3 = self::C|get#property3;
+  static set property3 = set self::C|property3;
+}
+static field core::int* C|property2;
+static set C|property3(core::int* x) → void {}
+static method C|get#property3(lowered final core::int* #this) → core::int*
+  return 1;
+static method main() → void {
+  self::C|property2;
+  self::C|property2 = 42;
+  self::C|property3 = 42;
+  self::C|get#property3(42);
+}
diff --git a/pkg/front_end/testcases/extensions/issue38745.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue38745.dart.weak.modular.expect
new file mode 100644
index 0000000..aa7f4d8
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue38745.dart.weak.modular.expect
@@ -0,0 +1,196 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:9:7: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int field;
+//       ^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:11:13: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int property = 42;
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:15:13: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int property2 = 42;
+//             ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:17:19: Error: Conflicts with member 'property2'.
+//   static void set property2(int value) {}
+//                   ^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:15:13: Error: Conflicts with setter 'property2'.
+//   final int property2 = 42;
+//             ^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:20:5: Error: Undefined name 'field'.
+//     field;
+//     ^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:21:5: Error: Setter not found: 'field'.
+//     field = 23;
+//     ^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:22:5: Error: Getter not found: 'property'.
+//     property;
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:24:5: Error: Undefined name 'property2'.
+//     property2;
+//     ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:25:5: Error: Setter not found: 'property2'.
+//     property2 = 23;
+//     ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:40:10: Error: Member not found: 'field'.
+//   ext(c).field;
+//          ^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:41:10: Error: Setter not found: 'field'.
+//   ext(c).field = 23;
+//          ^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:42:10: Error: Getter not found: 'property'.
+//   ext(c).property;
+//          ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:44:10: Error: Member not found: 'property2'.
+//   ext(c).property2;
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:45:10: Error: Setter not found: 'property2'.
+//   ext(c).property2 = 23;
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:34:5: Error: The getter 'field' isn't defined for the class 'C<int>'.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'field'.
+//   c.field;
+//     ^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:35:5: Error: The setter 'field' isn't defined for the class 'C<int>'.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'field'.
+//   c.field = 23;
+//     ^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:36:5: Error: The getter 'property' isn't defined for the class 'C<int>'.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+//   c.property;
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:38:5: Error: The getter 'property2' isn't defined for the class 'C<int>'.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'property2'.
+//   c.property2;
+//     ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38745.dart:39:5: Error: The setter 'property2' isn't defined for the class 'C<int>'.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'property2'.
+//   c.property2 = 23;
+//     ^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension ext<T extends core::Object* = dynamic> on self::C<T*>* {
+  field field = self::ext|field;
+  field property = self::ext|property;
+  field property2 = self::ext|property2;
+  method method = self::ext|method;
+  tearoff method = self::ext|get#method;
+  set property = self::ext|set#property;
+  static set property2 = set self::ext|property2;
+}
+static field core::int* ext|field;
+static final field core::int* ext|property = 42;
+static final field core::int* ext|property2 = 42;
+static method ext|set#property<T extends core::Object* = dynamic>(lowered final self::C<self::ext|set#property::T*>* #this, core::int* value) → void {}
+static set ext|property2(core::int* value) → void {}
+static method ext|method<T extends core::Object* = dynamic>(lowered final self::C<self::ext|method::T*>* #this) → dynamic {
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:20:5: Error: Undefined name 'field'.
+    field;
+    ^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:21:5: Error: Setter not found: 'field'.
+    field = 23;
+    ^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:22:5: Error: Getter not found: 'property'.
+    property;
+    ^^^^^^^^";
+  self::ext|set#property<self::ext|method::T*>(#this, 23);
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:24:5: Error: Undefined name 'property2'.
+    property2;
+    ^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:25:5: Error: Setter not found: 'property2'.
+    property2 = 23;
+    ^^^^^^^^^";
+}
+static method ext|get#method<T extends core::Object* = dynamic>(lowered final self::C<self::ext|get#method::T*>* #this) → () →* dynamic
+  return () → dynamic => self::ext|method<self::ext|get#method::T*>(#this);
+static method main() → dynamic {}
+static method errors() → dynamic {
+  self::C<core::int*>* c = new self::C::•<core::int*>();
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:34:5: Error: The getter 'field' isn't defined for the class 'C<int>'.
+ - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'field'.
+  c.field;
+    ^^^^^" in c{<unresolved>}.field;
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:35:5: Error: The setter 'field' isn't defined for the class 'C<int>'.
+ - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'field'.
+  c.field = 23;
+    ^^^^^" in c{<unresolved>}.field = 23;
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:36:5: Error: The getter 'property' isn't defined for the class 'C<int>'.
+ - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+  c.property;
+    ^^^^^^^^" in c{<unresolved>}.property;
+  self::ext|set#property<core::int*>(c, 23);
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:38:5: Error: The getter 'property2' isn't defined for the class 'C<int>'.
+ - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'property2'.
+  c.property2;
+    ^^^^^^^^^" in c{<unresolved>}.property2;
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:39:5: Error: The setter 'property2' isn't defined for the class 'C<int>'.
+ - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'property2'.
+  c.property2 = 23;
+    ^^^^^^^^^" in c{<unresolved>}.property2 = 23;
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:40:10: Error: Member not found: 'field'.
+  ext(c).field;
+         ^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:41:10: Error: Setter not found: 'field'.
+  ext(c).field = 23;
+         ^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:42:10: Error: Getter not found: 'property'.
+  ext(c).property;
+         ^^^^^^^^";
+  self::ext|set#property<core::int*>(c, 23);
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:44:10: Error: Member not found: 'property2'.
+  ext(c).property2;
+         ^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:45:10: Error: Setter not found: 'property2'.
+  ext(c).property2 = 23;
+         ^^^^^^^^^";
+  self::ext|method<core::int*>(c);
+}
diff --git a/pkg/front_end/testcases/extensions/issue38750.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue38750.dart.weak.modular.expect
new file mode 100644
index 0000000..4dbcce1
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue38750.dart.weak.modular.expect
@@ -0,0 +1,118 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/issue38750.dart:13:5: Error: Member not found: 'C._staticFoo'.
+//   C._staticFoo();
+//     ^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue38750.dart:12:5: Error: The method '_foo' isn't defined for the class 'C'.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named '_foo'.
+//   c._foo();
+//     ^^^^
+//
+// pkg/front_end/testcases/extensions/issue38750.dart:16:5: Error: The method '_bar' isn't defined for the class 'C'.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named '_bar'.
+//   c._bar();
+//     ^^^^
+//
+import self as self;
+import "issue38750_lib1.dart" as iss;
+
+import "org-dartlang-testcase:///issue38750_lib1.dart";
+import "org-dartlang-testcase:///issue38750_lib2.dart";
+
+static method main() → dynamic {}
+static method errors() → dynamic {
+  iss::C* c = new iss::C::•();
+  invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:12:5: Error: The method '_foo' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
+Try correcting the name to the name of an existing method, or defining a method named '_foo'.
+  c._foo();
+    ^^^^" in c{<unresolved>}._foo();
+  invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:13:5: Error: Member not found: 'C._staticFoo'.
+  C._staticFoo();
+    ^^^^^^^^^^";
+  c.{iss::C::foo}(){() →* dynamic};
+  iss::C::staticFoo();
+  invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:16:5: Error: The method '_bar' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
+Try correcting the name to the name of an existing method, or defining a method named '_bar'.
+  c._bar();
+    ^^^^" in c{<unresolved>}._bar();
+}
+
+library;
+import self as iss;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → iss::C*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic
+    return this.{iss::C::_foo}(){() →* dynamic};
+  method _foo() → dynamic {
+    try {
+      throw "producing a stack trace";
+    }
+    on dynamic catch(final dynamic e, final core::StackTrace* s) {
+      core::print(s);
+    }
+  }
+  static method _staticFoo() → dynamic {
+    core::print("_staticFoo");
+  }
+  static method staticFoo() → dynamic
+    return iss::C::_staticFoo();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension ext on iss::C* {
+  method _bar = iss::ext|_bar;
+  tearoff _bar = iss::ext|get#_bar;
+}
+static method ext|_bar(lowered final iss::C* #this) → dynamic {
+  try {
+    throw "producing a stack trace";
+  }
+  on dynamic catch(final dynamic e, final core::StackTrace* s) {
+    core::print(s);
+  }
+}
+static method ext|get#_bar(lowered final iss::C* #this) → () →* dynamic
+  return () → dynamic => iss::ext|_bar(#this);
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/issue38750_lib2.dart:9:5: Error: The method '_bar' isn't defined for the class 'C'.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named '_bar'.
+//   c._bar();
+//     ^^^^
+//
+import self as self2;
+import "issue38750_lib1.dart" as iss;
+
+import "org-dartlang-testcase:///issue38750_lib1.dart";
+
+static method errors() → dynamic {
+  iss::C* c = new iss::C::•();
+  invalid-expression "pkg/front_end/testcases/extensions/issue38750_lib2.dart:9:5: Error: The method '_bar' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
+Try correcting the name to the name of an existing method, or defining a method named '_bar'.
+  c._bar();
+    ^^^^" in c{<unresolved>}._bar();
+}
diff --git a/pkg/front_end/testcases/extensions/issue38755.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue38755.dart.weak.modular.expect
new file mode 100644
index 0000000..8be9036
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue38755.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+extension A<T extends core::Object* = dynamic> on core::List<T*>* {
+  method myMap = self::A|myMap;
+  tearoff myMap = self::A|get#myMap;
+}
+static final field core::List<core::String*>* list = self::A|myMap<core::String*, core::String*>(<core::String*>["a", "b", "c"], (core::String* it) → core::String* => it);
+static method A|myMap<T extends core::Object* = dynamic, R extends core::Object* = dynamic>(lowered final core::List<self::A|myMap::T*>* #this, (self::A|myMap::T*) →* self::A|myMap::R* block) → core::List<self::A|myMap::R*>* {
+  return #this.{core::Iterable::map}<self::A|myMap::R*>(block){((self::A|myMap::T*) →* self::A|myMap::R*) →* core::Iterable<self::A|myMap::R*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<self::A|myMap::R*>*};
+}
+static method A|get#myMap<T extends core::Object* = dynamic>(lowered final core::List<self::A|get#myMap::T*>* #this) → <R extends core::Object* = dynamic>((self::A|get#myMap::T*) →* R*) →* core::List<R*>*
+  return <R extends core::Object* = dynamic>((self::A|get#myMap::T*) →* R* block) → core::List<R*>* => self::A|myMap<self::A|get#myMap::T*, R*>(#this, block);
+static method main() → dynamic {
+  core::print(self::list);
+}
diff --git a/pkg/front_end/testcases/extensions/issue38915.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue38915.dart.weak.modular.expect
new file mode 100644
index 0000000..ab76811
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue38915.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on self::Class* {
+  method method1 = self::Extension|method1;
+  tearoff method1 = self::Extension|get#method1;
+  method method2 = self::Extension|method2;
+  tearoff method2 = self::Extension|get#method2;
+  method method3 = self::Extension|method3;
+  tearoff method3 = self::Extension|get#method3;
+  method method4 = self::Extension|method4;
+  tearoff method4 = self::Extension|get#method4;
+}
+static method Extension|method1(lowered final self::Class* #this, {core::bool* b = #C1, core::String* s = #C2}) → void
+  return null;
+static method Extension|get#method1(lowered final self::Class* #this) → ({b: core::bool*, s: core::String*}) →* void
+  return ({core::bool* b = #C1, core::String* s = #C2}) → void => self::Extension|method1(#this, b: b, s: s);
+static method Extension|method2(lowered final self::Class* #this, [core::bool* b = #C1, core::String* s = #C2]) → void
+  return null;
+static method Extension|get#method2(lowered final self::Class* #this) → ([core::bool*, core::String*]) →* void
+  return ([core::bool* b = #C1, core::String* s = #C2]) → void => self::Extension|method2(#this, b, s);
+static method Extension|method3(lowered final self::Class* #this, core::int* i, {core::bool* b = #C1, core::String* s = #C2}) → void {}
+static method Extension|get#method3(lowered final self::Class* #this) → (core::int*, {b: core::bool*, s: core::String*}) →* void
+  return (core::int* i, {core::bool* b = #C1, core::String* s = #C2}) → void => self::Extension|method3(#this, i, b: b, s: s);
+static method Extension|method4(lowered final self::Class* #this, core::int* i, [core::bool* b = #C1, core::String* s = #C2]) → void {}
+static method Extension|get#method4(lowered final self::Class* #this) → (core::int*, [core::bool*, core::String*]) →* void
+  return (core::int* i, [core::bool* b = #C1, core::String* s = #C2]) → void => self::Extension|method4(#this, i, b, s);
+static method main() → dynamic {
+  self::Class* c = new self::Class::•();
+  self::Extension|method1(c);
+  self::Extension|method1(c, s: "foo");
+  self::Extension|method1(c, b: true);
+  self::Extension|method1(c, b: true, s: "foo");
+  self::Extension|method1(c, s: "foo", b: true);
+  self::Extension|method2(c);
+  self::Extension|method2(c, true);
+  self::Extension|method2(c, true, "foo");
+  self::Extension|method3(c, 42);
+  self::Extension|method3(c, 42, s: "foo");
+  self::Extension|method3(c, 42, b: true);
+  self::Extension|method3(c, 42, b: true, s: "foo");
+  self::Extension|method3(c, 42, s: "foo", b: true);
+  self::Extension|method4(c, 42);
+  self::Extension|method4(c, 42, true);
+  self::Extension|method4(c, 42, true, "foo");
+}
+
+constants  {
+  #C1 = false
+  #C2 = ", "
+}
diff --git a/pkg/front_end/testcases/extensions/issue39527.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue39527.dart.weak.modular.expect
new file mode 100644
index 0000000..7d9415b
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue39527.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int* value = 0;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension1 on self::C* {
+  operator [] = self::Extension1|[];
+  operator []= = self::Extension1|[]=;
+  operator - = self::Extension1|-;
+}
+static method Extension1|[](lowered final self::C* #this, core::int* index) → self::C*
+  return let final self::C* #t1 = #this in block {
+    #t1.{self::C::value} = #t1.{self::C::value}{core::int*}.{core::num::+}(index.{core::num::+}(1){(core::num*) →* core::int*}){(core::num*) →* core::int*};
+  } =>#t1;
+static method Extension1|[]=(lowered final self::C* #this, core::int* index, self::C* other) → void
+  return #this.{self::C::value} = #this.{self::C::value}{core::int*}.{core::num::+}(other.{self::C::value}{core::int*}.{core::num::+}(index){(core::num*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*}){(core::num*) →* core::int*};
+static method Extension1|-(lowered final self::C* #this, core::int* val) → self::C*
+  return #this;
+static method main() → dynamic {
+  self::C* c = new self::C::•();
+  let final self::C* #t2 = c in let final core::int* #t3 = 42 in let final self::C* #t4 = self::Extension1|-(self::Extension1|[](#t2, #t3), 1) in let final void #t5 = self::Extension1|[]=(#t2, #t3, #t4) in #t4;
+  let final self::C* #t6 = c in let final core::int* #t7 = 42 in self::Extension1|[]=(#t6, #t7, self::Extension1|-(self::Extension1|[](#t6, #t7), 1));
+  self::Extension1|[]=(c, 42, self::Extension1|-(self::Extension1|[](c, 42), 1));
+}
diff --git a/pkg/front_end/testcases/extensions/issue39889.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue39889.dart.weak.modular.expect
new file mode 100644
index 0000000..3d65b0f
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue39889.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension E on self::C* {
+  method f = self::E|f;
+  tearoff f = self::E|get#f;
+}
+static method E|f(lowered final self::C* #this, core::String* b) → void {}
+static method E|get#f(lowered final self::C* #this) → (core::String*) →* void
+  return (core::String* b) → void => self::E|f(#this, b);
+static method main() → void {
+  dynamic b = "456";
+  self::C* c = new self::C::•();
+  self::E|f(c, b as{TypeError,ForDynamic} core::String*);
+}
diff --git a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.modular.expect
new file mode 100644
index 0000000..1c4dd76
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library;
+import self as self;
+import "issue39938_lib.dart" as iss;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue39938_lib.dart";
+
+static method main() → dynamic {
+  self::expect(true, iss::Extension|+(true, true));
+  self::expect(true, iss::Extension|+(true, false));
+  self::expect(true, iss::Extension|+(false, true));
+  self::expect(false, iss::Extension|+(false, false));
+  self::expect(true, iss::Extension|+(true, true));
+  self::expect(true, iss::Extension|+(true, false));
+  self::expect(true, iss::Extension|+(false, true));
+  self::expect(false, iss::Extension|+(false, false));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+    throw "Expected ${expected}, actual ${actual}.";
+}
diff --git a/pkg/front_end/testcases/extensions/issue40596.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue40596.dart.weak.modular.expect
new file mode 100644
index 0000000..4f80fad
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue40596.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+extension Extension<T extends core::Object* = dynamic> on asy::Stream<T*>* {
+  method call = self::Extension|call;
+  tearoff call = self::Extension|get#call;
+}
+static method main() → void {
+  asy::StreamController<core::String*>* controller = asy::StreamController::•<core::String*>();
+  let final asy::StreamController<core::String*>* #t1 = controller in let final (dynamic) →* Null #t2 = (dynamic s) → Null {
+    core::print(s);
+  } in self::Extension|call<core::String*>(#t1.{asy::StreamController::stream}{asy::Stream<core::String*>*}, #t2);
+}
+static method Extension|call<T extends core::Object* = dynamic>(lowered final asy::Stream<self::Extension|call::T*>* #this, core::Function* onData) → asy::StreamSubscription<self::Extension|call::T*>* {
+  return #this.{asy::Stream::listen}((self::Extension|call::T* d) → Null {
+    onData(d);
+  }){((self::Extension|call::T*) →* void, {cancelOnError: core::bool*, onDone: () →* void, onError: core::Function*}) →* asy::StreamSubscription<self::Extension|call::T*>*};
+}
+static method Extension|get#call<T extends core::Object* = dynamic>(lowered final asy::Stream<self::Extension|get#call::T*>* #this) → (core::Function*) →* asy::StreamSubscription<self::Extension|get#call::T*>*
+  return (core::Function* onData) → asy::StreamSubscription<self::Extension|get#call::T*>* => self::Extension|call<self::Extension|get#call::T*>(#this, onData);
diff --git a/pkg/front_end/testcases/extensions/issue40713.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue40713.dart.weak.modular.expect
new file mode 100644
index 0000000..568f207
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue40713.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/issue40713.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
+//   list.safeFirst();
+//        ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue40713.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+//   list2.safeFirst();
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension SafeAccess<T extends core::Object* = dynamic> on core::Iterable<T*>* {
+  get safeFirst = self::SafeAccess|get#safeFirst;
+}
+static method SafeAccess|get#safeFirst<T extends core::Object* = dynamic>(lowered final core::Iterable<self::SafeAccess|get#safeFirst::T*>* #this) → self::SafeAccess|get#safeFirst::T* {
+  return #this.{core::Iterable::isNotEmpty}{core::bool*} ?{self::SafeAccess|get#safeFirst::T*} #this.{core::Iterable::first}{self::SafeAccess|get#safeFirst::T*} : null;
+}
+static method main() → dynamic {}
+static method test() → void {
+  final core::List<dynamic>* list = <dynamic>[];
+  self::SafeAccess|get#safeFirst<dynamic>(list){dynamic}.call();
+  final core::List<(core::int*) →* void>* list2 = <(core::int*) →* void>[];
+  self::SafeAccess|get#safeFirst<(core::int*) →* void>(list2)(0){(core::int*) →* void};
+}
+static method errors() → void {
+  final core::List<core::Object*>* list = <core::Object*>[];
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
+  list.safeFirst();
+       ^^^^^^^^^" in self::SafeAccess|get#safeFirst<core::Object*>(list){<unresolved>}.call();
+  final core::List<(core::int*) →* void>* list2 = <(core::int*) →* void>[];
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+  list2.safeFirst();
+                 ^" in self::SafeAccess|get#safeFirst<(core::int*) →* void>(list2){<inapplicable>}.();
+}
diff --git a/pkg/front_end/testcases/extensions/issue40816.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue40816.dart.weak.modular.expect
new file mode 100644
index 0000000..70c933c
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue40816.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension _extension#0 on self::A* {
+  method foo = self::_extension#0|foo;
+  tearoff foo = self::_extension#0|get#foo;
+}
+static method _extension#0|foo(lowered final self::A* #this, self::A* a, self::B* b) → void {}
+static method _extension#0|get#foo(lowered final self::A* #this) → (self::A*, self::B*) →* void
+  return (self::A* a, self::B* b) → void => self::_extension#0|foo(#this, a, b);
+static method main() → void {
+  dynamic a = new self::A::•();
+  dynamic b = new self::B::•();
+  self::_extension#0|foo(new self::A::•(), a as{TypeError,ForDynamic} self::A*, b as{TypeError,ForDynamic} self::B*);
+}
diff --git a/pkg/front_end/testcases/extensions/issue43218.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue43218.dart.weak.modular.expect
new file mode 100644
index 0000000..8f03ff9
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue43218.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/issue43218.dart:24:10: Error: The setter 'id' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'id'.
+//   Ext(c).id++;
+//          ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int* value;
+  constructor •() → self::C*
+    : self::C::value = 0, super core::Object::•() {}
+  method init() → dynamic {
+    this.{self::C::value} = 0;
+  }
+  get id() → core::int*
+    return this.{self::C::value}{core::int*};
+  set id(core::int* v) → void {
+    this.{self::C::value} = v;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Ext on self::C* {
+  get id = self::Ext|get#id;
+}
+static method Ext|get#id(lowered final self::C* #this) → core::int*
+  return #this.{self::C::value}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+static method test() → dynamic {
+  self::C* c = new self::C::•();
+  let final self::C* #t1 = c in invalid-expression "pkg/front_end/testcases/extensions/issue43218.dart:24:10: Error: The setter 'id' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'id'.
+  Ext(c).id++;
+         ^^" in #t1{<unresolved>}.id = self::Ext|get#id(#t1).{core::num::+}(1){(core::num*) →* core::int*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue44003.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue44003.dart.weak.modular.expect
new file mode 100644
index 0000000..a8d4f63
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue44003.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/issue44003.dart:14:8: Error: 'foo' is already declared in this scope.
+//   void foo(String baz, int a) {
+//        ^^^
+// pkg/front_end/testcases/extensions/issue44003.dart:10:8: Context: Previous declaration of 'foo'.
+//   void foo(String bar) {
+//        ^^^
+//
+// pkg/front_end/testcases/extensions/issue44003.dart:6:8: Error: The method 'foo' isn't defined for the class 'List<String>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'foo'.
+//   args.foo('1', 2);
+//        ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension _extension#0 on core::List<core::String*>* {
+  method foo = self::_extension#0|foo;
+  tearoff foo = self::_extension#0|get#foo;
+}
+static method test(core::List<core::String*>* args) → void {
+  invalid-expression "pkg/front_end/testcases/extensions/issue44003.dart:6:8: Error: The method 'foo' isn't defined for the class 'List<String>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'foo'.
+  args.foo('1', 2);
+       ^^^" in args{<unresolved>}.foo("1", 2);
+}
+static method _extension#0|foo(lowered final core::List<core::String*>* #this, core::String* bar) → void {
+  core::print(1);
+}
+static method _extension#0|get#foo(lowered final core::List<core::String*>* #this) → (core::String*) →* void
+  return (core::String* bar) → void => self::_extension#0|foo(#this, bar);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue44844.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue44844.dart.weak.modular.expect
new file mode 100644
index 0000000..1a705d7
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue44844.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/issue44844.dart:7:8: Error: 'foo' is already declared in this scope.
+//   void foo() {}
+//        ^^^
+// pkg/front_end/testcases/extensions/issue44844.dart:6:14: Context: Previous declaration of 'foo'.
+//   static int foo = 2;
+//              ^^^
+//
+// pkg/front_end/testcases/extensions/issue44844.dart:11:5: Error: The method 'foo' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'foo'.
+//   3.foo();
+//     ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension _extension#0 on core::int* {
+  static field foo = self::_extension#0|foo;
+}
+static field core::int* _extension#0|foo;
+static method test() → void {
+  invalid-expression "pkg/front_end/testcases/extensions/issue44844.dart:11:5: Error: The method 'foo' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'foo'.
+  3.foo();
+    ^^^" in 3{<unresolved>}.foo();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue47345.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue47345.dart.weak.modular.expect
new file mode 100644
index 0000000..38d9756
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue47345.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+}
+extension _extension#0 on self::Foo {
+  static field bar = self::_extension#0|bar;
+  static field doubleBar = self::_extension#0|doubleBar;
+}
+static const field core::int _extension#0|bar = #C1;
+static const field core::int _extension#0|doubleBar = #C2;
+static method main() → void {}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+}
diff --git a/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.modular.expect
new file mode 100644
index 0000000..d952a83
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/language_issue1182.dart:13:25: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'S Function(S)'.
+//     S Function(S) f = x.test;
+//                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo<S extends core::num*> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::S*>*
+    : super core::Object::•()
+    ;
+  method test1(covariant-by-class self::Foo::S* x) → void {
+    (self::Foo::S*) →* self::Foo::S* f = invalid-expression "pkg/front_end/testcases/extensions/language_issue1182.dart:13:25: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'S Function(S)'.
+    S Function(S) f = x.test;
+                        ^" in self::Test|get#test<core::num*>(x) as{TypeError} Never;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Test<T extends core::Object* = dynamic> on T* {
+  get test = self::Test|get#test;
+}
+static method Test|get#test<T extends core::Object* = dynamic>(lowered final self::Test|get#test::T* #this) → (self::Test|get#test::T*) →* self::Test|get#test::T*
+  return (self::Test|get#test::T* a) → self::Test|get#test::T* => #this;
+static method main() → void {}
diff --git a/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.modular.expect
new file mode 100644
index 0000000..6d6179a
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/missing_toplevel.dart:13:23: Error: The getter 'setter' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/extensions/missing_toplevel.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+// var missingGetter = c.setter += 42;
+//                       ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on self::Class* {
+  set setter = self::Extension|set#setter;
+}
+static field self::Class* c = new self::Class::•();
+static field dynamic missingGetter = let final self::Class* #t1 = self::c in let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/extensions/missing_toplevel.dart:13:23: Error: The getter 'setter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/extensions/missing_toplevel.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+var missingGetter = c.setter += 42;
+                      ^^^^^^" in #t1{<unresolved>}.setter{dynamic}.+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
+static method Extension|set#setter(lowered final self::Class* #this, core::int* value) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/multi_export.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/multi_export.dart.weak.modular.expect
new file mode 100644
index 0000000..b369c9b
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/multi_export.dart.weak.modular.expect
@@ -0,0 +1,98 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "multi_export_lib1.dart" as mul;
+import "multi_export_lib.dart" as mul2;
+import "multi_export_lib2.dart" as mul3;
+import "multi_export_lib3.dart" as mul4;
+import "multi_export_lib4.dart" as mul5;
+
+import "org-dartlang-testcase:///multi_export_lib1.dart" as lib;
+import "org-dartlang-testcase:///multi_export_lib2.dart" as lib;
+import "org-dartlang-testcase:///multi_export_lib3.dart" as lib;
+import "org-dartlang-testcase:///multi_export_lib4.dart" as lib;
+
+static method main() → dynamic {
+  let final mul::SubClass1 #t1 = new mul::SubClass1::•() in block {
+    mul2::Extension|method<mul::SubClass1>(#t1);
+  } =>#t1;
+  let final mul3::SubClass2 #t2 = new mul3::SubClass2::•() in block {
+    mul2::Extension|method<mul3::SubClass2>(#t2);
+  } =>#t2;
+  let final mul4::SubClass3 #t3 = new mul4::SubClass3::•() in block {
+    mul2::Extension|method<mul4::SubClass3>(#t3);
+  } =>#t3;
+  let final mul5::SubClass4 #t4 = new mul5::SubClass4::•() in block {
+    mul2::Extension|method<mul5::SubClass4>(#t4);
+  } =>#t4;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mul;
+import "multi_export_lib.dart" as mul2;
+
+import "org-dartlang-testcase:///multi_export_lib.dart";
+
+class SubClass1 extends mul2::Class {
+  synthetic constructor •() → mul::SubClass1
+    : super mul2::Class::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mul3;
+import "multi_export_lib.dart" as mul2;
+additionalExports = (mul2::Extension)
+
+import "org-dartlang-testcase:///multi_export_lib.dart";
+export "org-dartlang-testcase:///multi_export_lib.dart" show Extension;
+
+class SubClass2 extends mul2::Class {
+  synthetic constructor •() → mul3::SubClass2
+    : super mul2::Class::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mul4;
+import "multi_export_lib.dart" as mul2;
+additionalExports = (mul2::Extension)
+
+import "org-dartlang-testcase:///multi_export_lib.dart";
+export "org-dartlang-testcase:///multi_export_lib.dart" show Extension;
+
+class SubClass3 extends mul2::Class {
+  synthetic constructor •() → mul4::SubClass3
+    : super mul2::Class::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mul5;
+import "multi_export_lib.dart" as mul2;
+additionalExports = (mul2::Extension)
+
+import "org-dartlang-testcase:///multi_export_lib.dart";
+export "org-dartlang-testcase:///multi_export_lib.dart" show Extension;
+
+class SubClass4 extends mul2::Class {
+  synthetic constructor •() → mul5::SubClass4
+    : super mul2::Class::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mul2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → mul2::Class
+    : super core::Object::•()
+    ;
+}
+extension Extension<T extends mul2::Class> on T {
+  method method = mul2::Extension|method;
+  tearoff method = mul2::Extension|get#method;
+}
+static method Extension|method<T extends mul2::Class>(lowered final mul2::Extension|method::T #this) → dynamic {}
+static method Extension|get#method<T extends mul2::Class>(lowered final mul2::Extension|get#method::T #this) → () → dynamic
+  return () → dynamic => mul2::Extension|method<mul2::Extension|get#method::T>(#this);
diff --git a/pkg/front_end/testcases/extensions/nested_on_types.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/nested_on_types.dart.weak.modular.expect
new file mode 100644
index 0000000..001a0b6
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/nested_on_types.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension<T extends core::Object* = dynamic> on self::A<self::A<T*>*>* {
+  method method1 = self::Extension|method1;
+  tearoff method1 = self::Extension|get#method1;
+  method method2 = self::Extension|method2;
+  tearoff method2 = self::Extension|get#method2;
+}
+static method Extension|method1<T extends core::Object* = dynamic>(lowered final self::A<self::A<self::Extension|method1::T*>*>* #this) → dynamic {}
+static method Extension|get#method1<T extends core::Object* = dynamic>(lowered final self::A<self::A<self::Extension|get#method1::T*>*>* #this) → () →* dynamic
+  return () → dynamic => self::Extension|method1<self::Extension|get#method1::T*>(#this);
+static method Extension|method2<T extends core::Object* = dynamic, A extends core::Object* = dynamic>(lowered final self::A<self::A<self::Extension|method2::T*>*>* #this, self::Extension|method2::A* a) → dynamic {}
+static method Extension|get#method2<T extends core::Object* = dynamic>(lowered final self::A<self::A<self::Extension|get#method2::T*>*>* #this) → <A extends core::Object* = dynamic>(A*) →* dynamic
+  return <A extends core::Object* = dynamic>(A* a) → dynamic => self::Extension|method2<self::Extension|get#method2::T*, A*>(#this, a);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/null_aware.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/null_aware.dart.weak.modular.expect
new file mode 100644
index 0000000..31cc462
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/null_aware.dart.weak.modular.expect
@@ -0,0 +1,87 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int* field = null;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on self::Class* {
+  get property = self::Extension|get#property;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  method testImplicitThis = self::Extension|testImplicitThis;
+  tearoff testImplicitThis = self::Extension|get#testImplicitThis;
+  set property = self::Extension|set#property;
+}
+static method Extension|get#property(lowered final self::Class* #this) → core::int*
+  return #this.{self::Class::field}{core::int*};
+static method Extension|set#property(lowered final self::Class* #this, core::int* value) → void {
+  #this.{self::Class::field} = value;
+}
+static method Extension|method(lowered final self::Class* #this) → core::int*
+  return #this.{self::Class::field}{core::int*};
+static method Extension|get#method(lowered final self::Class* #this) → () →* core::int*
+  return () → core::int* => self::Extension|method(#this);
+static method Extension|testImplicitThis(lowered final self::Class* #this) → dynamic {
+  self::expect(null, self::Extension|get#property(#this));
+  self::expect(42, let final core::int* #t1 = self::Extension|get#property(#this) in #t1 == null ?{core::int*} let final core::int* #t2 = 42 in let final void #t3 = self::Extension|set#property(#this, #t2) in #t2 : #t1);
+  self::expect(42, let final core::int* #t4 = self::Extension|get#property(#this) in #t4 == null ?{core::int*} let final core::int* #t5 = 87 in let final void #t6 = self::Extension|set#property(#this, #t5) in #t5 : #t4);
+}
+static method Extension|get#testImplicitThis(lowered final self::Class* #this) → () →* dynamic
+  return () → dynamic => self::Extension|testImplicitThis(#this);
+static method main() → dynamic {
+  self::Class* c;
+  self::expect(null, let final self::Class* #t7 = c in #t7 == null ?{core::int*} null : self::Extension|get#property(#t7));
+  self::expect(null, let final self::Class* #t8 = c in #t8 == null ?{() →* core::int*} null : self::Extension|get#method(#t8));
+  self::expect(null, let final self::Class* #t9 = c in #t9 == null ?{core::int*} null : self::Extension|method(#t9));
+  self::expect(null, let final self::Class* #t10 = c in #t10 == null ?{core::int*} null : let final core::int* #t11 = 42 in let final void #t12 = self::Extension|set#property(#t10, #t11) in #t11);
+  self::expect(null, let final self::Class* #t13 = c in #t13 == null ?{core::int*} null : let final core::int* #t14 = self::Extension|get#property(#t13) in #t14 == null ?{core::int*} let final core::int* #t15 = 42 in let final void #t16 = self::Extension|set#property(#t13, #t15) in #t15 : #t14);
+  c = new self::Class::•();
+  self::expect(null, let final self::Class* #t17 = c in #t17 == null ?{core::int*} null : self::Extension|get#property(#t17));
+  self::expect(null, let final self::Class* #t18 = c in #t18 == null ?{core::int*} null : self::Extension|method(#t18));
+  () →* core::int* tearOff = let final self::Class* #t19 = c in #t19 == null ?{() →* core::int*} null : self::Extension|get#method(#t19);
+  self::expect(null, tearOff(){() →* core::int*});
+  self::expect(42, let final self::Class* #t20 = c in #t20 == null ?{core::int*} null : let final core::int* #t21 = 42 in let final void #t22 = self::Extension|set#property(#t20, #t21) in #t21);
+  self::expect(42, tearOff(){() →* core::int*});
+  self::expect(null, let final self::Class* #t23 = c in #t23 == null ?{Null} null : let final Null #t24 = null in let final void #t25 = self::Extension|set#property(#t23, #t24) in #t24);
+  self::expect(42, let final self::Class* #t26 = c in #t26 == null ?{core::int*} null : let final core::int* #t27 = 42 in let final void #t28 = self::Extension|set#property(#t26, #t27) in #t27);
+  let final self::Class* #t29 = c in #t29 == null ?{Null} null : self::Extension|set#property(#t29, null);
+  self::expect(null, let final self::Class* #t30 = c in #t30 == null ?{core::int*} null : self::Extension|get#property(#t30));
+  self::expect(42, let final self::Class* #t31 = c in let final core::int* #t32 = self::Extension|get#property(#t31) in #t32 == null ?{core::int*} let final core::int* #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31, #t33) in #t33 : #t32);
+  self::expect(42, let final self::Class* #t35 = c in let final core::int* #t36 = self::Extension|get#property(#t35) in #t36 == null ?{core::int*} let final core::int* #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35, #t37) in #t37 : #t36);
+  self::expect(null, let final self::Class* #t39 = c in #t39 == null ?{Null} null : let final Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39, #t40) in #t40);
+  let final self::Class* #t42 = c in self::Extension|get#property(#t42) == null ?{core::int*} self::Extension|set#property(#t42, 42) : null;
+  self::expect(42, let final self::Class* #t43 = c in #t43 == null ?{core::int*} null : self::Extension|get#property(#t43));
+  let final self::Class* #t44 = c in self::Extension|get#property(#t44) == null ?{core::int*} self::Extension|set#property(#t44, 87) : null;
+  self::expect(42, let final self::Class* #t45 = c in #t45 == null ?{core::int*} null : self::Extension|get#property(#t45));
+  let final self::Class* #t46 = c in #t46 == null ?{Null} null : self::Extension|set#property(#t46, null);
+  self::expect(null, let final self::Class* #t47 = c in #t47 == null ?{core::int*} null : self::Extension|get#property(#t47));
+  self::expect(42, let final self::Class* #t48 = c in let final core::int* #t49 = self::Extension|get#property(#t48) in #t49 == null ?{core::int*} let final core::int* #t50 = 42 in let final void #t51 = self::Extension|set#property(#t48, #t50) in #t50 : #t49);
+  self::expect(42, let final self::Class* #t52 = c in let final core::int* #t53 = self::Extension|get#property(#t52) in #t53 == null ?{core::int*} let final core::int* #t54 = 87 in let final void #t55 = self::Extension|set#property(#t52, #t54) in #t54 : #t53);
+  let final self::Class* #t56 = c in #t56 == null ?{Null} null : self::Extension|set#property(#t56, null);
+  self::expect(null, let final self::Class* #t57 = c in #t57 == null ?{core::int*} null : self::Extension|get#property(#t57));
+  let final self::Class* #t58 = c in self::Extension|get#property(#t58) == null ?{core::int*} self::Extension|set#property(#t58, 42) : null;
+  self::expect(42, let final self::Class* #t59 = c in #t59 == null ?{core::int*} null : self::Extension|get#property(#t59));
+  let final self::Class* #t60 = c in self::Extension|get#property(#t60) == null ?{core::int*} self::Extension|set#property(#t60, 87) : null;
+  self::expect(42, let final self::Class* #t61 = c in #t61 == null ?{core::int*} null : self::Extension|get#property(#t61));
+  let final self::Class* #t62 = c in #t62 == null ?{Null} null : self::Extension|set#property(#t62, null);
+  self::Extension|testImplicitThis(c);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/on_function_type.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/on_function_type.dart.weak.modular.expect
new file mode 100644
index 0000000..7fd4a5b
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_function_type.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends self::Class<self::Class::T*>* = self::Class<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Subclass extends self::Class<self::Subclass*> {
+  synthetic constructor •() → self::Subclass*
+    : super self::Class::•()
+    ;
+}
+extension _extension#0<R extends core::Object* = dynamic, T extends core::Object* = dynamic> on (T*) →* R* {
+  get returnType = self::_extension#0|get#returnType;
+  get parameterType = self::_extension#0|get#parameterType;
+}
+extension _extension#1<T extends self::Class<T*>* = self::Class<dynamic>*> on <S extends T* = dynamic>(T*, S*) →* dynamic {
+  get parameterType = self::_extension#1|get#parameterType;
+}
+static method _extension#0|get#returnType<R extends core::Object* = dynamic, T extends core::Object* = dynamic>(lowered final (self::_extension#0|get#returnType::T*) →* self::_extension#0|get#returnType::R* #this) → core::Type*
+  return self::_extension#0|get#returnType::R*;
+static method _extension#0|get#parameterType<R extends core::Object* = dynamic, T extends core::Object* = dynamic>(lowered final (self::_extension#0|get#parameterType::T*) →* self::_extension#0|get#parameterType::R* #this) → core::Type*
+  return self::_extension#0|get#parameterType::T*;
+static method _extension#1|get#parameterType<T extends self::Class<self::_extension#1|get#parameterType::T*>* = self::Class<dynamic>*>(lowered final <S extends self::_extension#1|get#parameterType::T* = dynamic>(self::_extension#1|get#parameterType::T*, S*) →* dynamic #this) → core::Type*
+  return self::_extension#1|get#parameterType::T*;
+static method main() → dynamic {
+  function local1(core::int* i) → core::int*
+    return i;
+  core::print(self::_extension#0|get#returnType<core::int*, core::int*>(local1));
+  core::print(self::_extension#0|get#parameterType<core::int*, core::int*>(local1));
+  function local2<S extends self::Subclass*>(self::Subclass* a, S* b) → self::Subclass*
+    return a;
+  core::print(self::_extension#1|get#parameterType<self::Subclass*>(local2));
+}
diff --git a/pkg/front_end/testcases/extensions/on_type_inference.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/on_type_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..a5fc214
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_type_inference.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+extension BestCom<T extends core::num*> on core::Iterable<T*>* {
+  method best = self::BestCom|best;
+  tearoff best = self::BestCom|get#best;
+}
+extension BestList<T extends core::Object* = dynamic> on core::List<T*>* {
+  method best = self::BestList|best;
+  tearoff best = self::BestList|get#best;
+}
+extension BestSpec on core::List<core::num*>* {
+  method best = self::BestSpec|best;
+  tearoff best = self::BestSpec|get#best;
+}
+static method BestCom|best<T extends core::num*>(lowered final core::Iterable<self::BestCom|best::T*>* #this) → self::BestCom|best::T*
+  return null;
+static method BestCom|get#best<T extends core::num*>(lowered final core::Iterable<self::BestCom|get#best::T*>* #this) → () →* self::BestCom|get#best::T*
+  return () → self::BestCom|get#best::T* => self::BestCom|best<self::BestCom|get#best::T*>(#this);
+static method BestList|best<T extends core::Object* = dynamic>(lowered final core::List<self::BestList|best::T*>* #this) → self::BestList|best::T*
+  return null;
+static method BestList|get#best<T extends core::Object* = dynamic>(lowered final core::List<self::BestList|get#best::T*>* #this) → () →* self::BestList|get#best::T*
+  return () → self::BestList|get#best::T* => self::BestList|best<self::BestList|get#best::T*>(#this);
+static method BestSpec|best(lowered final core::List<core::num*>* #this) → core::num*
+  return null;
+static method BestSpec|get#best(lowered final core::List<core::num*>* #this) → () →* core::num*
+  return () → core::num* => self::BestSpec|best(#this);
+static method main() → dynamic {
+  core::List<core::int*>* x;
+  core::int* v = self::BestList|best<core::int*>(x);
+  core::List<core::num*>* y;
+  core::num* w = self::BestSpec|best(y);
+}
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..ea9e928
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.modular.expect
@@ -0,0 +1,148 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:44:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'method'.
+//   nonStruct.method();
+//             ^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+//   nonStruct.property = nonStruct.property;
+//                                  ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+//   nonStruct.property = nonStruct.property;
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:46:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'method'.
+//   new NonStruct().method();
+//                   ^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+//   new NonStruct().property;
+//                   ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:48:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+//   new NonStruct().property = null;
+//                   ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Struct extends core::Object {
+  synthetic constructor •() → self::Struct*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class StructA extends self::Struct {
+  synthetic constructor •() → self::StructA*
+    : super self::Struct::•()
+    ;
+}
+class StructB extends self::Struct {
+  synthetic constructor •() → self::StructB*
+    : super self::Struct::•()
+    ;
+}
+class NonStruct extends core::Object {
+  synthetic constructor •() → self::NonStruct*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension<T extends self::Struct*> on T* {
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  get property = self::Extension|get#property;
+  set property = self::Extension|set#property;
+}
+static method Extension|method<T extends self::Struct*>(lowered final self::Extension|method::T* #this) → self::Extension|method::T*
+  return #this;
+static method Extension|get#method<T extends self::Struct*>(lowered final self::Extension|get#method::T* #this) → () →* self::Extension|get#method::T*
+  return () → self::Extension|get#method::T* => self::Extension|method<self::Extension|get#method::T*>(#this);
+static method Extension|get#property<T extends self::Struct*>(lowered final self::Extension|get#property::T* #this) → self::Extension|get#property::T*
+  return #this;
+static method Extension|set#property<T extends self::Struct*>(lowered final self::Extension|set#property::T* #this, self::Extension|set#property::T* value) → void {}
+static method main() → dynamic {
+  self::Struct* struct;
+  self::StructA* structA;
+  self::StructB* structB;
+  self::Extension|method<self::Struct*>(struct);
+  self::Extension|set#property<self::Struct*>(struct, self::Extension|get#property<self::StructA*>(structA));
+  self::Extension|method<self::StructA*>(structA);
+  self::Extension|set#property<self::StructA*>(structA, self::Extension|get#property<self::Struct*>(struct) as{TypeError} self::StructA*);
+  self::Extension|method<self::StructB*>(structB);
+  self::Extension|set#property<self::StructB*>(structB, self::Extension|get#property<self::StructB*>(structB));
+  self::Extension|method<self::Struct*>(new self::Struct::•());
+  self::Extension|get#property<self::Struct*>(new self::Struct::•());
+  self::Extension|set#property<self::Struct*>(new self::Struct::•(), null);
+  self::Extension|method<self::StructA*>(new self::StructA::•());
+  self::Extension|get#property<self::StructA*>(new self::StructA::•());
+  self::Extension|set#property<self::StructA*>(new self::StructA::•(), null);
+  self::Extension|method<self::StructB*>(new self::StructB::•());
+  self::Extension|get#property<self::StructB*>(new self::StructB::•());
+  self::Extension|set#property<self::StructB*>(new self::StructB::•(), null);
+}
+static method testNonStruct() → dynamic {
+  self::NonStruct* nonStruct;
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:44:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'method'.
+  nonStruct.method();
+            ^^^^^^" in nonStruct{<unresolved>}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+  nonStruct.property = nonStruct.property;
+            ^^^^^^^^" in nonStruct{<unresolved>}.property = invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+  nonStruct.property = nonStruct.property;
+                                 ^^^^^^^^" in nonStruct{<unresolved>}.property;
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:46:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'method'.
+  new NonStruct().method();
+                  ^^^^^^" in new self::NonStruct::•(){<unresolved>}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+  new NonStruct().property;
+                  ^^^^^^^^" in new self::NonStruct::•(){<unresolved>}.property;
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:48:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+  new NonStruct().property = null;
+                  ^^^^^^^^" in new self::NonStruct::•(){<unresolved>}.property = null;
+}
diff --git a/pkg/front_end/testcases/extensions/operators.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/operators.dart.weak.modular.expect
new file mode 100644
index 0000000..d97d9f4
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/operators.dart.weak.modular.expect
@@ -0,0 +1,147 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/operators.dart:125:3: Error: Explicit extension application cannot be used as an expression.
+//   Operators(c) == c;
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/operators.dart:126:3: Error: Explicit extension application cannot be used as an expression.
+//   Operators(c) != c;
+//   ^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Complex extends core::Object /*hasConstConstructor*/  {
+  final field core::double* real;
+  final field core::double* imaginary;
+  const constructor •(core::double* real, core::double* imaginary) → self::Complex*
+    : self::Complex::real = real, self::Complex::imaginary = imaginary, super core::Object::•()
+    ;
+  method add(self::Complex* other) → self::Complex* {
+    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::+}(other.{self::Complex::real}{core::double*}){(core::num*) →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::+}(other.{self::Complex::imaginary}{core::double*}){(core::num*) →* core::double*});
+  }
+  method sub(self::Complex* other) → self::Complex* {
+    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::-}(other.{self::Complex::real}{core::double*}){(core::num*) →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::-}(other.{self::Complex::imaginary}{core::double*}){(core::num*) →* core::double*});
+  }
+  method negate() → self::Complex* {
+    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::unary-}(){() →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::unary-}(){() →* core::double*});
+  }
+  get hashCode() → core::int*
+    return this.{self::Complex::real}{core::double*}.{core::num::hashCode}{core::int*}.{core::num::*}(13){(core::num*) →* core::int*}.{core::num::+}(this.{self::Complex::imaginary}{core::double*}.{core::num::hashCode}{core::int*}.{core::num::*}(19){(core::num*) →* core::int*}){(core::num*) →* core::int*};
+  operator ==(core::Object* other) → core::bool* {
+    if(core::identical(this, other))
+      return true;
+    return other is self::Complex* && this.{self::Complex::real}{core::double*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Complex*}.{self::Complex::real}{core::double*} && this.{self::Complex::imaginary}{core::double*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Complex*}.{self::Complex::imaginary}{core::double*};
+  }
+  method toString() → core::String*
+    return "Complex(${this.{self::Complex::real}{core::double*}},${this.{self::Complex::imaginary}{core::double*}})";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Operators on self::Complex* {
+  operator + = self::Operators|+;
+  operator - = self::Operators|-;
+  operator unary- = self::Operators|unary-;
+}
+static method Operators|+(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
+  return #this.{self::Complex::add}(other){(self::Complex*) →* self::Complex*};
+static method Operators|-(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
+  return #this.{self::Complex::sub}(other){(self::Complex*) →* self::Complex*};
+static method Operators|unary-(lowered final self::Complex* #this) → self::Complex*
+  return #this.{self::Complex::negate}(){() →* self::Complex*};
+static method main() → dynamic {
+  self::implicit();
+  self::explicit();
+}
+static method implicit() → dynamic {
+  self::Complex* c_m2 = new self::Complex::•(-2.0, 2.0);
+  self::Complex* c_m1 = new self::Complex::•(-1.0, 1.0);
+  self::Complex* c0 = new self::Complex::•(0.0, 0.0);
+  self::Complex* c1 = new self::Complex::•(1.0, -1.0);
+  self::Complex* c2 = new self::Complex::•(2.0, -2.0);
+  self::expect(c_m2, self::Operators|+(c0, c_m2));
+  self::expect(c_m2, self::Operators|+(c_m2, c0));
+  self::expect(c_m2, self::Operators|+(c_m1, c_m1));
+  self::expect(c_m1, self::Operators|+(c0, c_m1));
+  self::expect(c_m1, self::Operators|+(c_m1, c0));
+  self::expect(c0, self::Operators|+(c_m2, c2));
+  self::expect(c0, self::Operators|+(c2, c_m2));
+  self::expect(c0, self::Operators|+(c_m1, c1));
+  self::expect(c0, self::Operators|+(c1, c_m1));
+  self::expect(c0, self::Operators|+(c0, c0));
+  self::expect(c1, self::Operators|+(c0, c1));
+  self::expect(c1, self::Operators|+(c1, c0));
+  self::expect(c2, self::Operators|+(c0, c2));
+  self::expect(c2, self::Operators|+(c2, c0));
+  self::expect(c2, self::Operators|+(c1, c1));
+  self::expect(c_m2, self::Operators|-(c0, c2));
+  self::expect(c2, self::Operators|-(c2, c0));
+  self::expect(c_m2, self::Operators|unary-(c2));
+  self::expect(c_m1, self::Operators|-(c1, c2));
+  self::expect(c1, self::Operators|-(c2, c1));
+  self::expect(c_m1, self::Operators|-(c0, c1));
+  self::expect(c1, self::Operators|-(c1, c0));
+  self::expect(c_m1, self::Operators|unary-(c1));
+  self::expect(c0, self::Operators|-(c2, c2));
+  self::expect(c0, self::Operators|-(c1, c1));
+  self::expect(c0, self::Operators|-(c0, c0));
+  self::expect(c0, self::Operators|-(c_m1, c_m1));
+  self::expect(c0, self::Operators|-(c_m2, c_m2));
+  self::expect(c0, self::Operators|unary-(c0));
+}
+static method explicit() → dynamic {
+  self::Complex* c_m2 = new self::Complex::•(-2.0, 2.0);
+  self::Complex* c_m1 = new self::Complex::•(-1.0, 1.0);
+  self::Complex* c0 = new self::Complex::•(0.0, 0.0);
+  self::Complex* c1 = new self::Complex::•(1.0, -1.0);
+  self::Complex* c2 = new self::Complex::•(2.0, -2.0);
+  self::expect(c_m2, self::Operators|+(c0, c_m2));
+  self::expect(c_m2, self::Operators|+(c_m2, c0));
+  self::expect(c_m2, self::Operators|+(c_m1, c_m1));
+  self::expect(c_m1, self::Operators|+(c0, c_m1));
+  self::expect(c_m1, self::Operators|+(c_m1, c0));
+  self::expect(c0, self::Operators|+(c_m2, c2));
+  self::expect(c0, self::Operators|+(c2, c_m2));
+  self::expect(c0, self::Operators|+(c_m1, c1));
+  self::expect(c0, self::Operators|+(c1, c_m1));
+  self::expect(c0, self::Operators|+(c0, c0));
+  self::expect(c1, self::Operators|+(c0, c1));
+  self::expect(c1, self::Operators|+(c1, c0));
+  self::expect(c2, self::Operators|+(c0, c2));
+  self::expect(c2, self::Operators|+(c2, c0));
+  self::expect(c2, self::Operators|+(c1, c1));
+  self::expect(c_m2, self::Operators|-(c0, c2));
+  self::expect(c2, self::Operators|-(c2, c0));
+  self::expect(c_m2, self::Operators|unary-(c2));
+  self::expect(c_m1, self::Operators|-(c1, c2));
+  self::expect(c1, self::Operators|-(c2, c1));
+  self::expect(c_m1, self::Operators|-(c0, c1));
+  self::expect(c1, self::Operators|-(c1, c0));
+  self::expect(c_m1, self::Operators|unary-(c1));
+  self::expect(c0, self::Operators|-(c2, c2));
+  self::expect(c0, self::Operators|-(c1, c1));
+  self::expect(c0, self::Operators|-(c0, c0));
+  self::expect(c0, self::Operators|-(c_m1, c_m1));
+  self::expect(c0, self::Operators|-(c_m2, c_m2));
+  self::expect(c0, self::Operators|unary-(c0));
+}
+static method errors(self::Complex* c) → void {
+  invalid-expression "pkg/front_end/testcases/extensions/operators.dart:125:3: Error: Explicit extension application cannot be used as an expression.
+  Operators(c) == c;
+  ^^^^^^^^^" =={core::Object::==}{(core::Object*) →* core::bool*} c;
+  !(invalid-expression "pkg/front_end/testcases/extensions/operators.dart:126:3: Error: Explicit extension application cannot be used as an expression.
+  Operators(c) != c;
+  ^^^^^^^^^" =={core::Object::==}{(core::Object*) →* core::bool*} c);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/other_kinds.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/other_kinds.dart.weak.modular.expect
new file mode 100644
index 0000000..5a567f7
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/other_kinds.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  field core::int* _instanceField = null;
+  static field core::int* _staticField = 0;
+  synthetic constructor •() → self::A1*
+    : super core::Object::•()
+    ;
+  method getInstanceField() → core::int*
+    return this.{self::A1::_instanceField}{core::int*};
+  method setInstanceField(core::int* value) → void {
+    this.{self::A1::_instanceField} = value;
+  }
+  static method getStaticField() → core::int*
+    return self::A1::_staticField;
+  static method setStaticField(core::int* value) → void {
+    self::A1::_staticField = value;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension A2 on self::A1* {
+  get instanceProperty = self::A2|get#instanceProperty;
+  operator + = self::A2|+;
+  operator - = self::A2|-;
+  operator unary- = self::A2|unary-;
+  static field staticField = self::A2|staticField;
+  static get staticProperty = get self::A2|staticProperty;
+  set instanceProperty = self::A2|set#instanceProperty;
+  static set staticProperty = set self::A2|staticProperty;
+}
+static field core::int* A2|staticField = self::A1::getStaticField();
+static method A2|get#instanceProperty(lowered final self::A1* #this) → core::int*
+  return #this.{self::A1::getInstanceField}(){() →* core::int*};
+static method A2|set#instanceProperty(lowered final self::A1* #this, core::int* value) → void {
+  #this.{self::A1::setInstanceField}(value){(core::int*) →* void};
+}
+static method A2|+(lowered final self::A1* #this, core::int* value) → core::int* {
+  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::num::+}(value){(core::num*) →* core::int*};
+}
+static method A2|-(lowered final self::A1* #this, core::int* value) → core::int* {
+  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::num::-}(value){(core::num*) →* core::int*};
+}
+static method A2|unary-(lowered final self::A1* #this) → core::int* {
+  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::int::unary-}(){() →* core::int*};
+}
+static get A2|staticProperty() → core::int*
+  return self::A1::getStaticField();
+static set A2|staticProperty(core::int* value) → void {
+  self::A1::setStaticField(value);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/private_members.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/private_members.dart.weak.modular.expect
new file mode 100644
index 0000000..1e4a440
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/private_members.dart.weak.modular.expect
@@ -0,0 +1,223 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/private_members.dart:23:14: Error: Method not found: '_PrivateExtension'.
+//   expect(42, _PrivateExtension("").publicMethod1());
+//              ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/private_members.dart:24:14: Error: Method not found: '_PrivateExtension'.
+//   expect(87, _PrivateExtension("")._privateMethod1());
+//              ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/private_members.dart:25:35: Error: Method not found: '_privateMethod2'.
+//   expect(237, PublicExtension("")._privateMethod2());
+//                                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/private_members.dart:27:14: Error: Undefined name '_PrivateExtension'.
+//   expect(24, _PrivateExtension.publicStaticMethod1());
+//              ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/private_members.dart:28:14: Error: Undefined name '_PrivateExtension'.
+//   expect(78, _PrivateExtension._privateStaticMethod1());
+//              ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/private_members.dart:29:31: Error: Member not found: 'PublicExtension._privateStaticMethod2'.
+//   expect(732, PublicExtension._privateStaticMethod2());
+//                               ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/private_members.dart:17:17: Error: The method 'publicMethod1' isn't defined for the class 'String'.
+// Try correcting the name to the name of an existing method, or defining a method named 'publicMethod1'.
+//   expect(42, "".publicMethod1());
+//                 ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/private_members.dart:18:17: Error: The method '_privateMethod1' isn't defined for the class 'String'.
+// Try correcting the name to the name of an existing method, or defining a method named '_privateMethod1'.
+//   expect(87, ""._privateMethod1());
+//                 ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/private_members.dart:19:18: Error: The method '_privateMethod2' isn't defined for the class 'String'.
+// Try correcting the name to the name of an existing method, or defining a method named '_privateMethod2'.
+//   expect(237, ""._privateMethod2());
+//                  ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/private_members.dart:20:18: Error: The method 'publicMethod3' isn't defined for the class 'String'.
+// Try correcting the name to the name of an existing method, or defining a method named 'publicMethod3'.
+//   expect(473, "".publicMethod3());
+//                  ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/private_members.dart:21:18: Error: The method '_privateMethod3' isn't defined for the class 'String'.
+// Try correcting the name to the name of an existing method, or defining a method named '_privateMethod3'.
+//   expect(586, ""._privateMethod3());
+//                  ^^^^^^^^^^^^^^^
+//
+import self as self;
+import "private_members_lib.dart" as pri;
+
+import "org-dartlang-testcase:///private_members_lib.dart";
+
+static method main() → dynamic {
+  pri::test();
+  pri::expect(123, pri::PublicExtension|publicMethod2(""));
+  pri::expect(123, pri::PublicExtension|publicMethod2(""));
+  pri::expect(321, pri::PublicExtension|publicStaticMethod2());
+}
+static method errors() → dynamic {
+  pri::expect(42, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:17:17: Error: The method 'publicMethod1' isn't defined for the class 'String'.
+Try correcting the name to the name of an existing method, or defining a method named 'publicMethod1'.
+  expect(42, \"\".publicMethod1());
+                ^^^^^^^^^^^^^" in ""{<unresolved>}.publicMethod1());
+  pri::expect(87, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:18:17: Error: The method '_privateMethod1' isn't defined for the class 'String'.
+Try correcting the name to the name of an existing method, or defining a method named '_privateMethod1'.
+  expect(87, \"\"._privateMethod1());
+                ^^^^^^^^^^^^^^^" in ""{<unresolved>}._privateMethod1());
+  pri::expect(237, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:19:18: Error: The method '_privateMethod2' isn't defined for the class 'String'.
+Try correcting the name to the name of an existing method, or defining a method named '_privateMethod2'.
+  expect(237, \"\"._privateMethod2());
+                 ^^^^^^^^^^^^^^^" in ""{<unresolved>}._privateMethod2());
+  pri::expect(473, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:20:18: Error: The method 'publicMethod3' isn't defined for the class 'String'.
+Try correcting the name to the name of an existing method, or defining a method named 'publicMethod3'.
+  expect(473, \"\".publicMethod3());
+                 ^^^^^^^^^^^^^" in ""{<unresolved>}.publicMethod3());
+  pri::expect(586, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:21:18: Error: The method '_privateMethod3' isn't defined for the class 'String'.
+Try correcting the name to the name of an existing method, or defining a method named '_privateMethod3'.
+  expect(586, \"\"._privateMethod3());
+                 ^^^^^^^^^^^^^^^" in ""{<unresolved>}._privateMethod3());
+  pri::expect(42, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:23:14: Error: Method not found: '_PrivateExtension'.
+  expect(42, _PrivateExtension(\"\").publicMethod1());
+             ^^^^^^^^^^^^^^^^^"{dynamic}.publicMethod1());
+  pri::expect(87, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:24:14: Error: Method not found: '_PrivateExtension'.
+  expect(87, _PrivateExtension(\"\")._privateMethod1());
+             ^^^^^^^^^^^^^^^^^"{dynamic}._privateMethod1());
+  pri::expect(237, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:25:35: Error: Method not found: '_privateMethod2'.
+  expect(237, PublicExtension(\"\")._privateMethod2());
+                                  ^^^^^^^^^^^^^^^");
+  pri::expect(24, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:27:14: Error: Undefined name '_PrivateExtension'.
+  expect(24, _PrivateExtension.publicStaticMethod1());
+             ^^^^^^^^^^^^^^^^^"{dynamic}.publicStaticMethod1());
+  pri::expect(78, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:28:14: Error: Undefined name '_PrivateExtension'.
+  expect(78, _PrivateExtension._privateStaticMethod1());
+             ^^^^^^^^^^^^^^^^^"{dynamic}._privateStaticMethod1());
+  pri::expect(732, invalid-expression "pkg/front_end/testcases/extensions/private_members.dart:29:31: Error: Member not found: 'PublicExtension._privateStaticMethod2'.
+  expect(732, PublicExtension._privateStaticMethod2());
+                              ^^^^^^^^^^^^^^^^^^^^^");
+}
+
+library;
+import self as pri;
+import "dart:core" as core;
+
+extension _PrivateExtension on core::String* {
+  method publicMethod1 = pri::_PrivateExtension|publicMethod1;
+  tearoff publicMethod1 = pri::_PrivateExtension|get#publicMethod1;
+  method _privateMethod1 = pri::_PrivateExtension|_privateMethod1;
+  tearoff _privateMethod1 = pri::_PrivateExtension|get#_privateMethod1;
+  static method publicStaticMethod1 = pri::_PrivateExtension|publicStaticMethod1;
+  static method _privateStaticMethod1 = pri::_PrivateExtension|_privateStaticMethod1;
+  method test1 = pri::_PrivateExtension|test1;
+  tearoff test1 = pri::_PrivateExtension|get#test1;
+}
+extension PublicExtension on core::String* {
+  method publicMethod2 = pri::PublicExtension|publicMethod2;
+  tearoff publicMethod2 = pri::PublicExtension|get#publicMethod2;
+  method _privateMethod2 = pri::PublicExtension|_privateMethod2;
+  tearoff _privateMethod2 = pri::PublicExtension|get#_privateMethod2;
+  static method publicStaticMethod2 = pri::PublicExtension|publicStaticMethod2;
+  static method _privateStaticMethod2 = pri::PublicExtension|_privateStaticMethod2;
+  method test2 = pri::PublicExtension|test2;
+  tearoff test2 = pri::PublicExtension|get#test2;
+}
+extension _extension#0 on core::String* {
+  method publicMethod3 = pri::_extension#0|publicMethod3;
+  tearoff publicMethod3 = pri::_extension#0|get#publicMethod3;
+  method _privateMethod3 = pri::_extension#0|_privateMethod3;
+  tearoff _privateMethod3 = pri::_extension#0|get#_privateMethod3;
+  static method publicStaticMethod3 = pri::_extension#0|publicStaticMethod3;
+  static method _privateStaticMethod3 = pri::_extension#0|_privateStaticMethod3;
+  method test3 = pri::_extension#0|test3;
+  tearoff test3 = pri::_extension#0|get#test3;
+}
+static method _PrivateExtension|publicMethod1(lowered final core::String* #this) → core::int*
+  return 42;
+static method _PrivateExtension|get#publicMethod1(lowered final core::String* #this) → () →* core::int*
+  return () → core::int* => pri::_PrivateExtension|publicMethod1(#this);
+static method _PrivateExtension|_privateMethod1(lowered final core::String* #this) → core::int*
+  return 87;
+static method _PrivateExtension|get#_privateMethod1(lowered final core::String* #this) → () →* core::int*
+  return () → core::int* => pri::_PrivateExtension|_privateMethod1(#this);
+static method _PrivateExtension|publicStaticMethod1() → core::int*
+  return 24;
+static method _PrivateExtension|_privateStaticMethod1() → core::int*
+  return 78;
+static method _PrivateExtension|test1(lowered final core::String* #this) → dynamic {
+  pri::expect(42, pri::_PrivateExtension|publicMethod1(#this));
+  pri::expect(87, pri::_PrivateExtension|_privateMethod1(#this));
+  pri::expect(24, pri::_PrivateExtension|publicStaticMethod1());
+  pri::expect(78, pri::_PrivateExtension|_privateStaticMethod1());
+}
+static method _PrivateExtension|get#test1(lowered final core::String* #this) → () →* dynamic
+  return () → dynamic => pri::_PrivateExtension|test1(#this);
+static method PublicExtension|publicMethod2(lowered final core::String* #this) → core::int*
+  return 123;
+static method PublicExtension|get#publicMethod2(lowered final core::String* #this) → () →* core::int*
+  return () → core::int* => pri::PublicExtension|publicMethod2(#this);
+static method PublicExtension|_privateMethod2(lowered final core::String* #this) → core::int*
+  return 237;
+static method PublicExtension|get#_privateMethod2(lowered final core::String* #this) → () →* core::int*
+  return () → core::int* => pri::PublicExtension|_privateMethod2(#this);
+static method PublicExtension|publicStaticMethod2() → core::int*
+  return 321;
+static method PublicExtension|_privateStaticMethod2() → core::int*
+  return 732;
+static method PublicExtension|test2(lowered final core::String* #this) → dynamic {
+  pri::expect(123, pri::PublicExtension|publicMethod2(#this));
+  pri::expect(237, pri::PublicExtension|_privateMethod2(#this));
+  pri::expect(321, pri::PublicExtension|publicStaticMethod2());
+  pri::expect(732, pri::PublicExtension|_privateStaticMethod2());
+}
+static method PublicExtension|get#test2(lowered final core::String* #this) → () →* dynamic
+  return () → dynamic => pri::PublicExtension|test2(#this);
+static method _extension#0|publicMethod3(lowered final core::String* #this) → core::int*
+  return 473;
+static method _extension#0|get#publicMethod3(lowered final core::String* #this) → () →* core::int*
+  return () → core::int* => pri::_extension#0|publicMethod3(#this);
+static method _extension#0|_privateMethod3(lowered final core::String* #this) → core::int*
+  return 586;
+static method _extension#0|get#_privateMethod3(lowered final core::String* #this) → () →* core::int*
+  return () → core::int* => pri::_extension#0|_privateMethod3(#this);
+static method _extension#0|publicStaticMethod3() → core::int*
+  return 374;
+static method _extension#0|_privateStaticMethod3() → core::int*
+  return 685;
+static method _extension#0|test3(lowered final core::String* #this) → dynamic {
+  pri::expect(473, pri::_extension#0|publicMethod3(#this));
+  pri::expect(586, pri::_extension#0|_privateMethod3(#this));
+  pri::expect(374, pri::_extension#0|publicStaticMethod3());
+  pri::expect(685, pri::_extension#0|_privateStaticMethod3());
+}
+static method _extension#0|get#test3(lowered final core::String* #this) → () →* dynamic
+  return () → dynamic => pri::_extension#0|test3(#this);
+static method test() → dynamic {
+  pri::expect(42, pri::_PrivateExtension|publicMethod1(""));
+  pri::expect(87, pri::_PrivateExtension|_privateMethod1(""));
+  pri::expect(123, pri::PublicExtension|publicMethod2(""));
+  pri::expect(237, pri::PublicExtension|_privateMethod2(""));
+  pri::expect(473, pri::_extension#0|publicMethod3(""));
+  pri::expect(586, pri::_extension#0|_privateMethod3(""));
+  pri::expect(42, pri::_PrivateExtension|publicMethod1(""));
+  pri::expect(87, pri::_PrivateExtension|_privateMethod1(""));
+  pri::expect(123, pri::PublicExtension|publicMethod2(""));
+  pri::expect(237, pri::PublicExtension|_privateMethod2(""));
+  pri::expect(24, pri::_PrivateExtension|publicStaticMethod1());
+  pri::expect(78, pri::_PrivateExtension|_privateStaticMethod1());
+  pri::expect(321, pri::PublicExtension|publicStaticMethod2());
+  pri::expect(732, pri::PublicExtension|_privateStaticMethod2());
+  pri::_PrivateExtension|test1("");
+  pri::PublicExtension|test2("");
+  pri::_extension#0|test3("");
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/static_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/static_access.dart.weak.modular.expect
new file mode 100644
index 0000000..973805f
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/static_access.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on self::Class* {
+  static method method = self::Extension|method;
+  static method genericMethod = self::Extension|genericMethod;
+  static get property = get self::Extension|property;
+  static field field = self::Extension|field;
+  method instanceMethod = self::Extension|instanceMethod;
+  tearoff instanceMethod = self::Extension|get#instanceMethod;
+  get instanceProperty = self::Extension|get#instanceProperty;
+  static set property = set self::Extension|property;
+  set instanceProperty = self::Extension|set#instanceProperty;
+}
+static field dynamic Extension|field;
+static method Extension|method() → dynamic {}
+static method Extension|genericMethod<T extends core::Object* = dynamic>(self::Extension|genericMethod::T* t) → dynamic {}
+static get Extension|property() → dynamic
+  return 42;
+static set Extension|property(dynamic value) → void {}
+static method Extension|instanceMethod(lowered final self::Class* #this) → dynamic {}
+static method Extension|get#instanceMethod(lowered final self::Class* #this) → () →* dynamic
+  return () → dynamic => self::Extension|instanceMethod(#this);
+static method Extension|get#instanceProperty(lowered final self::Class* #this) → dynamic
+  return 42;
+static method Extension|set#instanceProperty(lowered final self::Class* #this, dynamic value) → void {}
+static method main() → dynamic {
+  self::Extension|method();
+  self::Extension|genericMethod<core::int*>(42);
+  self::Extension|genericMethod<core::num*>(42);
+  #C1;
+  #C2;
+  self::Extension|property;
+  self::Extension|property = 42;
+  self::Extension|field;
+  self::Extension|field = 42;
+}
+
+constants  {
+  #C1 = static-tearoff self::Extension|method
+  #C2 = static-tearoff self::Extension|genericMethod
+}
diff --git a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.modular.expect
new file mode 100644
index 0000000..b6e0e94
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.modular.expect
@@ -0,0 +1,64 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/static_access_of_instance.dart:14:13: Error: Member not found: 'Extension.instanceMethod'.
+//   Extension.instanceMethod();
+//             ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/static_access_of_instance.dart:15:13: Error: Member not found: 'instanceMethod'.
+//   Extension.instanceMethod;
+//             ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/static_access_of_instance.dart:16:13: Error: Member not found: 'instanceProperty'.
+//   Extension.instanceProperty;
+//             ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/static_access_of_instance.dart:17:13: Error: Setter not found: 'instanceProperty'.
+//   Extension.instanceProperty = 42;
+//             ^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on self::Class* {
+  method instanceMethod = self::Extension|instanceMethod;
+  tearoff instanceMethod = self::Extension|get#instanceMethod;
+  get instanceProperty = self::Extension|get#instanceProperty;
+  set instanceProperty = self::Extension|set#instanceProperty;
+}
+static method Extension|instanceMethod(lowered final self::Class* #this) → dynamic {}
+static method Extension|get#instanceMethod(lowered final self::Class* #this) → () →* dynamic
+  return () → dynamic => self::Extension|instanceMethod(#this);
+static method Extension|get#instanceProperty(lowered final self::Class* #this) → dynamic
+  return 42;
+static method Extension|set#instanceProperty(lowered final self::Class* #this, dynamic value) → void {}
+static method main() → dynamic {
+  invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:14:13: Error: Member not found: 'Extension.instanceMethod'.
+  Extension.instanceMethod();
+            ^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:15:13: Error: Member not found: 'instanceMethod'.
+  Extension.instanceMethod;
+            ^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:16:13: Error: Member not found: 'instanceProperty'.
+  Extension.instanceProperty;
+            ^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/static_access_of_instance.dart:17:13: Error: Setter not found: 'instanceProperty'.
+  Extension.instanceProperty = 42;
+            ^^^^^^^^^^^^^^^^";
+}
diff --git a/pkg/front_end/testcases/extensions/tear_offs.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/tear_offs.dart.weak.modular.expect
new file mode 100644
index 0000000..d56bc4b
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/tear_offs.dart.weak.modular.expect
@@ -0,0 +1,75 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/tear_offs.dart:17:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+//     int Function(int) intId = getter;
+//                               ^
+//
+// pkg/front_end/testcases/extensions/tear_offs.dart:30:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
+//   num Function(num) numId = c.getter;
+//                               ^
+//
+// pkg/front_end/testcases/extensions/tear_offs.dart:31:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
+//   bool Function(bool) boolId = Extension(c).getter;
+//                                             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on self::Class* {
+  method id = self::Extension|id;
+  tearoff id = self::Extension|get#id;
+  get getter = self::Extension|get#getter;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  method errors = self::Extension|errors;
+  tearoff errors = self::Extension|get#errors;
+}
+static method Extension|id<T extends core::Object* = dynamic>(lowered final self::Class* #this, self::Extension|id::T* t) → self::Extension|id::T*
+  return t;
+static method Extension|get#id(lowered final self::Class* #this) → <T extends core::Object* = dynamic>(T*) →* T*
+  return <T extends core::Object* = dynamic>(T* t) → T* => self::Extension|id<T*>(#this, t);
+static method Extension|get#getter(lowered final self::Class* #this) → <T extends core::Object* = dynamic>(T*) →* T*
+  return self::Extension|get#id(#this);
+static method Extension|method(lowered final self::Class* #this) → dynamic {
+  (core::String*) →* core::String* stringId = self::Extension|get#id(#this)<core::String*>;
+}
+static method Extension|get#method(lowered final self::Class* #this) → () →* dynamic
+  return () → dynamic => self::Extension|method(#this);
+static method Extension|errors(lowered final self::Class* #this) → dynamic {
+  (core::int*) →* core::int* intId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:17:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+    int Function(int) intId = getter;
+                              ^" in self::Extension|get#getter(#this) as{TypeError} (core::int*) →* core::int*;
+}
+static method Extension|get#errors(lowered final self::Class* #this) → () →* dynamic
+  return () → dynamic => self::Extension|errors(#this);
+static method main() → dynamic {
+  self::Class* c = new self::Class::•();
+  (core::int*) →* core::int* intId = self::Extension|get#id(c)<core::int*>;
+  (core::double*) →* core::double* doubleId = self::Extension|get#id(c)<core::double*>;
+}
+static method errors() → dynamic {
+  self::Class* c = new self::Class::•();
+  (core::num*) →* core::num* numId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:30:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
+  num Function(num) numId = c.getter;
+                              ^" in self::Extension|get#getter(c) as{TypeError} (core::num*) →* core::num*;
+  (core::bool*) →* core::bool* boolId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:31:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
+  bool Function(bool) boolId = Extension(c).getter;
+                                            ^" in self::Extension|get#getter(c) as{TypeError} (core::bool*) →* core::bool*;
+}
diff --git a/pkg/front_end/testcases/extensions/type_variable_bound.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/type_variable_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..42e4b34
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/type_variable_bound.dart.weak.modular.expect
@@ -0,0 +1,61 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SubClass extends self::Class {
+  synthetic constructor •() → self::SubClass*
+    : super self::Class::•()
+    ;
+}
+extension Extension<T extends core::Object* = dynamic> on T* {
+  method method1 = self::Extension|method1;
+  tearoff method1 = self::Extension|get#method1;
+}
+extension BoundExtension<T extends self::Class*> on T* {
+  method method2 = self::BoundExtension|method2;
+  tearoff method2 = self::BoundExtension|get#method2;
+}
+static method Extension|method1<T extends core::Object* = dynamic>(lowered final self::Extension|method1::T* #this) → self::Extension|method1::T*
+  return #this;
+static method Extension|get#method1<T extends core::Object* = dynamic>(lowered final self::Extension|get#method1::T* #this) → () →* self::Extension|get#method1::T*
+  return () → self::Extension|get#method1::T* => self::Extension|method1<self::Extension|get#method1::T*>(#this);
+static method BoundExtension|method2<T extends self::Class*>(lowered final self::BoundExtension|method2::T* #this) → self::BoundExtension|method2::T*
+  return #this;
+static method BoundExtension|get#method2<T extends self::Class*>(lowered final self::BoundExtension|get#method2::T* #this) → () →* self::BoundExtension|get#method2::T*
+  return () → self::BoundExtension|get#method2::T* => self::BoundExtension|method2<self::BoundExtension|get#method2::T*>(#this);
+static method test1<T extends core::Object* = dynamic>(self::test1::T* t1) → self::Class* {
+  if(t1 is self::SubClass*) {
+    return self::Extension|method1<self::SubClass*>(t1{self::test1::T* & self::SubClass* /* '*' & '*' = '*' */});
+  }
+  return new self::Class::•();
+}
+static method test2<T extends self::Class*>(self::test2::T* t2) → dynamic {
+  if(self::test2::T* =={core::Type::==}{(core::Object*) →* core::bool*} #C1) {
+    self::SubClass* subClass = self::BoundExtension|method2<self::Class*>(t2) as{TypeError} self::SubClass*;
+  }
+}
+static method test3<T extends core::Object* = dynamic>(self::test3::T* t3) → dynamic {
+  if(t3 is self::SubClass*) {
+    self::SubClass* subClass = self::BoundExtension|method2<self::SubClass*>(t3{self::test3::T* & self::SubClass* /* '*' & '*' = '*' */});
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::SubClass*)
+}
diff --git a/pkg/front_end/testcases/extensions/type_variables.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/type_variables.dart.weak.modular.expect
new file mode 100644
index 0000000..aeae0f7
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/type_variables.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A1<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A1<self::A1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension A2<T extends core::Object* = dynamic> on self::A1<T*>* {
+  method method1 = self::A2|method1;
+  tearoff method1 = self::A2|get#method1;
+  method method2 = self::A2|method2;
+  tearoff method2 = self::A2|get#method2;
+}
+extension A3<T extends self::A1<T*>* = self::A1<dynamic>*> on self::A1<T*>* {
+}
+extension A4<T extends core::Object* = dynamic> on self::A1<T*>* {
+  method method = self::A4|method;
+  tearoff method = self::A4|get#method;
+}
+static method A2|method1<T extends core::Object* = dynamic, S extends self::A2|method1::T* = dynamic>(lowered final self::A1<self::A2|method1::T*>* #this) → self::A1<self::A2|method1::T*>* {
+  return #this;
+}
+static method A2|get#method1<T extends core::Object* = dynamic>(lowered final self::A1<self::A2|get#method1::T*>* #this) → <S extends self::A2|get#method1::T* = dynamic>() →* self::A1<self::A2|get#method1::T*>*
+  return <S extends self::A2|get#method1::T* = dynamic>() → self::A1<self::A2|get#method1::T*>* => self::A2|method1<self::A2|get#method1::T*, S*>(#this);
+static method A2|method2<T extends core::Object* = dynamic, S extends self::A1<self::A2|method2::T*>* = self::A1<dynamic>*>(lowered final self::A1<self::A2|method2::T*>* #this, self::A2|method2::S* o) → self::A1<self::A2|method2::T*>* {
+  core::print(o);
+  core::print(self::A2|method2::T*);
+  core::print(self::A2|method2::S*);
+  return #this;
+}
+static method A2|get#method2<T extends core::Object* = dynamic>(lowered final self::A1<self::A2|get#method2::T*>* #this) → <S extends self::A1<self::A2|get#method2::T*>* = self::A1<dynamic>*>(S*) →* self::A1<self::A2|get#method2::T*>*
+  return <S extends self::A1<self::A2|get#method2::T*>* = self::A1<dynamic>*>(S* o) → self::A1<self::A2|get#method2::T*>* => self::A2|method2<self::A2|get#method2::T*, S*>(#this, o);
+static method A4|method<#T extends core::Object* = dynamic, T extends core::Object* = dynamic>(lowered final self::A1<self::A4|method::#T*>* #this) → dynamic {}
+static method A4|get#method<#T extends core::Object* = dynamic>(lowered final self::A1<self::A4|get#method::#T*>* #this) → <T extends core::Object* = dynamic>() →* dynamic
+  return <T extends core::Object* = dynamic>() → dynamic => self::A4|method<self::A4|get#method::#T*, T*>(#this);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.modular.expect
new file mode 100644
index 0000000..6532400
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.modular.expect
@@ -0,0 +1,147 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  field core::int* field;
+  constructor •(core::int* field) → self::Class1*
+    : self::Class1::field = field, super core::Object::•()
+    ;
+  method toString() → core::String*
+    return "Class1(${this.{self::Class1::field}{core::int*}})";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class2 extends core::Object {
+  field core::int* field;
+  constructor •(core::int* field) → self::Class2*
+    : self::Class2::field = field, super core::Object::•()
+    ;
+  method toString() → core::String*
+    return "Class2(${this.{self::Class2::field}{core::int*}})";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension _extension#0 on self::Class1* {
+  method method = self::_extension#0|method;
+  tearoff method = self::_extension#0|get#method;
+  method genericMethod = self::_extension#0|genericMethod;
+  tearoff genericMethod = self::_extension#0|get#genericMethod;
+  get property = self::_extension#0|get#property;
+  set property = self::_extension#0|set#property;
+}
+extension _extension#1 on self::Class2* {
+  method method = self::_extension#1|method;
+  tearoff method = self::_extension#1|get#method;
+  method genericMethod = self::_extension#1|genericMethod;
+  tearoff genericMethod = self::_extension#1|get#genericMethod;
+  get property = self::_extension#1|get#property;
+  set property = self::_extension#1|set#property;
+}
+static method _extension#0|method(lowered final self::Class1* #this) → core::int* {
+  core::print("Extension1.method on ${#this}");
+  return #this.{self::Class1::field}{core::int*};
+}
+static method _extension#0|get#method(lowered final self::Class1* #this) → () →* core::int*
+  return () → core::int* => self::_extension#0|method(#this);
+static method _extension#0|genericMethod<T extends core::num*>(lowered final self::Class1* #this, self::_extension#0|genericMethod::T* t) → core::int* {
+  core::print("Extension1.genericMethod<${self::_extension#0|genericMethod::T*}>(${t}) on ${#this}");
+  return #this.{self::Class1::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
+}
+static method _extension#0|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
+  return <T extends core::num*>(T* t) → core::int* => self::_extension#0|genericMethod<T*>(#this, t);
+static method _extension#0|get#property(lowered final self::Class1* #this) → core::int* {
+  core::print("Extension1.property get on ${#this}");
+  return #this.{self::Class1::field}{core::int*};
+}
+static method _extension#0|set#property(lowered final self::Class1* #this, core::int* value) → void {
+  #this.{self::Class1::field} = value;
+  core::print("Extension1.property set(${value}) on ${#this}");
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
+}
+static method _extension#1|method(lowered final self::Class2* #this) → core::int* {
+  core::print("Extension2.method on ${#this}");
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*};
+}
+static method _extension#1|get#method(lowered final self::Class2* #this) → () →* core::int*
+  return () → core::int* => self::_extension#1|method(#this);
+static method _extension#1|genericMethod<T extends core::num*>(lowered final self::Class2* #this, self::_extension#1|genericMethod::T* t) → core::int* {
+  core::print("Extension2.genericMethod<${self::_extension#1|genericMethod::T*}>(${t}) on ${#this}");
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(4){(core::num*) →* core::num*} as{TypeError} core::int*;
+}
+static method _extension#1|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
+  return <T extends core::num*>(T* t) → core::int* => self::_extension#1|genericMethod<T*>(#this, t);
+static method _extension#1|get#property(lowered final self::Class2* #this) → core::int* {
+  core::print("Extension2.property get on ${#this}");
+  return #this.{self::Class2::field}{core::int*}.{core::num::+}(5){(core::num*) →* core::int*};
+}
+static method _extension#1|set#property(lowered final self::Class2* #this, core::int* value) → void {
+  core::print("Extension2.property set(${value}) on ${#this}");
+  value = value.{core::num::+}(1){(core::num*) →* core::int*};
+  #this.{self::Class2::field} = value;
+}
+static method main() → dynamic {
+  self::testExtension1();
+  self::testExtension2();
+}
+static method testExtension1() → dynamic {
+  self::Class1* c0 = new self::Class1::•(0);
+  self::Class1* c1 = new self::Class1::•(1);
+  self::expect(0, self::_extension#0|method(c0));
+  self::expect(1, self::_extension#0|method(c1));
+  self::expect(1, let final self::Class1* #t1 = c1 in #t1 == null ?{core::int*} null : self::_extension#0|method(#t1));
+  self::expect(42, self::_extension#0|genericMethod<core::int*>(c0, 42));
+  self::expect(43, self::_extension#0|genericMethod<core::num*>(c0, 43));
+  self::expect(88, self::_extension#0|genericMethod<core::int*>(c1, 87));
+  self::expect(89, self::_extension#0|genericMethod<core::num*>(c1, 88));
+  self::expect(0, self::_extension#0|get#property(c0));
+  self::expect(0, let final self::Class1* #t2 = c0 in #t2 == null ?{core::int*} null : self::_extension#0|get#property(#t2));
+  self::expect(42, let final core::int* #t3 = 42 in let final void #t4 = self::_extension#0|set#property(c0, #t3) in #t3);
+  self::expect(1, self::_extension#0|get#property(c1));
+  self::expect(87, let final core::int* #t5 = 87 in let final void #t6 = self::_extension#0|set#property(c0, #t5) in #t5);
+  self::expect(27, let final core::int* #t7 = let final core::int* #t8 = 27 in let final void #t9 = self::_extension#0|set#property(c1, #t8) in #t8 in let final void #t10 = self::_extension#0|set#property(c0, #t7) in #t7);
+  self::expect(37, let final core::int* #t11 = let final core::int* #t12 = 37 in let final void #t13 = self::_extension#0|set#property(c0, #t12) in #t12 in let final void #t14 = self::_extension#0|set#property(c1, #t11) in #t11);
+  self::expect(77, let final core::int* #t15 = let final core::int* #t16 = let final core::int* #t17 = 77 in let final void #t18 = self::_extension#0|set#property(c1, #t17) in #t17 in let final void #t19 = self::_extension#0|set#property(c0, #t16) in #t16 in let final void #t20 = self::_extension#0|set#property(c1, #t15) in #t15);
+  self::expect(67, let final core::int* #t21 = let final core::int* #t22 = let final core::int* #t23 = 67 in let final void #t24 = self::_extension#0|set#property(c0, #t23) in #t23 in let final void #t25 = self::_extension#0|set#property(c1, #t22) in #t22 in let final void #t26 = self::_extension#0|set#property(c0, #t21) in #t21);
+}
+static method testExtension2() → dynamic {
+  self::Class2* c0 = new self::Class2::•(0);
+  self::Class2* c1 = new self::Class2::•(1);
+  self::expect(3, self::_extension#1|method(c0));
+  self::expect(3, let final self::Class2* #t27 = c0 in #t27 == null ?{core::int*} null : self::_extension#1|method(#t27));
+  self::expect(4, self::_extension#1|method(c1));
+  self::expect(46, self::_extension#1|genericMethod<core::int*>(c0, 42));
+  self::expect(47, self::_extension#1|genericMethod<core::num*>(c0, 43));
+  self::expect(92, self::_extension#1|genericMethod<core::int*>(c1, 87));
+  self::expect(93, self::_extension#1|genericMethod<core::num*>(c1, 88));
+  self::expect(5, self::_extension#1|get#property(c0));
+  self::expect(5, let final self::Class2* #t28 = c0 in #t28 == null ?{core::int*} null : self::_extension#1|get#property(#t28));
+  self::expect(42, let final core::int* #t29 = 42 in let final void #t30 = self::_extension#1|set#property(c0, #t29) in #t29);
+  self::expect(48, self::_extension#1|get#property(c0));
+  self::expect(6, self::_extension#1|get#property(c1));
+  self::expect(43, let final core::int* #t31 = 43 in let final void #t32 = self::_extension#1|set#property(c1, #t31) in #t31);
+  self::expect(49, self::_extension#1|get#property(c1));
+  self::expect(49, let final core::int* #t33 = self::_extension#1|get#property(c1) in let final void #t34 = self::_extension#1|set#property(c0, #t33) in #t33);
+  self::expect(55, let final core::int* #t35 = self::_extension#1|get#property(c0) in let final void #t36 = self::_extension#1|set#property(c1, #t35) in #t35);
+  self::expect(61, let final core::int* #t37 = let final core::int* #t38 = self::_extension#1|get#property(c1) in let final void #t39 = self::_extension#1|set#property(c0, #t38) in #t38 in let final void #t40 = self::_extension#1|set#property(c1, #t37) in #t37);
+  self::expect(67, let final core::int* #t41 = let final core::int* #t42 = self::_extension#1|get#property(c0) in let final void #t43 = self::_extension#1|set#property(c1, #t42) in #t42 in let final void #t44 = self::_extension#1|set#property(c0, #t41) in #t41);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/use_this.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/use_this.dart.weak.modular.expect
new file mode 100644
index 0000000..f7ce7a4
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/use_this.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  synthetic constructor •() → self::A1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B1<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B1<self::B1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension A2 on self::A1* {
+  method method1 = self::A2|method1;
+  tearoff method1 = self::A2|get#method1;
+  method method2 = self::A2|method2;
+  tearoff method2 = self::A2|get#method2;
+}
+extension B2<T extends core::Object* = dynamic> on self::B1<T*>* {
+  method method1 = self::B2|method1;
+  tearoff method1 = self::B2|get#method1;
+  method method2 = self::B2|method2;
+  tearoff method2 = self::B2|get#method2;
+}
+static method A2|method1(lowered final self::A1* #this) → self::A1* {
+  return #this;
+}
+static method A2|get#method1(lowered final self::A1* #this) → () →* self::A1*
+  return () → self::A1* => self::A2|method1(#this);
+static method A2|method2<T extends core::Object* = dynamic>(lowered final self::A1* #this, self::A2|method2::T* o) → self::A1* {
+  core::print(o);
+  return #this;
+}
+static method A2|get#method2(lowered final self::A1* #this) → <T extends core::Object* = dynamic>(T*) →* self::A1*
+  return <T extends core::Object* = dynamic>(T* o) → self::A1* => self::A2|method2<T*>(#this, o);
+static method B2|method1<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>* {
+  return #this;
+}
+static method B2|get#method1<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|get#method1::T*>* #this) → () →* self::B1<self::B2|get#method1::T*>*
+  return () → self::B1<self::B2|get#method1::T*>* => self::B2|method1<self::B2|get#method1::T*>(#this);
+static method B2|method2<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(lowered final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::T*>* {
+  core::print(o);
+  return #this;
+}
+static method B2|get#method2<T extends core::Object* = dynamic>(lowered final self::B1<self::B2|get#method2::T*>* #this) → <S extends core::Object* = dynamic>(S*) →* self::B1<self::B2|get#method2::T*>*
+  return <S extends core::Object* = dynamic>(S* o) → self::B1<self::B2|get#method2::T*>* => self::B2|method2<self::B2|get#method2::T*, S*>(#this, o);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.modular.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.modular.expect
new file mode 100644
index 0000000..c7ae21e
--- /dev/null
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.modular.expect
@@ -0,0 +1,541 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class DeltaBlue extends core::Object {
+  synthetic constructor •() → self::DeltaBlue*
+    : super core::Object::•()
+    ;
+  method run() → void {
+    self::chainTest(100);
+    self::projectionTest(100);
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Strength extends core::Object /*hasConstConstructor*/  {
+  final field core::int* value;
+  final field core::String* name;
+  const constructor •(core::int* value, core::String* name) → self::Strength*
+    : self::Strength::value = value, self::Strength::name = name, super core::Object::•()
+    ;
+  method nextWeaker() → self::Strength*
+    return #C19.{core::List::[]}(this.{self::Strength::value}{core::int*}){(core::int*) →* self::Strength*};
+  static method stronger(self::Strength* s1, self::Strength* s2) → core::bool* {
+    return s1.{self::Strength::value}{core::int*}.{core::num::<}(s2.{self::Strength::value}{core::int*}){(core::num*) →* core::bool*};
+  }
+  static method weaker(self::Strength* s1, self::Strength* s2) → core::bool* {
+    return s1.{self::Strength::value}{core::int*}.{core::num::>}(s2.{self::Strength::value}{core::int*}){(core::num*) →* core::bool*};
+  }
+  static method weakest(self::Strength* s1, self::Strength* s2) → self::Strength* {
+    return self::Strength::weaker(s1, s2) ?{self::Strength*} s1 : s2;
+  }
+  static method strongest(self::Strength* s1, self::Strength* s2) → self::Strength* {
+    return self::Strength::stronger(s1, s2) ?{self::Strength*} s1 : s2;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Constraint extends core::Object /*hasConstConstructor*/  {
+  final field self::Strength* strength;
+  const constructor •(self::Strength* strength) → self::Constraint*
+    : self::Constraint::strength = strength, super core::Object::•()
+    ;
+  abstract method isSatisfied() → core::bool*;
+  abstract method markUnsatisfied() → void;
+  abstract method addToGraph() → void;
+  abstract method removeFromGraph() → void;
+  abstract method chooseMethod(core::int* mark) → void;
+  abstract method markInputs(core::int* mark) → void;
+  abstract method inputsKnown(core::int* mark) → core::bool*;
+  abstract method output() → self::Variable*;
+  abstract method execute() → void;
+  abstract method recalculate() → void;
+  method addConstraint() → void {
+    this.{self::Constraint::addToGraph}(){() →* void};
+    self::planner.{self::Planner::incrementalAdd}(this){(self::Constraint*) →* void};
+  }
+  method satisfy(dynamic mark) → self::Constraint* {
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
+    if(!this.{self::Constraint::isSatisfied}(){() →* core::bool*}) {
+      if(this.{self::Constraint::strength}{self::Strength*} =={self::Strength::==}{(dynamic) →* core::bool*} #C22) {
+        core::print("Could not satisfy a required constraint!");
+      }
+      return null;
+    }
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
+    self::Variable* out = this.{self::Constraint::output}(){() →* self::Variable*};
+    self::Constraint* overridden = out.{self::Variable::determinedBy}{self::Constraint*};
+    if(!(overridden == null))
+      overridden.{self::Constraint::markUnsatisfied}(){() →* void};
+    out.{self::Variable::determinedBy} = this;
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*){(self::Constraint*, core::int*) →* core::bool*})
+      core::print("Cycle encountered");
+    out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
+    return overridden;
+  }
+  method destroyConstraint() → void {
+    if(this.{self::Constraint::isSatisfied}(){() →* core::bool*})
+      self::planner.{self::Planner::incrementalRemove}(this){(self::Constraint*) →* void};
+    this.{self::Constraint::removeFromGraph}(){() →* void};
+  }
+  method isInput() → core::bool*
+    return false;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class UnaryConstraint extends self::Constraint {
+  final field self::Variable* myOutput;
+  field core::bool* satisfied = false;
+  constructor •(self::Variable* myOutput, self::Strength* strength) → self::UnaryConstraint*
+    : self::UnaryConstraint::myOutput = myOutput, super self::Constraint::•(strength) {
+    this.{self::Constraint::addConstraint}(){() →* void};
+  }
+  method addToGraph() → void {
+    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::UnaryConstraint::satisfied} = false;
+  }
+  method chooseMethod(core::int* mark) → void {
+    this.{self::UnaryConstraint::satisfied} = !(this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*});
+  }
+  method isSatisfied() → core::bool*
+    return this.{self::UnaryConstraint::satisfied}{core::bool*};
+  method markInputs(core::int* mark) → void {}
+  method output() → self::Variable*
+    return this.{self::UnaryConstraint::myOutput}{self::Variable*};
+  method recalculate() → void {
+    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::walkStrength} = this.{self::Constraint::strength}{self::Strength*};
+    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::stay} = !this.{self::Constraint::isInput}(){() →* core::bool*};
+    if(this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::stay}{core::bool*})
+      this.{self::Constraint::execute}(){() →* void};
+  }
+  method markUnsatisfied() → void {
+    this.{self::UnaryConstraint::satisfied} = false;
+  }
+  method inputsKnown(core::int* mark) → core::bool*
+    return true;
+  method removeFromGraph() → void {
+    if(!(this.{self::UnaryConstraint::myOutput}{self::Variable*} == null))
+      this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    this.{self::UnaryConstraint::satisfied} = false;
+  }
+}
+class StayConstraint extends self::UnaryConstraint {
+  constructor •(self::Variable* v, self::Strength* str) → self::StayConstraint*
+    : super self::UnaryConstraint::•(v, str)
+    ;
+  method execute() → void {}
+}
+class EditConstraint extends self::UnaryConstraint {
+  constructor •(self::Variable* v, self::Strength* str) → self::EditConstraint*
+    : super self::UnaryConstraint::•(v, str)
+    ;
+  method isInput() → core::bool*
+    return true;
+  method execute() → void {}
+}
+abstract class BinaryConstraint extends self::Constraint {
+  field self::Variable* v1;
+  field self::Variable* v2;
+  field core::int* direction = #C1;
+  constructor •(self::Variable* v1, self::Variable* v2, self::Strength* strength) → self::BinaryConstraint*
+    : self::BinaryConstraint::v1 = v1, self::BinaryConstraint::v2 = v2, super self::Constraint::•(strength) {
+    this.{self::Constraint::addConstraint}(){() →* void};
+  }
+  method chooseMethod(core::int* mark) → void {
+    if(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
+      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C4 : #C1;
+    }
+    if(this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
+      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C20 : #C1;
+    }
+    if(self::Strength::weaker(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*})) {
+      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C20 : #C1;
+    }
+    else {
+      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C4 : #C20;
+    }
+  }
+  method addToGraph() → void {
+    this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::BinaryConstraint::direction} = #C1;
+  }
+  method isSatisfied() → core::bool*
+    return !(this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} #C1);
+  method markInputs(core::int* mark) → void {
+    this.{self::BinaryConstraint::input}(){() →* self::Variable*}.{self::Variable::mark} = mark;
+  }
+  method input() → self::Variable*
+    return this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} #C4 ?{self::Variable*} this.{self::BinaryConstraint::v1}{self::Variable*} : this.{self::BinaryConstraint::v2}{self::Variable*};
+  method output() → self::Variable*
+    return this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} #C4 ?{self::Variable*} this.{self::BinaryConstraint::v2}{self::Variable*} : this.{self::BinaryConstraint::v1}{self::Variable*};
+  method recalculate() → void {
+    self::Variable* ihn = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
+    self::Variable* out = this.{self::BinaryConstraint::output}(){() →* self::Variable*};
+    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength*}, ihn.{self::Variable::walkStrength}{self::Strength*});
+    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool*};
+    if(out.{self::Variable::stay}{core::bool*})
+      this.{self::Constraint::execute}(){() →* void};
+  }
+  method markUnsatisfied() → void {
+    this.{self::BinaryConstraint::direction} = #C1;
+  }
+  method inputsKnown(core::int* mark) → core::bool* {
+    self::Variable* i = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
+    return i.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark || i.{self::Variable::stay}{core::bool*} || i.{self::Variable::determinedBy}{self::Constraint*} == null;
+  }
+  method removeFromGraph() → void {
+    if(!(this.{self::BinaryConstraint::v1}{self::Variable*} == null))
+      this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    if(!(this.{self::BinaryConstraint::v2}{self::Variable*} == null))
+      this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    this.{self::BinaryConstraint::direction} = #C1;
+  }
+}
+class ScaleConstraint extends self::BinaryConstraint {
+  final field self::Variable* scale;
+  final field self::Variable* offset;
+  constructor •(self::Variable* src, self::Variable* scale, self::Variable* offset, self::Variable* dest, self::Strength* strength) → self::ScaleConstraint*
+    : self::ScaleConstraint::scale = scale, self::ScaleConstraint::offset = offset, super self::BinaryConstraint::•(src, dest, strength)
+    ;
+  method addToGraph() → void {
+    super.{self::BinaryConstraint::addToGraph}();
+    this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+  }
+  method removeFromGraph() → void {
+    super.{self::BinaryConstraint::removeFromGraph}();
+    if(!(this.{self::ScaleConstraint::scale}{self::Variable*} == null))
+      this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    if(!(this.{self::ScaleConstraint::offset}{self::Variable*} == null))
+      this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+  }
+  method markInputs(core::int* mark) → void {
+    super.{self::BinaryConstraint::markInputs}(mark);
+    this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::mark} = this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::mark} = mark;
+  }
+  method execute() → void {
+    if(this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} #C4) {
+      this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::value}{core::int*}.{core::num::*}(this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*}.{core::num::+}(this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*};
+    }
+    else {
+      this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::value}{core::int*}.{core::num::-}(this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*}.{core::num::~/}(this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*};
+    }
+  }
+  method recalculate() → void {
+    self::Variable* ihn = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
+    self::Variable* out = this.{self::BinaryConstraint::output}(){() →* self::Variable*};
+    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength*}, ihn.{self::Variable::walkStrength}{self::Strength*});
+    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool*} && this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::stay}{core::bool*} && this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::stay}{core::bool*};
+    if(out.{self::Variable::stay}{core::bool*})
+      this.{self::ScaleConstraint::execute}(){() →* void};
+  }
+}
+class EqualityConstraint extends self::BinaryConstraint {
+  constructor •(self::Variable* v1, self::Variable* v2, self::Strength* strength) → self::EqualityConstraint*
+    : super self::BinaryConstraint::•(v1, v2, strength)
+    ;
+  method execute() → void {
+    this.{self::BinaryConstraint::output}(){() →* self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::input}(){() →* self::Variable*}.{self::Variable::value}{core::int*};
+  }
+}
+class Variable extends core::Object {
+  field core::List<self::Constraint*>* constraints = <self::Constraint*>[];
+  field self::Constraint* determinedBy = null;
+  field core::int* mark = 0;
+  field self::Strength* walkStrength = #C18;
+  field core::bool* stay = true;
+  field core::int* value;
+  final field core::String* name;
+  constructor •(core::String* name, core::int* value) → self::Variable*
+    : self::Variable::name = name, self::Variable::value = value, super core::Object::•()
+    ;
+  method addConstraint(self::Constraint* c) → void {
+    this.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::add}(c){(self::Constraint*) →* void};
+  }
+  method removeConstraint(self::Constraint* c) → void {
+    this.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::remove}(c){(core::Object*) →* core::bool*};
+    if(this.{self::Variable::determinedBy}{self::Constraint*} =={self::Constraint::==}{(dynamic) →* core::bool*} c)
+      this.{self::Variable::determinedBy} = null;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Planner extends core::Object {
+  field core::int* currentMark = 0;
+  synthetic constructor •() → self::Planner*
+    : super core::Object::•()
+    ;
+  method incrementalAdd(self::Constraint* c) → void {
+    core::int* mark = this.{self::Planner::newMark}(){() →* core::int*};
+    for (self::Constraint* overridden = c.{self::Constraint::satisfy}(mark){(dynamic) →* self::Constraint*}; !(overridden == null); overridden = overridden.{self::Constraint::satisfy}(mark){(dynamic) →* self::Constraint*})
+      ;
+  }
+  method incrementalRemove(self::Constraint* c) → void {
+    self::Variable* out = c.{self::Constraint::output}(){() →* self::Variable*};
+    c.{self::Constraint::markUnsatisfied}(){() →* void};
+    c.{self::Constraint::removeFromGraph}(){() →* void};
+    core::List<self::Constraint*>* unsatisfied = this.{self::Planner::removePropagateFrom}(out){(self::Variable*) →* core::List<self::Constraint*>*};
+    self::Strength* strength = #C22;
+    do {
+      for (core::int* i = 0; i.{core::num::<}(unsatisfied.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+        self::Constraint* u = unsatisfied.{core::List::[]}(i){(core::int*) →* self::Constraint*};
+        if(u.{self::Constraint::strength}{self::Strength*} =={self::Strength::==}{(dynamic) →* core::bool*} strength)
+          this.{self::Planner::incrementalAdd}(u){(self::Constraint*) →* void};
+      }
+      strength = strength.{self::Strength::nextWeaker}(){() →* self::Strength*};
+    }
+    while (!(strength =={self::Strength::==}{(dynamic) →* core::bool*} #C18))
+  }
+  method newMark() → core::int*
+    return this.{self::Planner::currentMark} = this.{self::Planner::currentMark}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+  method makePlan(core::List<self::Constraint*>* sources) → self::Plan* {
+    core::int* mark = this.{self::Planner::newMark}(){() →* core::int*};
+    self::Plan* plan = new self::Plan::•();
+    core::List<self::Constraint*>* todo = sources;
+    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
+      self::Constraint* c = todo.{core::List::removeLast}(){() →* self::Constraint*};
+      if(!(c.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && c.{self::Constraint::inputsKnown}(mark){(core::int*) →* core::bool*}) {
+        plan.{self::Plan::addConstraint}(c){(self::Constraint*) →* void};
+        c.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark} = mark;
+        this.{self::Planner::addConstraintsConsumingTo}(c.{self::Constraint::output}(){() →* self::Variable*}, todo){(self::Variable*, core::List<self::Constraint*>*) →* void};
+      }
+    }
+    return plan;
+  }
+  method extractPlanFromConstraints(core::List<self::Constraint*>* constraints) → self::Plan* {
+    core::List<self::Constraint*>* sources = <self::Constraint*>[];
+    for (core::int* i = 0; i.{core::num::<}(constraints.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      self::Constraint* c = constraints.{core::List::[]}(i){(core::int*) →* self::Constraint*};
+      if(c.{self::Constraint::isInput}(){() →* core::bool*} && c.{self::Constraint::isSatisfied}(){() →* core::bool*})
+        sources.{core::List::add}(c){(self::Constraint*) →* void};
+    }
+    return this.{self::Planner::makePlan}(sources){(core::List<self::Constraint*>*) →* self::Plan*};
+  }
+  method addPropagate(self::Constraint* c, core::int* mark) → core::bool* {
+    core::List<self::Constraint*>* todo = <self::Constraint*>[c];
+    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
+      self::Constraint* d = todo.{core::List::removeLast}(){() →* self::Constraint*};
+      if(d.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
+        this.{self::Planner::incrementalRemove}(c){(self::Constraint*) →* void};
+        return false;
+      }
+      d.{self::Constraint::recalculate}(){() →* void};
+      this.{self::Planner::addConstraintsConsumingTo}(d.{self::Constraint::output}(){() →* self::Variable*}, todo){(self::Variable*, core::List<self::Constraint*>*) →* void};
+    }
+    return true;
+  }
+  method removePropagateFrom(self::Variable* out) → core::List<self::Constraint*>* {
+    out.{self::Variable::determinedBy} = null;
+    out.{self::Variable::walkStrength} = #C18;
+    out.{self::Variable::stay} = true;
+    core::List<self::Constraint*>* unsatisfied = <self::Constraint*>[];
+    core::List<self::Variable*>* todo = <self::Variable*>[out];
+    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
+      self::Variable* v = todo.{core::List::removeLast}(){() →* self::Variable*};
+      for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+        self::Constraint* c = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
+        if(!c.{self::Constraint::isSatisfied}(){() →* core::bool*})
+          unsatisfied.{core::List::add}(c){(self::Constraint*) →* void};
+      }
+      self::Constraint* determining = v.{self::Variable::determinedBy}{self::Constraint*};
+      for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+        self::Constraint* next = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
+        if(!(next =={self::Constraint::==}{(dynamic) →* core::bool*} determining) && next.{self::Constraint::isSatisfied}(){() →* core::bool*}) {
+          next.{self::Constraint::recalculate}(){() →* void};
+          todo.{core::List::add}(next.{self::Constraint::output}(){() →* self::Variable*}){(self::Variable*) →* void};
+        }
+      }
+    }
+    return unsatisfied;
+  }
+  method addConstraintsConsumingTo(self::Variable* v, core::List<self::Constraint*>* coll) → void {
+    self::Constraint* determining = v.{self::Variable::determinedBy}{self::Constraint*};
+    for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      self::Constraint* c = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
+      if(!(c =={self::Constraint::==}{(dynamic) →* core::bool*} determining) && c.{self::Constraint::isSatisfied}(){() →* core::bool*})
+        coll.{core::List::add}(c){(self::Constraint*) →* void};
+    }
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Plan extends core::Object {
+  field core::List<self::Constraint*>* list = <self::Constraint*>[];
+  synthetic constructor •() → self::Plan*
+    : super core::Object::•()
+    ;
+  method addConstraint(self::Constraint* c) → void {
+    this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::add}(c){(self::Constraint*) →* void};
+  }
+  method size() → core::int*
+    return this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::length}{core::int*};
+  method execute() → void {
+    for (core::int* i = 0; i.{core::num::<}(this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*}.{self::Constraint::execute}(){() →* void};
+    }
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field self::Strength* REQUIRED = #C22;
+static const field self::Strength* STRONG_PREFERRED = #C3;
+static const field self::Strength* PREFERRED = #C6;
+static const field self::Strength* STRONG_DEFAULT = #C9;
+static const field self::Strength* NORMAL = #C12;
+static const field self::Strength* WEAK_DEFAULT = #C15;
+static const field self::Strength* WEAKEST = #C18;
+static const field core::int* NONE = #C1;
+static const field core::int* FORWARD = #C4;
+static const field core::int* BACKWARD = #C20;
+static field self::Planner* planner;
+static method main() → dynamic {
+  new self::DeltaBlue::•().{self::DeltaBlue::run}(){() →* void};
+}
+static method chainTest(core::int* n) → void {
+  self::planner = new self::Planner::•();
+  self::Variable* prev = null;
+  self::Variable* first = null;
+  self::Variable* last = null;
+  for (core::int* i = 0; i.{core::num::<=}(n){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    self::Variable* v = new self::Variable::•("v${i}", 0);
+    if(!(prev == null))
+      new self::EqualityConstraint::•(prev, v, #C22);
+    if(i =={core::num::==}{(core::Object*) →* core::bool*} 0)
+      first = v;
+    if(i =={core::num::==}{(core::Object*) →* core::bool*} n)
+      last = v;
+    prev = v;
+  }
+  new self::StayConstraint::•(last, #C9);
+  self::EditConstraint* edit = new self::EditConstraint::•(first, #C6);
+  self::Plan* plan = self::planner.{self::Planner::extractPlanFromConstraints}(<self::Constraint*>[edit]){(core::List<self::Constraint*>*) →* self::Plan*};
+  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    first.{self::Variable::value} = i;
+    plan.{self::Plan::execute}(){() →* void};
+    if(!(last.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i)) {
+      core::print("Chain test failed:");
+      core::print("Expected last value to be ${i} but it was ${last.{self::Variable::value}{core::int*}}.");
+    }
+  }
+}
+static method projectionTest(core::int* n) → void {
+  self::planner = new self::Planner::•();
+  self::Variable* scale = new self::Variable::•("scale", 10);
+  self::Variable* offset = new self::Variable::•("offset", 1000);
+  self::Variable* src = null;
+  self::Variable* dst = null;
+  core::List<self::Variable*>* dests = <self::Variable*>[];
+  for (core::int* i = 0; i.{core::num::<}(n){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    src = new self::Variable::•("src", i);
+    dst = new self::Variable::•("dst", i);
+    dests.{core::List::add}(dst){(self::Variable*) →* void};
+    new self::StayConstraint::•(src, #C12);
+    new self::ScaleConstraint::•(src, scale, offset, dst, #C22);
+  }
+  self::change(src, 17);
+  if(!(dst.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 1170))
+    core::print("Projection 1 failed");
+  self::change(dst, 1050);
+  if(!(src.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 5))
+    core::print("Projection 2 failed");
+  self::change(scale, 5);
+  for (core::int* i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num*) →* core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    if(!(dests.{core::List::[]}(i){(core::int*) →* self::Variable*}.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i.{core::num::*}(5){(core::num*) →* core::int*}.{core::num::+}(1000){(core::num*) →* core::int*}))
+      core::print("Projection 3 failed");
+  }
+  self::change(offset, 2000);
+  for (core::int* i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num*) →* core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    if(!(dests.{core::List::[]}(i){(core::int*) →* self::Variable*}.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i.{core::num::*}(5){(core::num*) →* core::int*}.{core::num::+}(2000){(core::num*) →* core::int*}))
+      core::print("Projection 4 failed");
+  }
+}
+static method change(self::Variable* v, core::int* newValue) → void {
+  self::EditConstraint* edit = new self::EditConstraint::•(v, #C6);
+  self::Plan* plan = self::planner.{self::Planner::extractPlanFromConstraints}(<self::EditConstraint*>[edit]){(core::List<self::Constraint*>*) →* self::Plan*};
+  for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    v.{self::Variable::value} = newValue;
+    plan.{self::Plan::execute}(){() →* void};
+  }
+  edit.{self::Constraint::destroyConstraint}(){() →* void};
+}
+
+constants  {
+  #C1 = 1
+  #C2 = "strongPreferred"
+  #C3 = self::Strength {value:#C1, name:#C2}
+  #C4 = 2
+  #C5 = "preferred"
+  #C6 = self::Strength {value:#C4, name:#C5}
+  #C7 = 3
+  #C8 = "strongDefault"
+  #C9 = self::Strength {value:#C7, name:#C8}
+  #C10 = 4
+  #C11 = "normal"
+  #C12 = self::Strength {value:#C10, name:#C11}
+  #C13 = 5
+  #C14 = "weakDefault"
+  #C15 = self::Strength {value:#C13, name:#C14}
+  #C16 = 6
+  #C17 = "weakest"
+  #C18 = self::Strength {value:#C16, name:#C17}
+  #C19 = <self::Strength*>[#C3, #C6, #C9, #C12, #C15, #C18]
+  #C20 = 0
+  #C21 = "required"
+  #C22 = self::Strength {value:#C20, name:#C21}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///DeltaBlue.dart:
+- Strength. (from org-dartlang-testcase:///DeltaBlue.dart:59:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.modular.expect
new file mode 100644
index 0000000..d76d693
--- /dev/null
+++ b/pkg/front_end/testcases/general/abstract_instantiation.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: Factory redirects to class 'A', which is abstract and can't be instantiated.
+//   factory B() = A;
+//                 ^
+//
+// pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: The constructor function type 'A Function()' isn't a subtype of 'B Function()'.
+//  - 'A' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+//   factory B() = A;
+//                 ^
+//
+// pkg/front_end/testcases/general/abstract_instantiation.dart:12:7: Error: The class 'A' is abstract and can't be instantiated.
+//   new A();
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+abstract class B extends core::Object implements self::A {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •() → self::B
+    return invalid-expression "pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: The constructor function type 'A Function()' isn't a subtype of 'B Function()'.
+ - 'A' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+ - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+  factory B() = A;
+                ^";
+}
+static method test() → dynamic {
+  throw new core::AbstractClassInstantiationError::•("A");
+  invalid-expression "pkg/front_end/testcases/general/abstract_instantiation.dart:8:17: Error: The constructor function type 'A Function()' isn't a subtype of 'B Function()'.
+ - 'A' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+ - 'B' is from 'pkg/front_end/testcases/general/abstract_instantiation.dart'.
+  factory B() = A;
+                ^";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.weak.modular.expect b/pkg/front_end/testcases/general/abstract_members.dart.weak.modular.expect
new file mode 100644
index 0000000..d874a11
--- /dev/null
+++ b/pkg/front_end/testcases/general/abstract_members.dart.weak.modular.expect
@@ -0,0 +1,442 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/abstract_members.dart:21:16: Error: Can't inherit members that conflict with each other.
+// abstract class A implements Interface1, Interface2, Interface3 {
+//                ^
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+//   void interfaceMethod1() {}
+//        ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+//   var interfaceMethod1;
+//       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:29:16: Error: Can't inherit members that conflict with each other.
+// abstract class B extends A {
+//                ^
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+//   void interfaceMethod1() {}
+//        ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+//   var interfaceMethod1;
+//       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:35:7: Error: Can't inherit members that conflict with each other.
+// class MyClass extends B {
+//       ^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+//   void interfaceMethod1() {}
+//        ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+//   var interfaceMethod1;
+//       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:35:7: Error: The non-abstract class 'MyClass' is missing implementations for these members:
+//  - A.abstractMethod
+//  - A.property1=
+//  - A.property3=
+//  - Interface1.interfaceMethod1
+//  - Interface2.interfaceMethod1
+//  - Interface2.interfaceMethod2
+//  - Interface3.interfaceMethod3
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class MyClass extends B {
+//       ^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:23:3: Context: 'A.abstractMethod' is defined here.
+//   abstractMethod();
+//   ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property1=' is defined here.
+//   void set property1(_);
+//            ^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:26:12: Context: 'A.property3=' is defined here.
+//   void set property3(_);
+//            ^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: 'Interface1.interfaceMethod1' is defined here.
+//   void interfaceMethod1() {}
+//        ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: 'Interface2.interfaceMethod1' is defined here.
+//   var interfaceMethod1;
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:12:8: Context: 'Interface2.interfaceMethod2' is defined here.
+//   void interfaceMethod2() {}
+//        ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:18:8: Context: 'Interface3.interfaceMethod3' is defined here.
+//   void interfaceMethod3() {}
+//        ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:44:7: Error: Can't inherit members that conflict with each other.
+// class MyMock1 extends B {
+//       ^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+//   void interfaceMethod1() {}
+//        ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+//   var interfaceMethod1;
+//       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:50:7: Error: Can't inherit members that conflict with each other.
+// class MyMock2 extends MyMock1 {
+//       ^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+//   void interfaceMethod1() {}
+//        ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+//   var interfaceMethod1;
+//       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:56:7: Error: Can't inherit members that conflict with each other.
+// class MyMock3 extends B {
+//       ^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+//   void interfaceMethod1() {}
+//        ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+//   var interfaceMethod1;
+//       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:56:7: Error: The non-abstract class 'MyMock3' is missing implementations for these members:
+//  - A.abstractMethod
+//  - A.property1=
+//  - A.property2=
+//  - A.property3=
+//  - Interface1.interfaceMethod1
+//  - Interface2.interfaceMethod1
+//  - Interface2.interfaceMethod2
+//  - Interface3.interfaceMethod3
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class MyMock3 extends B {
+//       ^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:23:3: Context: 'A.abstractMethod' is defined here.
+//   abstractMethod();
+//   ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property1=' is defined here.
+//   void set property1(_);
+//            ^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:25:12: Context: 'A.property2=' is defined here.
+//   void set property2(_);
+//            ^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:26:12: Context: 'A.property3=' is defined here.
+//   void set property3(_);
+//            ^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: 'Interface1.interfaceMethod1' is defined here.
+//   void interfaceMethod1() {}
+//        ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: 'Interface2.interfaceMethod1' is defined here.
+//   var interfaceMethod1;
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:12:8: Context: 'Interface2.interfaceMethod2' is defined here.
+//   void interfaceMethod2() {}
+//        ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:18:8: Context: 'Interface3.interfaceMethod3' is defined here.
+//   void interfaceMethod3() {}
+//        ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:66:16: Error: Can't inherit members that conflict with each other.
+// abstract class D extends C implements Interface2 {}
+//                ^
+// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is one inherited member.
+//   var interfaceMethod1;
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:61:8: Context: This is the other inherited member.
+//   void interfaceMethod1(_) {}
+//        ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:74:16: Error: Can't inherit members that conflict with each other.
+// abstract class F extends E implements Interface1 {}
+//                ^
+// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+//   void interfaceMethod1() {}
+//        ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:69:12: Context: This is the other inherited member.
+//   void set interfaceMethod1(_) {}
+//            ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:86:16: Error: Can't inherit members that conflict with each other.
+// abstract class H extends G implements Foo {}
+//                ^
+// pkg/front_end/testcases/general/abstract_members.dart:77:8: Context: This is one inherited member.
+//   void foo() {}
+//        ^^^
+// pkg/front_end/testcases/general/abstract_members.dart:81:14: Context: This is the other inherited member.
+//   Object get foo => null;
+//              ^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:98:16: Error: Can't inherit members that conflict with each other.
+// abstract class J extends I implements Bar {}
+//                ^
+// pkg/front_end/testcases/general/abstract_members.dart:89:14: Context: This is one inherited member.
+//   Object get foo => null;
+//              ^^^
+// pkg/front_end/testcases/general/abstract_members.dart:93:10: Context: This is the other inherited member.
+//   Object foo() {}
+//          ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1*
+    : super core::Object::•()
+    ;
+  method interfaceMethod1() → void {}
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Interface2 extends core::Object {
+  field dynamic interfaceMethod1 = null;
+  synthetic constructor •() → self::Interface2*
+    : super core::Object::•()
+    ;
+  method interfaceMethod2() → void {}
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Interface3 extends core::Object {
+  synthetic constructor •() → self::Interface3*
+    : super core::Object::•()
+    ;
+  method interfaceMethod3() → void {}
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class A extends core::Object implements self::Interface1, self::Interface2, self::Interface3 {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method aMethod() → dynamic {}
+  abstract method abstractMethod() → dynamic;
+  abstract set property1(dynamic _) → void;
+  abstract set property2(dynamic _) → void;
+  abstract set property3(dynamic _) → void;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends self::A {
+  final field dynamic property1 = null;
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  method aMethod() → dynamic {}
+  method bMethod() → dynamic {}
+}
+class MyClass extends self::B {
+  field dynamic property2 = null;
+  synthetic constructor •() → self::MyClass*
+    : super self::B::•()
+    ;
+  method aaMethod() → dynamic {}
+  method aMethod() → dynamic {}
+  method bMethod() → dynamic {}
+  method cMethod() → dynamic {}
+}
+class MyMock1 extends self::B {
+  synthetic constructor •() → self::MyMock1*
+    : super self::B::•()
+    ;
+  method noSuchMethod(core::Invocation* _) → dynamic
+    return null;
+  no-such-method-forwarder method interfaceMethod2() → void
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method abstractMethod() → dynamic
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
+  no-such-method-forwarder method interfaceMethod1() → void
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method interfaceMethod3() → void
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder set property3(dynamic _) → void
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder set interfaceMethod1(dynamic value) → void
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder set property1(dynamic _) → void
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder set property2(dynamic _) → void
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+class MyMock2 extends self::MyMock1 {
+  synthetic constructor •() → self::MyMock2*
+    : super self::MyMock1::•()
+    ;
+  abstract method noSuchMethod(core::Invocation* _) → dynamic;
+}
+class MyMock3 extends self::B {
+  synthetic constructor •() → self::MyMock3*
+    : super self::B::•()
+    ;
+  abstract method noSuchMethod(core::Invocation* _) → dynamic;
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method interfaceMethod1(dynamic _) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D extends self::C implements self::Interface2 {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+}
+class E extends core::Object {
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  set interfaceMethod1(dynamic _) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class F extends self::E implements self::Interface1 {
+  synthetic constructor •() → self::F*
+    : super self::E::•()
+    ;
+}
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class G extends core::Object {
+  synthetic constructor •() → self::G*
+    : super core::Object::•()
+    ;
+  get foo() → core::Object*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class H extends self::G implements self::Foo {
+  synthetic constructor •() → self::H*
+    : super self::G::•()
+    ;
+}
+class Bar extends core::Object {
+  synthetic constructor •() → self::Bar*
+    : super core::Object::•()
+    ;
+  get foo() → core::Object*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  method foo() → core::Object* {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class J extends self::I implements self::Bar {
+  synthetic constructor •() → self::J*
+    : super self::I::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #interfaceMethod2
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+  #C5 = #abstractMethod
+  #C6 = #interfaceMethod1
+  #C7 = #interfaceMethod3
+  #C8 = #property3=
+  #C9 = #interfaceMethod1=
+  #C10 = #property1=
+  #C11 = #property2=
+}
diff --git a/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.modular.expect b/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.modular.expect
new file mode 100644
index 0000000..6b85486
--- /dev/null
+++ b/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.modular.expect
@@ -0,0 +1,124 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/abstract_operator_override.dart:12:7: Error: The implementation of '+' in the non-abstract class 'B' does not conform to its interface.
+// class B extends A {
+//       ^
+// pkg/front_end/testcases/general/abstract_operator_override.dart:6:18: Context: The parameter 'b' of the method 'A.+' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'B.+'.
+//  - 'B' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   A operator +(B b) => new A();
+//                  ^
+// pkg/front_end/testcases/general/abstract_operator_override.dart:13:14: Context: This is the overridden method ('+').
+//   A operator +(A a);
+//              ^
+//
+// pkg/front_end/testcases/general/abstract_operator_override.dart:12:7: Error: The implementation of 'unary-' in the non-abstract class 'B' does not conform to its interface.
+// class B extends A {
+//       ^
+// pkg/front_end/testcases/general/abstract_operator_override.dart:7:14: Context: The return type of the method 'A.unary-' is 'A', which does not match the return type, 'B', of the overridden method, 'B.unary-'.
+//  - 'A' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'.
+// Change to a subtype of 'B'.
+//   A operator -() => new A();
+//              ^
+// pkg/front_end/testcases/general/abstract_operator_override.dart:14:14: Context: This is the overridden method ('unary-').
+//   B operator -();
+//              ^
+//
+// pkg/front_end/testcases/general/abstract_operator_override.dart:12:7: Error: The implementation of '[]' in the non-abstract class 'B' does not conform to its interface.
+// class B extends A {
+//       ^
+// pkg/front_end/testcases/general/abstract_operator_override.dart:8:19: Context: The parameter 'b' of the method 'A.[]' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'B.[]'.
+//  - 'B' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   A operator [](B b) => new A();
+//                   ^
+// pkg/front_end/testcases/general/abstract_operator_override.dart:15:14: Context: This is the overridden method ('[]').
+//   A operator [](A a);
+//              ^
+//
+// pkg/front_end/testcases/general/abstract_operator_override.dart:12:7: Error: The implementation of '[]=' in the non-abstract class 'B' does not conform to its interface.
+// class B extends A {
+//       ^
+// pkg/front_end/testcases/general/abstract_operator_override.dart:9:23: Context: The parameter 'b1' of the method 'A.[]=' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'B.[]='.
+//  - 'B' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void operator []=(B b1, B b2) {}
+//                       ^
+// pkg/front_end/testcases/general/abstract_operator_override.dart:16:17: Context: This is the overridden method ('[]=').
+//   void operator []=(A a, B b);
+//                 ^
+//
+// pkg/front_end/testcases/general/abstract_operator_override.dart:19:7: Error: The implementation of '[]' in the non-abstract class 'C' does not conform to its interface.
+// class C extends A {
+//       ^
+// pkg/front_end/testcases/general/abstract_operator_override.dart:8:14: Context: The return type of the method 'A.[]' is 'A', which does not match the return type, 'B', of the overridden method, 'C.[]'.
+//  - 'A' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'.
+// Change to a subtype of 'B'.
+//   A operator [](B b) => new A();
+//              ^
+// pkg/front_end/testcases/general/abstract_operator_override.dart:20:14: Context: This is the overridden method ('[]').
+//   B operator [](B b);
+//              ^
+//
+// pkg/front_end/testcases/general/abstract_operator_override.dart:19:7: Error: The implementation of '[]=' in the non-abstract class 'C' does not conform to its interface.
+// class C extends A {
+//       ^
+// pkg/front_end/testcases/general/abstract_operator_override.dart:9:29: Context: The parameter 'b2' of the method 'A.[]=' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.[]='.
+//  - 'B' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/abstract_operator_override.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void operator []=(B b1, B b2) {}
+//                             ^
+// pkg/front_end/testcases/general/abstract_operator_override.dart:21:17: Context: This is the overridden method ('[]=').
+//   void operator []=(B b, A a);
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator +(self::B* b) → self::A*
+    return new self::A::•();
+  operator unary-() → self::A*
+    return new self::A::•();
+  operator [](self::B* b) → self::A*
+    return new self::A::•();
+  operator []=(self::B* b1, self::B* b2) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  abstract operator +(self::A* a) → self::A*;
+  abstract operator unary-() → self::B*;
+  abstract operator [](self::A* a) → self::A*;
+  abstract operator []=(self::A* a, self::B* b) → void;
+}
+class C extends self::A {
+  synthetic constructor •() → self::C*
+    : super self::A::•()
+    ;
+  abstract operator [](self::B* b) → self::B*;
+  abstract operator []=(self::B* b, self::A* a) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.modular.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.modular.expect
new file mode 100644
index 0000000..90c7a87
--- /dev/null
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.modular.expect
@@ -0,0 +1,102 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:17:7: Error: The implementation of 'foo' in the non-abstract class 'C' does not conform to its interface.
+// class C extends B {}
+//       ^
+// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:6:8: Context: The method 'A.foo' has fewer positional arguments than those of overridden method 'B.foo'.
+//   void foo() {}
+//        ^
+// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:14:8: Context: This is the overridden method ('foo').
+//   void foo([a]);
+//        ^
+//
+// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:19:7: Error: The implementation of 'foo' in the non-abstract class 'D' does not conform to its interface.
+// class D extends A implements I {}
+//       ^
+// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:6:8: Context: The method 'A.foo' has fewer positional arguments than those of overridden method 'I.foo'.
+//   void foo() {}
+//        ^
+// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:10:8: Context: This is the overridden method ('foo').
+//   void foo([a]);
+//        ^
+//
+// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:23:7: Error: The implementation of 'foo' in the non-abstract class 'F' does not conform to its interface.
+// class F extends E {}
+//       ^
+// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:6:8: Context: The method 'A.foo' has fewer positional arguments than those of overridden method 'I.foo'.
+//   void foo() {}
+//        ^
+// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:10:8: Context: This is the overridden method ('foo').
+//   void foo([a]);
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  abstract method foo([dynamic a = #C1]) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  abstract method foo([dynamic a = #C1]) → void;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class D extends self::A implements self::I {
+  synthetic constructor •() → self::D*
+    : super self::A::•()
+    ;
+  abstract member-signature method foo([dynamic a = #C1]) → void; -> self::I::foo
+}
+abstract class E extends self::A implements self::I {
+  synthetic constructor •() → self::E*
+    : super self::A::•()
+    ;
+  abstract member-signature method foo([dynamic a = #C1]) → void; -> self::I::foo
+}
+class F extends self::E {
+  synthetic constructor •() → self::F*
+    : super self::E::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.modular.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.modular.expect
new file mode 100644
index 0000000..882db16
--- /dev/null
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method foo() → self::A*
+    return null;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  abstract method foo() → self::B*;
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* _) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C implements self::B {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  no-such-method-forwarder method foo() → self::B*
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} self::B*;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/general/accessors.dart.weak.modular.expect b/pkg/front_end/testcases/general/accessors.dart.weak.modular.expect
new file mode 100644
index 0000000..d09f07b
--- /dev/null
+++ b/pkg/front_end/testcases/general/accessors.dart.weak.modular.expect
@@ -0,0 +1,90 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/accessors.dart:16:13: Error: The getter 'onlySetter' isn't defined for the class 'C'.
+//  - 'C' is from 'pkg/front_end/testcases/general/accessors.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'onlySetter'.
+//       print(onlySetter);
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/accessors.dart:25:11: Error: The getter 'onlySetter' isn't defined for the class 'C'.
+//  - 'C' is from 'pkg/front_end/testcases/general/accessors.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'onlySetter'.
+//     print(onlySetter);
+//           ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/accessors.dart:40:11: Error: Getter not found: 'onlySetter'.
+//     print(onlySetter);
+//           ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  set onlySetter(dynamic value) → void {
+    core::print("C.onlySetter called with ${value}.");
+  }
+  method testC() → dynamic {
+    try {
+      core::print(invalid-expression "pkg/front_end/testcases/general/accessors.dart:16:13: Error: The getter 'onlySetter' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/accessors.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'onlySetter'.
+      print(onlySetter);
+            ^^^^^^^^^^" in this{<unresolved>}.onlySetter);
+      throw "No error thrown";
+    }
+    on core::NoSuchMethodError* catch(final core::NoSuchMethodError* e) {
+      core::print("Expected error: ${e}");
+    }
+    this.{self::C::onlySetter} = "hest";
+  }
+  method testD() → dynamic {
+    core::print(invalid-expression "pkg/front_end/testcases/general/accessors.dart:25:11: Error: The getter 'onlySetter' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/accessors.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'onlySetter'.
+    print(onlySetter);
+          ^^^^^^^^^^" in this{<unresolved>}.onlySetter);
+    this.{self::C::onlySetter} = "hest";
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  get onlySetter() → core::String*
+    return "D.onlySetter called.";
+  set onlySetter(dynamic value) → void {
+    core::print("D.onlySetter called with ${value}.");
+  }
+}
+static set onlySetter(dynamic value) → void {
+  core::print("onlySetter called with ${value}.");
+}
+static method main() → dynamic {
+  try {
+    core::print(invalid-expression "pkg/front_end/testcases/general/accessors.dart:40:11: Error: Getter not found: 'onlySetter'.
+    print(onlySetter);
+          ^^^^^^^^^^");
+    throw "No error thrown";
+  }
+  on core::NoSuchMethodError* catch(final core::NoSuchMethodError* e) {
+    core::print("Expected error: ${e}");
+  }
+  self::onlySetter = "fisk";
+  new self::C::•().{self::C::testC}(){() →* dynamic};
+  new self::D::•().{self::C::testD}(){() →* dynamic};
+}
diff --git a/pkg/front_end/testcases/general/all_variances.dart.weak.modular.expect b/pkg/front_end/testcases/general/all_variances.dart.weak.modular.expect
new file mode 100644
index 0000000..f7afd1b
--- /dev/null
+++ b/pkg/front_end/testcases/general/all_variances.dart.weak.modular.expect
@@ -0,0 +1,6 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef F<unrelated W extends core::Object* = dynamic, X extends core::Object* = dynamic, contravariant Y extends core::Object* = dynamic, invariant Z extends core::Object* = dynamic> = (Y*, (Z*) →* Z*) →* X*;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.modular.expect b/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.modular.expect
new file mode 100644
index 0000000..8155e8e
--- /dev/null
+++ b/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/ambiguous_exports.dart:7:1: Error: 'main' is exported from both 'pkg/front_end/testcases/general/hello.dart' and 'pkg/front_end/testcases/general/map.dart'.
+// export 'map.dart' show main;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+export "org-dartlang-testcase:///hello.dart" show main;
+export "org-dartlang-testcase:///map.dart" show main;
+
+static const field dynamic _exports# = #C1;
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::print("Hello, World!");
+}
+
+library;
+import self as self3;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::print(core::Map::•<dynamic, dynamic>());
+}
+
+constants  {
+  #C1 = "{\"main\":\"'main' is exported from both 'pkg/front_end/testcases/general/hello.dart' and 'pkg/front_end/testcases/general/map.dart'.\"}"
+}
diff --git a/pkg/front_end/testcases/general/annotation_eof.dart.weak.modular.expect b/pkg/front_end/testcases/general/annotation_eof.dart.weak.modular.expect
new file mode 100644
index 0000000..f4d0e53
--- /dev/null
+++ b/pkg/front_end/testcases/general/annotation_eof.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::print("There is a dangling annotation at the end of this file");
+}
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.modular.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.modular.expect
new file mode 100644
index 0000000..80eb1d7
--- /dev/null
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Fisk<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field self::Fisk::T* x;
+  const constructor fisk(self::Fisk::T* x) → self::Fisk<self::Fisk::T*>*
+    : self::Fisk::x = x, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Foo extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Foo*>* values = #C10;
+  @#C11
+  static const field self::Foo* bar = #C3;
+  @#C12
+  static const field self::Foo* baz = #C6;
+  static const field self::Foo* cafebabe = #C9;
+  const constructor •(core::int* index, core::String* name) → self::Foo*
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String*
+    return "Foo.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field core::int* hest = #C11;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "bar"
+  #C3 = self::Foo {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "baz"
+  #C6 = self::Foo {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "cafebabe"
+  #C9 = self::Foo {index:#C7, _name:#C8}
+  #C10 = <self::Foo*>[#C3, #C6, #C9]
+  #C11 = 42
+  #C12 = self::Fisk<core::int*> {x:#C11}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///annotation_on_enum_values.dart:
+- Foo. (from org-dartlang-testcase:///annotation_on_enum_values.dart:15:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Fisk.fisk (from org-dartlang-testcase:///annotation_on_enum_values.dart:12:9)
diff --git a/pkg/front_end/testcases/general/annotation_top.dart.weak.modular.expect b/pkg/front_end/testcases/general/annotation_top.dart.weak.modular.expect
new file mode 100644
index 0000000..b8fa4b8
--- /dev/null
+++ b/pkg/front_end/testcases/general/annotation_top.dart.weak.modular.expect
@@ -0,0 +1,65 @@
+@#C1
+@#C2
+library test;
+import self as self;
+import "dart:core" as core;
+
+@#C1
+@#C2
+typedef F1 = () →* void;
+@#C1
+@#C2
+typedef F2 = () →* void;
+class A extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::int* value) → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+@#C1
+@#C2
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field core::Object* a = #C1;
+@#C1
+@#C2
+static field core::int* f1;
+@#C1
+@#C2
+static field core::int* f2;
+@#C1
+@#C2
+static method main() → void {}
+
+constants  {
+  #C1 = core::Object {}
+  #C2 = self::A {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///annotation_top.dart:
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- A. (from org-dartlang-testcase:///annotation_top.dart:12:9)
diff --git a/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.modular.expect b/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.modular.expect
new file mode 100644
index 0000000..d6f9911
--- /dev/null
+++ b/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef F = (@#C1 core::int* x, core::num* y, {@#C2 @#C3 core::String* z, core::Object* w}) →* void;
+typedef G = (@#C1 core::int* a, core::num* b, [@#C2 @#C3 core::String* c, core::Object* d]) →* void;
+static const field core::int* foo = #C1;
+static const field core::int* bar = #C2;
+static const field core::int* baz = #C3;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 21
+  #C2 = 42
+  #C3 = 84
+}
diff --git a/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.modular.expect b/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.modular.expect
new file mode 100644
index 0000000..9bab9c9
--- /dev/null
+++ b/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef F = (@#C1 core::int* app) →* core::int*;
+static const field core::int* app = #C1;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+}
diff --git a/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.modular.expect b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.modular.expect
new file mode 100644
index 0000000..de080e6
--- /dev/null
+++ b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef hest_t = ({@#C1 dynamic named}) →* dynamic;
+class Bar extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::Bar*
+    : super core::Object::•()
+    ;
+  const constructor named(dynamic x) → self::Bar*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Baz extends core::Object {
+  constructor •(@#C1 dynamic constructorFormal) → self::Baz*
+    : super core::Object::•()
+    ;
+  static factory bazFactory(@#C1 dynamic factoryFormal) → self::Baz*
+    return null;
+  method fisk(@#C1 dynamic formal1, @#C2 dynamic formal2, @#C2 dynamic formal3, @#C1 @#C2 dynamic formal4, [@#C1 dynamic optional = #C3]) → dynamic {
+    @#C1 dynamic local1;
+    @#C2 dynamic local2;
+    @#C2 dynamic local3;
+    @#C1 @#C2 dynamic local4;
+    @#C1 core::String* localWithInitializer = "hello";
+    @#C1 @#C2 dynamic localGroupPart1;
+    @#C1 @#C2 dynamic localGroupPart2;
+    function naebdyr(@#C1 dynamic nestedFormal) → Null
+      return null;
+    (dynamic) →* Null roedmus = (@#C1 dynamic closureFormal) → Null => null;
+  }
+  method hest({@#C1 dynamic named = #C3}) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field core::int* foo = #C1;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 42
+  #C2 = self::Bar {}
+  #C3 = null
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///annotation_variable_declaration.dart:
+- Bar. (from org-dartlang-testcase:///annotation_variable_declaration.dart:8:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Bar.named (from org-dartlang-testcase:///annotation_variable_declaration.dart:9:9)
diff --git a/pkg/front_end/testcases/general/argument.dart.weak.modular.expect b/pkg/front_end/testcases/general/argument.dart.weak.modular.expect
new file mode 100644
index 0000000..e667193
--- /dev/null
+++ b/pkg/front_end/testcases/general/argument.dart.weak.modular.expect
@@ -0,0 +1,52 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Base extends core::Object {
+  synthetic constructor •() → self::Base*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Foo extends self::Base {
+  synthetic constructor •() → self::Foo*
+    : super self::Base::•()
+    ;
+}
+class Bar extends self::Base {
+  synthetic constructor •() → self::Bar*
+    : super self::Base::•()
+    ;
+}
+class Baz extends self::Base {
+  synthetic constructor •() → self::Baz*
+    : super self::Base::•()
+    ;
+}
+static method foo(dynamic x) → void {}
+static method bar(dynamic x) → void {}
+static method foo_escaped(dynamic x) → void {}
+static method bar_escaped(dynamic x) → void {}
+static method escape(dynamic fn) → void {
+  fn{dynamic}.call(new self::Baz::•());
+}
+static method main() → dynamic {
+  self::foo(new self::Foo::•());
+  self::bar(new self::Bar::•());
+  self::escape(#C1);
+  self::escape(#C2);
+}
+
+constants  {
+  #C1 = static-tearoff self::foo_escaped
+  #C2 = static-tearoff self::bar_escaped
+}
diff --git a/pkg/front_end/testcases/general/argument_mismatch.dart.weak.modular.expect b/pkg/front_end/testcases/general/argument_mismatch.dart.weak.modular.expect
new file mode 100644
index 0000000..b0d5171
--- /dev/null
+++ b/pkg/front_end/testcases/general/argument_mismatch.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/argument_mismatch.dart:8:6: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   foo(null);
+//      ^
+// pkg/front_end/testcases/general/argument_mismatch.dart:5:1: Context: Found this candidate, but the arguments don't match.
+// foo() {}
+// ^^^
+//
+import self as self;
+
+static method foo() → dynamic {}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/argument_mismatch.dart:8:6: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  foo(null);
+     ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/arithmetic.dart.weak.modular.expect b/pkg/front_end/testcases/general/arithmetic.dart.weak.modular.expect
new file mode 100644
index 0000000..0e703fd
--- /dev/null
+++ b/pkg/front_end/testcases/general/arithmetic.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method foo(core::int* x, core::int* y) → core::int* {
+  core::int* z = x.{core::num::+}(y){(core::num*) →* core::int*};
+  return z.{core::int::<<}(4){(core::int*) →* core::int*};
+}
+static method loop(core::List<dynamic>* xs) → void {
+  core::int* _ = xs.{core::List::length}{core::int*};
+  for (core::int* i = 0; i.{core::num::<}(xs.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  }
+}
+static method main() → dynamic {
+  self::foo(4, 5);
+  self::foo(6, 7);
+  self::loop(<dynamic>["dfg"]);
+}
diff --git a/pkg/front_end/testcases/general/arrow_function.dart.weak.modular.expect b/pkg/front_end/testcases/general/arrow_function.dart.weak.modular.expect
new file mode 100644
index 0000000..964b0b4
--- /dev/null
+++ b/pkg/front_end/testcases/general/arrow_function.dart.weak.modular.expect
@@ -0,0 +1,6 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main<T extends core::Object* = dynamic>() → dynamic
+  return () → core::Type* => self::main::T*;
diff --git a/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.weak.modular.expect b/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.weak.modular.expect
new file mode 100644
index 0000000..49729e1
--- /dev/null
+++ b/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/assign_to_initializing_formal.dart:13:11: Error: Can't assign to the final variable 'x'.
+//           x = 3;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "package:expect/expect.dart";
+
+class A extends core::Object {
+  field dynamic x;
+  field dynamic y;
+  constructor •(dynamic x) → self::A*
+    : self::A::x = x, self::A::y = () → Null {
+      invalid-expression "pkg/front_end/testcases/general/assign_to_initializing_formal.dart:13:11: Error: Can't assign to the final variable 'x'.
+          x = 3;
+          ^";
+    }, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/async_function.dart.weak.modular.expect b/pkg/front_end/testcases/general/async_function.dart.weak.modular.expect
new file mode 100644
index 0000000..4a640a9
--- /dev/null
+++ b/pkg/front_end/testcases/general/async_function.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static field core::List<core::String*>* stringList = <core::String*>["bar"];
+static method asyncString() → asy::Future<core::String*>* async {
+  return "foo";
+}
+static method asyncString2() → asy::Future<core::String*>* async {
+  return self::asyncString();
+}
+static method syncStarString() → core::Iterable<core::String*>* sync* {
+  yield "foo";
+  yield* self::syncStarString2();
+  yield* self::stringList;
+}
+static method syncStarString2() → core::Iterable<core::String*>* sync* {
+  yield "foo";
+}
+static method asyncStarString() → asy::Stream<core::String*>* async* {
+  yield "foo";
+  yield* self::asyncStarString2();
+  yield await self::asyncString();
+}
+static method asyncStarString2() → asy::Stream<core::String*>* async* {
+  yield "bar";
+}
+static method main() → dynamic async {
+  core::String* str = await self::asyncString();
+}
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.modular.expect
new file mode 100644
index 0000000..5472a32
--- /dev/null
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/async_method_with_invalid_type.dart:8:3: Error: 'Bar' isn't a type.
+//   Bar x;
+//   ^^^
+//
+import self as self;
+
+static method foo() → dynamic async {
+  invalid-type x;
+  for (dynamic y in x{<invalid>}.z) {
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/async_nested.dart.weak.modular.expect b/pkg/front_end/testcases/general/async_nested.dart.weak.modular.expect
new file mode 100644
index 0000000..48269f1
--- /dev/null
+++ b/pkg/front_end/testcases/general/async_nested.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class Node extends core::Object {
+  final field core::List<self::Node*>* nested;
+  final field core::String* name;
+  constructor •(core::String* name, [core::List<self::Node*>* nested = #C1]) → self::Node*
+    : self::Node::name = name, self::Node::nested = nested, super core::Object::•() {}
+  method toString() → core::String*
+    return "<${this.{self::Node::name}{core::String*}}:[${let final core::List<self::Node*>* #t1 = this.{self::Node::nested}{core::List<self::Node*>*} in #t1 == null ?{core::String*} null : #t1.{core::Iterable::join}(", "){([core::String*]) →* core::String*}}]>";
+  method toSimpleString() → dynamic {
+    core::Iterable<dynamic>* tmp = let final core::List<self::Node*>* #t2 = this.{self::Node::nested}{core::List<self::Node*>*} in #t2 == null ?{core::Iterable<dynamic>*} null : #t2.{core::Iterable::map}<dynamic>((self::Node* child) → dynamic => child.{self::Node::toSimpleString}(){() →* dynamic}){((self::Node*) →* dynamic) →* core::Iterable<dynamic>*};
+    return "${this.{self::Node::name}{core::String*}} ${let final core::Iterable<dynamic>* #t3 = tmp in #t3 == null ?{core::String*} null : #t3.{core::Iterable::join}(" "){([core::String*]) →* core::String*}}".{core::String::trim}(){() →* core::String*};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void async {
+  core::String* expected = "1 2 3 4 5 6 7 8 9 10";
+  self::Node* node = new self::Node::•("1", <self::Node*>[new self::Node::•("2", <self::Node*>[]), await asy::Future::value<self::Node*>(new self::Node::•("3", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("4", <self::Node*>[new self::Node::•("5", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("6", <self::Node*>[await asy::Future::value<self::Node*>(new self::Node::•("7", <self::Node*>[]))])), await asy::Future::value<self::Node*>(new self::Node::•("8", <self::Node*>[])), await asy::Future::value<self::Node*>(new self::Node::•("9", <self::Node*>[]))])]))])), await asy::Future::value<self::Node*>(new self::Node::•("10", <self::Node*>[]))]);
+  core::String* actual = node.{self::Node::toSimpleString}(){() →* dynamic} as{TypeError,ForDynamic} core::String*;
+  core::print(actual);
+  if(!(actual =={core::String::==}{(core::Object*) →* core::bool*} expected)) {
+    throw "Expected '${expected}' but got '${actual}'";
+  }
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/await.dart.weak.modular.expect b/pkg/front_end/testcases/general/await.dart.weak.modular.expect
new file mode 100644
index 0000000..5b1be33
--- /dev/null
+++ b/pkg/front_end/testcases/general/await.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic async {
+  core::print(await "Hello, World!");
+}
diff --git a/pkg/front_end/testcases/general/await_complex.dart.weak.modular.expect b/pkg/front_end/testcases/general/await_complex.dart.weak.modular.expect
new file mode 100644
index 0000000..20324c7
--- /dev/null
+++ b/pkg/front_end/testcases/general/await_complex.dart.weak.modular.expect
@@ -0,0 +1,260 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class C extends core::Object {
+  static field core::int* staticField = 1;
+  field core::int* field = 1;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  static get staticGetter() → core::int*
+    return self::C::staticField;
+  static set staticSetter(dynamic val) → void {
+    self::C::staticField = val as{TypeError,ForDynamic} core::int*;
+  }
+  static method staticFoo(core::int* param) → core::int*
+    return param;
+  get getter() → core::int*
+    return this.{self::C::field}{core::int*};
+  set setter(dynamic val) → void {
+    this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
+  }
+  method foo(core::int* param) → core::int*
+    return param;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* globalVariable = 1;
+static final field core::bool* assertStatementsEnabled = (() → core::bool* {
+  try {
+    assert(false);
+    return false;
+  }
+  on dynamic catch(final dynamic _) {
+    return true;
+  }
+})(){() →* core::bool*};
+static method topLevelFoo(core::int* param) → core::int*
+  return 1;
+static get topLevelGetter() → core::int*
+  return self::globalVariable;
+static set topLevelSetter(dynamic val) → void {
+  self::globalVariable = val as{TypeError,ForDynamic} core::int*;
+}
+static method dummy() → dynamic
+  return 1;
+static method staticMembers() → dynamic async {
+  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(2, a);
+  core::num* f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(2, f);
+  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(2, b);
+  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(2, c);
+  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(3, d);
+  core::num* e = self::C::staticField.{core::num::+}(self::C::staticGetter){(core::num*) →* core::int*}.{core::num::+}(self::C::staticSetter = 1){(core::num*) →* core::int*}.{core::num::+}(self::C::staticFoo(1)){(core::num*) →* core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(5, e);
+}
+static method topLevelMembers() → dynamic async {
+  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(2, a);
+  core::num* b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(2, b);
+  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(2, c);
+  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(2, d);
+  core::num* e = self::globalVariable.{core::num::+}(self::topLevelGetter){(core::num*) →* core::int*}.{core::num::+}(self::topLevelSetter = 1){(core::num*) →* core::int*}.{core::num::+}(self::topLevelFoo(1)){(core::num*) →* core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(5, e);
+}
+static method instanceMembers() → dynamic async {
+  self::C* inst = new self::C::•();
+  core::num* a = inst.{self::C::field}{core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(2, a);
+  core::num* b = inst.{self::C::getter}{core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(2, b);
+  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(2, c);
+  core::num* d = inst.{self::C::foo}(1){(core::int*) →* core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(2, d);
+  core::num* e = inst.{self::C::field}{core::int*}.{core::num::+}(inst.{self::C::getter}{core::int*}){(core::num*) →* core::int*}.{core::num::+}(inst.{self::C::setter} = 1){(core::num*) →* core::int*}.{core::num::+}(inst.{self::C::foo}(1){(core::int*) →* core::int*}){(core::num*) →* core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(5, e);
+}
+static method others() → dynamic async {
+  core::String* a = "${self::globalVariable} ${await self::dummy()} ".{core::String::+}(await "someString"){(core::String*) →* core::String*};
+  self::expect("1 1 someString", a);
+  self::C* c = new self::C::•();
+  core::num* d = c.{self::C::field}{core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::int* cnt = 2;
+  core::List<core::int*>* b = <core::int*>[1, 2, 3];
+  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError,ForDynamic} core::int*){(core::int*, core::int*) →* void};
+  self::expect(1, b.{core::List::[]}(cnt){(core::int*) →* core::int*});
+  core::num* e = b.{core::List::[]}(0){(core::int*) →* core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::expect(2, e);
+}
+static method conditionals() → dynamic async {
+  core::bool* a = false;
+  core::bool* b = true;
+  core::bool* c = a || b || await self::dummy() as{TypeError,ForDynamic} core::bool*;
+  self::expect(true, c);
+  dynamic d = a || b ?{dynamic} a : await self::dummy();
+  self::expect(false, d);
+  dynamic e = a is core::int* ?{dynamic} await self::dummy() : 2;
+  self::expect(2, e);
+  try {
+    dynamic f = a is core::int* ?{dynamic} await self::dummy() : 2;
+  }
+  on dynamic catch(final dynamic e) {
+  }
+}
+static method asserts() → dynamic async {
+  for (final core::Function* #t1 in <core::Function*>[#C1, #C2]) {
+    final <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>* func = #t1 as{TypeError} <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>*;
+    assert(await func<core::bool*>(true){(core::bool*) →* FutureOr<core::bool*>*});
+    assert(self::id<core::bool*>(true) as{TypeError} core::bool*, await func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*});
+    assert(await func<core::bool*>(true){(core::bool*) →* FutureOr<core::bool*>*}, await func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*});
+    try {
+      assert(await func<core::bool*>(false){(core::bool*) →* FutureOr<core::bool*>*}, await func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*});
+      if(self::assertStatementsEnabled)
+        throw "Didn't throw";
+    }
+    on core::AssertionError* catch(final core::AssertionError* e) {
+      self::expect("message", e.{core::AssertionError::message}{core::Object*});
+    }
+  }
+}
+static method controlFlow() → dynamic async {
+  for (final core::Function* #t2 in <core::Function*>[#C1, #C2]) {
+    final <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>* func = #t2 as{TypeError} <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>*;
+    core::int* c = 0;
+    for (core::int* i = await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}; await func<core::bool*>(i.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*}; await func<core::int*>(let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3){(core::int*) →* FutureOr<core::int*>*}) {
+      c = c.{core::num::+}(1){(core::num*) →* core::int*};
+    }
+    self::expect(5, c);
+    c = 0;
+    while (await func<core::bool*>(c.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*})
+      c = c.{core::num::+}(1){(core::num*) →* core::int*};
+    self::expect(5, c);
+    c = 0;
+    do {
+      c = c.{core::num::+}(1){(core::num*) →* core::int*};
+    }
+    while (await func<core::bool*>(c.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*})
+    self::expect(5, c);
+    if(await func<core::bool*>(c =={core::num::==}{(core::Object*) →* core::bool*} 5){(core::bool*) →* FutureOr<core::bool*>*}) {
+      self::expect(5, c);
+    }
+    else {
+      throw "unreachable";
+    }
+    try {
+      throw await func<core::String*>("string"){(core::String*) →* FutureOr<core::String*>*};
+    }
+    on core::String* catch(no-exception-var) {
+    }
+    try {
+      await throw "string";
+    }
+    on core::String* catch(no-exception-var) {
+    }
+    try
+      try {
+        try
+          try {
+            throw "string";
+          }
+          on dynamic catch(final dynamic e) {
+            self::expect("string", e);
+            self::expect(0, await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*});
+            rethrow;
+          }
+        finally {
+          self::expect(0, await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*});
+        }
+      }
+      on dynamic catch(final dynamic e) {
+        self::expect(0, await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*});
+        self::expect("string", e);
+      }
+    finally {
+      self::expect(0, await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*});
+    }
+    #L1:
+    switch(await func<core::int*>(2){(core::int*) →* FutureOr<core::int*>*}) {
+      #L2:
+      case #C3:
+        {
+          break #L1;
+        }
+      #L3:
+      default:
+        {
+          throw "unreachable";
+        }
+    }
+    self::expect(42, await(() → asy::Future<dynamic>* async {
+      return await func<dynamic>(42){(dynamic) →* FutureOr<dynamic>*};
+    })(){() →* asy::Future<dynamic>*});
+    self::expect(42, await(() → asy::Future<dynamic>* async {
+      return func<dynamic>(42){(dynamic) →* FutureOr<dynamic>*};
+    })(){() →* asy::Future<dynamic>*});
+    function testStream1() → asy::Stream<core::int*>* async* {
+      yield await func<core::int*>(42){(core::int*) →* FutureOr<core::int*>*};
+    }
+    self::expectList(<dynamic>[42], await testStream1(){() →* asy::Stream<core::int*>*}.{asy::Stream::toList}(){() →* asy::Future<core::List<core::int*>*>*});
+    function testStream2() → asy::Stream<core::int*>* async* {
+      yield* await func<asy::Stream<core::int*>*>(self::intStream()){(asy::Stream<core::int*>*) →* FutureOr<asy::Stream<core::int*>*>*};
+    }
+    self::expectList(<dynamic>[42], await testStream2(){() →* asy::Stream<core::int*>*}.{asy::Stream::toList}(){() →* asy::Future<core::List<core::int*>*>*});
+  }
+}
+static method future<T extends core::Object* = dynamic>(self::future::T* value) → FutureOr<self::future::T*>* async 
+  return value;
+static method id<T extends core::Object* = dynamic>(self::id::T* value) → FutureOr<self::id::T*>*
+  return value;
+static method intStream() → asy::Stream<core::int*>* async* {
+  yield 42;
+}
+static method main() → dynamic async {
+  for (core::int* i = 0; i.{core::num::<}(11){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    await self::staticMembers();
+    await self::topLevelMembers();
+    await self::instanceMembers();
+    await self::conditionals();
+    await self::others();
+    await self::asserts();
+    await self::controlFlow();
+  }
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method expectList(core::List<dynamic>* expected, core::List<dynamic>* actual) → dynamic {
+  if(!(expected.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} actual.{core::List::length}{core::int*})) {
+    throw "Expected ${expected}, actual ${actual}";
+  }
+  for (core::int* i = 0; i.{core::num::<}(expected.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    self::expect(expected.{core::List::[]}(i){(core::int*) →* dynamic}, actual.{core::List::[]}(i){(core::int*) →* dynamic});
+  }
+}
+
+constants  {
+  #C1 = static-tearoff self::id
+  #C2 = static-tearoff self::future
+  #C3 = 2
+}
diff --git a/pkg/front_end/testcases/general/await_in_cascade.dart.weak.modular.expect b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.modular.expect
new file mode 100644
index 0000000..8a57698
--- /dev/null
+++ b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method m() → asy::Future<core::List<core::int*>*>* async 
+    return let final core::List<core::int*>* #t1 = <core::int*>[] in block {
+      #t1.{core::List::add}(await this.{self::C::_m}(){() →* asy::Future<core::int*>*}){(core::int*) →* void};
+    } =>#t1;
+  method _m() → asy::Future<core::int*>* async 
+    return 42;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic async {
+  self::expect(42, (await new self::C::•().{self::C::m}(){() →* asy::Future<core::List<core::int*>*>*}).{core::Iterable::first}{core::int*});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/general/await_in_non_async.dart.weak.modular.expect b/pkg/front_end/testcases/general/await_in_non_async.dart.weak.modular.expect
new file mode 100644
index 0000000..aa3b0e2
--- /dev/null
+++ b/pkg/front_end/testcases/general/await_in_non_async.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/await_in_non_async.dart:11:3: Error: 'await' can only be used in 'async' or 'async*' methods.
+//   await foo();
+//   ^^^^^
+//
+import self as self;
+
+static method main() → dynamic {
+  self::foo();
+}
+static method foo() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/await_in_non_async.dart:11:3: Error: 'await' can only be used in 'async' or 'async*' methods.
+  await foo();
+  ^^^^^";
+}
diff --git a/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.modular.expect b/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.modular.expect
new file mode 100644
index 0000000..839e066
--- /dev/null
+++ b/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.modular.expect
@@ -0,0 +1,179 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.
+// Try adding {}.
+// set b();
+//        ^
+//
+// pkg/front_end/testcases/general/bad_setter_abstract.dart:7:12: Error: Expected a function body or '=>'.
+// Try adding {}.
+// set c(x, y);
+//            ^
+//
+// pkg/front_end/testcases/general/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.
+// set b();
+//      ^
+//
+// pkg/front_end/testcases/general/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.
+// set c(x, y);
+//      ^
+//
+// pkg/front_end/testcases/general/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.
+//   set a();
+//        ^
+//
+// pkg/front_end/testcases/general/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.
+//   set d(x, y);
+//        ^
+//
+// pkg/front_end/testcases/general/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.
+//   set a();
+//        ^
+//
+// pkg/front_end/testcases/general/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.
+//   set d(x, y);
+//        ^
+//
+// pkg/front_end/testcases/general/bad_setter_abstract.dart:66:9: Error: The class 'B' is abstract and can't be instantiated.
+//     new B();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  set a(dynamic #synthetic) → void {
+    invalid-expression "pkg/front_end/testcases/general/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.
+  set a();
+       ^";
+    ;
+  }
+  set d(dynamic #synthetic) → void {
+    invalid-expression "pkg/front_end/testcases/general/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.
+  set d(x, y);
+       ^";
+    {
+      dynamic x;
+      dynamic y;
+      ;
+    }
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  set a(dynamic #synthetic) → void {
+    invalid-expression "pkg/front_end/testcases/general/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.
+  set a();
+       ^";
+    ;
+  }
+  set d(dynamic #synthetic) → void {
+    invalid-expression "pkg/front_end/testcases/general/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.
+  set d(x, y);
+       ^";
+    {
+      dynamic x;
+      dynamic y;
+      ;
+    }
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static set b(dynamic #synthetic) → void {
+  invalid-expression "pkg/front_end/testcases/general/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.
+set b();
+     ^";
+  ;
+}
+static set c(dynamic #synthetic) → void {
+  invalid-expression "pkg/front_end/testcases/general/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.
+set c(x, y);
+     ^";
+  {
+    dynamic x;
+    dynamic y;
+    ;
+  }
+}
+static method main() → dynamic {
+  core::bool* threw;
+  try {
+    threw = true;
+    new self::A::•().{self::A::a} = null;
+    threw = false;
+  }
+  on dynamic catch(final dynamic e) {
+  }
+  if(!threw) {
+    throw "Expected an error above.";
+  }
+  try {
+    threw = true;
+    new self::A::•().{self::A::d} = null;
+    threw = false;
+  }
+  on dynamic catch(final dynamic e) {
+  }
+  if(!threw) {
+    throw "Expected an error above.";
+  }
+  try {
+    threw = true;
+    self::b = null;
+    threw = false;
+  }
+  on dynamic catch(final dynamic e) {
+  }
+  if(!threw) {
+    throw "Expected an error above.";
+  }
+  if(!threw) {
+    throw "Expected an error above.";
+  }
+  try {
+    threw = true;
+    self::c = null;
+    threw = false;
+  }
+  on dynamic catch(final dynamic e) {
+  }
+  if(!threw) {
+    throw "Expected an error above.";
+  }
+  try {
+    threw = true;
+    throw new core::AbstractClassInstantiationError::•("B");
+    threw = false;
+  }
+  on core::AbstractClassInstantiationError* catch(final core::AbstractClassInstantiationError* _) {
+  }
+  if(!threw) {
+    throw "Expected an error above.";
+  }
+}
diff --git a/pkg/front_end/testcases/general/bad_store.dart.weak.modular.expect b/pkg/front_end/testcases/general/bad_store.dart.weak.modular.expect
new file mode 100644
index 0000000..f25c04b
--- /dev/null
+++ b/pkg/front_end/testcases/general/bad_store.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  field dynamic field = null;
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method identity(dynamic x) → dynamic
+  return x;
+static method use(dynamic x) → void {}
+static method main(core::List<core::String*>* args) → dynamic {
+  dynamic foo = self::identity(new self::Foo::•());
+  if(args.{core::List::length}{core::int*}.{core::num::>}(1){(core::num*) →* core::bool*}) {
+    foo{dynamic}.field = "string";
+    dynamic first = foo{dynamic}.field;
+    self::use(first);
+    foo{dynamic}.noField = "string";
+    dynamic second = foo{dynamic}.noField;
+    self::use(second);
+  }
+}
diff --git a/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.modular.expect b/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.modular.expect
new file mode 100644
index 0000000..1e435e2
--- /dev/null
+++ b/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.modular.expect
@@ -0,0 +1,633 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:13:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class B<T> extends A<Function(T)> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:15:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class Bc<T> extends A<ContravariantUse<T>> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:17:7: Error: Can't use implicitly 'out' variable 'T' in an 'inout' position in supertype 'A'.
+// class Bi<T> extends A<InvariantUse<T>> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:19:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class C<T> implements A<Function(T)> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:21:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class Cc<T> implements A<ContravariantUse<T>> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:23:7: Error: Can't use implicitly 'out' variable 'T' in an 'inout' position in supertype 'A'.
+// class Ci<T> implements A<InvariantUse<T>> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:25:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class D<T> = Object with A<Function(T)>;
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:27:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class Dc<T> = Object with A<ContravariantUse<T>>;
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:29:7: Error: Can't use implicitly 'out' variable 'T' in an 'inout' position in supertype 'A'.
+// class Di<T> = Object with A<InvariantUse<T>>;
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:31:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class E<T> = A<Function(T)> with Empty;
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:33:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class Ec<T> = A<ContravariantUse<T>> with Empty;
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:35:7: Error: Can't use implicitly 'out' variable 'T' in an 'inout' position in supertype 'A'.
+// class Ei<T> = A<InvariantUse<T>> with Empty;
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:37:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class F<T> extends Object with A<Function(T)> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:39:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class Fc<T> extends Object with A<ContravariantUse<T>> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:41:7: Error: Can't use implicitly 'out' variable 'T' in an 'inout' position in supertype 'A'.
+// class Fi<T> extends Object with A<InvariantUse<T>> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:43:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class G<T> extends A<Function(T)> with Empty {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:45:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class Gc<T> extends A<ContravariantUse<T>> with Empty {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:47:7: Error: Can't use implicitly 'out' variable 'T' in an 'inout' position in supertype 'A'.
+// class Gi<T> extends A<InvariantUse<T>> with Empty {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:57:7: Error: Can't use implicitly 'out' variable 'T' in an 'inout' position in supertype 'A'.
+// class Hii<T> extends A<InvariantUse<InvariantUse<T>>> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:71:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class Jfff<T> extends A<Function(Function(Function(T)))> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:73:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class Jffc<T> extends A<Function(Function(ContravariantUse<T>))> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:75:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class Jfcf<T> extends A<Function(ContravariantUse<Function(T)>)> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:77:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class Jfcc<T> extends A<Function(ContravariantUse<ContravariantUse<T>>)> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:79:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class Jcff<T> extends A<ContravariantUse<Function(Function(T))>> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:81:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class Jcfc<T> extends A<ContravariantUse<Function(ContravariantUse<T>)>> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:83:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class Jccf<T> extends A<ContravariantUse<ContravariantUse<Function(T)>>> {}
+//       ^
+//
+// pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart:85:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class Jccc<T>
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef ContravariantUse<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef InvariantUse<invariant T extends core::Object* = dynamic> = (T*) →* T*;
+class Empty extends core::Object {
+  synthetic constructor •() → self::Empty*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bc<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bc<self::Bc::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bi<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bi<self::Bi::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Cc<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Cc<self::Cc::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Ci<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Ci<self::Ci::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Dc<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Dc<self::Dc::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Di<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Di<self::Di::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E<T extends core::Object* = dynamic> = core::Object with self::Empty {
+  synthetic constructor •() → self::E<self::E::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Ec<T extends core::Object* = dynamic> = core::Object with self::Empty {
+  synthetic constructor •() → self::Ec<self::Ec::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Ei<T extends core::Object* = dynamic> = core::Object with self::Empty {
+  synthetic constructor •() → self::Ei<self::Ei::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _F&Object&A<T extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_F&Object&A<self::_F&Object&A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F<T extends core::Object* = dynamic> extends self::_F&Object&A<self::F::T*> {
+  synthetic constructor •() → self::F<self::F::T*>*
+    : super self::_F&Object&A::•()
+    ;
+}
+abstract class _Fc&Object&A<T extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fc&Object&A<self::_Fc&Object&A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Fc<T extends core::Object* = dynamic> extends self::_Fc&Object&A<self::Fc::T*> {
+  synthetic constructor •() → self::Fc<self::Fc::T*>*
+    : super self::_Fc&Object&A::•()
+    ;
+}
+abstract class _Fi&Object&A<T extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fi&Object&A<self::_Fi&Object&A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Fi<T extends core::Object* = dynamic> extends self::_Fi&Object&A<self::Fi::T*> {
+  synthetic constructor •() → self::Fi<self::Fi::T*>*
+    : super self::_Fi&Object&A::•()
+    ;
+}
+abstract class _G&A&Empty<T extends core::Object* = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_G&A&Empty<self::_G&A&Empty::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class G<T extends core::Object* = dynamic> extends self::_G&A&Empty<self::G::T*> {
+  synthetic constructor •() → self::G<self::G::T*>*
+    : super self::_G&A&Empty::•()
+    ;
+}
+abstract class _Gc&A&Empty<T extends core::Object* = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Gc&A&Empty<self::_Gc&A&Empty::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Gc<T extends core::Object* = dynamic> extends self::_Gc&A&Empty<self::Gc::T*> {
+  synthetic constructor •() → self::Gc<self::Gc::T*>*
+    : super self::_Gc&A&Empty::•()
+    ;
+}
+abstract class _Gi&A&Empty<T extends core::Object* = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Gi&A&Empty<self::_Gi&A&Empty::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Gi<T extends core::Object* = dynamic> extends self::_Gi&A&Empty<self::Gi::T*> {
+  synthetic constructor •() → self::Gi<self::Gi::T*>*
+    : super self::_Gi&A&Empty::•()
+    ;
+}
+class Hff<T extends core::Object* = dynamic> extends self::A<((self::Hff::T*) →* dynamic) →* dynamic> {
+  synthetic constructor •() → self::Hff<self::Hff::T*>*
+    : super self::A::•()
+    ;
+}
+class Hfc<T extends core::Object* = dynamic> extends self::A<((self::Hfc::T*) →* dynamic) →* dynamic> {
+  synthetic constructor •() → self::Hfc<self::Hfc::T*>*
+    : super self::A::•()
+    ;
+}
+class Hcf<T extends core::Object* = dynamic> extends self::A<((self::Hcf::T*) →* dynamic) →* dynamic> {
+  synthetic constructor •() → self::Hcf<self::Hcf::T*>*
+    : super self::A::•()
+    ;
+}
+class Hcc<T extends core::Object* = dynamic> extends self::A<((self::Hcc::T*) →* dynamic) →* dynamic> {
+  synthetic constructor •() → self::Hcc<self::Hcc::T*>*
+    : super self::A::•()
+    ;
+}
+class Hii<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hii<self::Hii::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Iafc<T extends core::Object* = dynamic> extends self::A<self::A<((self::Iafc::T*) →* dynamic) →* dynamic>*> {
+  synthetic constructor •() → self::Iafc<self::Iafc::T*>*
+    : super self::A::•()
+    ;
+}
+class Iacf<T extends core::Object* = dynamic> extends self::A<self::A<((self::Iacf::T*) →* dynamic) →* dynamic>*> {
+  synthetic constructor •() → self::Iacf<self::Iacf::T*>*
+    : super self::A::•()
+    ;
+}
+class Ifac<T extends core::Object* = dynamic> extends self::A<(self::A<(self::Ifac::T*) →* dynamic>*) →* dynamic> {
+  synthetic constructor •() → self::Ifac<self::Ifac::T*>*
+    : super self::A::•()
+    ;
+}
+class Ifca<T extends core::Object* = dynamic> extends self::A<((self::A<self::Ifca::T*>*) →* dynamic) →* dynamic> {
+  synthetic constructor •() → self::Ifca<self::Ifca::T*>*
+    : super self::A::•()
+    ;
+}
+class Icaf<T extends core::Object* = dynamic> extends self::A<(self::A<(self::Icaf::T*) →* dynamic>*) →* dynamic> {
+  synthetic constructor •() → self::Icaf<self::Icaf::T*>*
+    : super self::A::•()
+    ;
+}
+class Icfa<T extends core::Object* = dynamic> extends self::A<((self::A<self::Icfa::T*>*) →* dynamic) →* dynamic> {
+  synthetic constructor •() → self::Icfa<self::Icfa::T*>*
+    : super self::A::•()
+    ;
+}
+class Jfff<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jfff<self::Jfff::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Jffc<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jffc<self::Jffc::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Jfcf<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jfcf<self::Jfcf::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Jfcc<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jfcc<self::Jfcc::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Jcff<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jcff<self::Jcff::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Jcfc<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jcfc<self::Jcfc::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Jccf<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jccf<self::Jccf::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Jccc<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jccc<self::Jccc::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounded_implicit_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounded_implicit_instantiation.dart.weak.modular.expect
new file mode 100644
index 0000000..2b37371
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounded_implicit_instantiation.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounded_implicit_instantiation.dart:7:22: Error: The argument type 'String' can't be assigned to the parameter type 'Never'.
+//   String a = bounded('');
+//                      ^
+//
+// pkg/front_end/testcases/general/bounded_implicit_instantiation.dart:8:21: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'bounded'.
+// Try changing type arguments so that they conform to the bounds.
+//   String b = bounded<String>('');
+//                     ^
+//
+// pkg/front_end/testcases/general/bounded_implicit_instantiation.dart:9:31: Error: Inferred type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'X Function<X extends num>(X)'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   String Function(String) c = bounded;
+//                               ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method test() → dynamic {
+  function bounded<X extends core::num>(X x) → X
+    return x;
+  core::String a = let final Never #t1 = bounded<Never>(invalid-expression "pkg/front_end/testcases/general/bounded_implicit_instantiation.dart:7:22: Error: The argument type 'String' can't be assigned to the parameter type 'Never'.
+  String a = bounded('');
+                     ^" in "" as{TypeError,ForNonNullableByDefault} Never){(Never) → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::String b = bounded<core::String>(""){(core::String) → core::String};
+  (core::String) → core::String c = bounded<core::String>;
+  core::String d = c(""){(core::String) → core::String};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..228018a
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  method bar<covariant-by-class Y extends self::A::X*>() → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  static method foo<Y extends core::Object*>() → self::A<self::B::foo::Y*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method baz() → dynamic {
+  self::B::foo<core::Object*>().{self::A::bar}<core::String*>(){() →* dynamic};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.modular.expect
new file mode 100644
index 0000000..01f1570
--- /dev/null
+++ b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:7:40: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef F = Function<Z extends A<Y>>() Function<Y extends num>();
+//                                        ^
+// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends String> {}
+//         ^
+//
+// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:8:18: Error: Type argument 'Y' doesn't conform to the bound 'String' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef G = void Function<Y extends num>(Function<Z extends A<Y>>());
+//                  ^
+// pkg/front_end/testcases/general/bounds_check_in_typedef.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends String> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F = <Y extends core::num* = dynamic>() →* <Z extends self::A<Y*>* = dynamic>() →* dynamic;
+typedef G = <Y extends core::num* = dynamic>(<Z extends self::A<Y*>* = dynamic>() →* dynamic) →* void;
+class A<X extends core::String*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug21938.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug21938.dart.weak.modular.expect
new file mode 100644
index 0000000..d46ee72
--- /dev/null
+++ b/pkg/front_end/testcases/general/bug21938.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bug21938.dart:8:4: Error: The method 'call' isn't defined for the class 'Object'.
+//  - 'Object' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//   x();
+//    ^
+//
+// pkg/front_end/testcases/general/bug21938.dart:9:4: Error: The method 'call' isn't defined for the class 'Object'.
+//  - 'Object' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//   x(3);
+//    ^
+//
+// pkg/front_end/testcases/general/bug21938.dart:11:5: Error: The method 'call' isn't defined for the class 'Object'.
+//  - 'Object' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//   x.call();
+//     ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → dynamic {
+  core::Object* x;
+  core::Function* f;
+  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:8:4: Error: The method 'call' isn't defined for the class 'Object'.
+ - 'Object' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+  x();
+   ^" in x{<unresolved>}.call();
+  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:9:4: Error: The method 'call' isn't defined for the class 'Object'.
+ - 'Object' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+  x(3);
+   ^" in x{<unresolved>}.call(3);
+  f(5, 2);
+  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:11:5: Error: The method 'call' isn't defined for the class 'Object'.
+ - 'Object' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+  x.call();
+    ^^^^" in x{<unresolved>}.call();
+  f.call;
+  f(5, 2);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug30695.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug30695.dart.weak.modular.expect
new file mode 100644
index 0000000..87f32bd
--- /dev/null
+++ b/pkg/front_end/testcases/general/bug30695.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bug30695.dart:11:3: Error: Can't declare a member that conflicts with an inherited one.
+//   foo() => 42;
+//   ^^^
+// pkg/front_end/testcases/general/bug30695.dart:6:7: Context: This is the inherited member.
+//   var foo = 42;
+//       ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* foo = 42;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  method foo() → dynamic
+    return 42;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug31124.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug31124.dart.weak.modular.expect
new file mode 100644
index 0000000..05d5b71
--- /dev/null
+++ b/pkg/front_end/testcases/general/bug31124.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bug31124.dart:2:22: Error: Expected a function body or '=>'.
+// Try adding {}.
+// var a = () => 'b';a();
+//                      ^
+//
+// pkg/front_end/testcases/general/bug31124.dart:2:19: Error: 'a' is already declared in this scope.
+// var a = () => 'b';a();
+//                   ^
+// pkg/front_end/testcases/general/bug31124.dart:2:5: Context: Previous declaration of 'a'.
+// var a = () => 'b';a();
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field () →* core::String* a;
diff --git a/pkg/front_end/testcases/general/bug32414a.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug32414a.dart.weak.modular.expect
new file mode 100644
index 0000000..8f4896c
--- /dev/null
+++ b/pkg/front_end/testcases/general/bug32414a.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bug32414a.dart:10:7: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   b = 42;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  dynamic a = 5;
+  core::String* b = a.{core::Object::toString}(){() →* core::String*};
+  b = invalid-expression "pkg/front_end/testcases/general/bug32414a.dart:10:7: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  b = 42;
+      ^" in 42 as{TypeError} core::String*;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/general/bug32414b.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug32414b.dart.weak.modular.expect
new file mode 100644
index 0000000..f09b3fe
--- /dev/null
+++ b/pkg/front_end/testcases/general/bug32414b.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  core::List<dynamic>* l = <dynamic>[1, "hello"];
+  core::List<core::String*>* l2 = l.{core::Iterable::map}<core::String*>((dynamic element) → core::String* => element.{core::Object::toString}(){() →* core::String*}){((dynamic) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/general/bug32426.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug32426.dart.weak.modular.expect
new file mode 100644
index 0000000..3e48d58
--- /dev/null
+++ b/pkg/front_end/testcases/general/bug32426.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  abstract method call() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object implements self::I {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method call([core::int* x = #C1]) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::I* i = new self::C::•();
+  ([core::int*]) →* void f = (let final self::I* #t1 = i in #t1 == null ?{() →* void} null : #t1.{self::I::call}{() →* void}) as{TypeError} ([core::int*]) →* void;
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/bug32629.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug32629.dart.weak.modular.expect
new file mode 100644
index 0000000..48c5ec01a
--- /dev/null
+++ b/pkg/front_end/testcases/general/bug32629.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bug32629.dart:16:19: Error: The argument type 'dynamic Function(dynamic, dynamic)' can't be assigned to the parameter type 'String Function(String, dynamic)'.
+//   foo<String>(new A());
+//                   ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Reducer<invariant S extends core::Object* = dynamic> = (S*, dynamic) →* S*;
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method call(dynamic a, dynamic b) → dynamic {
+    return a;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo<S extends core::Object* = dynamic>((self::foo::S*, dynamic) →* self::foo::S* v) → void {}
+static method test() → void {
+  self::foo<core::String*>(invalid-expression "pkg/front_end/testcases/general/bug32629.dart:16:19: Error: The argument type 'dynamic Function(dynamic, dynamic)' can't be assigned to the parameter type 'String Function(String, dynamic)'.
+  foo<String>(new A());
+                  ^" in (let final self::A* #t1 = new self::A::•() in #t1 == null ?{(dynamic, dynamic) →* dynamic} null : #t1.{self::A::call}{(dynamic, dynamic) →* dynamic}) as{TypeError} (core::String*, dynamic) →* core::String*);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug32866.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug32866.dart.weak.modular.expect
new file mode 100644
index 0000000..25924d8
--- /dev/null
+++ b/pkg/front_end/testcases/general/bug32866.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract get f() → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends core::Object implements self::B {
+  final field core::String* f;
+  constructor •(core::String* f) → self::A*
+    : self::A::f = f, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::A* a = new self::A::•("foo");
+static method main() → dynamic
+  return core::print(self::a);
diff --git a/pkg/front_end/testcases/general/bug33099.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug33099.dart.weak.modular.expect
new file mode 100644
index 0000000..68aa1c4
--- /dev/null
+++ b/pkg/front_end/testcases/general/bug33099.dart.weak.modular.expect
@@ -0,0 +1,93 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:mirrors" as mir;
+
+import "dart:mirrors";
+
+class _FailingTest extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::_FailingTest*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class MyTest extends core::Object {
+  synthetic constructor •() → self::MyTest*
+    : super core::Object::•()
+    ;
+  @#C1
+  method foo() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _MyTest2&Object&MyTest = core::Object with self::MyTest /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_MyTest2&Object&MyTest*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method foo() → void
+    return super.{self::MyTest::foo}();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class MyTest2 extends self::_MyTest2&Object&MyTest {
+  synthetic constructor •() → self::MyTest2*
+    : super self::_MyTest2&Object&MyTest::•()
+    ;
+}
+static const field self::_FailingTest* failingTest = #C1;
+static method main() → dynamic {
+  mir::ClassMirror* classMirror = mir::reflectClass(#C2);
+  classMirror.{mir::ClassMirror::instanceMembers}{core::Map<core::Symbol*, mir::MethodMirror*>*}.{core::Map::forEach}((core::Symbol* symbol, mir::MethodMirror* memberMirror) → Null {
+    if(memberMirror.{mir::DeclarationMirror::simpleName}{core::Symbol*} =={core::Symbol::==}{(core::Object*) →* core::bool*} #C3) {
+      core::print(memberMirror);
+      core::print(self::_hasFailingTestAnnotation(memberMirror));
+    }
+  }){((core::Symbol*, mir::MethodMirror*) →* void) →* void};
+}
+static method _hasFailingTestAnnotation(mir::MethodMirror* method) → core::bool* {
+  core::bool* r = self::_hasAnnotationInstance(method, #C1);
+  core::print("[_hasFailingTestAnnotation] ${method} ${r}");
+  return r;
+}
+static method _hasAnnotationInstance(mir::DeclarationMirror* declaration, dynamic instance) → core::bool*
+  return declaration.{mir::DeclarationMirror::metadata}{core::List<mir::InstanceMirror*>*}.{core::Iterable::any}((mir::InstanceMirror* annotation) → core::bool* {
+    core::print("annotation: ${annotation.{mir::InstanceMirror::reflectee}{dynamic}}");
+    return core::identical(annotation.{mir::InstanceMirror::reflectee}{dynamic}, instance);
+  }){((mir::InstanceMirror*) →* core::bool*) →* core::bool*};
+
+constants  {
+  #C1 = self::_FailingTest {}
+  #C2 = TypeLiteralConstant(self::MyTest2*)
+  #C3 = #foo
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///bug33099.dart:
+- _FailingTest. (from org-dartlang-testcase:///bug33099.dart:10:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/bug33196.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug33196.dart.weak.modular.expect
new file mode 100644
index 0000000..306df2a
--- /dev/null
+++ b/pkg/front_end/testcases/general/bug33196.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method main() → dynamic {
+  FutureOr<core::String*>* result = self::returnsString();
+  core::print(result.{core::Object::runtimeType}{core::Type*});
+}
+static method returnsString() → FutureOr<core::String*>* async {
+  return "oh no";
+}
diff --git a/pkg/front_end/testcases/general/bug33206.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug33206.dart.weak.modular.expect
new file mode 100644
index 0000000..b73a7ce
--- /dev/null
+++ b/pkg/front_end/testcases/general/bug33206.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class X extends core::Object {
+  final field dynamic x;
+  final field dynamic y;
+  constructor •(dynamic x, dynamic y) → self::X*
+    : self::X::x = x, self::X::y = y, super core::Object::•()
+    ;
+  method toString() → core::String*
+    return "X(${this.{self::X::x}{dynamic}}, ${this.{self::X::y}{dynamic}})";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Y extends core::Object {
+  synthetic constructor •() → self::Y*
+    : super core::Object::•()
+    ;
+  method f(dynamic _) → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f1() → asy::Future<core::List<core::Object*>*>* async {
+  return <core::Object*>[1];
+}
+static method f2() → core::List<core::Object*>*
+  return <core::Object*>[2];
+static method f3() → asy::Future<core::Object*>* async {
+  return 3;
+}
+static method foo() → asy::Future<self::X*>* async {
+  return new self::X::•(let final self::Y* #t1 = new self::Y::•() in block {
+    #t1.{self::Y::f}(await self::f1()){(dynamic) →* dynamic};
+    #t1.{self::Y::f}(self::f2()){(dynamic) →* dynamic};
+  } =>#t1, await self::f3());
+}
+static method main() → asy::Future<void>* async {
+  core::print(await self::foo());
+}
diff --git a/pkg/front_end/testcases/general/bug33298.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug33298.dart.weak.modular.expect
new file mode 100644
index 0000000..d656910
--- /dev/null
+++ b/pkg/front_end/testcases/general/bug33298.dart.weak.modular.expect
@@ -0,0 +1,76 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/bug33298.dart:28:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
+//   List<String> list6 = ['a', 'b', 'c'].map(c).toList();
+//                                            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method call(core::String* s) → core::String*
+    return "${s}${s}";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  method call(covariant-by-class self::B::T* t) → self::B::T*
+    return t;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object* = dynamic>(self::C::call::T* t) → self::C::call::T*
+    return t;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  self::A* a = new self::A::•();
+  core::List<core::String*>* list1 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(a.{self::A::call}{(core::String*) →* core::String*}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+  core::List<core::String*>* list2 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(let final self::A* #t1 = a in #t1 == null ?{(core::String*) →* core::String*} null : #t1.{self::A::call}{(core::String*) →* core::String*}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+  self::B<core::String*>* b = new self::B::•<core::String*>();
+  core::List<core::String*>* list3 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(b.{self::B::call}{(core::String*) →* core::String*}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+  core::List<core::String*>* list4 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(let final self::B<core::String*>* #t2 = b in #t2 == null ?{(core::String*) →* core::String*} null : #t2.{self::B::call}{(core::String*) →* core::String*}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+  self::C* c = new self::C::•();
+  core::List<core::String*>* list5 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(c.{self::C::call}{<T extends core::Object* = dynamic>(T*) →* T*}<core::String*>){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+  core::List<core::String*>* list6 = <core::String*>["a", "b", "c"].{core::Iterable::map}<dynamic>(invalid-expression "pkg/front_end/testcases/general/bug33298.dart:28:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
+  List<String> list6 = ['a', 'b', 'c'].map(c).toList();
+                                           ^" in (let final self::C* #t3 = c in #t3 == null ?{<T extends core::Object* = dynamic>(T*) →* T*} null : #t3.{self::C::call}{<T extends core::Object* = dynamic>(T*) →* T*}) as{TypeError} (core::String*) →* dynamic){((core::String*) →* dynamic) →* core::Iterable<dynamic>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<dynamic>*} as{TypeError} core::List<core::String*>*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug34511.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug34511.dart.weak.modular.expect
new file mode 100644
index 0000000..5cda82c
--- /dev/null
+++ b/pkg/front_end/testcases/general/bug34511.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _B&Object&A<Z extends core::Object* = dynamic> = core::Object with self::A<() →* self::_B&Object&A::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<Z extends core::Object* = dynamic> extends self::_B&Object&A<self::B::Z*> {
+  synthetic constructor •() → self::B<self::B::Z*>*
+    : super self::_B&Object&A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug35470.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug35470.dart.weak.modular.expect
new file mode 100644
index 0000000..bc15f31
--- /dev/null
+++ b/pkg/front_end/testcases/general/bug35470.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  method foo<covariant-by-class Y extends self::A::X*>() → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A<dynamic> {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+static method bar(self::B* b) → dynamic {
+  b.{self::A::foo}<dynamic>(){() →* dynamic};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug37476.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug37476.dart.weak.modular.expect
new file mode 100644
index 0000000..6cc98ca
--- /dev/null
+++ b/pkg/front_end/testcases/general/bug37476.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  method foo() → <S extends self::A::T* = dynamic>(S*) →* void {
+    core::print("foo: T = ${self::A::T*}");
+    return <S extends self::A::T*>(S* a) → Null {};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends core::num*> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  method foo() → (self::B::T*) →* void {
+    core::print("foo: T = ${self::B::T*}");
+    return (self::B::T* a) → Null {};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::A<core::num*>* a = new self::A::•<core::int*>();
+static field self::B<core::num*>* b = new self::B::•<core::int*>();
+static method main() → dynamic {
+  try {
+    self::a.{self::A::foo}(){() →* <S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    throw "Expected TypeError";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    self::b.{self::B::foo}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+    throw "Expected TypeError";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+}
diff --git a/pkg/front_end/testcases/general/build_issue_2688.dart.weak.modular.expect b/pkg/front_end/testcases/general/build_issue_2688.dart.weak.modular.expect
new file mode 100644
index 0000000..226f3df
--- /dev/null
+++ b/pkg/front_end/testcases/general/build_issue_2688.dart.weak.modular.expect
@@ -0,0 +1,560 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class M0 extends core::Object /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M1 extends core::Object implements self::M0 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M2 extends core::Object implements self::M1 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M3 extends core::Object implements self::M2 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M4 extends core::Object implements self::M3 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M5 extends core::Object implements self::M4 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M6 extends core::Object implements self::M5 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M7 extends core::Object implements self::M6 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M8 extends core::Object implements self::M7 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M9 extends core::Object implements self::M8 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M10 extends core::Object implements self::M9 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M11 extends core::Object implements self::M10 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M12 extends core::Object implements self::M11 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M13 extends core::Object implements self::M12 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M14 extends core::Object implements self::M13 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M15 extends core::Object implements self::M14 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M16 extends core::Object implements self::M15 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M17 extends core::Object implements self::M16 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M18 extends core::Object implements self::M17 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M19 extends core::Object implements self::M18 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M20 extends core::Object implements self::M19 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M21 extends core::Object implements self::M20 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M22 extends core::Object implements self::M21 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M23 extends core::Object implements self::M22 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M24 extends core::Object implements self::M23 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M25 extends core::Object implements self::M24 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M26 extends core::Object implements self::M25 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M27 extends core::Object implements self::M26 /*isMixinDeclaration*/  {
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super*
+    : super core::Object::•()
+    ;
+  abstract get property() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Class&Super&M0 = self::Super with self::M0 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0*
+    : super self::Super::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M0::property
+}
+abstract class _Class&Super&M0&M1 = self::_Class&Super&M0 with self::M1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1*
+    : super self::_Class&Super&M0::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M1::property
+}
+abstract class _Class&Super&M0&M1&M2 = self::_Class&Super&M0&M1 with self::M2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2*
+    : super self::_Class&Super&M0&M1::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M2::property
+}
+abstract class _Class&Super&M0&M1&M2&M3 = self::_Class&Super&M0&M1&M2 with self::M3 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3*
+    : super self::_Class&Super&M0&M1&M2::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M3::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4 = self::_Class&Super&M0&M1&M2&M3 with self::M4 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4*
+    : super self::_Class&Super&M0&M1&M2&M3::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M4::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5 = self::_Class&Super&M0&M1&M2&M3&M4 with self::M5 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5*
+    : super self::_Class&Super&M0&M1&M2&M3&M4::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M5::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6 = self::_Class&Super&M0&M1&M2&M3&M4&M5 with self::M6 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M6::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6 with self::M7 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M7::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 with self::M8 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M8::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 with self::M9 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M9::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 with self::M10 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M10::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 with self::M11 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M11::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 with self::M12 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M12::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 with self::M13 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M13::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 with self::M14 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M14::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 with self::M15 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M15::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 with self::M16 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M16::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 with self::M17 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M17::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 with self::M18 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M18::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 with self::M19 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M19::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 with self::M20 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M20::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 with self::M21 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M21::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 with self::M22 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M22::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 with self::M23 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M23::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 with self::M24 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M24::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 with self::M25 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M25::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 with self::M26 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M26::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 with self::M27 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26::•()
+    ;
+  abstract mixin-stub get property() → core::int*; -> self::M27::property
+}
+class Class extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 {
+  synthetic constructor •() → self::Class*
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27::•()
+    ;
+  get property() → core::int*
+    return 0;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/call.dart.weak.modular.expect b/pkg/front_end/testcases/general/call.dart.weak.modular.expect
new file mode 100644
index 0000000..f9559169
--- /dev/null
+++ b/pkg/front_end/testcases/general/call.dart.weak.modular.expect
@@ -0,0 +1,234 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/call.dart:29:31: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+//  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   var string5 = callableGetter(1);
+//                               ^
+//
+// pkg/front_end/testcases/general/call.dart:34:25: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing1 = closure();
+//                         ^
+//
+// pkg/front_end/testcases/general/call.dart:35:30: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing2 = closure.call();
+//                              ^
+//
+// pkg/front_end/testcases/general/call.dart:36:35: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing3 = closure.call.call();
+//                                   ^
+//
+// pkg/front_end/testcases/general/call.dart:37:40: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing4 = closure.call.call.call();
+//                                        ^
+//
+// pkg/front_end/testcases/general/call.dart:39:26: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing5 = callable();
+//                          ^
+//
+// pkg/front_end/testcases/general/call.dart:40:31: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing6 = callable.call();
+//                               ^
+//
+// pkg/front_end/testcases/general/call.dart:41:36: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing7 = callable.call.call();
+//                                    ^
+//
+// pkg/front_end/testcases/general/call.dart:42:41: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing8 = callable.call.call.call();
+//                                         ^
+//
+// pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+//  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   var nothing9 = callableGetter();
+//                                ^
+//
+// pkg/front_end/testcases/general/call.dart:63:29: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+//  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var string5 = callableGetter(1);
+//                             ^
+//
+// pkg/front_end/testcases/general/call.dart:68:23: Error: Too few positional arguments: 1 required, 0 given.
+// var nothing1 = closure();
+//                       ^
+//
+// pkg/front_end/testcases/general/call.dart:69:28: Error: Too few positional arguments: 1 required, 0 given.
+// var nothing2 = closure.call();
+//                            ^
+//
+// pkg/front_end/testcases/general/call.dart:70:33: Error: Too few positional arguments: 1 required, 0 given.
+// var nothing3 = closure.call.call();
+//                                 ^
+//
+// pkg/front_end/testcases/general/call.dart:71:38: Error: Too few positional arguments: 1 required, 0 given.
+// var nothing4 = closure.call.call.call();
+//                                      ^
+//
+// pkg/front_end/testcases/general/call.dart:73:24: Error: Too few positional arguments: 1 required, 0 given.
+// var nothing5 = callable();
+//                        ^
+//
+// pkg/front_end/testcases/general/call.dart:74:29: Error: Too few positional arguments: 1 required, 0 given.
+// var nothing6 = callable.call();
+//                             ^
+//
+// pkg/front_end/testcases/general/call.dart:75:34: Error: Too few positional arguments: 1 required, 0 given.
+// var nothing7 = callable.call.call();
+//                                  ^
+//
+// pkg/front_end/testcases/general/call.dart:76:39: Error: Too few positional arguments: 1 required, 0 given.
+// var nothing8 = callable.call.call.call();
+//                                       ^
+//
+// pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+//  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var nothing9 = callableGetter();
+//                              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Callable extends core::Object {
+  synthetic constructor •() → self::Callable*
+    : super core::Object::•()
+    ;
+  method call(dynamic x) → dynamic {
+    return "string";
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class CallableGetter extends core::Object {
+  synthetic constructor •() → self::CallableGetter*
+    : super core::Object::•()
+    ;
+  get call() → dynamic
+    return new self::Callable::•();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field (dynamic) →* dynamic closure = (dynamic x) → dynamic => x;
+static field dynamic int1 = self::closure(1){(dynamic) →* dynamic};
+static field dynamic int2 = self::closure(1){(dynamic) →* dynamic};
+static field dynamic int3 = self::closure.call(1){(dynamic) →* dynamic};
+static field dynamic int4 = self::closure.call.call(1){(dynamic) →* dynamic};
+static field self::Callable* callable = new self::Callable::•();
+static field dynamic string1 = self::callable.{self::Callable::call}(1){(dynamic) →* dynamic};
+static field dynamic string2 = self::callable.{self::Callable::call}(1){(dynamic) →* dynamic};
+static field dynamic string3 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
+static field dynamic string4 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
+static field self::CallableGetter* callableGetter = new self::CallableGetter::•();
+static field invalid-type string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:63:29: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+ - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var string5 = callableGetter(1);
+                            ^";
+static field dynamic string6 = let final self::CallableGetter* #t1 = self::callableGetter in let final core::int* #t2 = 1 in #t1.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t2);
+static field dynamic string7 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call(1);
+static field dynamic string8 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call(1);
+static field dynamic nothing1 = invalid-expression "pkg/front_end/testcases/general/call.dart:68:23: Error: Too few positional arguments: 1 required, 0 given.
+var nothing1 = closure();
+                      ^" in self::closure{<inapplicable>}.();
+static field dynamic nothing2 = invalid-expression "pkg/front_end/testcases/general/call.dart:69:28: Error: Too few positional arguments: 1 required, 0 given.
+var nothing2 = closure.call();
+                           ^" in self::closure{<inapplicable>}.();
+static field dynamic nothing3 = invalid-expression "pkg/front_end/testcases/general/call.dart:70:33: Error: Too few positional arguments: 1 required, 0 given.
+var nothing3 = closure.call.call();
+                                ^" in self::closure.call{<inapplicable>}.();
+static field dynamic nothing4 = invalid-expression "pkg/front_end/testcases/general/call.dart:71:38: Error: Too few positional arguments: 1 required, 0 given.
+var nothing4 = closure.call.call.call();
+                                     ^" in self::closure.call.call{<inapplicable>}.();
+static field dynamic nothing5 = invalid-expression "pkg/front_end/testcases/general/call.dart:73:24: Error: Too few positional arguments: 1 required, 0 given.
+var nothing5 = callable();
+                       ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+static field dynamic nothing6 = invalid-expression "pkg/front_end/testcases/general/call.dart:74:29: Error: Too few positional arguments: 1 required, 0 given.
+var nothing6 = callable.call();
+                            ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+static field dynamic nothing7 = invalid-expression "pkg/front_end/testcases/general/call.dart:75:34: Error: Too few positional arguments: 1 required, 0 given.
+var nothing7 = callable.call.call();
+                                 ^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}{<inapplicable>}.();
+static field dynamic nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:76:39: Error: Too few positional arguments: 1 required, 0 given.
+var nothing8 = callable.call.call.call();
+                                      ^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
+static field invalid-type nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+ - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var nothing9 = callableGetter();
+                             ^";
+static field dynamic nothing10 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call();
+static field dynamic nothing11 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call();
+static field dynamic nothing12 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call();
+static method main() → dynamic {
+  (dynamic) →* dynamic closure = (dynamic x) → dynamic => x;
+  dynamic int1 = closure(1){(dynamic) →* dynamic};
+  dynamic int2 = closure(1){(dynamic) →* dynamic};
+  dynamic int3 = closure.call(1){(dynamic) →* dynamic};
+  dynamic int4 = closure.call.call(1){(dynamic) →* dynamic};
+  self::Callable* callable = new self::Callable::•();
+  dynamic string1 = callable.{self::Callable::call}(1){(dynamic) →* dynamic};
+  dynamic string2 = callable.{self::Callable::call}(1){(dynamic) →* dynamic};
+  dynamic string3 = callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
+  dynamic string4 = callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
+  self::CallableGetter* callableGetter = new self::CallableGetter::•();
+  invalid-type string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:29:31: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+ - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  var string5 = callableGetter(1);
+                              ^";
+  dynamic string6 = let final self::CallableGetter* #t3 = callableGetter in let final core::int* #t4 = 1 in #t3.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t4);
+  dynamic string7 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call(1);
+  dynamic string8 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call(1);
+  invalid-type nothing1 = invalid-expression "pkg/front_end/testcases/general/call.dart:34:25: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing1 = closure();
+                        ^" in closure{<inapplicable>}.();
+  invalid-type nothing2 = invalid-expression "pkg/front_end/testcases/general/call.dart:35:30: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing2 = closure.call();
+                             ^" in closure{<inapplicable>}.();
+  invalid-type nothing3 = invalid-expression "pkg/front_end/testcases/general/call.dart:36:35: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing3 = closure.call.call();
+                                  ^" in closure.call{<inapplicable>}.();
+  invalid-type nothing4 = invalid-expression "pkg/front_end/testcases/general/call.dart:37:40: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing4 = closure.call.call.call();
+                                       ^" in closure.call.call{<inapplicable>}.();
+  invalid-type nothing5 = invalid-expression "pkg/front_end/testcases/general/call.dart:39:26: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing5 = callable();
+                         ^" in callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+  invalid-type nothing6 = invalid-expression "pkg/front_end/testcases/general/call.dart:40:31: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing6 = callable.call();
+                              ^" in callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+  invalid-type nothing7 = invalid-expression "pkg/front_end/testcases/general/call.dart:41:36: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing7 = callable.call.call();
+                                   ^" in callable.{self::Callable::call}{(dynamic) →* dynamic}{<inapplicable>}.();
+  invalid-type nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:42:41: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing8 = callable.call.call.call();
+                                        ^" in callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
+  invalid-type nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
+ - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  var nothing9 = callableGetter();
+                               ^";
+  dynamic nothing10 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call();
+  dynamic nothing11 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call();
+  dynamic nothing12 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call();
+}
diff --git a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.modular.expect b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.modular.expect
new file mode 100644
index 0000000..82b2ca3
--- /dev/null
+++ b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/callable_type_variable.dart:25:19: Error: Too few positional arguments: 1 required, 0 given.
+//     var v1 = field(); // error
+//                   ^
+//
+// pkg/front_end/testcases/general/callable_type_variable.dart:28:24: Error: Too few positional arguments: 1 required, 0 given.
+//     var v4 = field.call(); // error
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1<T extends core::Function*> extends core::Object {
+  covariant-by-class field self::Class1::T* field;
+  constructor •(self::Class1::T* field) → self::Class1<self::Class1::T*>*
+    : self::Class1::field = field, super core::Object::•()
+    ;
+  method method() → dynamic {
+    dynamic v1 = this.{self::Class1::field}{self::Class1::T*}();
+    dynamic v2 = let final core::int* #t1 = 0 in this.{self::Class1::field}{self::Class1::T*}(#t1);
+    self::Class1::T* v3 = this.{self::Class1::field}{self::Class1::T*}.call;
+    dynamic v4 = this.{self::Class1::field}{self::Class1::T*}();
+    dynamic v5 = this.{self::Class1::field}{self::Class1::T*}(0);
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class2<T extends (core::int*) →* core::String*> extends core::Object {
+  covariant-by-class field self::Class2::T* field;
+  constructor •(self::Class2::T* field) → self::Class2<self::Class2::T*>*
+    : self::Class2::field = field, super core::Object::•()
+    ;
+  method method() → dynamic {
+    invalid-type v1 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:25:19: Error: Too few positional arguments: 1 required, 0 given.
+    var v1 = field(); // error
+                  ^" in this.{self::Class2::field}{self::Class2::T*}{<inapplicable>}.();
+    core::String* v2 = let final core::int* #t2 = 0 in this.{self::Class2::field}{self::Class2::T*}(#t2){(core::int*) →* core::String*};
+    self::Class2::T* v3 = this.{self::Class2::field}{self::Class2::T*}.call;
+    invalid-type v4 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:28:24: Error: Too few positional arguments: 1 required, 0 given.
+    var v4 = field.call(); // error
+                       ^" in this.{self::Class2::field}{self::Class2::T*}{<inapplicable>}.();
+    core::String* v5 = this.{self::Class2::field}{self::Class2::T*}(0){(core::int*) →* core::String*};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/candidate_found.dart.weak.modular.expect b/pkg/front_end/testcases/general/candidate_found.dart.weak.modular.expect
new file mode 100644
index 0000000..a8817a7
--- /dev/null
+++ b/pkg/front_end/testcases/general/candidate_found.dart.weak.modular.expect
@@ -0,0 +1,85 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/candidate_found.dart:16:11: Error: Too few positional arguments: 1 required, 0 given.
+//   new Fisk();
+//           ^
+// pkg/front_end/testcases/general/candidate_found.dart:6:3: Context: Found this candidate, but the arguments don't match.
+//   Fisk(int x) {}
+//   ^^^^
+//
+// pkg/front_end/testcases/general/candidate_found.dart:17:17: Error: Too few positional arguments: 1 required, 0 given.
+//   new Fisk.named();
+//                 ^
+// pkg/front_end/testcases/general/candidate_found.dart:8:3: Context: Found this candidate, but the arguments don't match.
+//   Fisk.named(int x) {}
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/candidate_found.dart:18:7: Error: Too few positional arguments: 1 required, 0 given.
+//   Fisk();
+//       ^
+// pkg/front_end/testcases/general/candidate_found.dart:6:3: Context: Found this candidate, but the arguments don't match.
+//   Fisk(int x) {}
+//   ^^^^
+//
+// pkg/front_end/testcases/general/candidate_found.dart:19:13: Error: Too few positional arguments: 1 required, 0 given.
+//   Fisk.named();
+//             ^
+// pkg/front_end/testcases/general/candidate_found.dart:8:3: Context: Found this candidate, but the arguments don't match.
+//   Fisk.named(int x) {}
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/candidate_found.dart:20:20: Error: Too few positional arguments: 1 required, 0 given.
+//   Fisk.staticMethod();
+//                    ^
+// pkg/front_end/testcases/general/candidate_found.dart:12:15: Context: Found this candidate, but the arguments don't match.
+//   static void staticMethod(int x) {}
+//               ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/candidate_found.dart:21:24: Error: Too few positional arguments: 1 required, 0 given.
+//   (null as Fisk).method();
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Fisk extends core::Object {
+  constructor •(core::int* x) → self::Fisk*
+    : super core::Object::•() {}
+  constructor named(core::int* x) → self::Fisk*
+    : super core::Object::•() {}
+  method method(core::int* x) → void {}
+  static method staticMethod(core::int* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:16:11: Error: Too few positional arguments: 1 required, 0 given.
+  new Fisk();
+          ^";
+  invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:17:17: Error: Too few positional arguments: 1 required, 0 given.
+  new Fisk.named();
+                ^";
+  invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:18:7: Error: Too few positional arguments: 1 required, 0 given.
+  Fisk();
+      ^";
+  invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:19:13: Error: Too few positional arguments: 1 required, 0 given.
+  Fisk.named();
+            ^";
+  invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:20:20: Error: Too few positional arguments: 1 required, 0 given.
+  Fisk.staticMethod();
+                   ^";
+  invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:21:24: Error: Too few positional arguments: 1 required, 0 given.
+  (null as Fisk).method();
+                       ^" in (null as self::Fisk*).{self::Fisk::method}{<inapplicable>}.(){() →* invalid-type};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/cascade.dart.weak.modular.expect b/pkg/front_end/testcases/general/cascade.dart.weak.modular.expect
new file mode 100644
index 0000000..3d4d8ca
--- /dev/null
+++ b/pkg/front_end/testcases/general/cascade.dart.weak.modular.expect
@@ -0,0 +1,65 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/cascade.dart:26:5: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+//  - 'List' is from 'dart:core'.
+//     [1]
+//     ^
+//
+// pkg/front_end/testcases/general/cascade.dart:28:13: Error: The getter 'last' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
+//     ..first.last.toString()
+//             ^^^^
+//
+// pkg/front_end/testcases/general/cascade.dart:29:12: Error: The operator '[]' isn't defined for the class 'int'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
+//     ..first[0].toString()
+//            ^
+//
+// pkg/front_end/testcases/general/cascade.dart:30:11: Error: The getter 'last' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
+//     ..[0].last.toString();
+//           ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::List<core::int*>* list = let final core::List<core::int*>* #t1 = <core::int*>[1] in block {
+    #t1.{core::List::add}(2){(core::int*) →* void};
+    #t1.{core::List::add}(3){(core::int*) →* void};
+    #t1.{core::List::addAll}(<core::int*>[4, 5]){(core::Iterable<core::int*>*) →* void};
+  } =>#t1;
+  core::print(list);
+  let final core::List<core::int*>* #t2 = list in block {
+    #t2.{core::List::add}(2){(core::int*) →* void};
+    #t2.{core::List::length}{core::int*};
+    #t2.{core::List::length} = 0;
+  } =>#t2;
+  core::print(list);
+  let final core::List<core::int*>* #t3 = list in block {
+    #t3.{core::List::add}(2){(core::int*) →* void};
+    #t3.{core::List::[]}(0){(core::int*) →* core::int*};
+    #t3.{core::List::[]=}(0, 87){(core::int*, core::int*) →* void};
+  } =>#t3;
+  core::print(list);
+  list = let final core::List<core::int*>* #t4 = <core::int*>[invalid-expression "pkg/front_end/testcases/general/cascade.dart:26:5: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+ - 'List' is from 'dart:core'.
+    [1]
+    ^" in <core::int*>[1] as{TypeError} core::int*] in block {
+    invalid-expression "pkg/front_end/testcases/general/cascade.dart:28:13: Error: The getter 'last' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
+    ..first.last.toString()
+            ^^^^" in #t4.{core::Iterable::first}{core::int*}{<unresolved>}.last.{core::Object::toString}(){() →* core::String*};
+    invalid-expression "pkg/front_end/testcases/general/cascade.dart:29:12: Error: The operator '[]' isn't defined for the class 'int'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
+    ..first[0].toString()
+           ^" in #t4.{core::Iterable::first}{core::int*}{<unresolved>}.[](0).{core::Object::toString}(){() →* core::String*};
+    invalid-expression "pkg/front_end/testcases/general/cascade.dart:30:11: Error: The getter 'last' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
+    ..[0].last.toString();
+          ^^^^" in #t4.{core::List::[]}(0){(core::int*) →* core::int*}{<unresolved>}.last.{core::Object::toString}(){() →* core::String*};
+  } =>#t4;
+  core::print(list);
+}
diff --git a/pkg/front_end/testcases/general/cascade_context.dart.weak.modular.expect b/pkg/front_end/testcases/general/cascade_context.dart.weak.modular.expect
new file mode 100644
index 0000000..11f2c0b
--- /dev/null
+++ b/pkg/front_end/testcases/general/cascade_context.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method test() → dynamic {
+  core::int* v1 = self::f<core::int*>();
+  core::int* v2 = let final core::int* #t1 = self::f<core::int*>() in block {
+    #t1.{core::int::isEven}{core::bool*};
+  } =>#t1;
+  core::int* v3 = let final core::int* #t2 = self::f<core::int*>() in block {
+    #t2.{core::int::isEven}{core::bool*};
+    #t2.{core::int::isEven}{core::bool*};
+  } =>#t2;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/casts.dart.weak.modular.expect b/pkg/front_end/testcases/general/casts.dart.weak.modular.expect
new file mode 100644
index 0000000..bfac5fe
--- /dev/null
+++ b/pkg/front_end/testcases/general/casts.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::print("" as core::String*);
+  core::print(1 as core::int*);
+  core::print(1.0 as core::double*);
+  core::print("" is core::String*);
+  core::print("" is core::int*);
+  core::print("" is core::double*);
+  core::print(1 is core::String*);
+  core::print(1 is core::int*);
+  core::print(1 is core::double*);
+  core::print(1.0 is core::String*);
+  core::print(1.0 is core::int*);
+  core::print(1.0 is core::double*);
+}
diff --git a/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.modular.expect
new file mode 100644
index 0000000..ee44558
--- /dev/null
+++ b/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "deferred_lib.dart" as def;
+
+import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
+
+static method main() → dynamic {}
+static method test() → dynamic {
+  core::print(let final dynamic #t1 = CheckLibraryIsLoaded(lib) in new def::C::•());
+}
+
+library;
+import self as def;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::int* y = 1;
+  synthetic constructor •() → def::C*
+    : super core::Object::•()
+    ;
+  static method m() → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* x = 0;
+static method m(dynamic x) → dynamic
+  return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.modular.expect
new file mode 100644
index 0000000..3ed13e8
--- /dev/null
+++ b/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/check_deferred_as_check.dart:9:8: Error: The type 'C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
+//  - 'C' is from 'pkg/front_end/testcases/general/deferred_lib.dart'.
+// Try removing 'deferred' from the import of 'lib' or use a supertype of 'C' that isn't deferred.
+//   x as lib.C;
+//        ^^^^^
+//
+import self as self;
+
+import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
+
+static method main() → dynamic {}
+static method test(dynamic x) → dynamic {
+  x as invalid-type;
+}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::int* y = 1;
+  synthetic constructor •() → self2::C*
+    : super core::Object::•()
+    ;
+  static method m() → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* x = 0;
+static method m(dynamic x) → dynamic
+  return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.modular.expect
new file mode 100644
index 0000000..a15d266
--- /dev/null
+++ b/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library;
+import self as self;
+import "deferred_lib.dart" as def;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
+
+static method main() → dynamic {}
+static method test() → dynamic {
+  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic} core::int*;
+  let final dynamic #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
+}
+static method m2() → dynamic
+  return 1;
+
+library;
+import self as def;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::int* y = 1;
+  synthetic constructor •() → def::C*
+    : super core::Object::•()
+    ;
+  static method m() → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* x = 0;
+static method m(dynamic x) → dynamic
+  return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.modular.expect
new file mode 100644
index 0000000..12e71e3
--- /dev/null
+++ b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library;
+import self as self;
+import "deferred_lib.dart" as def;
+
+import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
+
+static method main() → dynamic {}
+static method test() → dynamic async {
+  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::m(await LoadLibrary(lib));
+}
+
+library;
+import self as def;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::int* y = 1;
+  synthetic constructor •() → def::C*
+    : super core::Object::•()
+    ;
+  static method m() → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* x = 0;
+static method m(dynamic x) → dynamic
+  return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.modular.expect
new file mode 100644
index 0000000..1d2d900
--- /dev/null
+++ b/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library;
+import self as self;
+import "deferred_lib.dart" as def;
+
+import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
+
+static method main() → dynamic {}
+static method test() → dynamic {
+  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::m(3);
+}
+
+library;
+import self as def;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::int* y = 1;
+  synthetic constructor •() → def::C*
+    : super core::Object::•()
+    ;
+  static method m() → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* x = 0;
+static method m(dynamic x) → dynamic
+  return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.modular.expect
new file mode 100644
index 0000000..549e5e0
--- /dev/null
+++ b/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library;
+import self as self;
+import "deferred_lib.dart" as def;
+
+import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
+
+static method main() → dynamic {}
+static method test() → dynamic {
+  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = 2;
+}
+
+library;
+import self as def;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::int* y = 1;
+  synthetic constructor •() → def::C*
+    : super core::Object::•()
+    ;
+  static method m() → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* x = 0;
+static method m(dynamic x) → dynamic
+  return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.modular.expect
new file mode 100644
index 0000000..08b44c2
--- /dev/null
+++ b/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/check_deferred_is_check.dart:9:14: Error: The type 'C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
+//  - 'C' is from 'pkg/front_end/testcases/general/deferred_lib.dart'.
+// Try removing 'deferred' from the import of 'lib' or use a supertype of 'C' that isn't deferred.
+//   print(x is lib.C);
+//              ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
+
+static method main() → dynamic {}
+static method test(dynamic x) → dynamic {
+  core::print(x is invalid-type);
+}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::int* y = 1;
+  synthetic constructor •() → self2::C*
+    : super core::Object::•()
+    ;
+  static method m() → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* x = 0;
+static method m(dynamic x) → dynamic
+  return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_read.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_read.dart.weak.modular.expect
new file mode 100644
index 0000000..d298cb9
--- /dev/null
+++ b/pkg/front_end/testcases/general/check_deferred_read.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "deferred_lib.dart" as def;
+
+import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
+
+static method main() → dynamic {}
+static method test() → dynamic {
+  core::print((let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x).{core::num::+}(1){(core::num*) →* core::int*});
+}
+
+library;
+import self as def;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::int* y = 1;
+  synthetic constructor •() → def::C*
+    : super core::Object::•()
+    ;
+  static method m() → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* x = 0;
+static method m(dynamic x) → dynamic
+  return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.modular.expect
new file mode 100644
index 0000000..7ebd7ea
--- /dev/null
+++ b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "deferred_lib.dart" as def;
+
+import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
+
+static method main() → dynamic {}
+static method test() → dynamic {
+  core::print(let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::C::y);
+}
+
+library;
+import self as def;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::int* y = 1;
+  synthetic constructor •() → def::C*
+    : super core::Object::•()
+    ;
+  static method m() → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* x = 0;
+static method m(dynamic x) → dynamic
+  return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.modular.expect
new file mode 100644
index 0000000..efb9d56
--- /dev/null
+++ b/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
+
+static method main() → dynamic {}
+static method test() → dynamic {
+  core::print(let final dynamic #t1 = CheckLibraryIsLoaded(lib) in #C1);
+}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::int* y = 1;
+  synthetic constructor •() → self2::C*
+    : super core::Object::•()
+    ;
+  static method m() → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* x = 0;
+static method m(dynamic x) → dynamic
+  return null;
+
+constants  {
+  #C1 = TypeLiteralConstant(self2::C*)
+}
diff --git a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.modular.expect
new file mode 100644
index 0000000..2fb6711
--- /dev/null
+++ b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "deferred_lib.dart" as def;
+
+import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
+
+static method main() → dynamic {}
+static method test() → dynamic {
+  core::print(let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::C::m());
+}
+
+library;
+import self as def;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::int* y = 1;
+  synthetic constructor •() → def::C*
+    : super core::Object::•()
+    ;
+  static method m() → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* x = 0;
+static method m(dynamic x) → dynamic
+  return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.modular.expect
new file mode 100644
index 0000000..1189c30
--- /dev/null
+++ b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/check_deferred_type_declaration.dart:9:3: Error: The type 'C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
+//  - 'C' is from 'pkg/front_end/testcases/general/deferred_lib.dart'.
+// Try removing 'deferred' from the import of 'lib' or use a supertype of 'C' that isn't deferred.
+//   lib.C x = null;
+//   ^^^^^
+//
+import self as self;
+
+import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
+
+static method main() → dynamic
+  return self::test();
+static method test() → dynamic {
+  invalid-type x = null;
+}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::int* y = 1;
+  synthetic constructor •() → self2::C*
+    : super core::Object::•()
+    ;
+  static method m() → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* x = 0;
+static method m(dynamic x) → dynamic
+  return null;
diff --git a/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.modular.expect b/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.modular.expect
new file mode 100644
index 0000000..80172a1
--- /dev/null
+++ b/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/circularity-via-initializing-formal.dart:15:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
+// Specify the type explicitly.
+//   C._circular(this.f);
+//   ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field self::C* f = new self::C::_circular(null);
+  constructor _circular(self::C* f) → self::C*
+    : self::C::f = f, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C* x = new self::C::_circular(null);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/classes.dart.weak.modular.expect b/pkg/front_end/testcases/general/classes.dart.weak.modular.expect
new file mode 100644
index 0000000..288e237
--- /dev/null
+++ b/pkg/front_end/testcases/general/classes.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::int* x;
+  final field core::int* y;
+  constructor •(core::int* y) → self::A*
+    : self::A::y = y, self::A::x = 42, super core::Object::•()
+    ;
+  method method() → dynamic {
+    core::print("A.method x: ${this.{self::A::x}{core::int*}} y: ${this.{self::A::y}{core::int*}}");
+    core::print(this);
+    core::print(this.{self::A::runtimeType}{core::Type*});
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  constructor •(dynamic x) → self::B*
+    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
+    ;
+  method method() → dynamic {
+    core::print("B.method x: ${this.{self::A::x}{core::int*}} y: ${this.{self::A::y}{core::int*}}");
+    super.{self::A::method}();
+  }
+}
+static method main() → dynamic {
+  self::A* a = new self::A::•(87);
+  self::B* b = new self::B::•(117);
+  a.{self::A::method}(){() →* dynamic};
+  b.{self::B::method}(){() →* dynamic};
+}
diff --git a/pkg/front_end/testcases/general/clone_function_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/clone_function_type.dart.weak.modular.expect
new file mode 100644
index 0000000..7453dc4
--- /dev/null
+++ b/pkg/front_end/testcases/general/clone_function_type.dart.weak.modular.expect
@@ -0,0 +1,1425 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:22:51: Error: Expected an identifier, but got '}'.
+// Try inserting an identifier before '}'.
+// class Fm1<Z> extends Object with Am1<Function({int}), Z> {}
+//                                                   ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:46:45: Error: Expected an identifier, but got '}'.
+// Try inserting an identifier before '}'.
+// class Qm1<Z> = Object with Am1<Function({int}), Z>;
+//                                             ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:77:51: Error: Expected an identifier, but got '}'.
+// Try inserting an identifier before '}'.
+// class Fm2<Z> extends Object with Am2<Function({int}), Z> {}
+//                                                   ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:105:45: Error: Expected an identifier, but got '}'.
+// Try inserting an identifier before '}'.
+// class Qm2<Z> = Object with Am2<Function({int}), Z>;
+//                                             ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:134:28: Error: Expected an identifier, but got '}'.
+// Try inserting an identifier before '}'.
+// typedef TdF = Function({int});
+//                            ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:190:34: Error: Expected an identifier, but got '}'.
+// Try inserting an identifier before '}'.
+// class Ef1<X extends Function({int})> {
+//                                  ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:67:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// Try changing type arguments so that they conform to the bounds.
+// class Bm2<Z> extends Object with Am2<Function(int), Z> {}
+//       ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+//           ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:70:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// Try changing type arguments so that they conform to the bounds.
+// class Cm2<Z> extends Object with Am2<Function(int x), Z> {}
+//       ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+//           ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:86:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+//  - 'Function' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// class Jm2<Z> extends Object with Am2<Function, Z> {}
+//       ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+//           ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:89:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+//  - 'Function' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// class Km2<Z> extends Object with Am2<Function(Function Function), Z> {}
+//       ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+//           ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:95:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Mm2'.
+// Try changing type arguments so that they conform to the bounds.
+// class Mm2<Z> = Object with Am2<Function(int), Z>;
+//       ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+//           ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:98:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Nm2'.
+// Try changing type arguments so that they conform to the bounds.
+// class Nm2<Z> = Object with Am2<Function(int x), Z>;
+//       ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+//           ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:114:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Um2'.
+//  - 'Function' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// class Um2<Z> = Object with Am2<Function, Z>;
+//       ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+//           ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:117:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Vm2'.
+//  - 'Function' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// class Vm2<Z> = Object with Am2<Function(Function Function), Z>;
+//       ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef TdB = (core::int*) →* dynamic;
+typedef TdC = (core::int*) →* dynamic;
+typedef TdD = () →* core::int*;
+typedef TdE = () →* dynamic;
+typedef TdF = () →* dynamic;
+typedef TdG = ({x: core::int*}) →* dynamic;
+typedef TdH = ([core::int*]) →* dynamic;
+typedef TdI = ([core::int*]) →* dynamic;
+typedef TdJ = (core::Function*) →* dynamic;
+typedef TdK = () →* (() →* core::Function*) →* dynamic;
+class Am1<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Am1<self::Am1::X*, self::Am1::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Bm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::int*) →* dynamic, self::_Bm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Bm1&Object&Am1<self::_Bm1&Object&Am1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bm1<Z extends core::Object* = dynamic> extends self::_Bm1&Object&Am1<self::Bm1::Z*> {
+  synthetic constructor •() → self::Bm1<self::Bm1::Z*>*
+    : super self::_Bm1&Object&Am1::•()
+    ;
+}
+abstract class _Cm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::int*) →* dynamic, self::_Cm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Cm1&Object&Am1<self::_Cm1&Object&Am1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Cm1<Z extends core::Object* = dynamic> extends self::_Cm1&Object&Am1<self::Cm1::Z*> {
+  synthetic constructor •() → self::Cm1<self::Cm1::Z*>*
+    : super self::_Cm1&Object&Am1::•()
+    ;
+}
+abstract class _Dm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* core::int*, self::_Dm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Dm1&Object&Am1<self::_Dm1&Object&Am1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Dm1<Z extends core::Object* = dynamic> extends self::_Dm1&Object&Am1<self::Dm1::Z*> {
+  synthetic constructor •() → self::Dm1<self::Dm1::Z*>*
+    : super self::_Dm1&Object&Am1::•()
+    ;
+}
+abstract class _Em1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* dynamic, self::_Em1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Em1&Object&Am1<self::_Em1&Object&Am1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Em1<Z extends core::Object* = dynamic> extends self::_Em1&Object&Am1<self::Em1::Z*> {
+  synthetic constructor •() → self::Em1<self::Em1::Z*>*
+    : super self::_Em1&Object&Am1::•()
+    ;
+}
+abstract class _Fm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* dynamic, self::_Fm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fm1&Object&Am1<self::_Fm1&Object&Am1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Fm1<Z extends core::Object* = dynamic> extends self::_Fm1&Object&Am1<self::Fm1::Z*> {
+  synthetic constructor •() → self::Fm1<self::Fm1::Z*>*
+    : super self::_Fm1&Object&Am1::•()
+    ;
+}
+abstract class _Gm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<({x: core::int*}) →* dynamic, self::_Gm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Gm1&Object&Am1<self::_Gm1&Object&Am1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Gm1<Z extends core::Object* = dynamic> extends self::_Gm1&Object&Am1<self::Gm1::Z*> {
+  synthetic constructor •() → self::Gm1<self::Gm1::Z*>*
+    : super self::_Gm1&Object&Am1::•()
+    ;
+}
+abstract class _Hm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<([core::int*]) →* dynamic, self::_Hm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Hm1&Object&Am1<self::_Hm1&Object&Am1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Hm1<Z extends core::Object* = dynamic> extends self::_Hm1&Object&Am1<self::Hm1::Z*> {
+  synthetic constructor •() → self::Hm1<self::Hm1::Z*>*
+    : super self::_Hm1&Object&Am1::•()
+    ;
+}
+abstract class _Im1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<([core::int*]) →* dynamic, self::_Im1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Im1&Object&Am1<self::_Im1&Object&Am1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Im1<Z extends core::Object* = dynamic> extends self::_Im1&Object&Am1<self::Im1::Z*> {
+  synthetic constructor •() → self::Im1<self::Im1::Z*>*
+    : super self::_Im1&Object&Am1::•()
+    ;
+}
+abstract class _Jm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<core::Function*, self::_Jm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Jm1&Object&Am1<self::_Jm1&Object&Am1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Jm1<Z extends core::Object* = dynamic> extends self::_Jm1&Object&Am1<self::Jm1::Z*> {
+  synthetic constructor •() → self::Jm1<self::Jm1::Z*>*
+    : super self::_Jm1&Object&Am1::•()
+    ;
+}
+abstract class _Km1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::Function*) →* dynamic, self::_Km1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Km1&Object&Am1<self::_Km1&Object&Am1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Km1<Z extends core::Object* = dynamic> extends self::_Km1&Object&Am1<self::Km1::Z*> {
+  synthetic constructor •() → self::Km1<self::Km1::Z*>*
+    : super self::_Km1&Object&Am1::•()
+    ;
+}
+abstract class _Lm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* (() →* core::Function*) →* dynamic, self::_Lm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Lm1&Object&Am1<self::_Lm1&Object&Am1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Lm1<Z extends core::Object* = dynamic> extends self::_Lm1&Object&Am1<self::Lm1::Z*> {
+  synthetic constructor •() → self::Lm1<self::Lm1::Z*>*
+    : super self::_Lm1&Object&Am1::•()
+    ;
+}
+class Mm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::int*) →* dynamic, self::Mm1::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Mm1<self::Mm1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Nm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::int*) →* dynamic, self::Nm1::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Nm1<self::Nm1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Om1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* core::int*, self::Om1::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Om1<self::Om1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Pm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* dynamic, self::Pm1::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Pm1<self::Pm1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Qm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* dynamic, self::Qm1::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Qm1<self::Qm1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Rm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<({x: core::int*}) →* dynamic, self::Rm1::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Rm1<self::Rm1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Sm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<([core::int*]) →* dynamic, self::Sm1::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Sm1<self::Sm1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Tm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<([core::int*]) →* dynamic, self::Tm1::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Tm1<self::Tm1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Um1<Z extends core::Object* = dynamic> = core::Object with self::Am1<core::Function*, self::Um1::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Um1<self::Um1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Vm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::Function*) →* dynamic, self::Vm1::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Vm1<self::Vm1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Wm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* (() →* core::Function*) →* dynamic, self::Wm1::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Wm1<self::Wm1::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Am2<X extends () →* dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Am2<self::Am2::X*, self::Am2::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Bm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::int*) →* dynamic, self::_Bm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Bm2&Object&Am2<self::_Bm2&Object&Am2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bm2<Z extends core::Object* = dynamic> extends self::_Bm2&Object&Am2<self::Bm2::Z*> {
+  synthetic constructor •() → self::Bm2<self::Bm2::Z*>*
+    : super self::_Bm2&Object&Am2::•()
+    ;
+}
+abstract class _Cm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::int*) →* dynamic, self::_Cm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Cm2&Object&Am2<self::_Cm2&Object&Am2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Cm2<Z extends core::Object* = dynamic> extends self::_Cm2&Object&Am2<self::Cm2::Z*> {
+  synthetic constructor •() → self::Cm2<self::Cm2::Z*>*
+    : super self::_Cm2&Object&Am2::•()
+    ;
+}
+abstract class _Dm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* core::int*, self::_Dm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Dm2&Object&Am2<self::_Dm2&Object&Am2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Dm2<Z extends core::Object* = dynamic> extends self::_Dm2&Object&Am2<self::Dm2::Z*> {
+  synthetic constructor •() → self::Dm2<self::Dm2::Z*>*
+    : super self::_Dm2&Object&Am2::•()
+    ;
+}
+abstract class _Em2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* dynamic, self::_Em2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Em2&Object&Am2<self::_Em2&Object&Am2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Em2<Z extends core::Object* = dynamic> extends self::_Em2&Object&Am2<self::Em2::Z*> {
+  synthetic constructor •() → self::Em2<self::Em2::Z*>*
+    : super self::_Em2&Object&Am2::•()
+    ;
+}
+abstract class _Fm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* dynamic, self::_Fm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fm2&Object&Am2<self::_Fm2&Object&Am2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Fm2<Z extends core::Object* = dynamic> extends self::_Fm2&Object&Am2<self::Fm2::Z*> {
+  synthetic constructor •() → self::Fm2<self::Fm2::Z*>*
+    : super self::_Fm2&Object&Am2::•()
+    ;
+}
+abstract class _Gm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<({x: core::int*}) →* dynamic, self::_Gm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Gm2&Object&Am2<self::_Gm2&Object&Am2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Gm2<Z extends core::Object* = dynamic> extends self::_Gm2&Object&Am2<self::Gm2::Z*> {
+  synthetic constructor •() → self::Gm2<self::Gm2::Z*>*
+    : super self::_Gm2&Object&Am2::•()
+    ;
+}
+abstract class _Hm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<([core::int*]) →* dynamic, self::_Hm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Hm2&Object&Am2<self::_Hm2&Object&Am2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Hm2<Z extends core::Object* = dynamic> extends self::_Hm2&Object&Am2<self::Hm2::Z*> {
+  synthetic constructor •() → self::Hm2<self::Hm2::Z*>*
+    : super self::_Hm2&Object&Am2::•()
+    ;
+}
+abstract class _Im2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<([core::int*]) →* dynamic, self::_Im2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Im2&Object&Am2<self::_Im2&Object&Am2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Im2<Z extends core::Object* = dynamic> extends self::_Im2&Object&Am2<self::Im2::Z*> {
+  synthetic constructor •() → self::Im2<self::Im2::Z*>*
+    : super self::_Im2&Object&Am2::•()
+    ;
+}
+abstract class _Jm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<core::Function*, self::_Jm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Jm2&Object&Am2<self::_Jm2&Object&Am2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Jm2<Z extends core::Object* = dynamic> extends self::_Jm2&Object&Am2<self::Jm2::Z*> {
+  synthetic constructor •() → self::Jm2<self::Jm2::Z*>*
+    : super self::_Jm2&Object&Am2::•()
+    ;
+}
+abstract class _Km2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::Function*) →* dynamic, self::_Km2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Km2&Object&Am2<self::_Km2&Object&Am2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Km2<Z extends core::Object* = dynamic> extends self::_Km2&Object&Am2<self::Km2::Z*> {
+  synthetic constructor •() → self::Km2<self::Km2::Z*>*
+    : super self::_Km2&Object&Am2::•()
+    ;
+}
+abstract class _Lm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* (() →* core::Function*) →* dynamic, self::_Lm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Lm2&Object&Am2<self::_Lm2&Object&Am2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Lm2<Z extends core::Object* = dynamic> extends self::_Lm2&Object&Am2<self::Lm2::Z*> {
+  synthetic constructor •() → self::Lm2<self::Lm2::Z*>*
+    : super self::_Lm2&Object&Am2::•()
+    ;
+}
+class Mm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::int*) →* dynamic, self::Mm2::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Mm2<self::Mm2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Nm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::int*) →* dynamic, self::Nm2::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Nm2<self::Nm2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Om2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* core::int*, self::Om2::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Om2<self::Om2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Pm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* dynamic, self::Pm2::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Pm2<self::Pm2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Qm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* dynamic, self::Qm2::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Qm2<self::Qm2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Rm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<({x: core::int*}) →* dynamic, self::Rm2::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Rm2<self::Rm2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Sm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<([core::int*]) →* dynamic, self::Sm2::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Sm2<self::Sm2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Tm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<([core::int*]) →* dynamic, self::Tm2::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Tm2<self::Tm2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Um2<Z extends core::Object* = dynamic> = core::Object with self::Am2<core::Function*, self::Um2::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Um2<self::Um2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Vm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::Function*) →* dynamic, self::Vm2::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Vm2<self::Vm2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Wm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* (() →* core::Function*) →* dynamic, self::Wm2::Z*> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Wm2<self::Wm2::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Am3<L extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Am3<self::Am3::L*, self::Am3::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Bm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<(core::int*) →* dynamic, self::_Bm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Bm3&Object&Am3<self::_Bm3&Object&Am3::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bm3<Z extends core::Object* = dynamic> extends self::_Bm3&Object&Am3<self::Bm3::Z*> {
+  synthetic constructor •() → self::Bm3<self::Bm3::Z*>*
+    : super self::_Bm3&Object&Am3::•()
+    ;
+}
+abstract class _Cm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<(core::int*) →* dynamic, self::_Cm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Cm3&Object&Am3<self::_Cm3&Object&Am3::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Cm3<Z extends core::Object* = dynamic> extends self::_Cm3&Object&Am3<self::Cm3::Z*> {
+  synthetic constructor •() → self::Cm3<self::Cm3::Z*>*
+    : super self::_Cm3&Object&Am3::•()
+    ;
+}
+abstract class _Dm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<() →* core::int*, self::_Dm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Dm3&Object&Am3<self::_Dm3&Object&Am3::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Dm3<Z extends core::Object* = dynamic> extends self::_Dm3&Object&Am3<self::Dm3::Z*> {
+  synthetic constructor •() → self::Dm3<self::Dm3::Z*>*
+    : super self::_Dm3&Object&Am3::•()
+    ;
+}
+abstract class _Em3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<() →* dynamic, self::_Em3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Em3&Object&Am3<self::_Em3&Object&Am3::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Em3<Z extends core::Object* = dynamic> extends self::_Em3&Object&Am3<self::Em3::Z*> {
+  synthetic constructor •() → self::Em3<self::Em3::Z*>*
+    : super self::_Em3&Object&Am3::•()
+    ;
+}
+abstract class _Fm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<() →* dynamic, self::_Fm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fm3&Object&Am3<self::_Fm3&Object&Am3::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Fm3<Z extends core::Object* = dynamic> extends self::_Fm3&Object&Am3<self::Fm3::Z*> {
+  synthetic constructor •() → self::Fm3<self::Fm3::Z*>*
+    : super self::_Fm3&Object&Am3::•()
+    ;
+}
+abstract class _Gm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<({x: core::int*}) →* dynamic, self::_Gm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Gm3&Object&Am3<self::_Gm3&Object&Am3::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Gm3<Z extends core::Object* = dynamic> extends self::_Gm3&Object&Am3<self::Gm3::Z*> {
+  synthetic constructor •() → self::Gm3<self::Gm3::Z*>*
+    : super self::_Gm3&Object&Am3::•()
+    ;
+}
+abstract class _Hm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<([core::int*]) →* dynamic, self::_Hm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Hm3&Object&Am3<self::_Hm3&Object&Am3::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Hm3<Z extends core::Object* = dynamic> extends self::_Hm3&Object&Am3<self::Hm3::Z*> {
+  synthetic constructor •() → self::Hm3<self::Hm3::Z*>*
+    : super self::_Hm3&Object&Am3::•()
+    ;
+}
+abstract class _Im3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<([core::int*]) →* dynamic, self::_Im3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Im3&Object&Am3<self::_Im3&Object&Am3::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Im3<Z extends core::Object* = dynamic> extends self::_Im3&Object&Am3<self::Im3::Z*> {
+  synthetic constructor •() → self::Im3<self::Im3::Z*>*
+    : super self::_Im3&Object&Am3::•()
+    ;
+}
+abstract class _Jm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<(core::Function*) →* dynamic, self::_Jm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Jm3&Object&Am3<self::_Jm3&Object&Am3::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Jm3<Z extends core::Object* = dynamic> extends self::_Jm3&Object&Am3<self::Jm3::Z*> {
+  synthetic constructor •() → self::Jm3<self::Jm3::Z*>*
+    : super self::_Jm3&Object&Am3::•()
+    ;
+}
+abstract class _Km3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<() →* (() →* core::Function*) →* dynamic, self::_Km3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Km3&Object&Am3<self::_Km3&Object&Am3::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Km3<Z extends core::Object* = dynamic> extends self::_Km3&Object&Am3<self::Km3::Z*> {
+  synthetic constructor •() → self::Km3<self::Km3::Z*>*
+    : super self::_Km3&Object&Am3::•()
+    ;
+}
+class Af1<X extends (core::int*) →* dynamic> extends core::Object {
+  static factory foo<X extends (core::int*) →* dynamic>() → self::Af1<self::Af1::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bf1<X extends (core::int*) →* dynamic> extends core::Object {
+  static factory foo<X extends (core::int*) →* dynamic>() → self::Bf1<self::Bf1::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Cf1<X extends () →* core::int*> extends core::Object {
+  static factory foo<X extends () →* core::int*>() → self::Cf1<self::Cf1::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Df1<X extends () →* dynamic> extends core::Object {
+  static factory foo<X extends () →* dynamic>() → self::Df1<self::Df1::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Ef1<X extends () →* dynamic> extends core::Object {
+  static factory foo<X extends () →* dynamic>() → self::Ef1<self::Ef1::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Ff1<X extends ({x: core::int*}) →* dynamic> extends core::Object {
+  static factory foo<X extends ({x: core::int*}) →* dynamic>() → self::Ff1<self::Ff1::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Gf1<X extends ([core::int*]) →* dynamic> extends core::Object {
+  static factory foo<X extends ([core::int*]) →* dynamic>() → self::Gf1<self::Gf1::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Hf1<X extends ([core::int*]) →* dynamic> extends core::Object {
+  static factory foo<X extends ([core::int*]) →* dynamic>() → self::Hf1<self::Hf1::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class If1<X extends core::Function*> extends core::Object {
+  static factory foo<X extends core::Function*>() → self::If1<self::If1::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Jf1<X extends (core::Function*) →* dynamic> extends core::Object {
+  static factory foo<X extends (core::Function*) →* dynamic>() → self::Jf1<self::Jf1::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Kf1<X extends () →* (() →* core::Function*) →* dynamic> extends core::Object {
+  static factory foo<X extends () →* (() →* core::Function*) →* dynamic>() → self::Kf1<self::Kf1::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bf2<X extends (core::int*) →* dynamic> extends core::Object {
+  static factory foo<X extends (core::int*) →* dynamic>() → self::Bf2<self::Bf2::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Cf2<X extends (core::int*) →* dynamic> extends core::Object {
+  static factory foo<X extends (core::int*) →* dynamic>() → self::Cf2<self::Cf2::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Df2<X extends () →* core::int*> extends core::Object {
+  static factory foo<X extends () →* core::int*>() → self::Df2<self::Df2::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Ef2<X extends () →* dynamic> extends core::Object {
+  static factory foo<X extends () →* dynamic>() → self::Ef2<self::Ef2::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Ff2<X extends () →* dynamic> extends core::Object {
+  static factory foo<X extends () →* dynamic>() → self::Ff2<self::Ff2::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Gf2<X extends ({x: core::int*}) →* dynamic> extends core::Object {
+  static factory foo<X extends ({x: core::int*}) →* dynamic>() → self::Gf2<self::Gf2::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Hf2<X extends ([core::int*]) →* dynamic> extends core::Object {
+  static factory foo<X extends ([core::int*]) →* dynamic>() → self::Hf2<self::Hf2::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class If2<X extends ([core::int*]) →* dynamic> extends core::Object {
+  static factory foo<X extends ([core::int*]) →* dynamic>() → self::If2<self::If2::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Jf2<X extends (core::Function*) →* dynamic> extends core::Object {
+  static factory foo<X extends (core::Function*) →* dynamic>() → self::Jf2<self::Jf2::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Kf2<X extends () →* (() →* core::Function*) →* dynamic> extends core::Object {
+  static factory foo<X extends () →* (() →* core::Function*) →* dynamic>() → self::Kf2<self::Kf2::foo::X*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/closure.dart.weak.modular.expect b/pkg/front_end/testcases/general/closure.dart.weak.modular.expect
new file mode 100644
index 0000000..2d530e8
--- /dev/null
+++ b/pkg/front_end/testcases/general/closure.dart.weak.modular.expect
@@ -0,0 +1,47 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  field self::Bar* _field = new self::Bar::•();
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar extends core::Object {
+  synthetic constructor •() → self::Bar*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method useCallback(dynamic callback) → dynamic {
+  dynamic _ = callback{dynamic}.call();
+}
+static method main() → dynamic {
+  dynamic x;
+  function inner() → self::Foo* {
+    x = new self::Foo::•();
+    return new self::Foo::•();
+  }
+  self::useCallback(inner);
+  self::Bar* _ = inner(){() →* self::Foo*}.{self::Foo::_field}{self::Bar*};
+}
diff --git a/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.weak.modular.expect b/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.weak.modular.expect
new file mode 100644
index 0000000..58cf612
--- /dev/null
+++ b/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart:21:1: Error: Expected '{' before this.
+// class B {}
+// ^^^^^
+//
+// pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart:20:1: Error: 'A' is already declared in this scope.
+// A()
+// ^
+// pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart:16:7: Context: Previous declaration of 'A'.
+// class A {
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.modular.expect b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.modular.expect
new file mode 100644
index 0000000..79836e1
--- /dev/null
+++ b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.modular.expect
@@ -0,0 +1,210 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+}
+class G<T extends self::A*> extends core::Object {
+  synthetic constructor •() → self::G<self::G::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class GB extends self::G<self::B*> {
+  synthetic constructor •() → self::GB*
+    : super self::G::•()
+    ;
+}
+class GC extends self::G<self::C*> {
+  synthetic constructor •() → self::GC*
+    : super self::G::•()
+    ;
+}
+class GD extends self::G<self::D*> {
+  synthetic constructor •() → self::GD*
+    : super self::G::•()
+    ;
+}
+class X extends core::Object implements self::A {
+  synthetic constructor •() → self::X*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Y extends self::X {
+  synthetic constructor •() → self::Y*
+    : super self::X::•()
+    ;
+}
+class Z extends core::Object implements self::Y {
+  synthetic constructor •() → self::Z*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class W extends core::Object implements self::Z {
+  synthetic constructor •() → self::W*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class GX extends core::Object implements self::G<self::A*> {
+  synthetic constructor •() → self::GX*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class GY extends self::X implements self::GB {
+  synthetic constructor •() → self::GY*
+    : super self::X::•()
+    ;
+}
+class GZ extends core::Object implements self::Y, self::GC {
+  synthetic constructor •() → self::GZ*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class GW extends core::Object implements self::Z, self::GD {
+  synthetic constructor •() → self::GW*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class GU extends self::GW {
+  synthetic constructor •() → self::GU*
+    : super self::GW::•()
+    ;
+}
+class GV extends self::GU implements self::GW {
+  synthetic constructor •() → self::GV*
+    : super self::GU::•()
+    ;
+}
+class ARO<S extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::ARO<self::ARO::S*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class ARQ<T extends core::Object* = dynamic> extends core::Object implements self::ARO<self::ARQ::T*> {
+  synthetic constructor •() → self::ARQ<self::ARQ::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class ARN extends self::ARQ<self::A*> {
+  synthetic constructor •() → self::ARN*
+    : super self::ARQ::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/compound_binary_implicit_as.dart.weak.modular.expect b/pkg/front_end/testcases/general/compound_binary_implicit_as.dart.weak.modular.expect
new file mode 100644
index 0000000..19b1b00
--- /dev/null
+++ b/pkg/front_end/testcases/general/compound_binary_implicit_as.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::B* b) → self::A*
+    return new self::C::•();
+}
+class C extends self::A {
+  synthetic constructor •() → self::C*
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {
+  core::Map<core::int*, self::B*>* map = <core::int*, self::B*>{0: new self::B::•()};
+  try {
+    let final core::Map<core::int*, self::B*>* #t1 = map in let final core::int* #t2 = 0 in #t1.{core::Map::[]=}(#t2, #t1.{core::Map::[]}(#t2){(core::Object*) →* self::B*}.{self::B::+}(new self::B::•()){(self::B*) →* self::A*} as{TypeError} self::B*){(core::int*, self::B*) →* void};
+    throw "Expected type error";
+  }
+  on dynamic catch(final dynamic _) {
+  }
+}
diff --git a/pkg/front_end/testcases/general/conditional_import.dart.weak.modular.expect b/pkg/front_end/testcases/general/conditional_import.dart.weak.modular.expect
new file mode 100644
index 0000000..0ae3432
--- /dev/null
+++ b/pkg/front_end/testcases/general/conditional_import.dart.weak.modular.expect
@@ -0,0 +1,82 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/conditional_import.dart:18:11: Error: The getter 'readyState' isn't defined for the class 'HttpRequest'.
+//  - 'HttpRequest' is from 'dart:_http'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'readyState'.
+//   request.readyState; // error (from dart:html)
+//           ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/conditional_import.dart:23:11: Error: The getter 'certificate' isn't defined for the class 'HttpRequest'.
+//  - 'HttpRequest' is from 'pkg/front_end/testcases/general/conditional_import.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'certificate'.
+//   request.certificate; // error
+//           ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/conditional_import.dart:24:11: Error: The getter 'response' isn't defined for the class 'HttpRequest'.
+//  - 'HttpRequest' is from 'pkg/front_end/testcases/general/conditional_import.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'response'.
+//   request.response; // error
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/general/conditional_import.dart:25:11: Error: The getter 'readyState' isn't defined for the class 'HttpRequest'.
+//  - 'HttpRequest' is from 'pkg/front_end/testcases/general/conditional_import.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'readyState'.
+//   request.readyState; // error
+//           ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_http" as _ht;
+import "dart:io" as io;
+
+import "dart:io" as a;
+import "org-dartlang-testcase:///conditional_import.dart" as b;
+
+class HttpRequest extends core::Object {
+  synthetic constructor •() → self::HttpRequest
+    : super core::Object::•()
+    ;
+}
+static method testA(_ht::HttpRequest request) → dynamic {
+  request.{_ht::HttpRequest::certificate}{io::X509Certificate?};
+  request.{_ht::HttpRequest::response}{_ht::HttpResponse};
+  invalid-expression "pkg/front_end/testcases/general/conditional_import.dart:18:11: Error: The getter 'readyState' isn't defined for the class 'HttpRequest'.
+ - 'HttpRequest' is from 'dart:_http'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'readyState'.
+  request.readyState; // error (from dart:html)
+          ^^^^^^^^^^" in request{<unresolved>}.readyState;
+  request.{core::Object::hashCode}{core::int};
+}
+static method testB(self::HttpRequest request) → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/conditional_import.dart:23:11: Error: The getter 'certificate' isn't defined for the class 'HttpRequest'.
+ - 'HttpRequest' is from 'pkg/front_end/testcases/general/conditional_import.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'certificate'.
+  request.certificate; // error
+          ^^^^^^^^^^^" in request{<unresolved>}.certificate;
+  invalid-expression "pkg/front_end/testcases/general/conditional_import.dart:24:11: Error: The getter 'response' isn't defined for the class 'HttpRequest'.
+ - 'HttpRequest' is from 'pkg/front_end/testcases/general/conditional_import.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'response'.
+  request.response; // error
+          ^^^^^^^^" in request{<unresolved>}.response;
+  invalid-expression "pkg/front_end/testcases/general/conditional_import.dart:25:11: Error: The getter 'readyState' isn't defined for the class 'HttpRequest'.
+ - 'HttpRequest' is from 'pkg/front_end/testcases/general/conditional_import.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'readyState'.
+  request.readyState; // error
+          ^^^^^^^^^^" in request{<unresolved>}.readyState;
+  request.{core::Object::hashCode}{core::int};
+}
+static method main() → void {
+  self::expect(true, #C1);
+  self::expect(false, #C1);
+  self::expect(false, #C1);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = false
+}
diff --git a/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.weak.modular.expect b/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.weak.modular.expect
new file mode 100644
index 0000000..38baae2
--- /dev/null
+++ b/pkg/front_end/testcases/general/const_redirect_to_nonconst.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/const_redirect_to_nonconst.dart:12:21: Error: A constant constructor can't call a non-constant super constructor.
+//   const B() : super.bad();
+//                     ^^^
+//
+// pkg/front_end/testcases/general/const_redirect_to_nonconst.dart:6:20: Error: A constant constructor can't call a non-constant constructor.
+//   const A() : this.bad();
+//                    ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A
+    : this self::A::bad()
+    ;
+  constructor bad() → self::A
+    : super core::Object::•() {}
+}
+class B extends self::A /*hasConstConstructor*/  {
+  const constructor •() → self::B
+    : super self::A::bad()
+    ;
+}
+static method test() → dynamic {
+  core::print(invalid-expression "A constant constructor can't call a non-constant constructor.");
+  core::print(invalid-expression "A constant constructor can't call a non-constant super constructor.");
+}
+static method main() → dynamic {
+  core::print(new self::A::•());
+  core::print(new self::B::•());
+}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_redirect_to_nonconst.dart:
+- A. (from org-dartlang-testcase:///const_redirect_to_nonconst.dart:6:9)
+- B. (from org-dartlang-testcase:///const_redirect_to_nonconst.dart:12:9)
diff --git a/pkg/front_end/testcases/general/constant_truncate.dart.weak.modular.expect b/pkg/front_end/testcases/general/constant_truncate.dart.weak.modular.expect
new file mode 100644
index 0000000..f87f7ba
--- /dev/null
+++ b/pkg/front_end/testcases/general/constant_truncate.dart.weak.modular.expect
@@ -0,0 +1,415 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:5:14: Error: Constant evaluation error:
+// const a0 = 0 ~/ 0; // error
+//              ^
+// pkg/front_end/testcases/general/constant_truncate.dart:5:14: Context: Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.
+// const a0 = 0 ~/ 0; // error
+//              ^
+// pkg/front_end/testcases/general/constant_truncate.dart:5:7: Context: While analyzing:
+// const a0 = 0 ~/ 0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:6:16: Error: Constant evaluation error:
+// const a1 = 0.0 ~/ 0; // error
+//                ^
+// pkg/front_end/testcases/general/constant_truncate.dart:6:16: Context: Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.
+// const a1 = 0.0 ~/ 0; // error
+//                ^
+// pkg/front_end/testcases/general/constant_truncate.dart:6:7: Context: While analyzing:
+// const a1 = 0.0 ~/ 0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:7:17: Error: Constant evaluation error:
+// const a2 = -0.0 ~/ 0; // error
+//                 ^
+// pkg/front_end/testcases/general/constant_truncate.dart:7:17: Context: Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.
+// const a2 = -0.0 ~/ 0; // error
+//                 ^
+// pkg/front_end/testcases/general/constant_truncate.dart:7:7: Context: While analyzing:
+// const a2 = -0.0 ~/ 0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:8:23: Error: Constant evaluation error:
+// const a3 = double.nan ~/ 0; // error
+//                       ^
+// pkg/front_end/testcases/general/constant_truncate.dart:8:23: Context: Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.
+// const a3 = double.nan ~/ 0; // error
+//                       ^
+// pkg/front_end/testcases/general/constant_truncate.dart:8:7: Context: While analyzing:
+// const a3 = double.nan ~/ 0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:9:28: Error: Constant evaluation error:
+// const a4 = double.infinity ~/ 0; // error
+//                            ^
+// pkg/front_end/testcases/general/constant_truncate.dart:9:28: Context: Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.
+// const a4 = double.infinity ~/ 0; // error
+//                            ^
+// pkg/front_end/testcases/general/constant_truncate.dart:9:7: Context: While analyzing:
+// const a4 = double.infinity ~/ 0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:10:36: Error: Constant evaluation error:
+// const a5 = double.negativeInfinity ~/ 0; // error
+//                                    ^
+// pkg/front_end/testcases/general/constant_truncate.dart:10:36: Context: Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.
+// const a5 = double.negativeInfinity ~/ 0; // error
+//                                    ^
+// pkg/front_end/testcases/general/constant_truncate.dart:10:7: Context: While analyzing:
+// const a5 = double.negativeInfinity ~/ 0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:12:14: Error: Constant evaluation error:
+// const b0 = 0 ~/ 0.0; // error
+//              ^
+// pkg/front_end/testcases/general/constant_truncate.dart:12:14: Context: Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.
+// const b0 = 0 ~/ 0.0; // error
+//              ^
+// pkg/front_end/testcases/general/constant_truncate.dart:12:7: Context: While analyzing:
+// const b0 = 0 ~/ 0.0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:13:16: Error: Constant evaluation error:
+// const b1 = 0.0 ~/ 0.0; // error
+//                ^
+// pkg/front_end/testcases/general/constant_truncate.dart:13:16: Context: Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.
+// const b1 = 0.0 ~/ 0.0; // error
+//                ^
+// pkg/front_end/testcases/general/constant_truncate.dart:13:7: Context: While analyzing:
+// const b1 = 0.0 ~/ 0.0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:14:17: Error: Constant evaluation error:
+// const b2 = -0.0 ~/ 0.0; // error
+//                 ^
+// pkg/front_end/testcases/general/constant_truncate.dart:14:17: Context: Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.
+// const b2 = -0.0 ~/ 0.0; // error
+//                 ^
+// pkg/front_end/testcases/general/constant_truncate.dart:14:7: Context: While analyzing:
+// const b2 = -0.0 ~/ 0.0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:15:23: Error: Constant evaluation error:
+// const b3 = double.nan ~/ 0.0; // error
+//                       ^
+// pkg/front_end/testcases/general/constant_truncate.dart:15:23: Context: Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.
+// const b3 = double.nan ~/ 0.0; // error
+//                       ^
+// pkg/front_end/testcases/general/constant_truncate.dart:15:7: Context: While analyzing:
+// const b3 = double.nan ~/ 0.0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:16:28: Error: Constant evaluation error:
+// const b4 = double.infinity ~/ 0.0; // error
+//                            ^
+// pkg/front_end/testcases/general/constant_truncate.dart:16:28: Context: Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.
+// const b4 = double.infinity ~/ 0.0; // error
+//                            ^
+// pkg/front_end/testcases/general/constant_truncate.dart:16:7: Context: While analyzing:
+// const b4 = double.infinity ~/ 0.0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:17:36: Error: Constant evaluation error:
+// const b5 = double.negativeInfinity ~/ 0.0; // error
+//                                    ^
+// pkg/front_end/testcases/general/constant_truncate.dart:17:36: Context: Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.
+// const b5 = double.negativeInfinity ~/ 0.0; // error
+//                                    ^
+// pkg/front_end/testcases/general/constant_truncate.dart:17:7: Context: While analyzing:
+// const b5 = double.negativeInfinity ~/ 0.0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:19:14: Error: Constant evaluation error:
+// const c0 = 0 ~/ -0.0; // error
+//              ^
+// pkg/front_end/testcases/general/constant_truncate.dart:19:14: Context: Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.
+// const c0 = 0 ~/ -0.0; // error
+//              ^
+// pkg/front_end/testcases/general/constant_truncate.dart:19:7: Context: While analyzing:
+// const c0 = 0 ~/ -0.0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:20:16: Error: Constant evaluation error:
+// const c1 = 0.0 ~/ -0.0; // error
+//                ^
+// pkg/front_end/testcases/general/constant_truncate.dart:20:16: Context: Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.
+// const c1 = 0.0 ~/ -0.0; // error
+//                ^
+// pkg/front_end/testcases/general/constant_truncate.dart:20:7: Context: While analyzing:
+// const c1 = 0.0 ~/ -0.0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:21:17: Error: Constant evaluation error:
+// const c2 = -0.0 ~/ -0.0; // error
+//                 ^
+// pkg/front_end/testcases/general/constant_truncate.dart:21:17: Context: Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.
+// const c2 = -0.0 ~/ -0.0; // error
+//                 ^
+// pkg/front_end/testcases/general/constant_truncate.dart:21:7: Context: While analyzing:
+// const c2 = -0.0 ~/ -0.0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:22:23: Error: Constant evaluation error:
+// const c3 = double.nan ~/ -0.0; // error
+//                       ^
+// pkg/front_end/testcases/general/constant_truncate.dart:22:23: Context: Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.
+// const c3 = double.nan ~/ -0.0; // error
+//                       ^
+// pkg/front_end/testcases/general/constant_truncate.dart:22:7: Context: While analyzing:
+// const c3 = double.nan ~/ -0.0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:23:28: Error: Constant evaluation error:
+// const c4 = double.infinity ~/ -0.0; // error
+//                            ^
+// pkg/front_end/testcases/general/constant_truncate.dart:23:28: Context: Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.
+// const c4 = double.infinity ~/ -0.0; // error
+//                            ^
+// pkg/front_end/testcases/general/constant_truncate.dart:23:7: Context: While analyzing:
+// const c4 = double.infinity ~/ -0.0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:24:36: Error: Constant evaluation error:
+// const c5 = double.negativeInfinity ~/ -0.0; // error
+//                                    ^
+// pkg/front_end/testcases/general/constant_truncate.dart:24:36: Context: Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.
+// const c5 = double.negativeInfinity ~/ -0.0; // error
+//                                    ^
+// pkg/front_end/testcases/general/constant_truncate.dart:24:7: Context: While analyzing:
+// const c5 = double.negativeInfinity ~/ -0.0; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:26:14: Error: Constant evaluation error:
+// const d0 = 0 ~/ double.nan; // error
+//              ^
+// pkg/front_end/testcases/general/constant_truncate.dart:26:14: Context: Binary operator '0 ~/ NaN' results is Infinity or NaN.
+// const d0 = 0 ~/ double.nan; // error
+//              ^
+// pkg/front_end/testcases/general/constant_truncate.dart:26:7: Context: While analyzing:
+// const d0 = 0 ~/ double.nan; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:27:16: Error: Constant evaluation error:
+// const d1 = 0.0 ~/ double.nan; // error
+//                ^
+// pkg/front_end/testcases/general/constant_truncate.dart:27:16: Context: Binary operator '0.0 ~/ NaN' results is Infinity or NaN.
+// const d1 = 0.0 ~/ double.nan; // error
+//                ^
+// pkg/front_end/testcases/general/constant_truncate.dart:27:7: Context: While analyzing:
+// const d1 = 0.0 ~/ double.nan; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:28:17: Error: Constant evaluation error:
+// const d2 = -0.0 ~/ double.nan; // error
+//                 ^
+// pkg/front_end/testcases/general/constant_truncate.dart:28:17: Context: Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.
+// const d2 = -0.0 ~/ double.nan; // error
+//                 ^
+// pkg/front_end/testcases/general/constant_truncate.dart:28:7: Context: While analyzing:
+// const d2 = -0.0 ~/ double.nan; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:29:23: Error: Constant evaluation error:
+// const d3 = double.nan ~/ double.nan; // error
+//                       ^
+// pkg/front_end/testcases/general/constant_truncate.dart:29:23: Context: Binary operator 'NaN ~/ NaN' results is Infinity or NaN.
+// const d3 = double.nan ~/ double.nan; // error
+//                       ^
+// pkg/front_end/testcases/general/constant_truncate.dart:29:7: Context: While analyzing:
+// const d3 = double.nan ~/ double.nan; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:30:28: Error: Constant evaluation error:
+// const d4 = double.infinity ~/ double.nan; // error
+//                            ^
+// pkg/front_end/testcases/general/constant_truncate.dart:30:28: Context: Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.
+// const d4 = double.infinity ~/ double.nan; // error
+//                            ^
+// pkg/front_end/testcases/general/constant_truncate.dart:30:7: Context: While analyzing:
+// const d4 = double.infinity ~/ double.nan; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:31:36: Error: Constant evaluation error:
+// const d5 = double.negativeInfinity ~/ double.nan; // error
+//                                    ^
+// pkg/front_end/testcases/general/constant_truncate.dart:31:36: Context: Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.
+// const d5 = double.negativeInfinity ~/ double.nan; // error
+//                                    ^
+// pkg/front_end/testcases/general/constant_truncate.dart:31:7: Context: While analyzing:
+// const d5 = double.negativeInfinity ~/ double.nan; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:36:23: Error: Constant evaluation error:
+// const e3 = double.nan ~/ double.infinity; // error
+//                       ^
+// pkg/front_end/testcases/general/constant_truncate.dart:36:23: Context: Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.
+// const e3 = double.nan ~/ double.infinity; // error
+//                       ^
+// pkg/front_end/testcases/general/constant_truncate.dart:36:7: Context: While analyzing:
+// const e3 = double.nan ~/ double.infinity; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:37:28: Error: Constant evaluation error:
+// const e4 = double.infinity ~/ double.infinity; // error
+//                            ^
+// pkg/front_end/testcases/general/constant_truncate.dart:37:28: Context: Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.
+// const e4 = double.infinity ~/ double.infinity; // error
+//                            ^
+// pkg/front_end/testcases/general/constant_truncate.dart:37:7: Context: While analyzing:
+// const e4 = double.infinity ~/ double.infinity; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:38:36: Error: Constant evaluation error:
+// const e5 = double.negativeInfinity ~/ double.infinity; // error
+//                                    ^
+// pkg/front_end/testcases/general/constant_truncate.dart:38:36: Context: Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.
+// const e5 = double.negativeInfinity ~/ double.infinity; // error
+//                                    ^
+// pkg/front_end/testcases/general/constant_truncate.dart:38:7: Context: While analyzing:
+// const e5 = double.negativeInfinity ~/ double.infinity; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:43:23: Error: Constant evaluation error:
+// const f3 = double.nan ~/ double.negativeInfinity; // error
+//                       ^
+// pkg/front_end/testcases/general/constant_truncate.dart:43:23: Context: Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.
+// const f3 = double.nan ~/ double.negativeInfinity; // error
+//                       ^
+// pkg/front_end/testcases/general/constant_truncate.dart:43:7: Context: While analyzing:
+// const f3 = double.nan ~/ double.negativeInfinity; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:44:28: Error: Constant evaluation error:
+// const f4 = double.infinity ~/ double.negativeInfinity; // error
+//                            ^
+// pkg/front_end/testcases/general/constant_truncate.dart:44:28: Context: Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.
+// const f4 = double.infinity ~/ double.negativeInfinity; // error
+//                            ^
+// pkg/front_end/testcases/general/constant_truncate.dart:44:7: Context: While analyzing:
+// const f4 = double.infinity ~/ double.negativeInfinity; // error
+//       ^
+//
+// pkg/front_end/testcases/general/constant_truncate.dart:45:36: Error: Constant evaluation error:
+// const f5 = double.negativeInfinity ~/ double.negativeInfinity; // error
+//                                    ^
+// pkg/front_end/testcases/general/constant_truncate.dart:45:36: Context: Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.
+// const f5 = double.negativeInfinity ~/ double.negativeInfinity; // error
+//                                    ^
+// pkg/front_end/testcases/general/constant_truncate.dart:45:7: Context: While analyzing:
+// const f5 = double.negativeInfinity ~/ double.negativeInfinity; // error
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static const field core::int* a0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* a1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* a2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* a3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* a4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* a5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* b0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* b1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* b2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* b3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* b4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* b5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* c0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* c1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* c2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* c3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* c4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* c5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* d0 = invalid-expression "Binary operator '0 ~/ NaN' results is Infinity or NaN.";
+static const field core::int* d1 = invalid-expression "Binary operator '0.0 ~/ NaN' results is Infinity or NaN.";
+static const field core::int* d2 = invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.";
+static const field core::int* d3 = invalid-expression "Binary operator 'NaN ~/ NaN' results is Infinity or NaN.";
+static const field core::int* d4 = invalid-expression "Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.";
+static const field core::int* d5 = invalid-expression "Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.";
+static const field core::int* e0 = #C1;
+static const field core::int* e1 = #C1;
+static const field core::int* e2 = #C1;
+static const field core::int* e3 = invalid-expression "Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.";
+static const field core::int* e4 = invalid-expression "Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.";
+static const field core::int* e5 = invalid-expression "Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.";
+static const field core::int* f0 = #C1;
+static const field core::int* f1 = #C1;
+static const field core::int* f2 = #C1;
+static const field core::int* f3 = invalid-expression "Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.";
+static const field core::int* f4 = invalid-expression "Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.";
+static const field core::int* f5 = invalid-expression "Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.";
+static method main() → dynamic {
+  self::test(0, 0, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0, 0, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C2, 0, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C3, 0, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C4, 0, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(0, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C2, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C3, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C4, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(0, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C2, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C3, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C4, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(0, #C2, () → core::int* => invalid-expression "Binary operator '0 ~/ NaN' results is Infinity or NaN.");
+  self::test(0.0, #C2, () → core::int* => invalid-expression "Binary operator '0.0 ~/ NaN' results is Infinity or NaN.");
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C2, () → core::int* => invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.");
+  self::test(#C2, #C2, () → core::int* => invalid-expression "Binary operator 'NaN ~/ NaN' results is Infinity or NaN.");
+  self::test(#C3, #C2, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.");
+  self::test(#C4, #C2, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.");
+  self::test(0, #C3, () → core::int* => #C1);
+  self::test(0.0, #C3, () → core::int* => #C1);
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C3, () → core::int* => #C1);
+  self::test(#C2, #C3, () → core::int* => invalid-expression "Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.");
+  self::test(#C3, #C3, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.");
+  self::test(#C4, #C3, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.");
+  self::test(0, #C4, () → core::int* => #C1);
+  self::test(0.0, #C4, () → core::int* => #C1);
+  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C4, () → core::int* => #C1);
+  self::test(#C2, #C4, () → core::int* => invalid-expression "Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.");
+  self::test(#C3, #C4, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.");
+  self::test(#C4, #C4, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.");
+}
+static method test(core::num* a, core::num* b, () →* core::num* f) → void {
+  core::num* result;
+  try {
+    result = a.{core::num::~/}(b){(core::num*) →* core::int*};
+    core::print("${a} ~/ ${b} = ${result}");
+  }
+  on dynamic catch(final dynamic e) {
+    core::print("${a} ~/ ${b} throws ${e}");
+    self::throws(f);
+    return;
+  }
+  self::expect(f(){() →* core::num*}, result);
+}
+static method expect(dynamic expected, dynamic actual) → void {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+    throw "Expected ${expected}, actual ${actual}";
+  }
+}
+static method throws(() →* core::num* f) → void {
+  try {
+    f(){() →* core::num*};
+  }
+  on dynamic catch(final dynamic e) {
+    return;
+  }
+  throw "Expected exception";
+}
+
+constants  {
+  #C1 = 0
+  #C2 = NaN
+  #C3 = Infinity
+  #C4 = -Infinity
+}
diff --git a/pkg/front_end/testcases/general/constants/circularity.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/circularity.dart.weak.modular.expect
new file mode 100644
index 0000000..d9ec24f
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/circularity.dart.weak.modular.expect
@@ -0,0 +1,143 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/circularity.dart:37:34: Error: Constant evaluation error:
+//   const Class4({Class4 c = const Class4()});
+//                                  ^
+// pkg/front_end/testcases/general/constants/circularity.dart:37:34: Context: Constant expression depends on itself.
+//   const Class4({Class4 c = const Class4()});
+//                                  ^
+// pkg/front_end/testcases/general/constants/circularity.dart:37:24: Context: While analyzing:
+//   const Class4({Class4 c = const Class4()});
+//                        ^
+//
+// pkg/front_end/testcases/general/constants/circularity.dart:5:15: Error: Constant evaluation error:
+// const int a = b;
+//               ^
+// pkg/front_end/testcases/general/constants/circularity.dart:5:15: Context: Constant expression depends on itself.
+// const int a = b;
+//               ^
+// pkg/front_end/testcases/general/constants/circularity.dart:5:11: Context: While analyzing:
+// const int a = b;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/circularity.dart:7:15: Error: Constant evaluation error:
+// const int c = d;
+//               ^
+// pkg/front_end/testcases/general/constants/circularity.dart:8:17: Context: Constant expression depends on itself.
+// const int d = e + 1;
+//                 ^
+// pkg/front_end/testcases/general/constants/circularity.dart:7:11: Context: While analyzing:
+// const int c = d;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/circularity.dart:8:17: Error: Constant evaluation error:
+// const int d = e + 1;
+//                 ^
+// pkg/front_end/testcases/general/constants/circularity.dart:8:17: Context: Constant expression depends on itself.
+// const int d = e + 1;
+//                 ^
+// pkg/front_end/testcases/general/constants/circularity.dart:8:11: Context: While analyzing:
+// const int d = e + 1;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object /*hasConstConstructor*/  {
+  const constructor •({self::Class1* c = #C1}) → self::Class1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class2 extends core::Object /*hasConstConstructor*/  {
+  final field self::Class2* field;
+  const constructor •(core::int* value) → self::Class2*
+    : self::Class2::field = value =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{self::Class2*} null : #C3, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class3 extends core::Object /*hasConstConstructor*/  {
+  const constructor •([self::Class3* c = #C4]) → self::Class3*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class4 extends core::Object /*hasConstConstructor*/  {
+  const constructor •({self::Class4* c = invalid-expression "Constant expression depends on itself."}) → self::Class4*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field core::int* a = invalid-expression "Constant expression depends on itself.";
+static const field core::int* b = invalid-expression "Constant expression depends on itself.";
+static const field core::int* c = invalid-expression "Constant expression depends on itself.";
+static const field core::int* d = invalid-expression "Constant expression depends on itself.";
+static const field core::int* e = invalid-expression "Constant expression depends on itself.";
+static const field self::Class1* c1_0 = #C1;
+static const field self::Class1* c1_1 = #C1;
+static const field self::Class1* c1_2 = #C1;
+static const field self::Class2* c2_0 = #C5;
+static const field self::Class2* c2_1 = #C3;
+static const field self::Class2* c2_2 = #C5;
+static const field self::Class3* c3_0 = #C4;
+static const field self::Class3* c3_1 = #C4;
+static const field self::Class3* c3_2 = #C4;
+static const field self::Class4* c4_0 = invalid-expression "Constant expression depends on itself.";
+static const field self::Class4* c4_1 = #C6;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Class1 {}
+  #C2 = null
+  #C3 = self::Class2 {field:#C2}
+  #C4 = self::Class3 {}
+  #C5 = self::Class2 {field:#C3}
+  #C6 = self::Class4 {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///circularity.dart:
+- Class1. (from org-dartlang-testcase:///circularity.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Class2. (from org-dartlang-testcase:///circularity.dart:21:9)
+- Class3. (from org-dartlang-testcase:///circularity.dart:29:9)
+- Class4. (from org-dartlang-testcase:///circularity.dart:37:9)
diff --git a/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.modular.expect
new file mode 100644
index 0000000..be365f6
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/const_asserts.dart.weak.modular.expect
@@ -0,0 +1,220 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   const Foo.withInvalidCondition(this.x) : assert(x);
+//                                                   ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:19:21: Error: Constant expression expected.
+// Try inserting 'const'.
+//       : assert(bool.fromEnvironment("foo", defaultValue: null));
+//                     ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:32:24: Error: Constant evaluation error:
+// const Foo foo2 = const Foo(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:8:18: Context: This assertion failed with message: x is not positive
+//       : assert(x > 0, "x is not positive"),
+//                  ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:32:11: Context: While analyzing:
+// const Foo foo2 = const Foo(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:33:24: Error: Constant evaluation error:
+// const Foo foo3 = const Foo.withMessage(42);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:15:18: Context: This assertion failed with message: btw foo was false
+//       : assert(x < 0, "btw foo was ${const bool.fromEnvironment("foo")}");
+//                  ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:33:11: Context: While analyzing:
+// const Foo foo3 = const Foo.withMessage(42);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:34:24: Error: Constant evaluation error:
+// const Foo foo4 = const Foo.withInvalidMessage(42);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:16:56: Context: Expected constant '42' to be of type 'String', but was of type 'int'.
+//   const Foo.withInvalidMessage(this.x) : assert(x < 0, x);
+//                                                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:34:11: Context: While analyzing:
+// const Foo foo4 = const Foo.withInvalidMessage(42);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:36:24: Error: Constant evaluation error:
+// const Foo foo6 = const Foo.withNullConditionFromEnv1(42);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:19:21: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
+//       : assert(bool.fromEnvironment("foo", defaultValue: null));
+//                     ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:36:11: Context: While analyzing:
+// const Foo foo6 = const Foo.withNullConditionFromEnv1(42);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:37:24: Error: Constant evaluation error:
+// const Foo foo7 = const Foo.withNullConditionFromEnv2(42);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:21:22: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
+//       : assert(const bool.fromEnvironment("foo", defaultValue: null));
+//                      ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:37:11: Context: While analyzing:
+// const Foo foo7 = const Foo.withNullConditionFromEnv2(42);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:38:24: Error: Constant evaluation error:
+// const Bar bar1 = const Bar.withMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:26:44: Context: This assertion failed with message: x is not negative
+//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+//                                            ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:38:11: Context: While analyzing:
+// const Bar bar1 = const Bar.withMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:39:24: Error: Constant evaluation error:
+// const Bar bar2 = const Bar.withMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:26:44: Context: This assertion failed with message: x is not negative
+//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+//                                            ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:39:11: Context: While analyzing:
+// const Bar bar2 = const Bar.withMessage(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:40:24: Error: Constant evaluation error:
+// const Bar bar3 = const Bar.withoutMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:27:47: Context: This assertion failed.
+//   const Bar.withoutMessage(this.x) : assert(x < 0);
+//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:40:11: Context: While analyzing:
+// const Bar bar3 = const Bar.withoutMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:41:24: Error: Constant evaluation error:
+// const Bar bar4 = const Bar.withoutMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:27:47: Context: This assertion failed.
+//   const Bar.withoutMessage(this.x) : assert(x < 0);
+//                                               ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:41:11: Context: While analyzing:
+// const Bar bar4 = const Bar.withoutMessage(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:42:24: Error: Constant evaluation error:
+// const Bar bar5 = const Bar.withEmptyMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:28:49: Context: This assertion failed.
+//   const Bar.withEmptyMessage(this.x) : assert(x < 0);
+//                                                 ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:42:11: Context: While analyzing:
+// const Bar bar5 = const Bar.withEmptyMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/const_asserts.dart:43:24: Error: Constant evaluation error:
+// const Bar bar6 = const Bar.withEmptyMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:28:49: Context: This assertion failed.
+//   const Bar.withEmptyMessage(this.x) : assert(x < 0);
+//                                                 ^
+// pkg/front_end/testcases/general/constants/const_asserts.dart:43:11: Context: While analyzing:
+// const Bar bar6 = const Bar.withEmptyMessage(0);
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  final field core::int* x;
+  const constructor •(core::int* x) → self::Foo*
+    : self::Foo::x = x, assert(x.{core::num::>}(0){(core::num*) →* core::bool*}, "x is not positive"), assert(x.{core::num::>}(0){(core::num*) →* core::bool*}), assert(x.{core::num::>}(0){(core::num*) →* core::bool*}, ""), assert(#C1 =={core::Object::==}{(core::Object*) →* core::bool*} false, "foo was ${#C1}"), assert(#C1 =={core::Object::==}{(core::Object*) →* core::bool*} false), super core::Object::•()
+    ;
+  const constructor withMessage(core::int* x) → self::Foo*
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, "btw foo was ${#C1}"), super core::Object::•()
+    ;
+  const constructor withInvalidMessage(core::int* x) → self::Foo*
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, x), super core::Object::•()
+    ;
+  const constructor withInvalidCondition(core::int* x) → self::Foo*
+    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  const Foo.withInvalidCondition(this.x) : assert(x);
+                                                  ^" in x as{TypeError} core::bool*), super core::Object::•()
+    ;
+  const constructor withNullConditionFromEnv1(core::int* x) → self::Foo*
+    : self::Foo::x = x, assert(#C2), super core::Object::•()
+    ;
+  const constructor withNullConditionFromEnv2(core::int* x) → self::Foo*
+    : self::Foo::x = x, assert(#C2), super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar extends core::Object /*hasConstConstructor*/  {
+  final field core::int* x;
+  const constructor withMessage(core::int* x) → self::Bar*
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}, "x is not negative"), super core::Object::•()
+    ;
+  const constructor withoutMessage(core::int* x) → self::Bar*
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}), super core::Object::•()
+    ;
+  const constructor withEmptyMessage(core::int* x) → self::Bar*
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num*) →* core::bool*}), super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field self::Foo* foo1 = #C4;
+static const field self::Foo* foo2 = invalid-expression "This assertion failed with message: x is not positive";
+static const field self::Foo* foo3 = invalid-expression "This assertion failed with message: btw foo was false";
+static const field self::Foo* foo4 = invalid-expression "Expected constant '42' to be of type 'String', but was of type 'int'.";
+static const field self::Foo* foo5 = invalid-expression "pkg/front_end/testcases/general/constants/const_asserts.dart:17:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  const Foo.withInvalidCondition(this.x) : assert(x);
+                                                  ^";
+static const field self::Foo* foo6 = invalid-expression "Expected constant 'null' to be of type 'bool', but was of type 'Null'.";
+static const field self::Foo* foo7 = invalid-expression "Expected constant 'null' to be of type 'bool', but was of type 'Null'.";
+static const field self::Bar* bar1 = invalid-expression "This assertion failed with message: x is not negative";
+static const field self::Bar* bar2 = invalid-expression "This assertion failed with message: x is not negative";
+static const field self::Bar* bar3 = invalid-expression "This assertion failed.";
+static const field self::Bar* bar4 = invalid-expression "This assertion failed.";
+static const field self::Bar* bar5 = invalid-expression "This assertion failed.";
+static const field self::Bar* bar6 = invalid-expression "This assertion failed.";
+static method main() → dynamic {
+  core::print(#C4);
+}
+
+constants  {
+  #C1 = false
+  #C2 = null
+  #C3 = 1
+  #C4 = self::Foo {x:#C3}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_asserts.dart:
+- Foo. (from org-dartlang-testcase:///const_asserts.dart:7:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Foo.withMessage (from org-dartlang-testcase:///const_asserts.dart:14:9)
+- Foo.withInvalidMessage (from org-dartlang-testcase:///const_asserts.dart:16:9)
+- Foo.withInvalidCondition (from org-dartlang-testcase:///const_asserts.dart:17:9)
+- Foo.withNullConditionFromEnv1 (from org-dartlang-testcase:///const_asserts.dart:18:9)
+- Foo.withNullConditionFromEnv2 (from org-dartlang-testcase:///const_asserts.dart:20:9)
+- Bar.withMessage (from org-dartlang-testcase:///const_asserts.dart:26:9)
+- Bar.withoutMessage (from org-dartlang-testcase:///const_asserts.dart:27:9)
+- Bar.withEmptyMessage (from org-dartlang-testcase:///const_asserts.dart:28:9)
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.modular.expect
new file mode 100644
index 0000000..456d5c3
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.modular.expect
@@ -0,0 +1,513 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:23:51: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+// const List<String> barWithIntSpread = [...foo, ...fortyTwo];
+//                                                   ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:25:51: Error: Unexpected type 'Map<String, String>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+// const List<String> barWithMapSpread = [...foo, ...quux];
+//                                                   ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:41:50: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+// const Set<String> quxWithIntSpread = {...baz, ...fortyTwo};
+//                                                  ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:42:38: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// const Set<String> quxWithMapSpread = {...baz, ...quux};
+//                                      ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:48:59: Error: A value of type 'CustomIterable' can't be assigned to a variable of type 'String'.
+//  - 'CustomIterable' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
+// const Set<String> quxWithCustomIterableSpread3 = {...baz, customIterable};
+//                                                           ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:58:60: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+// const Map<String, String> quuzWithIntSpread = {...quux, ...fortyTwo};
+//                                                            ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:59:47: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// const Map<String, String> quuzWithSetSpread = {...quux, ...baz};
+//                                               ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:60:46: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// const Map<String, String> mapWithSetSpread = {...baz};
+//                                              ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:22:40: Error: Constant evaluation error:
+// const List<String> barWithNullSpread = [...foo, ...nullList];
+//                                        ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:22:52: Context: Null value during constant evaluation.
+// const List<String> barWithNullSpread = [...foo, ...nullList];
+//                                                    ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:22:20: Context: While analyzing:
+// const List<String> barWithNullSpread = [...foo, ...nullList];
+//                    ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:24:46: Error: Constant evaluation error:
+// const List<String> barWithIntDynamicSpread = [...foo, ...fortyTwoAsDynamic];
+//                                              ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:24:58: Context: Expected constant '42' to be of type 'Iterable<dynamic>', but was of type 'int'.
+//  - 'Iterable' is from 'dart:core'.
+// const List<String> barWithIntDynamicSpread = [...foo, ...fortyTwoAsDynamic];
+//                                                          ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:24:20: Context: While analyzing:
+// const List<String> barWithIntDynamicSpread = [...foo, ...fortyTwoAsDynamic];
+//                    ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:26:51: Error: Constant evaluation error:
+// const List<String> barWithCustomIterableSpread1 = [
+//                                                   ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:28:12: Context: Only lists and sets can be used in spreads in constant lists and sets.
+//   ...const CustomIterable()
+//            ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:26:20: Context: While analyzing:
+// const List<String> barWithCustomIterableSpread1 = [
+//                    ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:30:51: Error: Constant evaluation error:
+// const List<String> barWithCustomIterableSpread2 = [...bar, ...CustomIterable()];
+//                                                   ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:30:63: Context: Only lists and sets can be used in spreads in constant lists and sets.
+// const List<String> barWithCustomIterableSpread2 = [...bar, ...CustomIterable()];
+//                                                               ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:30:20: Context: While analyzing:
+// const List<String> barWithCustomIterableSpread2 = [...bar, ...CustomIterable()];
+//                    ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:32:51: Error: Constant evaluation error:
+// const List<String> barWithCustomIterableSpread3 = [...bar, ...customIterable];
+//                                                   ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:32:63: Context: Only lists and sets can be used in spreads in constant lists and sets.
+// const List<String> barWithCustomIterableSpread3 = [...bar, ...customIterable];
+//                                                               ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:32:20: Context: While analyzing:
+// const List<String> barWithCustomIterableSpread3 = [...bar, ...customIterable];
+//                    ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:33:43: Error: Constant evaluation error:
+// const List<String> listConcat = ["Hello"] + ["World"];
+//                                           ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:33:43: Context: The method '+' can't be invoked on '<String>["Hello"]' in a constant expression.
+// const List<String> listConcat = ["Hello"] + ["World"];
+//                                           ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:33:20: Context: While analyzing:
+// const List<String> listConcat = ["Hello"] + ["World"];
+//                    ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:40:39: Error: Constant evaluation error:
+// const Set<String> quxWithNullSpread = {...baz, ...nullSet};
+//                                       ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:40:51: Context: Null value during constant evaluation.
+// const Set<String> quxWithNullSpread = {...baz, ...nullSet};
+//                                                   ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:40:19: Context: While analyzing:
+// const Set<String> quxWithNullSpread = {...baz, ...nullSet};
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:43:50: Error: Constant evaluation error:
+// const Set<String> quxWithCustomIterableSpread1 = {
+//                                                  ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:45:12: Context: Only lists and sets can be used in spreads in constant lists and sets.
+//   ...const CustomIterable()
+//            ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:43:19: Context: While analyzing:
+// const Set<String> quxWithCustomIterableSpread1 = {
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:47:50: Error: Constant evaluation error:
+// const Set<String> quxWithCustomIterableSpread2 = {...baz, ...CustomIterable()};
+//                                                  ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:47:62: Context: Only lists and sets can be used in spreads in constant lists and sets.
+// const Set<String> quxWithCustomIterableSpread2 = {...baz, ...CustomIterable()};
+//                                                              ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:47:19: Context: While analyzing:
+// const Set<String> quxWithCustomIterableSpread2 = {...baz, ...CustomIterable()};
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:49:48: Error: Constant evaluation error:
+// const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
+//                                                ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:49:55: Context: The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
+//  - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
+// const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
+//                                                       ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:49:20: Context: While analyzing:
+// const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
+//                    ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:50:40: Error: Constant evaluation error:
+// const Set<dynamic> setWithDuplicates = {42, 42};
+//                                        ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:50:45: Context: The element '42' conflicts with another existing element in the set.
+// const Set<dynamic> setWithDuplicates = {42, 42};
+//                                             ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:50:20: Context: While analyzing:
+// const Set<dynamic> setWithDuplicates = {42, 42};
+//                    ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:57:27: Error: Constant evaluation error:
+// const Map<String, String> quuzWithNullSpread = {...quux, ...nullMap};
+//                           ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:57:61: Context: Null value during constant evaluation.
+// const Map<String, String> quuzWithNullSpread = {...quux, ...nullMap};
+//                                                             ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:57:27: Context: While analyzing:
+// const Map<String, String> quuzWithNullSpread = {...quux, ...nullMap};
+//                           ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:61:27: Error: Constant evaluation error:
+// const Map<String, String> mapWithCustomMap1 = {...const CustomMap()};
+//                           ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:61:57: Context: Only maps can be used in spreads in constant maps.
+// const Map<String, String> mapWithCustomMap1 = {...const CustomMap()};
+//                                                         ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:61:27: Context: While analyzing:
+// const Map<String, String> mapWithCustomMap1 = {...const CustomMap()};
+//                           ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:62:27: Error: Constant evaluation error:
+// const Map<String, String> mapWithCustomMap2 = {...CustomMap()};
+//                           ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:62:51: Context: Only maps can be used in spreads in constant maps.
+// const Map<String, String> mapWithCustomMap2 = {...CustomMap()};
+//                                                   ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:62:27: Context: While analyzing:
+// const Map<String, String> mapWithCustomMap2 = {...CustomMap()};
+//                           ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:64:27: Error: Constant evaluation error:
+// const Map<String, String> mapWithCustomMap3 = {...customMap};
+//                           ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:64:51: Context: Only maps can be used in spreads in constant maps.
+// const Map<String, String> mapWithCustomMap3 = {...customMap};
+//                                                   ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:64:27: Context: While analyzing:
+// const Map<String, String> mapWithCustomMap3 = {...customMap};
+//                           ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:65:56: Error: Constant evaluation error:
+// const Map<dynamic, int> mapWithNonPrimitiveEqualsKey = {
+//                                                        ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:66:9: Context: The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
+//  - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
+//   const WithEquals(42): 42
+//         ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:65:25: Context: While analyzing:
+// const Map<dynamic, int> mapWithNonPrimitiveEqualsKey = {
+//                         ^
+//
+// pkg/front_end/testcases/general/constants/const_collections.dart:68:41: Error: Constant evaluation error:
+// const Map<int, int> mapWithDuplicates = {42: 42, 42: 42};
+//                                         ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:68:50: Context: The key '42' conflicts with another existing key in the map.
+// const Map<int, int> mapWithDuplicates = {42: 42, 42: 42};
+//                                                  ^
+// pkg/front_end/testcases/general/constants/const_collections.dart:68:21: Context: While analyzing:
+// const Map<int, int> mapWithDuplicates = {42: 42, 42: 42};
+//                     ^
+//
+import self as self;
+import "dart:collection" as col;
+import "dart:core" as core;
+
+import "dart:collection";
+
+class ConstIterable extends col::IterableBase<core::int*> /*hasConstConstructor*/  {
+  const constructor •() → self::ConstIterable*
+    : super col::IterableBase::•()
+    ;
+  get iterator() → core::Iterator<core::int*>*
+    return <core::int*>[].{core::Iterable::iterator}{core::Iterator<core::int*>*};
+  abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::cast::R*>*; -> core::Iterable::cast
+  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::int*>* other) → core::Iterable<core::int*>*; -> core::Iterable::followedBy
+  abstract member-signature method map<T extends core::Object* = dynamic>((core::int*) →* self::ConstIterable::map::T* toElement) → core::Iterable<self::ConstIterable::map::T*>*; -> core::Iterable::map
+  abstract member-signature method where((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::where
+  abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::whereType::T*>*; -> core::Iterable::whereType
+  abstract member-signature method expand<T extends core::Object* = dynamic>((core::int*) →* core::Iterable<self::ConstIterable::expand::T*>* toElements) → core::Iterable<self::ConstIterable::expand::T*>*; -> core::Iterable::expand
+  abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
+  abstract member-signature method forEach((core::int*) →* void action) → void; -> core::Iterable::forEach
+  abstract member-signature method reduce(covariant-by-class (core::int*, core::int*) →* core::int* combine) → core::int*; -> core::Iterable::reduce
+  abstract member-signature method fold<T extends core::Object* = dynamic>(self::ConstIterable::fold::T* initialValue, (self::ConstIterable::fold::T*, core::int*) →* self::ConstIterable::fold::T* combine) → self::ConstIterable::fold::T*; -> core::Iterable::fold
+  abstract member-signature method every((core::int*) →* core::bool* test) → core::bool*; -> core::Iterable::every
+  abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
+  abstract member-signature method any((core::int*) →* core::bool* test) → core::bool*; -> core::Iterable::any
+  abstract member-signature method toList({core::bool* growable = #C2}) → core::List<core::int*>*; -> core::Iterable::toList
+  abstract member-signature method toSet() → core::Set<core::int*>*; -> core::Iterable::toSet
+  abstract member-signature get length() → core::int*; -> core::Iterable::length
+  abstract member-signature get isEmpty() → core::bool*; -> core::Iterable::isEmpty
+  abstract member-signature get isNotEmpty() → core::bool*; -> core::Iterable::isNotEmpty
+  abstract member-signature method take(core::int* count) → core::Iterable<core::int*>*; -> core::Iterable::take
+  abstract member-signature method takeWhile((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::takeWhile
+  abstract member-signature method skip(core::int* count) → core::Iterable<core::int*>*; -> core::Iterable::skip
+  abstract member-signature method skipWhile((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::skipWhile
+  abstract member-signature method firstWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::firstWhere
+  abstract member-signature method lastWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::lastWhere
+  abstract member-signature method singleWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::singleWhere
+  abstract member-signature method elementAt(core::int* index) → core::int*; -> core::Iterable::elementAt
+  abstract member-signature method toString() → core::String*; -> core::Iterable::toString
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class WithEquals extends core::Object /*hasConstConstructor*/  {
+  final field core::int* i;
+  const constructor •(core::int* i) → self::WithEquals*
+    : self::WithEquals::i = i, super core::Object::•()
+    ;
+  operator ==(core::Object* o) → core::bool* {
+    return o is self::WithEquals* && (o{self::WithEquals*} as self::WithEquals*).{self::WithEquals::i}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} this.{self::WithEquals::i}{core::int*};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class CustomIterable extends col::IterableBase<core::String*> /*hasConstConstructor*/  {
+  const constructor •() → self::CustomIterable*
+    : super col::IterableBase::•()
+    ;
+  get iterator() → core::Iterator<core::String*>*
+    return <core::String*>[].{core::Iterable::iterator}{core::Iterator<core::String*>*};
+  abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::cast::R*>*; -> core::Iterable::cast
+  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::String*>* other) → core::Iterable<core::String*>*; -> core::Iterable::followedBy
+  abstract member-signature method map<T extends core::Object* = dynamic>((core::String*) →* self::CustomIterable::map::T* toElement) → core::Iterable<self::CustomIterable::map::T*>*; -> core::Iterable::map
+  abstract member-signature method where((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::where
+  abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::whereType::T*>*; -> core::Iterable::whereType
+  abstract member-signature method expand<T extends core::Object* = dynamic>((core::String*) →* core::Iterable<self::CustomIterable::expand::T*>* toElements) → core::Iterable<self::CustomIterable::expand::T*>*; -> core::Iterable::expand
+  abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
+  abstract member-signature method forEach((core::String*) →* void action) → void; -> core::Iterable::forEach
+  abstract member-signature method reduce(covariant-by-class (core::String*, core::String*) →* core::String* combine) → core::String*; -> core::Iterable::reduce
+  abstract member-signature method fold<T extends core::Object* = dynamic>(self::CustomIterable::fold::T* initialValue, (self::CustomIterable::fold::T*, core::String*) →* self::CustomIterable::fold::T* combine) → self::CustomIterable::fold::T*; -> core::Iterable::fold
+  abstract member-signature method every((core::String*) →* core::bool* test) → core::bool*; -> core::Iterable::every
+  abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
+  abstract member-signature method any((core::String*) →* core::bool* test) → core::bool*; -> core::Iterable::any
+  abstract member-signature method toList({core::bool* growable = #C2}) → core::List<core::String*>*; -> core::Iterable::toList
+  abstract member-signature method toSet() → core::Set<core::String*>*; -> core::Iterable::toSet
+  abstract member-signature get length() → core::int*; -> core::Iterable::length
+  abstract member-signature get isEmpty() → core::bool*; -> core::Iterable::isEmpty
+  abstract member-signature get isNotEmpty() → core::bool*; -> core::Iterable::isNotEmpty
+  abstract member-signature method take(core::int* count) → core::Iterable<core::String*>*; -> core::Iterable::take
+  abstract member-signature method takeWhile((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::takeWhile
+  abstract member-signature method skip(core::int* count) → core::Iterable<core::String*>*; -> core::Iterable::skip
+  abstract member-signature method skipWhile((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::skipWhile
+  abstract member-signature method firstWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::firstWhere
+  abstract member-signature method lastWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::lastWhere
+  abstract member-signature method singleWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::singleWhere
+  abstract member-signature method elementAt(core::int* index) → core::String*; -> core::Iterable::elementAt
+  abstract member-signature method toString() → core::String*; -> core::Iterable::toString
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class CustomMap extends core::Object implements core::Map<core::String*, core::String*> /*hasConstConstructor*/  {
+  const constructor •() → self::CustomMap*
+    : super core::Object::•()
+    ;
+  @#C4
+  get entries() → core::Iterable<core::MapEntry<core::String*, core::String*>*>*
+    return <core::MapEntry<core::String*, core::String*>*>[];
+  @#C4
+  operator [](core::Object* key) → core::String*
+    return throw new core::UnimplementedError::•();
+  @#C4
+  operator []=(covariant-by-class core::String* key, covariant-by-class core::String* value) → void
+    return throw new core::UnimplementedError::•();
+  @#C4
+  method cast<RK extends core::Object* = dynamic, RV extends core::Object* = dynamic>() → core::Map<self::CustomMap::cast::RK*, self::CustomMap::cast::RV*>*
+    return throw new core::UnimplementedError::•();
+  @#C4
+  method clear() → void
+    return throw new core::UnimplementedError::•();
+  @#C4
+  method containsKey(core::Object* key) → core::bool*
+    return throw new core::UnimplementedError::•();
+  @#C4
+  method containsValue(core::Object* value) → core::bool*
+    return throw new core::UnimplementedError::•();
+  @#C4
+  get isEmpty() → core::bool*
+    return throw new core::UnimplementedError::•();
+  @#C4
+  get isNotEmpty() → core::bool*
+    return throw new core::UnimplementedError::•();
+  @#C4
+  get keys() → core::Iterable<core::String*>*
+    return throw new core::UnimplementedError::•();
+  @#C4
+  get length() → core::int*
+    return throw new core::UnimplementedError::•();
+  @#C4
+  method remove(core::Object* key) → core::String*
+    return throw new core::UnimplementedError::•();
+  @#C4
+  get values() → core::Iterable<core::String*>*
+    return throw new core::UnimplementedError::•();
+  @#C4
+  method addAll(covariant-by-class core::Map<core::String*, core::String*>* other) → void
+    return throw new core::UnimplementedError::•();
+  @#C4
+  method addEntries(covariant-by-class core::Iterable<core::MapEntry<core::String*, core::String*>*>* newEntries) → void
+    return throw new core::UnimplementedError::•();
+  @#C4
+  method forEach((core::String*, core::String*) →* void f) → void
+    return throw new core::UnimplementedError::•();
+  @#C4
+  method putIfAbsent(covariant-by-class core::String* key, covariant-by-class () →* core::String* ifAbsent) → core::String*
+    return throw new core::UnimplementedError::•();
+  @#C4
+  method updateAll(covariant-by-class (core::String*, core::String*) →* core::String* update) → void
+    return throw new core::UnimplementedError::•();
+  @#C4
+  method removeWhere((core::String*, core::String*) →* core::bool* predicate) → void
+    return throw new core::UnimplementedError::•();
+  method update(covariant-by-class core::String* key, covariant-by-class (core::String*) →* core::String* update, {covariant-by-class () →* core::String* ifAbsent = #C3}) → core::String*
+    return throw new core::UnimplementedError::•();
+  method map<K2 extends core::Object* = dynamic, V2 extends core::Object* = dynamic>((core::String*, core::String*) →* core::MapEntry<self::CustomMap::map::K2*, self::CustomMap::map::V2*>* f) → core::Map<self::CustomMap::map::K2*, self::CustomMap::map::V2*>*
+    return throw new core::UnimplementedError::•();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field core::int* fortyTwo = #C5;
+static const field dynamic fortyTwoAsDynamic = #C5;
+static const field core::List<core::String*>* nullList = #C3;
+static const field core::List<core::String*>* foo = #C8;
+static const field core::List<core::String*>* bar = #C10;
+static field core::List<core::String*>* barAsVar = block {
+  final core::List<core::String*>* #t1 = core::List::of<core::String*>(#C8);
+  #t1.{core::List::add}{Invariant}("!"){(core::String*) →* void};
+} =>#t1;
+static const field core::List<core::String*>* barWithNullSpread = invalid-expression "Null value during constant evaluation.";
+static const field core::List<core::String*>* barWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:23:51: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+const List<String> barWithIntSpread = [...foo, ...fortyTwo];
+                                                  ^";
+static const field core::List<core::String*>* barWithIntDynamicSpread = invalid-expression "Expected constant '42' to be of type 'Iterable<dynamic>', but was of type 'int'.
+ - 'Iterable' is from 'dart:core'.";
+static const field core::List<core::String*>* barWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:25:51: Error: Unexpected type 'Map<String, String>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+const List<String> barWithMapSpread = [...foo, ...quux];
+                                                  ^";
+static const field core::List<core::String*>* barWithCustomIterableSpread1 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field core::List<core::String*>* barWithCustomIterableSpread2 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field self::CustomIterable* customIterable = #C11;
+static const field core::List<core::String*>* barWithCustomIterableSpread3 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field core::List<core::String*>* listConcat = invalid-expression "The method '+' can't be invoked on '<String>[\"Hello\"]' in a constant expression.";
+static const field core::Set<core::String*>* nullSet = #C3;
+static const field core::Set<core::String*>* baz = #C12;
+static const field core::Set<core::String*>* qux = #C13;
+static const field core::Set<core::String*>* quxWithNullSpread = invalid-expression "Null value during constant evaluation.";
+static const field core::Set<core::String*>* quxWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:41:50: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+const Set<String> quxWithIntSpread = {...baz, ...fortyTwo};
+                                                 ^";
+static const field core::Set<core::String*>* quxWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:42:38: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+const Set<String> quxWithMapSpread = {...baz, ...quux};
+                                     ^";
+static const field core::Set<core::String*>* quxWithCustomIterableSpread1 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field core::Set<core::String*>* quxWithCustomIterableSpread2 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
+static const field core::Set<core::String*>* quxWithCustomIterableSpread3 = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:48:59: Error: A value of type 'CustomIterable' can't be assigned to a variable of type 'String'.
+ - 'CustomIterable' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
+const Set<String> quxWithCustomIterableSpread3 = {...baz, customIterable};
+                                                          ^";
+static const field core::Set<dynamic>* setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
+ - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
+static const field core::Set<dynamic>* setWithDuplicates = invalid-expression "The element '42' conflicts with another existing element in the set.";
+static const field core::Map<core::String*, core::String*>* nullMap = #C3;
+static const field core::Map<core::String*, core::String*>* quux = #C14;
+static const field core::Map<core::String*, core::String*>* quuz = #C16;
+static const field core::Map<core::String*, core::String*>* quuzWithNullSpread = invalid-expression "Null value during constant evaluation.";
+static const field core::Map<core::String*, core::String*>* quuzWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:58:60: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+const Map<String, String> quuzWithIntSpread = {...quux, ...fortyTwo};
+                                                           ^";
+static const field core::Map<core::String*, core::String*>* quuzWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:59:47: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+const Map<String, String> quuzWithSetSpread = {...quux, ...baz};
+                                              ^";
+static const field core::Map<core::String*, core::String*>* mapWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:60:46: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+const Map<String, String> mapWithSetSpread = {...baz};
+                                             ^";
+static const field core::Map<core::String*, core::String*>* mapWithCustomMap1 = invalid-expression "Only maps can be used in spreads in constant maps.";
+static const field core::Map<core::String*, core::String*>* mapWithCustomMap2 = invalid-expression "Only maps can be used in spreads in constant maps.";
+static const field core::Map<core::String*, core::String*>* customMap = #C17;
+static const field core::Map<core::String*, core::String*>* mapWithCustomMap3 = invalid-expression "Only maps can be used in spreads in constant maps.";
+static const field core::Map<dynamic, core::int*>* mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
+ - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
+static const field core::Map<core::int*, core::int*>* mapWithDuplicates = invalid-expression "The key '42' conflicts with another existing key in the map.";
+static get fooAsGetter() → core::List<core::String*>*
+  return #C8;
+static get barAsGetter() → core::List<core::String*>*
+  return #C10;
+static get bazAsGetter() → core::Set<core::String*>*
+  return #C12;
+static get quxAsGetter() → core::Set<core::String*>*
+  return #C13;
+static get quuxAsGetter() → core::Map<core::String*, core::String*>*
+  return #C14;
+static get quuzAsGetter() → core::Map<core::String*, core::String*>*
+  return #C16;
+static method main() → dynamic {
+  core::print(#C10);
+  core::print(#C13);
+  core::print(#C16);
+  core::print( block {
+    final core::Set<core::String*>* #t2 = col::LinkedHashSet::•<core::String*>();
+    #t2.{core::Set::add}{Invariant}("hello"){(core::String*) →* core::bool*};
+  } =>#t2);
+  core::print(#C18);
+}
+
+constants  {
+  #C1 = ""
+  #C2 = true
+  #C3 = null
+  #C4 = core::_Override {}
+  #C5 = 42
+  #C6 = "hello"
+  #C7 = "world"
+  #C8 = <core::String*>[#C6, #C7]
+  #C9 = "!"
+  #C10 = <core::String*>[#C6, #C7, #C9]
+  #C11 = self::CustomIterable {}
+  #C12 = <core::String*>{#C6, #C7}
+  #C13 = <core::String*>{#C6, #C7, #C9}
+  #C14 = <core::String*, core::String*>{#C6:#C7)
+  #C15 = "bye!"
+  #C16 = <core::String*, core::String*>{#C6:#C7, #C9:#C15)
+  #C17 = self::CustomMap {}
+  #C18 = <core::String*>{#C6}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_collections.dart:
+- CustomIterable. (from org-dartlang-testcase:///const_collections.dart:79:9)
+- IterableBase. (from org-dartlang-sdk:///sdk/lib/collection/iterable.dart:219:9)
+- Iterable. (from org-dartlang-sdk:///sdk/lib/core/iterable.dart:87:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- WithEquals. (from org-dartlang-testcase:///const_collections.dart:72:9)
+- CustomMap. (from org-dartlang-testcase:///const_collections.dart:84:9)
diff --git a/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.modular.expect
new file mode 100644
index 0000000..75eedd4
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/const_constructor_coverage.dart.weak.modular.expect
@@ -0,0 +1,155 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "const_constructor_coverage_lib1.dart" as con;
+
+import "org-dartlang-testcase:///const_constructor_coverage_lib1.dart";
+import "org-dartlang-testcase:///const_constructor_coverage_lib2.dart";
+
+static const field con::Foo* foo1 = #C4;
+static const field con::Foo* foo2 = #C4;
+static const field con::Foo* foo3 = #C4;
+static const field con::Foo* foo4 = #C4;
+static method main() → dynamic {
+  core::print(#C4);
+}
+
+library;
+import self as con;
+import "dart:core" as core;
+import "const_constructor_coverage_lib2.dart" as con2;
+
+import "org-dartlang-testcase:///const_constructor_coverage_lib2.dart";
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  final field con::Bar* bar;
+  const constructor •() → con::Foo*
+    : con::Foo::bar = #C3, super core::Object::•()
+    ;
+  const constructor named1() → con::Foo*
+    : con::Foo::bar = #C3, super core::Object::•()
+    ;
+  const constructor named2() → con::Foo*
+    : con::Foo::bar = #C3, super core::Object::•()
+    ;
+  const constructor named3() → con::Foo*
+    : con::Foo::bar = #C3, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar extends core::Object /*hasConstConstructor*/  {
+  final field con2::Baz* baz;
+  const constructor •() → con::Bar*
+    : con::Bar::baz = #C2, super core::Object::•()
+    ;
+  const constructor named1() → con::Bar*
+    : con::Bar::baz = #C2, super core::Object::•()
+    ;
+  const constructor named2() → con::Bar*
+    : con::Bar::baz = #C2, super core::Object::•()
+    ;
+  const constructor named3() → con::Bar*
+    : con::Bar::baz = #C2, super core::Object::•()
+    ;
+  const constructor named4(core::int* i) → con::Bar*
+    : con::Bar::baz = i.{core::num::>}(0){(core::num*) →* core::bool*} ?{con2::Baz*} #C2 : #C2, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field con::Foo* foo = #C4;
+
+library;
+import self as con2;
+import "dart:core" as core;
+import "const_constructor_coverage_lib1.dart" as con;
+
+import "org-dartlang-testcase:///const_constructor_coverage_lib1.dart";
+
+class Baz extends core::Object /*hasConstConstructor*/  {
+  final field con::Bar* bar;
+  const constructor •() → con2::Baz*
+    : con2::Baz::bar = null, super core::Object::•()
+    ;
+  const constructor named1() → con2::Baz*
+    : con2::Baz::bar = null, super core::Object::•()
+    ;
+  const constructor named2() → con2::Baz*
+    : con2::Baz::bar = null, super core::Object::•()
+    ;
+  const constructor named3() → con2::Baz*
+    : con2::Baz::bar = #C3, super core::Object::•()
+    ;
+  const constructor named4() → con2::Baz*
+    : con2::Baz::bar = null, super core::Object::•()
+    ;
+  const constructor named5() → con2::Baz*
+    : con2::Baz::bar = null, super core::Object::•()
+    ;
+  const constructor named6() → con2::Baz*
+    : con2::Baz::bar = null, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field con2::Baz* baz = #C2;
+static const field con::Foo* foo = #C4;
+static const field con::Bar* bar = #C3;
+
+constants  {
+  #C1 = null
+  #C2 = con2::Baz {bar:#C1}
+  #C3 = con::Bar {baz:#C2}
+  #C4 = con::Foo {bar:#C3}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_constructor_coverage.dart:
+- Foo. (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:9:15)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Foo.named1 (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:10:15)
+- Foo.named2 (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:11:15)
+- Foo.named3 (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:12:15)
+
+org-dartlang-testcase:///const_constructor_coverage_lib1.dart:
+- Bar. (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:17:15)
+- Baz. (from org-dartlang-testcase:///const_constructor_coverage_lib2.dart:9:15)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Bar.named1 (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:18:15)
+- Baz.named1 (from org-dartlang-testcase:///const_constructor_coverage_lib2.dart:10:15)
+- Baz.named5 (from org-dartlang-testcase:///const_constructor_coverage_lib2.dart:14:15)
+- Baz.named6 (from org-dartlang-testcase:///const_constructor_coverage_lib2.dart:15:15)
+- Foo.named3 (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:12:15)
+
+org-dartlang-testcase:///const_constructor_coverage_lib2.dart:
+- Bar.named3 (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:20:15)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Baz.named4 (from org-dartlang-testcase:///const_constructor_coverage_lib2.dart:13:15)
+- Foo.named2 (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:11:15)
+- Bar.named2 (from org-dartlang-testcase:///const_constructor_coverage_lib1.dart:19:15)
diff --git a/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.modular.expect
new file mode 100644
index 0000000..4af39e7
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/from_lib/main.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart" as a;
+
+static const field core::Map<core::int*, core::String*>* map = #C3;
+static const field core::Set<core::int*>* set = #C6;
+static const field core::List<core::int*>* list = #C7;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = "a"
+  #C3 = <core::int*, core::String*>{#C1:#C2)
+  #C4 = 2
+  #C5 = 3
+  #C6 = <core::int*>{#C4, #C5}
+  #C7 = <core::int*>[#C5, #C4]
+}
diff --git a/pkg/front_end/testcases/general/constants/function_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/function_invocation.dart.weak.modular.expect
new file mode 100644
index 0000000..ade1d05
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/function_invocation.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/function_invocation.dart:7:20: Error: Method invocation is not a constant expression.
+// const invocation = tearOff();
+//                    ^^^^^^^
+//
+import self as self;
+
+static const field () → dynamic tearOff = #C1;
+static const field invalid-type invocation = invalid-expression "pkg/front_end/testcases/general/constants/function_invocation.dart:7:20: Error: Method invocation is not a constant expression.
+const invocation = tearOff();
+                   ^^^^^^^";
+static method method() → dynamic {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::method
+}
diff --git a/pkg/front_end/testcases/general/constants/issue46925.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/issue46925.dart.weak.modular.expect
new file mode 100644
index 0000000..86587cd
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/issue46925.dart.weak.modular.expect
@@ -0,0 +1,95 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:14:21: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   const v1 = MyClass<String>.new;
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   const v1 = MyClass<String>.new;
+//                              ^^^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: Member not found: 'new'.
+//   const v1 = MyClass<String>.new;
+//                              ^^^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:15:21: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   const v2 = MyClass<int>.constr;
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:15:27: Error: Member not found: 'constr'.
+//   const v2 = MyClass<int>.constr;
+//                           ^^^^^^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:16:21: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   const v3 = MyClass<int>.new;
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   const v3 = MyClass<int>.new;
+//                           ^^^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: Member not found: 'new'.
+//   const v3 = MyClass<int>.new;
+//                           ^^^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:17:21: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   const v4 = MyClass<String>.constr;
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/issue46925.dart:17:30: Error: Member not found: 'constr'.
+//   const v4 = MyClass<String>.constr;
+//                              ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class MyClass<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field dynamic a;
+  const constructor •(core::int i, core::int j) → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = i.{core::num::+}(j){(core::num) → core::int}, super core::Object::•()
+    ;
+  const constructor constr() → self::MyClass<self::MyClass::T%>
+    : self::MyClass::a = 0, super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  const invalid-type v1 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: Member not found: 'new'.
+  const v1 = MyClass<String>.new;
+                             ^^^";
+  const invalid-type v2 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:15:27: Error: Member not found: 'constr'.
+  const v2 = MyClass<int>.constr;
+                          ^^^^^^";
+  const invalid-type v3 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: Member not found: 'new'.
+  const v3 = MyClass<int>.new;
+                          ^^^";
+  const invalid-type v4 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:17:30: Error: Member not found: 'constr'.
+  const v4 = MyClass<String>.constr;
+                             ^^^^^^";
+  const dynamic c1 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: Member not found: 'new'.
+  const v1 = MyClass<String>.new;
+                             ^^^";
+  const dynamic c2 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:14:30: Error: Member not found: 'new'.
+  const v1 = MyClass<String>.new;
+                             ^^^";
+  const dynamic c3 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:15:27: Error: Member not found: 'constr'.
+  const v2 = MyClass<int>.constr;
+                          ^^^^^^";
+  const dynamic c4 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:15:27: Error: Member not found: 'constr'.
+  const v2 = MyClass<int>.constr;
+                          ^^^^^^";
+  const dynamic c5 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:16:27: Error: Member not found: 'new'.
+  const v3 = MyClass<int>.new;
+                          ^^^";
+  const dynamic c6 = invalid-expression "pkg/front_end/testcases/general/constants/issue46925.dart:17:30: Error: Member not found: 'constr'.
+  const v4 = MyClass<String>.constr;
+                             ^^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.modular.expect
new file mode 100644
index 0000000..65e909f
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/issue_43431.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/issue_43431.dart:9:3: Error: Only static fields can be declared as const.
+// Try using 'final' instead of 'const', or adding the keyword 'static'.
+//   const x = Foo();
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Error: Constant expression expected.
+// Try inserting 'const'.
+//   const x = Foo();
+//             ^^^
+//
+// pkg/front_end/testcases/general/constants/issue_43431.dart:8:9: Error: Constructor is marked 'const' so all fields must be final.
+//   const Foo({bool x: true});
+//         ^
+// pkg/front_end/testcases/general/constants/issue_43431.dart:9:9: Context: Field isn't final, but constructor is 'const'.
+//   const x = Foo();
+//         ^
+//
+// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Error: Constant evaluation error:
+//   const x = Foo();
+//             ^
+// pkg/front_end/testcases/general/constants/issue_43431.dart:9:13: Context: Constant expression depends on itself.
+//   const x = Foo();
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  field self::Foo* x = invalid-expression "Constant expression depends on itself.";
+  const constructor •({core::bool* x = #C1}) → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = true
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue_43431.dart:
+- Foo. (from org-dartlang-testcase:///issue_43431.dart:8:9)
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue45376.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue45376.dart.weak.modular.expect
new file mode 100644
index 0000000..966e5dd
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue45376.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class MyClass extends core::Object /*hasConstConstructor*/  {
+  final field core::int a;
+  final field core::int b;
+  const constructor •(dynamic i1, dynamic i2) → self::MyClass
+    : self::MyClass::a = i1{dynamic}.>>>(i2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, self::MyClass::b = i1{dynamic}.>>>(i2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, super core::Object::•()
+    ;
+  static method _#new#tearOff(dynamic i1, dynamic i2) → self::MyClass
+    return new self::MyClass::•(i1, i2);
+}
+static method test() → dynamic {}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue45376.dart:
+- MyClass. (from org-dartlang-testcase:///issue45376.dart:8:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.modular.expect
new file mode 100644
index 0000000..c62f518
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart:13:17: Error: Constant evaluation error:
+// test() => const ParallaxOptions();
+//                 ^
+// pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart:13:17: Context: External factory constructors can't be evaluated in constant expressions.
+// test() => const ParallaxOptions();
+//                 ^
+//
+import self as self;
+import "package:js/js.dart" as js;
+import "dart:core" as core;
+
+import "package:js/js.dart";
+
+@#C2
+@#C3
+class ParallaxOptions extends core::Object {
+  external static factory •() → self::ParallaxOptions;
+  static method _#new#tearOff() → self::ParallaxOptions
+    return self::ParallaxOptions::•();
+}
+static method test() → dynamic
+  return invalid-expression "External factory constructors can't be evaluated in constant expressions.";
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = js::JS {name:#C1}
+  #C3 = js::_Anonymous {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue46123.dart:
+- JS. (from org-dartlang-testcase-sdk:///pkg/js/lib/js.dart:21:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.modular.expect
new file mode 100644
index 0000000..215e011
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart:13:17: Error: Constant evaluation error:
+// test() => const ParallaxOptions();
+//                 ^
+// pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart:13:17: Context: External constructors can't be evaluated in constant expressions.
+// test() => const ParallaxOptions();
+//                 ^
+//
+import self as self;
+import "package:js/js.dart" as js;
+import "dart:core" as core;
+
+import "package:js/js.dart";
+
+@#C2
+@#C3
+class ParallaxOptions extends core::Object /*hasConstConstructor*/  {
+  external const constructor •() → self::ParallaxOptions
+    : super core::Object::•()
+    ;
+  static method _#new#tearOff() → self::ParallaxOptions
+    return new self::ParallaxOptions::•();
+}
+static method test() → dynamic
+  return invalid-expression "External constructors can't be evaluated in constant expressions.";
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = js::JS {name:#C1}
+  #C3 = js::_Anonymous {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue46123b.dart:
+- JS. (from org-dartlang-testcase-sdk:///pkg/js/lib/js.dart:21:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart.weak.modular.expect
new file mode 100644
index 0000000..e2269a8
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart.weak.modular.expect
@@ -0,0 +1,148 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:13:23: Error: '+' is not a prefix operator.
+// Try removing '+'.
+// const int unaryPlus = +2;
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:9:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// const int divZero = 2 / 0;
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:5:30: Error: Constant evaluation error:
+// const int shiftNegative1 = 2 << -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:5:30: Context: Binary operator '<<' on '2.0' requires non-negative operand, but was '-1.0'.
+// const int shiftNegative1 = 2 << -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:5:11: Context: While analyzing:
+// const int shiftNegative1 = 2 << -1;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:6:30: Error: Constant evaluation error:
+// const int shiftNegative2 = 2 >>> -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:6:30: Context: Binary operator '>>>' on '2.0' requires non-negative operand, but was '-1.0'.
+// const int shiftNegative2 = 2 >>> -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:6:11: Context: While analyzing:
+// const int shiftNegative2 = 2 >>> -1;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:7:30: Error: Constant evaluation error:
+// const int shiftNegative3 = 2 >> -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:7:30: Context: Binary operator '>>' on '2.0' requires non-negative operand, but was '-1.0'.
+// const int shiftNegative3 = 2 >> -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:7:11: Context: While analyzing:
+// const int shiftNegative3 = 2 >> -1;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:8:23: Error: Constant evaluation error:
+// const int modZero = 2 % 0;
+//                       ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:8:23: Context: Binary operator '%' on '2.0' requires non-zero divisor, but divisor was '0'.
+// const int modZero = 2 % 0;
+//                       ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:8:11: Context: While analyzing:
+// const int modZero = 2 % 0;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:10:26: Error: Constant evaluation error:
+// const int intdivZero = 2 ~/ 0;
+//                          ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:10:26: Context: Binary operator '~/' on '2.0' requires non-zero divisor, but divisor was '0'.
+// const int intdivZero = 2 ~/ 0;
+//                          ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:10:11: Context: While analyzing:
+// const int intdivZero = 2 ~/ 0;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:37:40: Error: Constant evaluation error:
+// const int doubleTruncateDivZero = 84.2 ~/ 0;
+//                                        ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:37:40: Context: Binary operator '~/' on '84.2' requires non-zero divisor, but divisor was '0'.
+// const int doubleTruncateDivZero = 84.2 ~/ 0;
+//                                        ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:37:11: Context: While analyzing:
+// const int doubleTruncateDivZero = 84.2 ~/ 0;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:39:40: Error: Constant evaluation error:
+// const int doubleTruncateDivNull = 84.2 ~/ nil;
+//                                        ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:39:40: Context: Binary operator '~/' on '84.2' requires operand of type 'num', but was of type 'Null'.
+// const int doubleTruncateDivNull = 84.2 ~/ nil;
+//                                        ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:39:11: Context: While analyzing:
+// const int doubleTruncateDivNull = 84.2 ~/ nil;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:41:39: Error: Constant evaluation error:
+// const int doubleTruncateDivNaN = 84.2 ~/ doubleNan;
+//                                       ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:41:39: Context: Binary operator '84.2 ~/ NaN' results is Infinity or NaN.
+// const int doubleTruncateDivNaN = 84.2 ~/ doubleNan;
+//                                       ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:41:11: Context: While analyzing:
+// const int doubleTruncateDivNaN = 84.2 ~/ doubleNan;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+static const field core::int shiftNegative1 = invalid-expression "Binary operator '<<' on '2.0' requires non-negative operand, but was '-1.0'.";
+static const field core::int shiftNegative2 = invalid-expression "Binary operator '>>>' on '2.0' requires non-negative operand, but was '-1.0'.";
+static const field core::int shiftNegative3 = invalid-expression "Binary operator '>>' on '2.0' requires non-negative operand, but was '-1.0'.";
+static const field core::int modZero = invalid-expression "Binary operator '%' on '2.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int divZero = invalid-expression "pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:9:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+const int divZero = 2 / 0;
+                      ^";
+static const field core::int intdivZero = invalid-expression "Binary operator '~/' on '2.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int unaryMinus = #C1;
+static const field core::int unaryTilde = #C2;
+static const field core::int unaryPlus = invalid-expression "pkg/front_end/testcases/general/constants/js_semantics/number_folds.dart:13:23: Error: This couldn't be parsed.
+const int unaryPlus = +2;
+                      ^";
+static const field core::int binaryPlus = #C3;
+static const field core::int binaryMinus = #C3;
+static const field core::int binaryTimes = #C3;
+static const field core::double binaryDiv = #C3;
+static const field core::int binaryTildeDiv = #C3;
+static const field core::int binaryMod = #C3;
+static const field core::int binaryOr = #C3;
+static const field core::int binaryAnd = #C3;
+static const field core::int binaryXor = #C3;
+static const field core::int binaryShift1 = #C3;
+static const field core::int binaryShift2 = #C3;
+static const field core::int binaryShift3 = #C4;
+static const field core::int binaryShift4 = #C3;
+static const field core::int binaryShift5 = #C5;
+static const field core::bool binaryLess = #C6;
+static const field core::bool binaryLessEqual = #C7;
+static const field core::bool binaryGreaterEqual = #C7;
+static const field core::bool binaryGreater = #C6;
+static const field core::int doubleTruncateDiv = #C3;
+static const field core::int doubleTruncateDivZero = invalid-expression "Binary operator '~/' on '84.2' requires non-zero divisor, but divisor was '0'.";
+static const field dynamic nil = #C8;
+static const field core::int doubleTruncateDivNull = invalid-expression "Binary operator '~/' on '84.2' requires operand of type 'num', but was of type 'Null'.";
+static const field core::double doubleNan = #C9;
+static const field core::int doubleTruncateDivNaN = invalid-expression "Binary operator '84.2 ~/ NaN' results is Infinity or NaN.";
+static const field core::int bigNumber = #C10;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = -2.0
+  #C2 = 4294967293.0
+  #C3 = 42.0
+  #C4 = 0.0
+  #C5 = 4294967295.0
+  #C6 = false
+  #C7 = true
+  #C8 = null
+  #C9 = NaN
+  #C10 = 9223372036854776000.0
+}
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..220b700
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart.weak.modular.expect
@@ -0,0 +1,132 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:14:23: Error: '+' is not a prefix operator.
+// Try removing '+'.
+// const int unaryPlus = +2;
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:10:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// const int divZero = 2 / 0;
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:7:30: Error: Constant evaluation error:
+// const int shiftNegative1 = 2 << -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:7:30: Context: Binary operator '<<' on '2.0' requires non-negative operand, but was '-1.0'.
+// const int shiftNegative1 = 2 << -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:7:11: Context: While analyzing:
+// const int shiftNegative1 = 2 << -1;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:8:30: Error: Constant evaluation error:
+// const int shiftNegative3 = 2 >> -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:8:30: Context: Binary operator '>>' on '2.0' requires non-negative operand, but was '-1.0'.
+// const int shiftNegative3 = 2 >> -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:8:11: Context: While analyzing:
+// const int shiftNegative3 = 2 >> -1;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:9:23: Error: Constant evaluation error:
+// const int modZero = 2 % 0;
+//                       ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:9:23: Context: Binary operator '%' on '2.0' requires non-zero divisor, but divisor was '0'.
+// const int modZero = 2 % 0;
+//                       ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:9:11: Context: While analyzing:
+// const int modZero = 2 % 0;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:11:26: Error: Constant evaluation error:
+// const int intdivZero = 2 ~/ 0;
+//                          ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:11:26: Context: Binary operator '~/' on '2.0' requires non-zero divisor, but divisor was '0'.
+// const int intdivZero = 2 ~/ 0;
+//                          ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:11:11: Context: While analyzing:
+// const int intdivZero = 2 ~/ 0;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:35:40: Error: Constant evaluation error:
+// const int doubleTruncateDivZero = 84.2 ~/ 0;
+//                                        ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:35:40: Context: Binary operator '~/' on '84.2' requires non-zero divisor, but divisor was '0'.
+// const int doubleTruncateDivZero = 84.2 ~/ 0;
+//                                        ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:35:11: Context: While analyzing:
+// const int doubleTruncateDivZero = 84.2 ~/ 0;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:36:40: Error: Constant evaluation error:
+// const int doubleTruncateDivNull = 84.2 ~/ null;
+//                                        ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:36:40: Context: Binary operator '~/' on '84.2' requires operand of type 'num', but was of type 'Null'.
+// const int doubleTruncateDivNull = 84.2 ~/ null;
+//                                        ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:36:11: Context: While analyzing:
+// const int doubleTruncateDivNull = 84.2 ~/ null;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:38:39: Error: Constant evaluation error:
+// const int doubleTruncateDivNaN = 84.2 ~/ doubleNan;
+//                                       ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:38:39: Context: Binary operator '84.2 ~/ NaN' results is Infinity or NaN.
+// const int doubleTruncateDivNaN = 84.2 ~/ doubleNan;
+//                                       ^
+// pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:38:11: Context: While analyzing:
+// const int doubleTruncateDivNaN = 84.2 ~/ doubleNan;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+static const field core::int* shiftNegative1 = invalid-expression "Binary operator '<<' on '2.0' requires non-negative operand, but was '-1.0'.";
+static const field core::int* shiftNegative3 = invalid-expression "Binary operator '>>' on '2.0' requires non-negative operand, but was '-1.0'.";
+static const field core::int* modZero = invalid-expression "Binary operator '%' on '2.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* divZero = invalid-expression "pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:10:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+const int divZero = 2 / 0;
+                      ^";
+static const field core::int* intdivZero = invalid-expression "Binary operator '~/' on '2.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* unaryMinus = #C1;
+static const field core::int* unaryTilde = #C2;
+static const field core::int* unaryPlus = invalid-expression "pkg/front_end/testcases/general/constants/js_semantics/number_folds_opt_out.dart:14:23: Error: This couldn't be parsed.
+const int unaryPlus = +2;
+                      ^";
+static const field core::int* binaryPlus = #C3;
+static const field core::int* binaryMinus = #C3;
+static const field core::int* binaryTimes = #C3;
+static const field core::double* binaryDiv = #C3;
+static const field core::int* binaryTildeDiv = #C3;
+static const field core::int* binaryMod = #C3;
+static const field core::int* binaryOr = #C3;
+static const field core::int* binaryAnd = #C3;
+static const field core::int* binaryXor = #C3;
+static const field core::int* binaryShift1 = #C3;
+static const field core::int* binaryShift4 = #C3;
+static const field core::int* binaryShift5 = #C4;
+static const field core::bool* binaryLess = #C5;
+static const field core::bool* binaryLessEqual = #C6;
+static const field core::bool* binaryGreaterEqual = #C6;
+static const field core::bool* binaryGreater = #C5;
+static const field core::int* doubleTruncateDiv = #C3;
+static const field core::int* doubleTruncateDivZero = invalid-expression "Binary operator '~/' on '84.2' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* doubleTruncateDivNull = invalid-expression "Binary operator '~/' on '84.2' requires operand of type 'num', but was of type 'Null'.";
+static const field core::double* doubleNan = #C7;
+static const field core::int* doubleTruncateDivNaN = invalid-expression "Binary operator '84.2 ~/ NaN' results is Infinity or NaN.";
+static const field core::int* bigNumber = #C8;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = -2.0
+  #C2 = 4294967293.0
+  #C3 = 42.0
+  #C4 = 4294967295.0
+  #C5 = false
+  #C6 = true
+  #C7 = NaN
+  #C8 = 9223372036854776000.0
+}
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/on_double.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/js_semantics/on_double.dart.weak.modular.expect
new file mode 100644
index 0000000..03c80f1
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/on_double.dart.weak.modular.expect
@@ -0,0 +1,151 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:27:26: Error: Constant evaluation error:
+//   const Class c2 = Class.doubleShift(b, 1);
+//                          ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:21:45: Context: Binary operator '>>' on '1.5' requires operand of type 'int', but was of type 'double'.
+//   const Class.doubleShift(i1, i2) : a = (i1 >> i2);
+//                                             ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:27:15: Context: While analyzing:
+//   const Class c2 = Class.doubleShift(b, 1);
+//               ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:29:26: Error: Constant evaluation error:
+//   const Class c4 = Class.tripleShift(b, 1);
+//                          ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:22:45: Context: Binary operator '>>>' on '1.5' requires operand of type 'int', but was of type 'double'.
+//   const Class.tripleShift(i1, i2) : a = (i1 >>> i2);
+//                                             ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:29:15: Context: While analyzing:
+//   const Class c4 = Class.tripleShift(b, 1);
+//               ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:32:26: Error: Constant evaluation error:
+//   const Class d2 = Class.doubleShift(1, b);
+//                          ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:21:45: Context: Binary operator '>>' on '1.5' requires operand of type 'int', but was of type 'double'.
+//   const Class.doubleShift(i1, i2) : a = (i1 >> i2);
+//                                             ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:32:15: Context: While analyzing:
+//   const Class d2 = Class.doubleShift(1, b);
+//               ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:34:26: Error: Constant evaluation error:
+//   const Class d4 = Class.tripleShift(1, b);
+//                          ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:22:45: Context: Binary operator '>>>' on '1.5' requires operand of type 'int', but was of type 'double'.
+//   const Class.tripleShift(i1, i2) : a = (i1 >>> i2);
+//                                             ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:34:15: Context: While analyzing:
+//   const Class d4 = Class.tripleShift(1, b);
+//               ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:37:26: Error: Constant evaluation error:
+//   const Class e2 = Class.doubleShift(1.5, 1);
+//                          ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:21:45: Context: Binary operator '>>' on '1.5' requires operand of type 'int', but was of type 'double'.
+//   const Class.doubleShift(i1, i2) : a = (i1 >> i2);
+//                                             ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:37:15: Context: While analyzing:
+//   const Class e2 = Class.doubleShift(1.5, 1);
+//               ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:39:26: Error: Constant evaluation error:
+//   const Class e4 = Class.tripleShift(1.5, 1);
+//                          ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:22:45: Context: Binary operator '>>>' on '1.5' requires operand of type 'int', but was of type 'double'.
+//   const Class.tripleShift(i1, i2) : a = (i1 >>> i2);
+//                                             ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:39:15: Context: While analyzing:
+//   const Class e4 = Class.tripleShift(1.5, 1);
+//               ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:9:22: Error: Constant evaluation error:
+// const dynamic c1 = b >> 1;
+//                      ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:9:22: Context: Binary operator '>>' on '1.5' requires operand of type 'int', but was of type 'double'.
+// const dynamic c1 = b >> 1;
+//                      ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:9:15: Context: While analyzing:
+// const dynamic c1 = b >> 1;
+//               ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:11:22: Error: Constant evaluation error:
+// const dynamic c3 = b >>> 1;
+//                      ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:11:22: Context: Binary operator '>>>' on '1.5' requires operand of type 'int', but was of type 'double'.
+// const dynamic c3 = b >>> 1;
+//                      ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:11:15: Context: While analyzing:
+// const dynamic c3 = b >>> 1;
+//               ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:14:22: Error: Constant evaluation error:
+// const dynamic d1 = 1 >> b;
+//                      ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:14:25: Context: Expected constant '1.5' to be of type 'int', but was of type 'double'.
+// const dynamic d1 = 1 >> b;
+//                         ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:14:15: Context: While analyzing:
+// const dynamic d1 = 1 >> b;
+//               ^
+//
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:16:22: Error: Constant evaluation error:
+// const dynamic d3 = 1 >>> b;
+//                      ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:16:26: Context: Expected constant '1.5' to be of type 'int', but was of type 'double'.
+// const dynamic d3 = 1 >>> b;
+//                          ^
+// pkg/front_end/testcases/general/constants/js_semantics/on_double.dart:16:15: Context: While analyzing:
+// const dynamic d3 = 1 >>> b;
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object /*hasConstConstructor*/  {
+  final field core::int a;
+  const constructor doubleShift(dynamic i1, dynamic i2) → self::Class
+    : self::Class::a = i1{dynamic}.>>(i2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, super core::Object::•()
+    ;
+  const constructor tripleShift(dynamic i1, dynamic i2) → self::Class
+    : self::Class::a = i1{dynamic}.>>>(i2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int, super core::Object::•()
+    ;
+  static method _#doubleShift#tearOff(dynamic i1, dynamic i2) → self::Class
+    return new self::Class::doubleShift(i1, i2);
+  static method _#tripleShift#tearOff(dynamic i1, dynamic i2) → self::Class
+    return new self::Class::tripleShift(i1, i2);
+}
+static const field dynamic a = #C1;
+static const field dynamic b = #C2;
+static const field dynamic c0 = #C3;
+static const field dynamic c1 = invalid-expression "Binary operator '>>' on '1.5' requires operand of type 'int', but was of type 'double'.";
+static const field dynamic c2 = #C3;
+static const field dynamic c3 = invalid-expression "Binary operator '>>>' on '1.5' requires operand of type 'int', but was of type 'double'.";
+static const field dynamic d0 = #C3;
+static const field dynamic d1 = invalid-expression "Expected constant '1.5' to be of type 'int', but was of type 'double'.";
+static const field dynamic d2 = #C3;
+static const field dynamic d3 = invalid-expression "Expected constant '1.5' to be of type 'int', but was of type 'double'.";
+static method main() → dynamic {
+  const self::Class c2 = invalid-expression "Binary operator '>>' on '1.5' requires operand of type 'int', but was of type 'double'.";
+  const self::Class c4 = invalid-expression "Binary operator '>>>' on '1.5' requires operand of type 'int', but was of type 'double'.";
+  const self::Class d2 = invalid-expression "Binary operator '>>' on '1.5' requires operand of type 'int', but was of type 'double'.";
+  const self::Class d4 = invalid-expression "Binary operator '>>>' on '1.5' requires operand of type 'int', but was of type 'double'.";
+  const self::Class e2 = invalid-expression "Binary operator '>>' on '1.5' requires operand of type 'int', but was of type 'double'.";
+  const self::Class e4 = invalid-expression "Binary operator '>>>' on '1.5' requires operand of type 'int', but was of type 'double'.";
+}
+
+constants  {
+  #C1 = 1.0
+  #C2 = 1.5
+  #C3 = 0.0
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///on_double.dart:
+- Class.doubleShift (from org-dartlang-testcase:///on_double.dart:21:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:25:9)
+- Class.tripleShift (from org-dartlang-testcase:///on_double.dart:22:9)
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.modular.expect
new file mode 100644
index 0000000..0570489
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/various.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static const field core::bool* y = #C1;
+static const field core::bool* z = #C2;
+static const field core::Object* maybeInt = #C3;
+static const field core::bool* isItInt = #C2;
+static const field core::bool* isItDouble = #C2;
+static const field core::int* actualInt = #C3;
+static const field core::bool* isItInt2 = #C2;
+static const field core::bool* isItDouble2 = #C2;
+static const field core::Object* maybeDouble = #C3;
+static const field core::bool* isItInt3 = #C2;
+static const field core::bool* isItDouble3 = #C2;
+static const field core::double* actualDouble = #C3;
+static const field core::bool* isItInt4 = #C2;
+static const field core::bool* isItDouble4 = #C2;
+static const field core::Object* maybeDouble2 = #C4;
+static const field core::bool* isItInt5 = #C1;
+static const field core::bool* isItDouble5 = #C2;
+static const field core::double* actualDouble2 = #C4;
+static const field core::bool* isItInt6 = #C1;
+static const field core::bool* isItDouble7 = #C2;
+static const field core::bool* zeroPointZeroIdentical = #C2;
+static const field core::bool* zeroPointZeroIdenticalToZero = #C2;
+static const field core::bool* zeroIdenticalToZeroPointZero = #C2;
+static const field core::bool* nanIdentical = #C1;
+static const field core::bool* stringIdentical = #C2;
+static const field core::bool* string2Identical = #C1;
+static const field core::bool* zeroPointZeroEqual = #C2;
+static const field core::bool* zeroPointZeroEqualToZero = #C2;
+static const field core::bool* zeroEqualToZeroPointZero = #C2;
+static const field core::bool* nanEqual = #C1;
+static const field core::bool* stringEqual = #C2;
+static const field core::bool* string2Equal = #C1;
+static const field core::int* intFortyTwo = #C3;
+static const field core::String* intStringConcat = #C5;
+
+constants  {
+  #C1 = false
+  #C2 = true
+  #C3 = 42.0
+  #C4 = 42.42
+  #C5 = "hello1764"
+}
diff --git a/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.modular.expect
new file mode 100644
index 0000000..376dfb4
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/no_experiments/various.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static const field core::Symbol* tripleShiftSymbol = #C1;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #>>>
+}
diff --git a/pkg/front_end/testcases/general/constants/non_const_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/non_const_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..378710d4
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/non_const_constructor.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/non_const_constructor.dart:8:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const Class.named() {
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/constants/non_const_constructor.dart:13:17: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const a = const Class();
+//                 ^^^^^
+//
+// pkg/front_end/testcases/general/constants/non_const_constructor.dart:14:17: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const b = const Class.named();
+//                 ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  constructor named() → self::Class
+    : super core::Object::•() {
+    1;
+  }
+}
+static const field invalid-type a = invalid-expression "pkg/front_end/testcases/general/constants/non_const_constructor.dart:13:17: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const a = const Class();
+                ^^^^^";
+static const field invalid-type b = invalid-expression "pkg/front_end/testcases/general/constants/non_const_constructor.dart:14:17: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const b = const Class.named();
+                ^^^^^";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/constants/non_const_variable.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/non_const_variable.dart.weak.modular.expect
new file mode 100644
index 0000000..a600694
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/non_const_variable.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/non_const_variable.dart:7:13: Error: Not a constant expression.
+//   const b = a;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method method() → dynamic {
+  core::int a = 0;
+  const invalid-type b = invalid-expression "pkg/front_end/testcases/general/constants/non_const_variable.dart:7:13: Error: Not a constant expression.
+  const b = a;
+            ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/constants/number_folds.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/number_folds.dart.weak.modular.expect
new file mode 100644
index 0000000..6de8923
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/number_folds.dart.weak.modular.expect
@@ -0,0 +1,145 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/number_folds.dart:13:23: Error: '+' is not a prefix operator.
+// Try removing '+'.
+// const int unaryPlus = +2;
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/number_folds.dart:9:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// const int divZero = 2 / 0;
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/number_folds.dart:5:30: Error: Constant evaluation error:
+// const int shiftNegative1 = 2 << -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/number_folds.dart:5:30: Context: Binary operator '<<' on '2' requires non-negative operand, but was '-1'.
+// const int shiftNegative1 = 2 << -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/number_folds.dart:5:11: Context: While analyzing:
+// const int shiftNegative1 = 2 << -1;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/number_folds.dart:6:30: Error: Constant evaluation error:
+// const int shiftNegative2 = 2 >>> -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/number_folds.dart:6:30: Context: Binary operator '>>>' on '2' requires non-negative operand, but was '-1'.
+// const int shiftNegative2 = 2 >>> -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/number_folds.dart:6:11: Context: While analyzing:
+// const int shiftNegative2 = 2 >>> -1;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/number_folds.dart:7:30: Error: Constant evaluation error:
+// const int shiftNegative3 = 2 >> -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/number_folds.dart:7:30: Context: Binary operator '>>' on '2' requires non-negative operand, but was '-1'.
+// const int shiftNegative3 = 2 >> -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/number_folds.dart:7:11: Context: While analyzing:
+// const int shiftNegative3 = 2 >> -1;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/number_folds.dart:8:23: Error: Constant evaluation error:
+// const int modZero = 2 % 0;
+//                       ^
+// pkg/front_end/testcases/general/constants/number_folds.dart:8:23: Context: Binary operator '%' on '2' requires non-zero divisor, but divisor was '0'.
+// const int modZero = 2 % 0;
+//                       ^
+// pkg/front_end/testcases/general/constants/number_folds.dart:8:11: Context: While analyzing:
+// const int modZero = 2 % 0;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/number_folds.dart:10:26: Error: Constant evaluation error:
+// const int intdivZero = 2 ~/ 0;
+//                          ^
+// pkg/front_end/testcases/general/constants/number_folds.dart:10:26: Context: Binary operator '~/' on '2' requires non-zero divisor, but divisor was '0'.
+// const int intdivZero = 2 ~/ 0;
+//                          ^
+// pkg/front_end/testcases/general/constants/number_folds.dart:10:11: Context: While analyzing:
+// const int intdivZero = 2 ~/ 0;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/number_folds.dart:36:40: Error: Constant evaluation error:
+// const int doubleTruncateDivZero = 84.2 ~/ 0;
+//                                        ^
+// pkg/front_end/testcases/general/constants/number_folds.dart:36:40: Context: Binary operator '~/' on '84.2' requires non-zero divisor, but divisor was '0'.
+// const int doubleTruncateDivZero = 84.2 ~/ 0;
+//                                        ^
+// pkg/front_end/testcases/general/constants/number_folds.dart:36:11: Context: While analyzing:
+// const int doubleTruncateDivZero = 84.2 ~/ 0;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/number_folds.dart:38:40: Error: Constant evaluation error:
+// const int doubleTruncateDivNull = 84.2 ~/ nil;
+//                                        ^
+// pkg/front_end/testcases/general/constants/number_folds.dart:38:40: Context: Binary operator '~/' on '84.2' requires operand of type 'num', but was of type 'Null'.
+// const int doubleTruncateDivNull = 84.2 ~/ nil;
+//                                        ^
+// pkg/front_end/testcases/general/constants/number_folds.dart:38:11: Context: While analyzing:
+// const int doubleTruncateDivNull = 84.2 ~/ nil;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/number_folds.dart:40:39: Error: Constant evaluation error:
+// const int doubleTruncateDivNaN = 84.2 ~/ doubleNan;
+//                                       ^
+// pkg/front_end/testcases/general/constants/number_folds.dart:40:39: Context: Binary operator '84.2 ~/ NaN' results is Infinity or NaN.
+// const int doubleTruncateDivNaN = 84.2 ~/ doubleNan;
+//                                       ^
+// pkg/front_end/testcases/general/constants/number_folds.dart:40:11: Context: While analyzing:
+// const int doubleTruncateDivNaN = 84.2 ~/ doubleNan;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+static const field core::int shiftNegative1 = invalid-expression "Binary operator '<<' on '2' requires non-negative operand, but was '-1'.";
+static const field core::int shiftNegative2 = invalid-expression "Binary operator '>>>' on '2' requires non-negative operand, but was '-1'.";
+static const field core::int shiftNegative3 = invalid-expression "Binary operator '>>' on '2' requires non-negative operand, but was '-1'.";
+static const field core::int modZero = invalid-expression "Binary operator '%' on '2' requires non-zero divisor, but divisor was '0'.";
+static const field core::int divZero = invalid-expression "pkg/front_end/testcases/general/constants/number_folds.dart:9:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+const int divZero = 2 / 0;
+                      ^";
+static const field core::int intdivZero = invalid-expression "Binary operator '~/' on '2' requires non-zero divisor, but divisor was '0'.";
+static const field core::int unaryMinus = #C1;
+static const field core::int unaryTilde = #C2;
+static const field core::int unaryPlus = invalid-expression "pkg/front_end/testcases/general/constants/number_folds.dart:13:23: Error: This couldn't be parsed.
+const int unaryPlus = +2;
+                      ^";
+static const field core::int binaryPlus = #C3;
+static const field core::int binaryMinus = #C3;
+static const field core::int binaryTimes = #C3;
+static const field core::double binaryDiv = #C4;
+static const field core::int binaryTildeDiv = #C3;
+static const field core::int binaryMod = #C3;
+static const field core::int binaryOr = #C3;
+static const field core::int binaryAnd = #C3;
+static const field core::int binaryXor = #C3;
+static const field core::int binaryShift1 = #C3;
+static const field core::int binaryShift2 = #C3;
+static const field core::int binaryShift3 = #C5;
+static const field core::int binaryShift4 = #C3;
+static const field core::bool binaryLess = #C6;
+static const field core::bool binaryLessEqual = #C7;
+static const field core::bool binaryGreaterEqual = #C7;
+static const field core::bool binaryGreater = #C6;
+static const field core::int doubleTruncateDiv = #C3;
+static const field core::int doubleTruncateDivZero = invalid-expression "Binary operator '~/' on '84.2' requires non-zero divisor, but divisor was '0'.";
+static const field dynamic nil = #C8;
+static const field core::int doubleTruncateDivNull = invalid-expression "Binary operator '~/' on '84.2' requires operand of type 'num', but was of type 'Null'.";
+static const field core::double doubleNan = #C9;
+static const field core::int doubleTruncateDivNaN = invalid-expression "Binary operator '84.2 ~/ NaN' results is Infinity or NaN.";
+static method main() → dynamic {}
+
+constants  {
+  #C1 = -2
+  #C2 = -3
+  #C3 = 42
+  #C4 = 42.0
+  #C5 = 0
+  #C6 = false
+  #C7 = true
+  #C8 = null
+  #C9 = NaN
+}
diff --git a/pkg/front_end/testcases/general/constants/number_folds_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/number_folds_opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..44bc90e
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/number_folds_opt_out.dart.weak.modular.expect
@@ -0,0 +1,129 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:14:23: Error: '+' is not a prefix operator.
+// Try removing '+'.
+// const int unaryPlus = +2;
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:10:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+// const int divZero = 2 / 0;
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:7:30: Error: Constant evaluation error:
+// const int shiftNegative1 = 2 << -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:7:30: Context: Binary operator '<<' on '2' requires non-negative operand, but was '-1'.
+// const int shiftNegative1 = 2 << -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:7:11: Context: While analyzing:
+// const int shiftNegative1 = 2 << -1;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:8:30: Error: Constant evaluation error:
+// const int shiftNegative3 = 2 >> -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:8:30: Context: Binary operator '>>' on '2' requires non-negative operand, but was '-1'.
+// const int shiftNegative3 = 2 >> -1;
+//                              ^
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:8:11: Context: While analyzing:
+// const int shiftNegative3 = 2 >> -1;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:9:23: Error: Constant evaluation error:
+// const int modZero = 2 % 0;
+//                       ^
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:9:23: Context: Binary operator '%' on '2' requires non-zero divisor, but divisor was '0'.
+// const int modZero = 2 % 0;
+//                       ^
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:9:11: Context: While analyzing:
+// const int modZero = 2 % 0;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:11:26: Error: Constant evaluation error:
+// const int intdivZero = 2 ~/ 0;
+//                          ^
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:11:26: Context: Binary operator '~/' on '2' requires non-zero divisor, but divisor was '0'.
+// const int intdivZero = 2 ~/ 0;
+//                          ^
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:11:11: Context: While analyzing:
+// const int intdivZero = 2 ~/ 0;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:34:40: Error: Constant evaluation error:
+// const int doubleTruncateDivZero = 84.2 ~/ 0;
+//                                        ^
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:34:40: Context: Binary operator '~/' on '84.2' requires non-zero divisor, but divisor was '0'.
+// const int doubleTruncateDivZero = 84.2 ~/ 0;
+//                                        ^
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:34:11: Context: While analyzing:
+// const int doubleTruncateDivZero = 84.2 ~/ 0;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:35:40: Error: Constant evaluation error:
+// const int doubleTruncateDivNull = 84.2 ~/ null;
+//                                        ^
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:35:40: Context: Binary operator '~/' on '84.2' requires operand of type 'num', but was of type 'Null'.
+// const int doubleTruncateDivNull = 84.2 ~/ null;
+//                                        ^
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:35:11: Context: While analyzing:
+// const int doubleTruncateDivNull = 84.2 ~/ null;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:37:39: Error: Constant evaluation error:
+// const int doubleTruncateDivNaN = 84.2 ~/ doubleNan;
+//                                       ^
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:37:39: Context: Binary operator '84.2 ~/ NaN' results is Infinity or NaN.
+// const int doubleTruncateDivNaN = 84.2 ~/ doubleNan;
+//                                       ^
+// pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:37:11: Context: While analyzing:
+// const int doubleTruncateDivNaN = 84.2 ~/ doubleNan;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+static const field core::int* shiftNegative1 = invalid-expression "Binary operator '<<' on '2' requires non-negative operand, but was '-1'.";
+static const field core::int* shiftNegative3 = invalid-expression "Binary operator '>>' on '2' requires non-negative operand, but was '-1'.";
+static const field core::int* modZero = invalid-expression "Binary operator '%' on '2' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* divZero = invalid-expression "pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:10:23: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+const int divZero = 2 / 0;
+                      ^";
+static const field core::int* intdivZero = invalid-expression "Binary operator '~/' on '2' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* unaryMinus = #C1;
+static const field core::int* unaryTilde = #C2;
+static const field core::int* unaryPlus = invalid-expression "pkg/front_end/testcases/general/constants/number_folds_opt_out.dart:14:23: Error: This couldn't be parsed.
+const int unaryPlus = +2;
+                      ^";
+static const field core::int* binaryPlus = #C3;
+static const field core::int* binaryMinus = #C3;
+static const field core::int* binaryTimes = #C3;
+static const field core::double* binaryDiv = #C4;
+static const field core::int* binaryTildeDiv = #C3;
+static const field core::int* binaryMod = #C3;
+static const field core::int* binaryOr = #C3;
+static const field core::int* binaryAnd = #C3;
+static const field core::int* binaryXor = #C3;
+static const field core::int* binaryShift1 = #C3;
+static const field core::int* binaryShift4 = #C3;
+static const field core::bool* binaryLess = #C5;
+static const field core::bool* binaryLessEqual = #C6;
+static const field core::bool* binaryGreaterEqual = #C6;
+static const field core::bool* binaryGreater = #C5;
+static const field core::int* doubleTruncateDiv = #C3;
+static const field core::int* doubleTruncateDivZero = invalid-expression "Binary operator '~/' on '84.2' requires non-zero divisor, but divisor was '0'.";
+static const field core::int* doubleTruncateDivNull = invalid-expression "Binary operator '~/' on '84.2' requires operand of type 'num', but was of type 'Null'.";
+static const field core::double* doubleNan = #C7;
+static const field core::int* doubleTruncateDivNaN = invalid-expression "Binary operator '84.2 ~/ NaN' results is Infinity or NaN.";
+static method main() → dynamic {}
+
+constants  {
+  #C1 = -2
+  #C2 = -3
+  #C3 = 42
+  #C4 = 42.0
+  #C5 = false
+  #C6 = true
+  #C7 = NaN
+}
diff --git a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.modular.expect
new file mode 100644
index 0000000..35d93a3
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.modular.expect
@@ -0,0 +1,666 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:26:18: Error: Type variables can't be used as constants.
+//       : field1 = T,
+//                  ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:27:21: Error: Constant expression expected.
+// Try inserting 'const'.
+//         field5 = <T>[],
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:27:19: Error: Type variables can't be used as constants.
+//         field5 = <T>[],
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:28:21: Error: Constant expression expected.
+// Try inserting 'const'.
+//         field6 = <T>{},
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:28:19: Error: Type variables can't be used as constants.
+//         field6 = <T>{},
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:29:24: Error: Constant expression expected.
+// Try inserting 'const'.
+//         field7 = <T, T>{},
+//                        ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:29:19: Error: Type variables can't be used as constants.
+//         field7 = <T, T>{},
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:29:22: Error: Type variables can't be used as constants.
+//         field7 = <T, T>{},
+//                      ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:30:23: Error: Type variables can't be used as constants.
+//         field8 = o is T,
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:31:29: Error: Type variables can't be used as constants.
+//         field9 = o is Class<T>,
+//                             ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:32:24: Error: Type variables can't be used as constants.
+//         field10 = o as T,
+//                        ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:33:30: Error: Type variables can't be used as constants.
+//         field11 = o as Class<T>,
+//                              ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:34:26: Error: Type variables can't be used as constants.
+//         field15 = <Class<T>>[];
+//                          ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:34:29: Error: Constant expression expected.
+// Try inserting 'const'.
+//         field15 = <Class<T>>[];
+//                             ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:40:20: Error: Type variables can't be used as constants.
+//     const local1 = T;
+//                    ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:41:21: Error: Type variables can't be used as constants.
+//     const local5 = <T>[];
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:42:21: Error: Type variables can't be used as constants.
+//     const local6 = <T>{};
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:43:21: Error: Type variables can't be used as constants.
+//     const local7 = <T, T>{};
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:43:24: Error: Type variables can't be used as constants.
+//     const local7 = <T, T>{};
+//                        ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:44:25: Error: Type variables can't be used as constants.
+//     const local8 = o is T;
+//                         ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:45:31: Error: Type variables can't be used as constants.
+//     const local9 = o is Class<T>;
+//                               ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:46:26: Error: Type variables can't be used as constants.
+//     const local10 = o as T;
+//                          ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:47:32: Error: Type variables can't be used as constants.
+//     const local11 = o as Class<T>;
+//                                ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:48:28: Error: Type variables can't be used as constants.
+//     const local15 = <Class<T>>[];
+//                            ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:63:18: Error: Type variables can't be used as constants.
+//     print(const [T]);
+//                  ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:64:19: Error: Type variables can't be used as constants.
+//     print(const [<T>[]]);
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:65:19: Error: Type variables can't be used as constants.
+//     print(const [<T>{}]);
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:66:19: Error: Type variables can't be used as constants.
+//     print(const [<T, T>{}]);
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:66:22: Error: Type variables can't be used as constants.
+//     print(const [<T, T>{}]);
+//                      ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:67:23: Error: Type variables can't be used as constants.
+//     print(const [o is T]);
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:68:29: Error: Type variables can't be used as constants.
+//     print(const [o is Class<T>]);
+//                             ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:69:23: Error: Type variables can't be used as constants.
+//     print(const [o as T]);
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:70:29: Error: Type variables can't be used as constants.
+//     print(const [o as Class<T>]);
+//                             ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:71:25: Error: Type variables can't be used as constants.
+//     print(const [<Class<T>>[]]);
+//                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///potentially_constant_type_lib1.dart";
+import "org-dartlang-testcase:///potentially_constant_type_lib2.dart";
+
+class Class<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field dynamic field1;
+  final field dynamic field5;
+  final field dynamic field6;
+  final field dynamic field7;
+  final field dynamic field8;
+  final field dynamic field9;
+  final field dynamic field10;
+  final field dynamic field11;
+  final field dynamic field15;
+  const constructor •(dynamic o) → self::Class<self::Class::T*>*
+    : self::Class::field1 = #C1, self::Class::field5 = #C2, self::Class::field6 = #C3, self::Class::field7 = #C4, self::Class::field8 = o is invalid-type, self::Class::field9 = o is self::Class<invalid-type>*, self::Class::field10 = o as invalid-type, self::Class::field11 = o as self::Class<invalid-type>*, self::Class::field15 = #C5, super core::Object::•()
+    ;
+  method method() → void {
+    core::print(#C1);
+    core::print(#C2);
+    core::print(#C3);
+    core::print(#C4);
+    core::print(#C6);
+    core::print(#C7);
+    core::print(#C8);
+    core::print(#C8);
+    core::print(#C5);
+    core::print(#C9);
+    core::print(#C10);
+    core::print(#C11);
+    core::print(#C12);
+    core::print(#C13);
+    core::print(#C14);
+    core::print(#C15);
+    core::print(#C16);
+    core::print(#C17);
+    core::print(#C18);
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method id<T extends core::Object* = dynamic>(self::id::T* t) → self::id::T*
+  return t;
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:23:18: Error: Type variables can't be used as constants.
+//       : field1 = T,
+//                  ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:24:21: Error: Constant expression expected.
+// Try inserting 'const'.
+//         field5 = <T>[],
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:24:19: Error: Type variables can't be used as constants.
+//         field5 = <T>[],
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:25:21: Error: Constant expression expected.
+// Try inserting 'const'.
+//         field6 = <T>{},
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:25:19: Error: Type variables can't be used as constants.
+//         field6 = <T>{},
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:26:24: Error: Constant expression expected.
+// Try inserting 'const'.
+//         field7 = <T, T>{},
+//                        ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:26:19: Error: Type variables can't be used as constants.
+//         field7 = <T, T>{},
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:26:22: Error: Type variables can't be used as constants.
+//         field7 = <T, T>{},
+//                      ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:31:26: Error: Type variables can't be used as constants.
+//         field15 = <Class<T>>[];
+//                          ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:31:29: Error: Constant expression expected.
+// Try inserting 'const'.
+//         field15 = <Class<T>>[];
+//                             ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:37:20: Error: Type variables can't be used as constants.
+//     const local1 = T;
+//                    ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:38:21: Error: Type variables can't be used as constants.
+//     const local5 = <T>[];
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:39:21: Error: Type variables can't be used as constants.
+//     const local6 = <T>{};
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:40:21: Error: Type variables can't be used as constants.
+//     const local7 = <T, T>{};
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:40:24: Error: Type variables can't be used as constants.
+//     const local7 = <T, T>{};
+//                        ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:41:25: Error: Type variables can't be used as constants.
+//     const local8 = o is T;
+//                         ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:42:31: Error: Type variables can't be used as constants.
+//     const local9 = o is Class<T>;
+//                               ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:43:26: Error: Type variables can't be used as constants.
+//     const local10 = o as T;
+//                          ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:44:32: Error: Type variables can't be used as constants.
+//     const local11 = o as Class<T>;
+//                                ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:45:28: Error: Type variables can't be used as constants.
+//     const local15 = <Class<T>>[];
+//                            ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:60:18: Error: Type variables can't be used as constants.
+//     print(const [T]);
+//                  ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:61:19: Error: Type variables can't be used as constants.
+//     print(const [<T>[]]);
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:62:19: Error: Type variables can't be used as constants.
+//     print(const [<T>{}]);
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:63:19: Error: Type variables can't be used as constants.
+//     print(const [<T, T>{}]);
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:63:22: Error: Type variables can't be used as constants.
+//     print(const [<T, T>{}]);
+//                      ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:64:23: Error: Type variables can't be used as constants.
+//     print(const [o is T]);
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:65:29: Error: Type variables can't be used as constants.
+//     print(const [o is Class<T>]);
+//                             ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:66:23: Error: Type variables can't be used as constants.
+//     print(const [o as T]);
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:67:29: Error: Type variables can't be used as constants.
+//     print(const [o as Class<T>]);
+//                             ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:68:25: Error: Type variables can't be used as constants.
+//     print(const [<Class<T>>[]]);
+//                         ^
+//
+import self as self2;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field dynamic field1;
+  final field dynamic field5;
+  final field dynamic field6;
+  final field dynamic field7;
+  final field dynamic field8;
+  final field dynamic field9;
+  final field dynamic field10;
+  final field dynamic field11;
+  final field dynamic field15;
+  const constructor •(dynamic o) → self2::Class<self2::Class::T%>
+    : self2::Class::field1 = #C1, self2::Class::field5 = #C2, self2::Class::field6 = #C3, self2::Class::field7 = #C4, self2::Class::field8 = o is{ForNonNullableByDefault} self2::Class::T%, self2::Class::field9 = o is{ForNonNullableByDefault} self2::Class<self2::Class::T%>, self2::Class::field10 = o as{ForNonNullableByDefault} self2::Class::T%, self2::Class::field11 = o{self2::Class::T%} as{ForNonNullableByDefault} self2::Class<self2::Class::T%>, self2::Class::field15 = #C19, super core::Object::•()
+    ;
+  method method() → void {
+    core::print(#C1);
+    core::print(#C2);
+    core::print(#C3);
+    core::print(#C4);
+    core::print(#C6);
+    core::print(#C7);
+    core::print(#C8);
+    core::print(#C8);
+    core::print(#C19);
+    core::print(#C20);
+    core::print(#C10);
+    core::print(#C11);
+    core::print(#C12);
+    core::print(#C13);
+    core::print(#C14);
+    core::print(#C15);
+    core::print(#C21);
+    core::print(#C22);
+    core::print(#C23);
+  }
+}
+static method id<T extends core::Object? = dynamic>(self2::id::T% t) → self2::id::T%
+  return t;
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:34:21: Error: Constant expression expected.
+// Try inserting 'const'.
+//         field5 = <T>[],
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:34:19: Error: Type variables can't be used as constants.
+//         field5 = <T>[],
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:35:21: Error: Constant expression expected.
+// Try inserting 'const'.
+//         field6 = <T>{},
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:35:19: Error: Type variables can't be used as constants.
+//         field6 = <T>{},
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:36:24: Error: Constant expression expected.
+// Try inserting 'const'.
+//         field7 = <T, T>{},
+//                        ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:36:19: Error: Type variables can't be used as constants.
+//         field7 = <T, T>{},
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:36:22: Error: Type variables can't be used as constants.
+//         field7 = <T, T>{},
+//                      ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:44:29: Error: Constant expression expected.
+// Try inserting 'const'.
+//         field15 = <Class<T>>[],
+//                             ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:44:26: Error: Type variables can't be used as constants.
+//         field15 = <Class<T>>[],
+//                          ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:51:20: Error: Type variables can't be used as constants.
+//     const local1 = T;
+//                    ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:52:26: Error: Type variables can't be used as constants.
+//     const local2 = Class<T>;
+//                          ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:53:23: Error: Type variables can't be used as constants.
+//     const local3 = id<T>;
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:54:25: Error: Type variables can't be used as constants.
+//     const local4 = (id)<T>;
+//                         ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:55:21: Error: Type variables can't be used as constants.
+//     const local5 = <T>[];
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:56:21: Error: Type variables can't be used as constants.
+//     const local6 = <T>{};
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:57:21: Error: Type variables can't be used as constants.
+//     const local7 = <T, T>{};
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:57:24: Error: Type variables can't be used as constants.
+//     const local7 = <T, T>{};
+//                        ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:58:25: Error: Type variables can't be used as constants.
+//     const local8 = o is T;
+//                         ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:59:31: Error: Type variables can't be used as constants.
+//     const local9 = o is Class<T>;
+//                               ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:60:26: Error: Type variables can't be used as constants.
+//     const local10 = o as T;
+//                          ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:61:32: Error: Type variables can't be used as constants.
+//     const local11 = o as Class<T>;
+//                                ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:62:27: Error: Type variables can't be used as constants.
+//     const local12 = Class<T>.new;
+//                           ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:63:23: Error: Type variables can't be used as constants.
+//     const local13 = F<T, T>.new;
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:63:26: Error: Type variables can't be used as constants.
+//     const local13 = F<T, T>.new;
+//                          ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:64:30: Error: Type variables can't be used as constants.
+//     const local14 = id<Class<T>>;
+//                              ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:65:28: Error: Type variables can't be used as constants.
+//     const local15 = <Class<T>>[];
+//                            ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:66:23: Error: Type variables can't be used as constants.
+//     const local16 = G<T>.new;
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:88:18: Error: Type variables can't be used as constants.
+//     print(const [T]);
+//                  ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:89:24: Error: Type variables can't be used as constants.
+//     print(const [Class<T>]);
+//                        ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:90:21: Error: Type variables can't be used as constants.
+//     print(const [id<T>]);
+//                     ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:91:23: Error: Type variables can't be used as constants.
+//     print(const [(id)<T>]);
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:92:19: Error: Type variables can't be used as constants.
+//     print(const [<T>[]]);
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:93:19: Error: Type variables can't be used as constants.
+//     print(const [<T>{}]);
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:94:19: Error: Type variables can't be used as constants.
+//     print(const [<T, T>{}]);
+//                   ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:94:22: Error: Type variables can't be used as constants.
+//     print(const [<T, T>{}]);
+//                      ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:95:23: Error: Type variables can't be used as constants.
+//     print(const [o is T]);
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:96:29: Error: Type variables can't be used as constants.
+//     print(const [o is Class<T>]);
+//                             ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:97:23: Error: Type variables can't be used as constants.
+//     print(const [o as T]);
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:98:29: Error: Type variables can't be used as constants.
+//     print(const [o as Class<T>]);
+//                             ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:99:24: Error: Type variables can't be used as constants.
+//     print(const [Class<T>.new]);
+//                        ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:100:20: Error: Type variables can't be used as constants.
+//     print(const [F<T, T>.new]);
+//                    ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:100:23: Error: Type variables can't be used as constants.
+//     print(const [F<T, T>.new]);
+//                       ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:101:27: Error: Type variables can't be used as constants.
+//     print(const [id<Class<T>>]);
+//                           ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:102:25: Error: Type variables can't be used as constants.
+//     print(const [<Class<T>>[]]);
+//                         ^
+//
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:103:20: Error: Type variables can't be used as constants.
+//     print(const [G<T>.new]);
+//                    ^
+//
+import self as self3;
+import "dart:core" as core;
+
+typedef F<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic> = self3::Class<X%>;
+typedef G<unrelated X extends core::Object? = dynamic> = self3::Class<core::int>;
+class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field dynamic field1;
+  final field dynamic field2;
+  final field dynamic field3;
+  final field dynamic field4;
+  final field dynamic field5;
+  final field dynamic field6;
+  final field dynamic field7;
+  final field dynamic field8;
+  final field dynamic field9;
+  final field dynamic field10;
+  final field dynamic field11;
+  final field dynamic field12;
+  final field dynamic field13;
+  final field dynamic field14;
+  final field dynamic field15;
+  final field dynamic field16;
+  const constructor •(dynamic o) → self3::Class<self3::Class::T%>
+    : self3::Class::field1 = self3::Class::T%, self3::Class::field2 = self3::Class<self3::Class::T%>, self3::Class::field3 = #C24<self3::Class::T%>, self3::Class::field4 = #C24<self3::Class::T%>, self3::Class::field5 = #C2, self3::Class::field6 = #C3, self3::Class::field7 = #C4, self3::Class::field8 = o is{ForNonNullableByDefault} self3::Class::T%, self3::Class::field9 = o is{ForNonNullableByDefault} self3::Class<self3::Class::T%>, self3::Class::field10 = o as{ForNonNullableByDefault} self3::Class::T%, self3::Class::field11 = o{self3::Class::T%} as{ForNonNullableByDefault} self3::Class<self3::Class::T%>, self3::Class::field12 = #C25<self3::Class::T%>, self3::Class::field13 = #C25<self3::Class::T%>, self3::Class::field14 = #C24<self3::Class<self3::Class::T%>>, self3::Class::field15 = #C26, self3::Class::field16 = #C27, super core::Object::•()
+    ;
+  method method() → void {
+    core::print(#C1);
+    core::print(#C28);
+    core::print(#C29);
+    core::print(#C29);
+    core::print(#C2);
+    core::print(#C3);
+    core::print(#C4);
+    core::print(#C6);
+    core::print(#C7);
+    core::print(#C8);
+    core::print(#C8);
+    core::print(#C30);
+    core::print(#C30);
+    core::print(#C31);
+    core::print(#C26);
+    core::print(#C27);
+    core::print(#C20);
+    core::print(#C10);
+    core::print(#C32);
+    core::print(#C33);
+    core::print(#C33);
+    core::print(#C11);
+    core::print(#C12);
+    core::print(#C13);
+    core::print(#C14);
+    core::print(#C15);
+    core::print(#C21);
+    core::print(#C34);
+    core::print(#C35);
+    core::print(#C35);
+    core::print(#C36);
+    core::print(#C37);
+    core::print(#C38);
+  }
+}
+static method id<T extends core::Object? = dynamic>(self3::id::T% t) → self3::id::T%
+  return t;
+static method main() → dynamic {}
+static method _#F#new#tearOff<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic>(dynamic o) → self3::Class<self3::_#F#new#tearOff::X%>
+  return new self3::Class::•<self3::_#F#new#tearOff::X%>(o);
+static method _#G#new#tearOff<unrelated X extends core::Object? = dynamic>(dynamic o) → self3::Class<core::int>
+  return new self3::Class::•<core::int>(o);
+
+constants  {
+  #C1 = TypeLiteralConstant(invalid-type)
+  #C2 = <invalid-type>[]
+  #C3 = <invalid-type>{}
+  #C4 = <invalid-type, invalid-type>{)
+  #C5 = <self::Class<invalid-type>*>[]
+  #C6 = true
+  #C7 = false
+  #C8 = null
+  #C9 = <Null>[]
+  #C10 = <core::Type*>[#C1]
+  #C11 = <core::List<invalid-type>*>[#C2]
+  #C12 = <core::Set<invalid-type>*>[#C3]
+  #C13 = <core::Map<invalid-type, invalid-type>*>[#C4]
+  #C14 = <core::bool*>[#C6]
+  #C15 = <core::bool*>[#C7]
+  #C16 = <invalid-type>[#C8]
+  #C17 = <self::Class<invalid-type>*>[#C8]
+  #C18 = <core::List<self::Class<invalid-type>*>*>[#C5]
+  #C19 = <self2::Class<invalid-type>*>[]
+  #C20 = <Never*>[]
+  #C21 = <dynamic>[#C8]
+  #C22 = <self2::Class<invalid-type>*>[#C8]
+  #C23 = <core::List<self2::Class<invalid-type>*>*>[#C19]
+  #C24 = static-tearoff self3::id
+  #C25 = constructor-tearoff self3::Class::•
+  #C26 = <self3::Class<invalid-type>*>[]
+  #C27 = instantiation #C25 <core::int*>
+  #C28 = TypeLiteralConstant(self3::Class<invalid-type>*)
+  #C29 = instantiation #C24 <invalid-type>
+  #C30 = instantiation #C25 <invalid-type>
+  #C31 = instantiation #C24 <self3::Class<invalid-type>*>
+  #C32 = <core::Type*>[#C28]
+  #C33 = <(invalid-type) →* invalid-type>[#C29]
+  #C34 = <self3::Class<invalid-type>*>[#C8]
+  #C35 = <(dynamic) →* self3::Class<invalid-type>*>[#C30]
+  #C36 = <(self3::Class<invalid-type>*) →* self3::Class<invalid-type>*>[#C31]
+  #C37 = <core::List<self3::Class<invalid-type>*>*>[#C26]
+  #C38 = <(dynamic) →* self3::Class<core::int*>*>[#C27]
+}
diff --git a/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.modular.expect
new file mode 100644
index 0000000..f3b74df
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/rudimentary_test_01.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static const field core::int* foo = #C1;
+static const field core::String* bar = #C2;
+static const field core::String* bar2 = #C3;
+static const field core::bool* baz = #C4;
+static const field core::Symbol* blaSymbol = #C5;
+static method main() → dynamic {
+  self::_x();
+  #C6;
+  core::print(#C2);
+}
+static method _x() → void {
+  core::print(#C1);
+  core::print(#C2);
+}
+
+constants  {
+  #C1 = 1764
+  #C2 = "hello 42!"
+  #C3 = "hello2 2hello 42!"
+  #C4 = true
+  #C5 = #org-dartlang-testcase:///rudimentary_test_01.dart::_x
+  #C6 = false
+}
diff --git a/pkg/front_end/testcases/general/constants/various.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/various.dart.weak.modular.expect
new file mode 100644
index 0000000..9fa5cbe
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/various.dart.weak.modular.expect
@@ -0,0 +1,644 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/various.dart:162:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const ClassWithNonEmptyConstConstructor() {
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/constants/various.dart:76:14: Error: Not a constant expression.
+// const x1 = --x;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:77:14: Error: Not a constant expression.
+// const x2 = ++x;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:78:12: Error: Not a constant expression.
+// const x3 = x--;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:79:12: Error: Not a constant expression.
+// const x4 = x++;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
+// const y1 = --y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
+// const y2 = ++y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:84:12: Error: Setter not found: 'y'.
+// const y3 = y--;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:85:12: Error: Setter not found: 'y'.
+// const y4 = y++;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:140:24: Error: Not a constant expression.
+// const function_const = () {};
+//                        ^^
+//
+// pkg/front_end/testcases/general/constants/various.dart:180:14: Error: Can't access 'this' in a field initializer to read 'y'.
+//   final z1 = y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: The class 'AbstractClass' is abstract and can't be instantiated.
+//   @AbstractClass()
+//    ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   @AbstractClass()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
+//   @AbstractClassWithConstructor()
+//    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   @AbstractClassWithConstructor()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+// const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
+//                                       ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+//   const ExtendsFoo2();
+//         ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various.dart:180:14: Error: Not a constant expression.
+//   final z1 = y;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:181:14: Error: Not a constant expression.
+//   final z2 = x;
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:96:11: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
+//     const AbstractClassWithConstructor();
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various.dart:96:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//     const AbstractClassWithConstructor();
+//           ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:168:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//     const ClassWithNonEmptyConstConstructor();
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/constants/various.dart:114:7: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+// class ExtendsFoo1 extends Foo {
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: Not a constant expression.
+//   @AbstractClass()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: Not a constant expression.
+//   @AbstractClassWithConstructor()
+//    ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:10:34: Error: Constant evaluation error:
+// const bool notBarFromEnvOrNull = !barFromEnvOrNull;
+//                                  ^
+// pkg/front_end/testcases/general/constants/various.dart:10:34: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
+// const bool notBarFromEnvOrNull = !barFromEnvOrNull;
+//                                  ^
+// pkg/front_end/testcases/general/constants/various.dart:10:12: Context: While analyzing:
+// const bool notBarFromEnvOrNull = !barFromEnvOrNull;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:11:49: Error: Constant evaluation error:
+// const bool conditionalOnNull = barFromEnvOrNull ? true : false;
+//                                                 ^
+// pkg/front_end/testcases/general/constants/various.dart:11:32: Context: Expected constant 'null' to be of type 'bool', but was of type 'Null'.
+// const bool conditionalOnNull = barFromEnvOrNull ? true : false;
+//                                ^
+// pkg/front_end/testcases/general/constants/various.dart:11:12: Context: While analyzing:
+// const bool conditionalOnNull = barFromEnvOrNull ? true : false;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:16:41: Error: Constant evaluation error:
+// const bool andOnNull = barFromEnvOrNull && true;
+//                                         ^
+// pkg/front_end/testcases/general/constants/various.dart:16:41: Context: The method '&&' can't be invoked on 'null' in a constant expression.
+// const bool andOnNull = barFromEnvOrNull && true;
+//                                         ^
+// pkg/front_end/testcases/general/constants/various.dart:16:12: Context: While analyzing:
+// const bool andOnNull = barFromEnvOrNull && true;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:17:30: Error: Constant evaluation error:
+// const bool andOnNull2 = true && barFromEnvOrNull;
+//                              ^
+// pkg/front_end/testcases/general/constants/various.dart:17:30: Context: Binary operator '&&' on 'true' requires operand of type 'bool', but was of type 'Null'.
+// const bool andOnNull2 = true && barFromEnvOrNull;
+//                              ^
+// pkg/front_end/testcases/general/constants/various.dart:17:12: Context: While analyzing:
+// const bool andOnNull2 = true && barFromEnvOrNull;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:18:40: Error: Constant evaluation error:
+// const bool orOnNull = barFromEnvOrNull || true;
+//                                        ^
+// pkg/front_end/testcases/general/constants/various.dart:18:40: Context: The method '||' can't be invoked on 'null' in a constant expression.
+// const bool orOnNull = barFromEnvOrNull || true;
+//                                        ^
+// pkg/front_end/testcases/general/constants/various.dart:18:12: Context: While analyzing:
+// const bool orOnNull = barFromEnvOrNull || true;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:19:41: Error: Constant evaluation error:
+// const bool orOnNull2 = barFromEnvOrNull || false;
+//                                         ^
+// pkg/front_end/testcases/general/constants/various.dart:19:41: Context: The method '||' can't be invoked on 'null' in a constant expression.
+// const bool orOnNull2 = barFromEnvOrNull || false;
+//                                         ^
+// pkg/front_end/testcases/general/constants/various.dart:19:12: Context: While analyzing:
+// const bool orOnNull2 = barFromEnvOrNull || false;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:21:30: Error: Constant evaluation error:
+// const bool orOnNull4 = false || barFromEnvOrNull;
+//                              ^
+// pkg/front_end/testcases/general/constants/various.dart:21:30: Context: Binary operator '||' on 'false' requires operand of type 'bool', but was of type 'Null'.
+// const bool orOnNull4 = false || barFromEnvOrNull;
+//                              ^
+// pkg/front_end/testcases/general/constants/various.dart:21:12: Context: While analyzing:
+// const bool orOnNull4 = false || barFromEnvOrNull;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:29:11: Error: Constant evaluation error:
+//     const String.fromEnvironment(barFromEnvOrNullString);
+//           ^
+// pkg/front_end/testcases/general/constants/various.dart:29:11: Context: Null value during constant evaluation.
+//     const String.fromEnvironment(barFromEnvOrNullString);
+//           ^
+// pkg/front_end/testcases/general/constants/various.dart:28:14: Context: While analyzing:
+// const String nullFromEnvString =
+//              ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:36:36: Error: Constant evaluation error:
+// const bool nullFromEnvBool = const bool.fromEnvironment(barFromEnvOrNullString);
+//                                    ^
+// pkg/front_end/testcases/general/constants/various.dart:36:36: Context: Null value during constant evaluation.
+// const bool nullFromEnvBool = const bool.fromEnvironment(barFromEnvOrNullString);
+//                                    ^
+// pkg/front_end/testcases/general/constants/various.dart:36:12: Context: While analyzing:
+// const bool nullFromEnvBool = const bool.fromEnvironment(barFromEnvOrNullString);
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:43:34: Error: Constant evaluation error:
+// const int nullFromEnvInt = const int.fromEnvironment(barFromEnvOrNullString);
+//                                  ^
+// pkg/front_end/testcases/general/constants/various.dart:43:34: Context: Null value during constant evaluation.
+// const int nullFromEnvInt = const int.fromEnvironment(barFromEnvOrNullString);
+//                                  ^
+// pkg/front_end/testcases/general/constants/various.dart:43:11: Context: While analyzing:
+// const int nullFromEnvInt = const int.fromEnvironment(barFromEnvOrNullString);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:64:37: Error: Constant evaluation error:
+// const binaryOnDouble = willBeDouble << 2;
+//                                     ^
+// pkg/front_end/testcases/general/constants/various.dart:64:37: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
+// const binaryOnDouble = willBeDouble << 2;
+//                                     ^
+// pkg/front_end/testcases/general/constants/various.dart:64:7: Context: While analyzing:
+// const binaryOnDouble = willBeDouble << 2;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:66:44: Error: Constant evaluation error:
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various.dart:66:44: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various.dart:66:7: Context: While analyzing:
+// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:68:41: Error: Constant evaluation error:
+// const binaryOnIntWithString = willBeInt << "hello";
+//                                         ^
+// pkg/front_end/testcases/general/constants/various.dart:68:41: Context: Binary operator '<<' on '42' requires operand of type 'num', but was of type 'String'.
+// const binaryOnIntWithString = willBeInt << "hello";
+//                                         ^
+// pkg/front_end/testcases/general/constants/various.dart:68:7: Context: While analyzing:
+// const binaryOnIntWithString = willBeInt << "hello";
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:72:44: Error: Constant evaluation error:
+// const binaryOnStringWithInt = willBeString + willBeInt;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various.dart:72:44: Context: Binary operator '+' on '"hello"' requires operand of type 'String', but was of type 'int'.
+// const binaryOnStringWithInt = willBeString + willBeInt;
+//                                            ^
+// pkg/front_end/testcases/general/constants/various.dart:72:7: Context: While analyzing:
+// const binaryOnStringWithInt = willBeString + willBeInt;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:73:50: Error: Constant evaluation error:
+// const binaryOnStringWithStringBad = willBeString - " world";
+//                                                  ^
+// pkg/front_end/testcases/general/constants/various.dart:73:50: Context: The method '-' can't be invoked on '"hello"' in a constant expression.
+// const binaryOnStringWithStringBad = willBeString - " world";
+//                                                  ^
+// pkg/front_end/testcases/general/constants/various.dart:73:7: Context: While analyzing:
+// const binaryOnStringWithStringBad = willBeString - " world";
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:78:13: Error: Constant evaluation error:
+// const x3 = x--;
+//             ^
+// pkg/front_end/testcases/general/constants/various.dart:78:12: Context: The invocation of 'x' is not allowed in a constant expression.
+// const x3 = x--;
+//            ^
+// pkg/front_end/testcases/general/constants/various.dart:78:7: Context: While analyzing:
+// const x3 = x--;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:79:13: Error: Constant evaluation error:
+// const x4 = x++;
+//             ^
+// pkg/front_end/testcases/general/constants/various.dart:79:12: Context: The invocation of 'x' is not allowed in a constant expression.
+// const x4 = x++;
+//            ^
+// pkg/front_end/testcases/general/constants/various.dart:79:7: Context: While analyzing:
+// const x4 = x++;
+//       ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:129:29: Error: Constant evaluation error:
+// const bool foosEqual = foo1 == foo2;
+//                             ^
+// pkg/front_end/testcases/general/constants/various.dart:129:29: Context: Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/constants/various.dart'.
+// const bool foosEqual = foo1 == foo2;
+//                             ^
+// pkg/front_end/testcases/general/constants/various.dart:129:12: Context: While analyzing:
+// const bool foosEqual = foo1 == foo2;
+//            ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:135:26: Error: Constant evaluation error:
+// const int circularity1 = circularity2;
+//                          ^
+// pkg/front_end/testcases/general/constants/various.dart:135:26: Context: Constant expression depends on itself.
+// const int circularity1 = circularity2;
+//                          ^
+// pkg/front_end/testcases/general/constants/various.dart:135:11: Context: While analyzing:
+// const int circularity1 = circularity2;
+//           ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:148:11: Error: Constant evaluation error:
+//     const ConstClassWithFailingAssertWithEmptyMessage();
+//           ^
+// pkg/front_end/testcases/general/constants/various.dart:144:64: Context: This assertion failed with message: (empty)
+//   const ConstClassWithFailingAssertWithEmptyMessage() : assert(false, "");
+//                                                                ^
+//
+// pkg/front_end/testcases/general/constants/various.dart:185:11: Error: Constant evaluation error:
+//     const ConstClassWithFinalFields2();
+//           ^
+// pkg/front_end/testcases/general/constants/various.dart:181:14: Context: The invocation of 'x' is not allowed in a constant expression.
+//   final z2 = x;
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class AbstractClass extends core::Object {
+  synthetic constructor •() → self::AbstractClass*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class AbstractClassWithConstructor extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::AbstractClassWithConstructor*
+    : super core::Object::•()
+    ;
+  abstract method foo() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class NotAbstractClass extends core::Object {
+  @invalid-expression "Not a constant expression."
+  field core::Object* foo = null;
+  @invalid-expression "Not a constant expression."
+  field core::Object* bar = null;
+  synthetic constructor •() → self::NotAbstractClass*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Foo extends core::Object /*hasConstConstructor*/  {
+  final field core::int* x;
+  final field core::int* y;
+  const constructor •(core::int* x) → self::Foo*
+    : self::Foo::x = x, self::Foo::y = "hello".{core::String::length}{core::int*}, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class ExtendsFoo1 extends self::Foo {
+  synthetic constructor •() → self::ExtendsFoo1*
+    : invalid-initializer
+    ;
+}
+class ExtendsFoo2 extends self::Foo /*hasConstConstructor*/  {
+  const constructor •() → self::ExtendsFoo2*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+  const ExtendsFoo2();
+        ^^^^^^^^^^^"
+    ;
+}
+class ConstClassWithFailingAssertWithEmptyMessage extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::ConstClassWithFailingAssertWithEmptyMessage*
+    : assert(false, ""), super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class ClassWithTypeArguments<E extends core::Object* = dynamic, F extends core::Object* = dynamic, G extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •(self::ClassWithTypeArguments::E* e, self::ClassWithTypeArguments::F* f, self::ClassWithTypeArguments::G* g) → self::ClassWithTypeArguments<self::ClassWithTypeArguments::E*, self::ClassWithTypeArguments::F*, self::ClassWithTypeArguments::G*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class ClassWithNonEmptyConstConstructor extends core::Object {
+  constructor •() → self::ClassWithNonEmptyConstConstructor*
+    : super core::Object::•() {
+    core::print("hello");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class ConstClassWithFinalFields1 extends core::Object /*hasConstConstructor*/  {
+  final field core::int* x = 1;
+  const constructor •() → self::ConstClassWithFinalFields1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class ConstClassWithFinalFields2 extends core::Object /*hasConstConstructor*/  {
+  final field core::int* y = 1;
+  final field invalid-type z1 = this.{self::ConstClassWithFinalFields2::y}{core::int*};
+  final field core::int* z2 = self::x;
+  const constructor •() → self::ConstClassWithFinalFields2*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field core::bool* barFromEnv = #C1;
+static const field core::bool* hasBarEnv = #C1;
+static const field core::bool* barFromEnvOrNull = #C2;
+static const field core::bool* notBarFromEnvOrNull = invalid-expression "Expected constant 'null' to be of type 'bool', but was of type 'Null'.";
+static const field core::bool* conditionalOnNull = invalid-expression "Expected constant 'null' to be of type 'bool', but was of type 'Null'.";
+static const field core::bool* nullAwareOnNullTrue = #C3;
+static const field core::bool* nullAwareOnNullFalse = #C1;
+static const field core::bool* andOnFalse = #C1;
+static const field core::bool* andOnFalse2 = #C1;
+static const field core::bool* andOnNull = invalid-expression "The method '&&' can't be invoked on 'null' in a constant expression.";
+static const field core::bool* andOnNull2 = invalid-expression "Binary operator '&&' on 'true' requires operand of type 'bool', but was of type 'Null'.";
+static const field core::bool* orOnNull = invalid-expression "The method '||' can't be invoked on 'null' in a constant expression.";
+static const field core::bool* orOnNull2 = invalid-expression "The method '||' can't be invoked on 'null' in a constant expression.";
+static const field core::bool* orOnNull3 = #C3;
+static const field core::bool* orOnNull4 = invalid-expression "Binary operator '||' on 'false' requires operand of type 'bool', but was of type 'Null'.";
+static const field core::String* barFromEnvString = #C4;
+static const field core::String* barFromEnvOrNullString = #C2;
+static const field core::String* barFromEnvOrActualString = #C5;
+static const field core::String* nullFromEnvString = invalid-expression "Null value during constant evaluation.";
+static const field core::bool* barFromEnvBool = #C1;
+static const field core::bool* barFromEnvOrNullBool = #C2;
+static const field core::bool* barFromEnvOrActualBool = #C3;
+static const field core::bool* nullFromEnvBool = invalid-expression "Null value during constant evaluation.";
+static const field core::int* barFromEnvInt = #C6;
+static const field core::int* barFromEnvOrNullInt = #C2;
+static const field core::int* barFromEnvOrActualInt = #C7;
+static const field core::int* nullFromEnvInt = invalid-expression "Null value during constant evaluation.";
+static const field core::bool* bazFromEnv = #C1;
+static const field core::bool* hasBazEnv = #C3;
+static const field core::int* bazFromEnvAsInt = #C7;
+static const field core::String* bazFromEnvAsString = #C8;
+static const field core::bool* bazTrueFromEnv = #C3;
+static const field core::bool* bazFalseFromEnv = #C1;
+static const field core::bool* trueBool = #C3;
+static const field core::bool* falseBool = #C1;
+static const field core::bool* binaryOnBoolCaret = #C3;
+static const field core::bool* binaryOnBoolAmpersand = #C1;
+static const field core::bool* binaryOnBoolBar = #C3;
+static const field core::bool* binaryOnBoolBar2 = #C3;
+static const field dynamic willBeDouble = #C9;
+static const field dynamic binaryOnDouble = invalid-expression "Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.";
+static const field dynamic willBeInt = #C7;
+static const field dynamic binaryOnIntWithDoubleBad = invalid-expression "Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.";
+static const field dynamic binaryOnIntWithDoubleOK = #C10;
+static const field dynamic binaryOnIntWithString = invalid-expression "Binary operator '<<' on '42' requires operand of type 'num', but was of type 'String'.";
+static const field dynamic willBeString = #C5;
+static const field dynamic binaryOnStringWithStringOK = #C11;
+static const field dynamic binaryOnStringWithInt = invalid-expression "Binary operator '+' on '\"hello\"' requires operand of type 'String', but was of type 'int'.";
+static const field dynamic binaryOnStringWithStringBad = invalid-expression "The method '-' can't be invoked on '\"hello\"' in a constant expression.";
+static field core::int* x = 1;
+static const field core::int* x1 = invalid-expression "Not a constant expression.";
+static const field core::int* x2 = invalid-expression "Not a constant expression.";
+static const field core::int* x3 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
+static const field core::int* x4 = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
+static const field core::int* y = #C12;
+static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
+const y1 = --y;
+             ^";
+static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
+const y2 = ++y;
+             ^";
+static const field core::int* y3 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:84:12: Error: Setter not found: 'y'.
+const y3 = y--;
+           ^";
+static const field core::int* y4 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:85:12: Error: Setter not found: 'y'.
+const y4 = y++;
+           ^";
+static field self::AbstractClassWithConstructor* abstractClassWithConstructor = throw invalid-expression "pkg/front_end/testcases/general/constants/various.dart:96:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+    const AbstractClassWithConstructor();
+          ^";
+static const field self::ExtendsFoo1* extendsFoo1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:118:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
+                                      ^^^^^^^^^^^";
+static const field self::ExtendsFoo2* extendsFoo2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:121:9: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+  const ExtendsFoo2();
+        ^^^^^^^^^^^";
+static const field self::Foo* foo1 = #C14;
+static const field self::Foo* foo2 = #C14;
+static const field core::bool* foosIdentical = #C3;
+static const field core::bool* foosEqual = invalid-expression "Binary operator '==' requires receiver constant 'Foo {x: 42, y: 5}' of type 'Null', 'bool', 'int', 'double', or 'String', but was of type 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/constants/various.dart'.";
+static const field core::Symbol* barFoo = #C15;
+static const field core::Symbol* barFooEqual = #C16;
+static const field core::Symbol* tripleShiftSymbol = #C17;
+static const field core::Symbol* symbolWithDots = #C18;
+static const field core::int* circularity1 = invalid-expression "Constant expression depends on itself.";
+static const field core::int* circularity2 = invalid-expression "Constant expression depends on itself.";
+static const field core::int* circularity3 = invalid-expression "Constant expression depends on itself.";
+static const field core::int* circularity4 = invalid-expression "Constant expression depends on itself.";
+static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:140:24: Error: Not a constant expression.
+const function_const = () {};
+                       ^^";
+static field () →* Null function_var = () → Null {};
+static field self::ConstClassWithFailingAssertWithEmptyMessage* failedAssertEmptyMessage = invalid-expression "This assertion failed with message: (empty)";
+static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic>* classWithTypeArguments1 = #C19;
+static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic>* classWithTypeArguments2 = #C20;
+static const field core::bool* classWithTypeArgumentsIdentical = #C1;
+static field self::ClassWithNonEmptyConstConstructor* classWithNonEmptyConstConstructor = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:168:11: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+    const ClassWithNonEmptyConstConstructor();
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+static field self::ConstClassWithFinalFields2* constClassWithFinalFields = invalid-expression "The invocation of 'x' is not allowed in a constant expression.";
+static const field core::bool* zeroPointZeroIdentical = #C3;
+static const field core::bool* zeroPointZeroIdenticalToZero = #C1;
+static const field core::bool* zeroIdenticalToZeroPointZero = #C1;
+static const field core::bool* nanIdentical = #C3;
+static const field core::bool* zeroPointZeroEqual = #C3;
+static const field core::bool* zeroPointZeroEqualToZero = #C3;
+static const field core::bool* zeroEqualToZeroPointZero = #C3;
+static const field core::bool* nanEqual = #C1;
+static const field dynamic willBecomeNull = #C2;
+static const field (core::int*) →* core::int* willBecomeNullToo = #C2;
+static const field (core::int*) →* core::int* partialInstantiation = #C22;
+static const field core::bool* yBool = #C3;
+static const field core::bool* zBool = #C1;
+static const field core::Object* maybeInt = #C3;
+static const field core::bool* isItInt = #C1;
+static const field core::Object* maybeInt2 = #C3;
+static const field core::bool* isItInt2 = #C1;
+static const field core::int* maybeInt3 = #C2;
+static const field core::bool* isItInt3 = #C1;
+static method id1<T extends core::Object* = dynamic>(self::id1::T* t) → self::id1::T*
+  return t;
+static method id2<T extends core::Object* = dynamic>(self::id2::T* t) → self::id2::T*
+  return t;
+static method main() → dynamic {
+  core::print(#C1);
+  core::print(#C1);
+}
+
+constants  {
+  #C1 = false
+  #C2 = null
+  #C3 = true
+  #C4 = ""
+  #C5 = "hello"
+  #C6 = 0
+  #C7 = 42
+  #C8 = "42"
+  #C9 = 42.42
+  #C10 = 84.42
+  #C11 = "hello world"
+  #C12 = 1
+  #C13 = 5
+  #C14 = self::Foo {x:#C7, y:#C13}
+  #C15 = #Foo
+  #C16 = #Foo=
+  #C17 = #>>>
+  #C18 = #I.Have.Dots
+  #C19 = self::ClassWithTypeArguments<core::int*, core::int*, core::int*> {}
+  #C20 = self::ClassWithTypeArguments<dynamic, dynamic, dynamic> {}
+  #C21 = static-tearoff self::id1
+  #C22 = instantiation #C21 <core::int*>
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///various.dart:
+- ExtendsFoo2. (from org-dartlang-testcase:///various.dart:121:9)
+- Foo. (from org-dartlang-testcase:///various.dart:109:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- ConstClassWithFailingAssertWithEmptyMessage. (from org-dartlang-testcase:///various.dart:144:9)
+- ClassWithTypeArguments. (from org-dartlang-testcase:///various.dart:151:9)
+- ConstClassWithFinalFields2. (from org-dartlang-testcase:///various.dart:177:9)
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart.weak.modular.expect
new file mode 100644
index 0000000..9f6cb29
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart.weak.modular.expect
@@ -0,0 +1,137 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:16:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   const Foo.withInvalidCondition(this.x) : assert(x);
+//                                                   ^
+//
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:26:24: Error: Constant evaluation error:
+// const Foo foo2 = const Foo(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:8:18: Context: This assertion failed with message: x is not positive
+//       : assert(x > 0, "x is not positive"),
+//                  ^
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:26:11: Context: While analyzing:
+// const Foo foo2 = const Foo(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:28:24: Error: Constant evaluation error:
+// const Foo foo4 = const Foo.withInvalidMessage(42);
+//                        ^
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:15:56: Context: Expected constant '42' to be of type 'String', but was of type 'int'.
+//   const Foo.withInvalidMessage(this.x) : assert(x < 0, x);
+//                                                        ^
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:28:11: Context: While analyzing:
+// const Foo foo4 = const Foo.withInvalidMessage(42);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:30:24: Error: Constant evaluation error:
+// const Bar bar1 = const Bar.withMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:21:44: Context: This assertion failed with message: x is not negative
+//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+//                                            ^
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:30:11: Context: While analyzing:
+// const Bar bar1 = const Bar.withMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:31:24: Error: Constant evaluation error:
+// const Bar bar2 = const Bar.withMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:21:44: Context: This assertion failed with message: x is not negative
+//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
+//                                            ^
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:31:11: Context: While analyzing:
+// const Bar bar2 = const Bar.withMessage(0);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:32:24: Error: Constant evaluation error:
+// const Bar bar3 = const Bar.withoutMessage(1);
+//                        ^
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:22:47: Context: This assertion failed.
+//   const Bar.withoutMessage(this.x) : assert(x < 0);
+//                                               ^
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:32:11: Context: While analyzing:
+// const Bar bar3 = const Bar.withoutMessage(1);
+//           ^
+//
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:33:24: Error: Constant evaluation error:
+// const Bar bar4 = const Bar.withoutMessage(0);
+//                        ^
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:22:47: Context: This assertion failed.
+//   const Bar.withoutMessage(this.x) : assert(x < 0);
+//                                               ^
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:33:11: Context: While analyzing:
+// const Bar bar4 = const Bar.withoutMessage(0);
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor •(core::int x) → self::Foo
+    : self::Foo::x = x, assert(x.{core::num::>}(0){(core::num) → core::bool}, "x is not positive"), assert(x.{core::num::>}(0){(core::num) → core::bool}), assert(#C2 =={core::Object::==}{(core::Object) → core::bool} false, "foo was ${#C3}"), assert(#C4 =={core::Object::==}{(core::Object) → core::bool} false), super core::Object::•()
+    ;
+  const constructor withMessage(core::int x) → self::Foo
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, "btw foo was ${#C5}"), super core::Object::•()
+    ;
+  const constructor withInvalidMessage(core::int x) → self::Foo
+    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, x), super core::Object::•()
+    ;
+  const constructor withInvalidCondition(core::int x) → self::Foo
+    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:16:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  const Foo.withInvalidCondition(this.x) : assert(x);
+                                                  ^" in x as{TypeError,ForNonNullableByDefault} core::bool), super core::Object::•()
+    ;
+}
+class Bar extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor withMessage(core::int x) → self::Bar
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, "x is not negative"), super core::Object::•()
+    ;
+  const constructor withoutMessage(core::int x) → self::Bar
+    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}), super core::Object::•()
+    ;
+}
+static const field self::Foo foo1 = #C9;
+static const field self::Foo foo2 = invalid-expression "This assertion failed with message: x is not positive";
+static const field self::Foo foo3 = #C12;
+static const field self::Foo foo4 = invalid-expression "Expected constant '42' to be of type 'String', but was of type 'int'.";
+static const field self::Foo foo5 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:16:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  const Foo.withInvalidCondition(this.x) : assert(x);
+                                                  ^";
+static const field self::Bar bar1 = invalid-expression "This assertion failed with message: x is not negative";
+static const field self::Bar bar2 = invalid-expression "This assertion failed with message: x is not negative";
+static const field self::Bar bar3 = invalid-expression "This assertion failed.";
+static const field self::Bar bar4 = invalid-expression "This assertion failed.";
+static method main() → dynamic {
+  core::print(#C9);
+}
+
+constants  {
+  #C1 = "foo"
+  #C2 = eval const core::bool::fromEnvironment(#C1)
+  #C3 = eval const core::bool::fromEnvironment(#C1)
+  #C4 = eval const core::bool::fromEnvironment(#C1)
+  #C5 = eval const core::bool::fromEnvironment(#C1)
+  #C6 = 1
+  #C7 = false
+  #C8 = "foo was "
+  #C9 = eval self::Foo{x:#C6, assert(const core::bool::fromEnvironment(#C1) =={core::Object::==}{(core::Object) → core::bool} #C7, "${#C8}${const core::bool::fromEnvironment(#C1)}"), assert(const core::bool::fromEnvironment(#C1) =={core::Object::==}{(core::Object) → core::bool} #C7)}
+  #C10 = 42
+  #C11 = "btw foo was "
+  #C12 = eval self::Foo{x:#C10, assert(#C7, "${#C11}${const core::bool::fromEnvironment(#C1)}")}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_asserts.dart:
+- Foo. (from org-dartlang-testcase:///const_asserts.dart:7:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Foo.withMessage (from org-dartlang-testcase:///const_asserts.dart:13:9)
+- Foo.withInvalidMessage (from org-dartlang-testcase:///const_asserts.dart:15:9)
+- Foo.withInvalidCondition (from org-dartlang-testcase:///const_asserts.dart:16:9)
+- Bar.withMessage (from org-dartlang-testcase:///const_asserts.dart:21:9)
+- Bar.withoutMessage (from org-dartlang-testcase:///const_asserts.dart:22:9)
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.modular.expect
new file mode 100644
index 0000000..8044a08
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.modular.expect
@@ -0,0 +1,52 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart:27:7: Error: Expected 2 type arguments.
+// const Map<bool> MapWithUnevaluated = {
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static const field core::List<core::bool> listWithUnevaluated = #C5;
+static const field core::List<core::bool> listWithUnevaluatedSpread = #C8;
+static const field core::Set<core::bool> setWithUnevaluated = #C10;
+static const field core::Set<core::bool> setWithUnevaluatedSpread = #C12;
+static const field core::List<core::int> a = #C13;
+static const field core::List<core::int?> b = #C14;
+static const field core::Set<core::List<core::int?>> setNotAgnosticOK = #C15;
+static const field invalid-type MapWithUnevaluated = #C16;
+static const field core::Map<core::List<core::int?>, core::int> mapNotAgnosticOK = #C19;
+static method main() → dynamic {
+  core::print(#C5);
+  core::print(#C8);
+  core::print(#C10);
+  core::print(#C12);
+  core::print(<core::String>{"hello"});
+  core::print(#C21);
+}
+
+constants  {
+  #C1 = "foo"
+  #C2 = "bar"
+  #C3 = true
+  #C4 = <core::bool*>[#C3]
+  #C5 = eval const <dynamic>[const core::bool::fromEnvironment(#C1)] + const <dynamic>[const core::bool::fromEnvironment(#C2)] + #C4
+  #C6 = false
+  #C7 = <core::bool*>[#C6]
+  #C8 = eval #C4 + const <dynamic>[const core::bool::fromEnvironment(#C1)] + const <dynamic>[const core::bool::fromEnvironment(#C2)] + #C4 + #C7
+  #C9 = <core::bool*>{#C3}
+  #C10 = eval const <dynamic>{const core::bool::fromEnvironment(#C1)} + const <dynamic>{const core::bool::fromEnvironment(#C2)} + #C9
+  #C11 = <core::bool*>{#C6}
+  #C12 = eval #C9 + const <dynamic>{const core::bool::fromEnvironment(#C1)} + const <dynamic>{const core::bool::fromEnvironment(#C2)} + #C9 + #C11
+  #C13 = <core::int*>[]
+  #C14 = <core::int?>[]
+  #C15 = <core::List<core::int?>*>{#C13, #C14}
+  #C16 = eval const <dynamic, dynamic>{const core::bool::fromEnvironment(#C1): const core::bool::fromEnvironment(#C2)}
+  #C17 = 0
+  #C18 = 1
+  #C19 = <core::List<core::int?>*, core::int*>{#C13:#C17, #C14:#C18)
+  #C20 = "hello"
+  #C21 = <core::String*>{#C20}
+}
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections_2.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections_2.dart.weak.modular.expect
new file mode 100644
index 0000000..19a8cfb
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections_2.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static const field core::List<core::String> listWithUnevaluatedUnevaluatedFirst = #C6;
+static const field core::List<core::String> listWithUnevaluatedUnevaluatedMiddle = #C14;
+static const field core::Set<core::String> setWithUnevaluatedUnevaluatedFirst = #C16;
+static const field core::Set<core::String> setWithUnevaluatedUnevaluatedMiddle = #C19;
+static const field core::Map<core::String, core::int> mapWithUnevaluatedUnevaluatedFirst = #C22;
+static const field core::Map<core::String, core::int> mapWithUnevaluatedUnevaluatedMiddle = #C25;
+
+constants  {
+  #C1 = "foo"
+  #C2 = "bar"
+  #C3 = "hello"
+  #C4 = "world"
+  #C5 = <core::String*>[#C3, #C4]
+  #C6 = eval const <dynamic>[const core::String::fromEnvironment(#C1)] + const <dynamic>[const core::String::fromEnvironment(#C2)] + #C5
+  #C7 = "A"
+  #C8 = "few"
+  #C9 = "strings"
+  #C10 = <core::String*>[#C7, #C8, #C9]
+  #C11 = "and"
+  #C12 = "more"
+  #C13 = <core::String*>[#C3, #C4, #C11, #C12]
+  #C14 = eval #C10 + const <dynamic>[const core::String::fromEnvironment(#C1)] + const <dynamic>[const core::String::fromEnvironment(#C2)] + #C13
+  #C15 = <core::String*>{#C3, #C4}
+  #C16 = eval const <dynamic>{const core::String::fromEnvironment(#C1)} + #C15
+  #C17 = <core::String*>{#C7, #C8, #C9}
+  #C18 = <core::String*>{#C3, #C4, #C11, #C12}
+  #C19 = eval #C17 + const <dynamic>{const core::String::fromEnvironment(#C1)} + #C18
+  #C20 = 42
+  #C21 = <core::String*, core::int*>{#C3:#C20, #C4:#C20)
+  #C22 = eval const <dynamic, dynamic>{const core::String::fromEnvironment(#C1): #C20} + #C21
+  #C23 = <core::String*, core::int*>{#C7:#C20, #C8:#C20, #C9:#C20)
+  #C24 = <core::String*, core::int*>{#C3:#C20, #C4:#C20, #C11:#C20, #C12:#C20)
+  #C25 = eval #C23 + const <dynamic, dynamic>{const core::String::fromEnvironment(#C1): #C20} + #C24
+}
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/many_fields_pointing_to_previous_field.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/many_fields_pointing_to_previous_field.dart.weak.modular.expect
new file mode 100644
index 0000000..8a84689
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/many_fields_pointing_to_previous_field.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static const field core::List<core::String> original = #C11;
+static const field core::List<core::String> copy1 = #C11;
+static const field core::List<core::String> copy2 = #C11;
+static const field core::List<core::String> copy3 = #C11;
+static const field core::List<core::String> copy4 = #C11;
+static const field core::List<core::String> copy5 = #C11;
+static const field core::List<core::String> copy6 = #C11;
+static const field core::List<core::String> copy7 = #C11;
+static const field core::List<core::String> copy8 = #C11;
+static const field core::List<core::String> copy9 = #C11;
+static const field core::List<core::String> copy10 = #C11;
+static const field core::List<core::String> copy11 = #C11;
+static const field core::List<core::String> copy12 = #C11;
+static const field core::List<core::String> copy13 = #C11;
+static const field core::List<core::String> copy14 = #C11;
+static const field core::List<core::String> copy15 = #C11;
+static const field core::List<core::String> copy16 = #C11;
+static const field core::List<core::String> copy17 = #C11;
+static const field core::List<core::String> copy18 = #C11;
+static const field core::List<core::String> copy19 = #C11;
+static const field core::List<core::String> copy20 = #C11;
+static const field core::List<core::String> copy21 = #C11;
+static const field core::List<core::String> copy22 = #C11;
+static const field core::List<core::String> copy23 = #C11;
+static const field core::List<core::String> copy24 = #C11;
+static const field core::List<core::String> copy25 = #C11;
+static const field core::List<core::String> copy26 = #C11;
+static const field core::List<core::String> copy27 = #C11;
+static const field core::List<core::String> copy28 = #C11;
+static const field core::List<core::String> copy29 = #C11;
+static const field core::List<core::String> copy30 = #C11;
+static const field core::List<core::String> copy31 = #C11;
+static const field core::List<core::String> copy32 = #C11;
+static const field core::List<core::String> copy33 = #C11;
+static const field core::List<core::String> copy34 = #C11;
+static const field core::List<core::String> copy35 = #C11;
+static const field core::List<core::String> copy36 = #C11;
+static const field core::List<core::String> copy37 = #C11;
+static const field core::List<core::String> copy38 = #C11;
+static const field core::List<core::String> copy39 = #C11;
+static const field core::List<core::String> copy40 = #C11;
+static const field core::List<core::String> copy41 = #C11;
+static const field core::List<core::String> copy42 = #C11;
+static const field core::List<core::String> copy43 = #C11;
+static const field core::List<core::String> copy44 = #C11;
+static const field core::List<core::String> copy45 = #C11;
+static const field core::List<core::String> copy46 = #C11;
+static const field core::List<core::String> copy47 = #C11;
+static const field core::List<core::String> copy48 = #C11;
+static const field core::List<core::String> copy49 = #C11;
+static const field core::List<core::String> copy50 = #C11;
+
+constants  {
+  #C1 = "lots"
+  #C2 = "of"
+  #C3 = "strings"
+  #C4 = <core::String*>[#C1, #C2, #C3]
+  #C5 = "original"
+  #C6 = "that"
+  #C7 = "are"
+  #C8 = "already"
+  #C9 = "constants"
+  #C10 = <core::String*>[#C6, #C7, #C8, #C9]
+  #C11 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + #C10
+}
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/rudimentary_test_01.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/rudimentary_test_01.dart.weak.modular.expect
new file mode 100644
index 0000000..9505b07
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/rudimentary_test_01.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static const field core::int foo = #C1;
+static const field core::String bar = #C6;
+static const field core::bool baz = #C7;
+static const field core::Symbol blaSymbol = #C8;
+static method main() → dynamic {
+  self::_x();
+  #C10;
+  core::print(#C6);
+}
+static method _x() → void {
+  core::print(#C1);
+  core::print(#C6);
+}
+
+constants  {
+  #C1 = 1764
+  #C2 = "hello "
+  #C3 = "baz"
+  #C4 = "world"
+  #C5 = "!"
+  #C6 = eval "${#C2}${const core::String::fromEnvironment(#C3, defaultValue: #C4)}${#C5}"
+  #C7 = true
+  #C8 = #org-dartlang-testcase:///rudimentary_test_01.dart::_x
+  #C9 = "foo"
+  #C10 = eval const core::bool::fromEnvironment(#C9)
+}
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.modular.expect
new file mode 100644
index 0000000..d340989
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.modular.expect
@@ -0,0 +1,255 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:27:3: Error: Only static fields can be declared as const.
+// Try using 'final' instead of 'const', or adding the keyword 'static'.
+//   const bool initialized =
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:22:25: Error: 'lib' can't be used in a constant expression because it's marked as 'deferred' which means it isn't available until loaded.
+// Try moving the constant from the deferred library, or removing 'deferred' from the import.
+//
+// const fromDeferredLib = lib.x;
+//                         ^^^
+//
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:14:30: Warning: Operand of null-aware operation '??' has type 'bool' which excludes null.
+// const bool nullAwareOnNull = barFromEnvOrNull ?? true;
+//                              ^
+//
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
+//  - 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
+//   const Class.method(T t) : this(-t);
+//                                  ^
+//
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:123:27: Error: The parameter 'named' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// int procedure(int i, {int named}) => i;
+//                           ^^^^^
+//
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:31:9: Error: Constructor is marked 'const' so all fields must be final.
+//   const Foo(this.value,
+//         ^
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:27:14: Context: Field isn't final, but constructor is 'const'.
+//   const bool initialized =
+//              ^
+//
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:22:29: Error: Constant evaluation error:
+// const fromDeferredLib = lib.x;
+//                             ^
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:22:29: Context: 'lib' can't be used in a constant expression because it's marked as 'deferred' which means it isn't available until loaded.
+// Try moving the constant from the deferred library, or removing 'deferred' from the import.
+//
+// const fromDeferredLib = lib.x;
+//                             ^
+// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:22:7: Context: While analyzing:
+// const fromDeferredLib = lib.x;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+import "org-dartlang-testcase:///various_lib.dart" deferred as lib;
+
+typedef F = (core::int, {named: core::int}) → core::int;
+class Foo<E extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field core::bool saved;
+  final field core::bool saved2;
+  field core::bool initialized = #C3;
+  final field self::Foo::E% value;
+  const constructor •(self::Foo::E% value, {core::bool saved2 = #C4, core::bool x = #C5}) → self::Foo<self::Foo::E%>
+    : self::Foo::value = value, self::Foo::saved2 = saved2, self::Foo::saved = x, super core::Object::•()
+    ;
+}
+class A extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A
+    : super core::Object::•()
+    ;
+  operator unary-() → self::A
+    return this;
+}
+class B extends core::Object implements self::A /*hasConstConstructor*/  {
+  const constructor •() → self::B
+    : super core::Object::•()
+    ;
+  operator unary-() → self::B
+    return this;
+}
+class C extends core::Object implements self::A /*hasConstConstructor*/  {
+  const constructor •() → self::C
+    : super core::Object::•()
+    ;
+  operator unary-() → self::C
+    return this;
+}
+class Class<T extends self::A> extends core::Object /*hasConstConstructor*/  {
+  const constructor •(self::Class::T t) → self::Class<self::Class::T>
+    : super core::Object::•()
+    ;
+  const constructor redirect(dynamic t) → self::Class<self::Class::T>
+    : this self::Class::•(t as{TypeError,ForDynamic,ForNonNullableByDefault} self::Class::T)
+    ;
+  const constructor method(self::Class::T t) → self::Class<self::Class::T>
+    : this self::Class::•(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
+ - 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
+  const Class.method(T t) : this(-t);
+                                 ^" in t.{self::A::unary-}(){() → self::A} as{TypeError,ForNonNullableByDefault} Never)
+    ;
+}
+class Subclass<T extends self::A> extends self::Class<self::Subclass::T> /*hasConstConstructor*/  {
+  const constructor •(dynamic t) → self::Subclass<self::Subclass::T>
+    : super self::Class::•(t as{TypeError,ForDynamic,ForNonNullableByDefault} self::Subclass::T)
+    ;
+}
+class ConstClassWithF extends core::Object /*hasConstConstructor*/  {
+  final field (core::int, {named: core::int}) → core::int foo;
+  const constructor •((core::int, {named: core::int}) → core::int foo) → self::ConstClassWithF
+    : self::ConstClassWithF::foo = foo, super core::Object::•()
+    ;
+}
+static const field core::bool barFromEnv = #C6;
+static const field core::bool hasBarEnv = #C7;
+static const field core::bool? barFromEnvOrNull0 = #C10;
+static const field core::bool barFromEnvOrNull = #C11;
+static const field core::bool notBarFromEnvOrNull = #C12;
+static const field core::bool conditionalOnNull = #C14;
+static const field core::bool nullAwareOnNull = #C15;
+static const field core::bool andOnNull = #C16;
+static const field core::bool andOnNull2 = #C11;
+static const field core::bool orOnNull = #C17;
+static const field core::bool orOnNull2 = #C18;
+static const field core::bool orOnNull3 = #C8;
+static const field core::bool orOnNull4 = #C11;
+static const field core::int fromDeferredLib = invalid-expression "'lib' can't be used in a constant expression because it's marked as 'deferred' which means it isn't available until loaded.";
+static const field self::Foo<core::int> x = #C20;
+static const field core::bool? y = #C8;
+static const field core::bool z = #C13;
+static const field core::Object maybeInt = #C21;
+static const field core::bool isItInt = #C22;
+static const field core::Object maybeInt2 = #C8;
+static const field core::bool isItInt2 = #C13;
+static const field core::int? maybeInt3 = #C9;
+static const field core::bool isItInt3 = #C13;
+static const field dynamic listOfNull = #C23;
+static const field core::bool isListOfNull = #C8;
+static const field dynamic listOfInt = #C24;
+static const field core::bool isListOfInt = #C8;
+static const field core::bool isList = #C8;
+static const field dynamic setOfInt = #C25;
+static const field core::bool isSetOfInt = #C8;
+static const field dynamic mapOfInt = #C26;
+static const field core::bool isMapOfInt = #C8;
+static const field dynamic listOfListOfInt = #C27;
+static const field core::bool isListOfListOfInt = #C8;
+static const field dynamic setOfSetOfInt = #C28;
+static const field core::bool isSetOfSetOfInt = #C8;
+static const field dynamic mapOfMapOfInt1 = #C29;
+static const field dynamic mapOfMapOfInt2 = #C30;
+static const field core::bool isMapOfMapOfInt1 = #C8;
+static const field core::bool isMapOfMapOfInt2 = #C8;
+static const field core::Symbol symbolWithUnevaluatedParameter = #C31;
+static const field core::Symbol symbolWithInvalidName = #C32;
+static const field self::Class<self::B>? c0 = #C34;
+static const field self::Class<self::A>? c1 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
+ - 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
+  const Class.method(T t) : this(-t);
+                                 ^";
+static const field self::Subclass<self::B>? c2 = #C35;
+static const field self::Class<self::A>? c3 = #C36;
+static const field self::Class<self::B>? c4 = #C37;
+static const field self::Subclass<self::A>? c5 = #C38;
+static const field self::Subclass<self::B>? c6 = #C39;
+static const field core::Type f = #C40;
+static field self::ConstClassWithF constClassWithF1 = #C42;
+static const field self::ConstClassWithF constClassWithF2 = #C42;
+static const field core::bool unevaluatedBool = #C43;
+static const field core::bool notUnevaluatedBool = #C44;
+static const field core::bool? unevaluatedBoolOrNull = #C45;
+static const field core::bool unevaluatedBoolNotNull = #C46;
+static method procedure(core::int i, {core::int named = #C9}) → core::int
+  return i;
+static method main() → dynamic {
+  core::print(#C34);
+  core::print(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
+ - 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
+  const Class.method(T t) : this(-t);
+                                 ^");
+  core::print(#C35);
+  core::print(#C36);
+  core::print(#C37);
+  core::print(#C38);
+  core::print(#C39);
+  core::print(#C20);
+  core::print(#C20.{self::Foo::saved}{core::bool});
+  core::print(#C20.{self::Foo::value}{core::int});
+}
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+static const field core::int x = #C19;
+
+constants  {
+  #C1 = "foo"
+  #C2 = "bar"
+  #C3 = eval const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2))
+  #C4 = eval const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2))
+  #C5 = eval const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2))
+  #C6 = eval const core::bool::fromEnvironment(#C2)
+  #C7 = eval const core::bool::hasEnvironment(#C2)
+  #C8 = true
+  #C9 = null
+  #C10 = eval const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9
+  #C11 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!)
+  #C12 = eval !const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!)
+  #C13 = false
+  #C14 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) ?{core::bool} #C8 : #C13
+  #C15 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) == null ?{core::bool} #C8 : const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!)
+  #C16 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) && #C8
+  #C17 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) || #C8
+  #C18 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) || #C13
+  #C19 = 42
+  #C20 = eval self::Foo<core::int*>{saved:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), saved2:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), initialized:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), value:#C19}
+  #C21 = eval const core::bool::fromEnvironment(#C1) ?{core::Object} #C19 : #C8
+  #C22 = eval (const core::bool::fromEnvironment(#C1) ?{core::Object} #C19 : #C8) is{ForNonNullableByDefault} core::int ?{core::bool} #C8 : #C13
+  #C23 = <Null>[#C9]
+  #C24 = <core::int*>[#C19]
+  #C25 = <core::int*>{#C19}
+  #C26 = <core::int*, core::int*>{#C19:#C19)
+  #C27 = <core::List<core::int*>*>[#C24]
+  #C28 = <core::Set<core::int*>*>{#C25}
+  #C29 = <core::Map<core::int*, core::int*>*, core::int*>{#C26:#C19)
+  #C30 = <core::int*, core::Map<core::int*, core::int*>*>{#C19:#C26)
+  #C31 = eval const _in::Symbol::•(const core::String::fromEnvironment(#C1))
+  #C32 = #42
+  #C33 = "x"
+  #C34 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
+  #C35 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
+  #C36 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
+  #C37 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
+  #C38 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
+  #C39 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
+  #C40 = TypeLiteralConstant((core::int*, {named: core::int*}) →* core::int*)
+  #C41 = static-tearoff self::procedure
+  #C42 = self::ConstClassWithF {foo:#C41}
+  #C43 = eval const core::bool::fromEnvironment(#C1)
+  #C44 = eval !const core::bool::fromEnvironment(#C1)
+  #C45 = eval const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9
+  #C46 = eval (const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9)!
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///various.dart:
+- C. (from org-dartlang-testcase:///various.dart:92:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Class.redirect (from org-dartlang-testcase:///various.dart:99:9)
+- Class. (from org-dartlang-testcase:///various.dart:98:9)
+- A. (from org-dartlang-testcase:///various.dart:80:9)
+- Class.method (from org-dartlang-testcase:///various.dart:100:9)
+- Subclass. (from org-dartlang-testcase:///various.dart:104:9)
+- B. (from org-dartlang-testcase:///various.dart:86:9)
+- Foo. (from org-dartlang-testcase:///various.dart:31:9)
+- ConstClassWithF. (from org-dartlang-testcase:///various.dart:120:9)
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.modular.expect
new file mode 100644
index 0000000..d4686ed
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.modular.expect
@@ -0,0 +1,138 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "various_2_lib.dart" as var;
+
+import "org-dartlang-testcase:///various_2_lib.dart" as lib;
+
+typedef F1<invariant T extends core::Object? = dynamic> = (T%) → T%;
+typedef F2 = <T extends core::Object? = dynamic>(T%) → T%;
+static const field core::Type objectTypeLiteral = #C1;
+static const field (core::int) → core::int partialInstantiation = #C3;
+static const field var::Class<core::int> instance = #C5;
+static const field var::Class<dynamic> instance2 = #C8;
+static const field core::Type functionTypeLiteral = #C9;
+static const field core::Type genericFunctionTypeLiteral = #C10;
+static const field core::List<core::int> listLiteral = #C11;
+static const field core::List<dynamic> listLiteral2 = #C12;
+static const field core::Set<core::int> setLiteral = #C13;
+static const field core::Set<dynamic> setLiteral2 = #C14;
+static const field core::Map<core::int, core::String> mapLiteral = #C16;
+static const field core::Map<dynamic, dynamic> mapLiteral2 = #C18;
+static const field core::List<core::int> listConcatenation = #C11;
+static const field core::Set<core::int> setConcatenation = #C13;
+static const field core::Map<core::int, core::String> mapConcatenation = #C16;
+static const field core::bool objectTypeLiteralIdentical = #C19;
+static const field core::bool partialInstantiationIdentical = #C21;
+static const field core::bool instanceIdentical = #C19;
+static const field core::bool instance2Identical = #C19;
+static const field core::bool functionTypeLiteralIdentical = #C19;
+static const field core::bool genericFunctionTypeLiteralIdentical = #C19;
+static const field core::bool listLiteralIdentical = #C19;
+static const field core::bool listLiteral2Identical = #C19;
+static const field core::bool setLiteralIdentical = #C19;
+static const field core::bool setLiteral2Identical = #C19;
+static const field core::bool mapLiteralIdentical = #C19;
+static const field core::bool mapLiteral2Identical = #C19;
+static const field core::bool listConcatenationIdentical = #C19;
+static const field core::bool setConcatenationIdentical = #C19;
+static const field core::bool mapConcatenationIdentical = #C19;
+static method main() → dynamic {
+  self::test(#C1, #C1);
+  self::test(#C3, #C22);
+  self::test(#C5, #C5);
+  self::test(#C9, #C9);
+  self::test(#C10, #C10);
+  self::test(#C11, #C11);
+  self::test(#C13, #C13);
+  self::test(#C16, #C16);
+  self::test(#C11, #C11);
+  self::test(#C13, #C13);
+  self::test(#C16, #C16);
+  self::test(true, #C19);
+  self::test(true, #C21);
+  self::test(true, #C19);
+  self::test(true, #C19);
+  self::test(true, #C19);
+  self::test(true, #C19);
+  self::test(true, #C19);
+  self::test(true, #C19);
+  self::test(true, #C19);
+  self::test(true, #C19);
+  self::test(true, #C19);
+}
+static method test(dynamic expected, dynamic actual) → dynamic {
+  core::print("test(${expected}, ${actual})");
+  if(!core::identical(expected, actual)) {
+    throw "Expected ${expected}, actual ${actual}";
+  }
+}
+
+library /*isNonNullableByDefault*/;
+import self as var;
+import "dart:core" as core;
+
+typedef F1<invariant T extends core::Object? = dynamic> = (T%) → T%;
+typedef F2 = <T extends core::Object? = dynamic>(T%) → T%;
+class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field var::Class::T% field;
+  const constructor •(var::Class::T% field) → var::Class<var::Class::T%>
+    : var::Class::field = field, super core::Object::•()
+    ;
+}
+static const field core::Type objectTypeLiteral = #C1;
+static const field (core::Object?, core::Object?) → core::bool c2 = #C23;
+static const field (core::int) → core::int partialInstantiation = #C22;
+static const field var::Class<core::int> instance = #C5;
+static const field var::Class<dynamic> instance2 = #C8;
+static const field core::Type functionTypeLiteral = #C9;
+static const field core::Type genericFunctionTypeLiteral = #C10;
+static const field core::List<core::int> listLiteral = #C11;
+static const field core::List<dynamic> listLiteral2 = #C12;
+static const field core::Set<core::int> setLiteral = #C13;
+static const field core::Set<dynamic> setLiteral2 = #C14;
+static const field core::Map<core::int, core::String> mapLiteral = #C16;
+static const field core::Map<dynamic, dynamic> mapLiteral2 = #C18;
+static const field core::List<core::int> listConcatenation = #C11;
+static const field core::Set<core::int> setConcatenation = #C13;
+static const field core::Map<core::int, core::String> mapConcatenation = #C16;
+static method id1<T extends core::Object? = dynamic>(var::id1::T% t) → var::id1::T%
+  return t;
+static method id2<T extends core::Object? = dynamic>(var::id2::T% t) → var::id2::T%
+  return t;
+
+constants  {
+  #C1 = TypeLiteralConstant(core::Object*)
+  #C2 = static-tearoff var::id1
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = 0
+  #C5 = var::Class<core::int*> {field:#C4}
+  #C6 = 42
+  #C7 = <core::int*>[#C6]
+  #C8 = var::Class<dynamic> {field:#C7}
+  #C9 = TypeLiteralConstant((dynamic) →* dynamic)
+  #C10 = TypeLiteralConstant(<T extends core::Object? = dynamic>(T*) →* T*)
+  #C11 = <core::int*>[#C4]
+  #C12 = <dynamic>[#C7]
+  #C13 = <core::int*>{#C4}
+  #C14 = <dynamic>{#C7}
+  #C15 = "foo"
+  #C16 = <core::int*, core::String*>{#C4:#C15)
+  #C17 = null
+  #C18 = <dynamic, dynamic>{#C7:#C15, #C17:#C7)
+  #C19 = true
+  #C20 = static-tearoff var::id2
+  #C21 = eval const core::identical(#C3, const core::bool::fromEnvironment(#C15) ?{(core::int) → core::int} #C2<core::int> : #C20<core::int>)
+  #C22 = eval const core::bool::fromEnvironment(#C15) ?{(core::int) → core::int} #C2<core::int> : #C20<core::int>
+  #C23 = static-tearoff core::identical
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///various_2.dart:
+- Class. (from org-dartlang-testcase:///various_2_lib.dart:8:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
+org-dartlang-testcase:///various_2_lib.dart:
+- Class. (from org-dartlang-testcase:///various_2_lib.dart:8:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.modular.expect b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..2c1402b
--- /dev/null
+++ b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.modular.expect
@@ -0,0 +1,56 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class _Y<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::_Y<self::_Y::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::_Y<self::A::T*>* x;
+  constructor •(self::_Y<self::A::T*>* x) → self::A<self::A::T*>*
+    : self::A::x = x, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
+  constructor •() → self::B<self::B::T*>*
+    : super self::A::•(#C1)
+    ;
+}
+static method main() → dynamic {
+  dynamic x = new self::B::•<dynamic>().{self::A::x}{self::_Y<dynamic>*};
+  if(!(x is self::_Y<Null>*)) {
+    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}{core::Type*}}, but `_Y<Null>` expected";
+  }
+}
+
+constants  {
+  #C1 = self::_Y<Null> {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///constructor_const_inference.dart:
+- _Y. (from org-dartlang-testcase:///constructor_const_inference.dart:10:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/constructor_cycle.dart.weak.modular.expect b/pkg/front_end/testcases/general/constructor_cycle.dart.weak.modular.expect
new file mode 100644
index 0000000..7510955
--- /dev/null
+++ b/pkg/front_end/testcases/general/constructor_cycle.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constructor_cycle.dart:7:18: Error: Redirecting constructors can't be cyclic.
+// Try to have all constructors eventually redirect to a non-redirecting constructor.
+//   A.bar() : this.foo();
+//                  ^^^
+//
+// pkg/front_end/testcases/general/constructor_cycle.dart:9:9: Error: Redirecting constructors can't be cyclic.
+// Try to have all constructors eventually redirect to a non-redirecting constructor.
+//   A() : this();
+//         ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor foo() → self::A*
+    : this self::A::bar()
+    ;
+  constructor bar() → self::A*
+    : this self::A::foo()
+    ;
+  constructor baz() → self::A*
+    : this self::A::foo()
+    ;
+  constructor •() → self::A*
+    : this self::A::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/constructor_function_types.dart.weak.modular.expect b/pkg/front_end/testcases/general/constructor_function_types.dart.weak.modular.expect
new file mode 100644
index 0000000..3e5a359
--- /dev/null
+++ b/pkg/front_end/testcases/general/constructor_function_types.dart.weak.modular.expect
@@ -0,0 +1,70 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  constructor •(core::int* x, core::double* y, core::String* s) → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<T extends core::Object* = dynamic> extends core::Object {
+  constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
+  constructor •(self::D::T* x, self::D::S* y) → self::D<self::D::T*, self::D::S*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {
+  new self::A::•();
+  new self::B::•(0, 3.14, "foo");
+  new self::C::•<dynamic>();
+  new self::D::•<core::Object*, core::int*>(null, 3);
+}
diff --git a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.modular.expect b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.modular.expect
new file mode 100644
index 0000000..69f8ec9
--- /dev/null
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.modular.expect
@@ -0,0 +1,87 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constructor_initializer_invalid.dart:5:24: Error: Expected an initializer.
+// class C1 { int f; C1() : ; }
+//                        ^
+//
+// pkg/front_end/testcases/general/constructor_initializer_invalid.dart:6:26: Error: Expected an assignment after the field name.
+// To initialize a field, use the syntax 'name = value'.
+// class C2 { int f; C2() : f; }
+//                          ^
+//
+// pkg/front_end/testcases/general/constructor_initializer_invalid.dart:7:26: Error: Expected an assignment after the field name.
+// To initialize a field, use the syntax 'name = value'.
+// class C3 { int f; C3() : f++; }
+//                          ^
+//
+// pkg/front_end/testcases/general/constructor_initializer_invalid.dart:7:26: Error: Can't access 'this' in a field initializer to read 'f'.
+// class C3 { int f; C3() : f++; }
+//                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  field core::int* f = null;
+  constructor •() → self::C1*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:5:26: Error: This couldn't be parsed.
+class C1 { int f; C1() : ; }
+                         ^"
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C2 extends core::Object {
+  field core::int* f;
+  constructor •() → self::C2*
+    : self::C2::f = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:6:27: Error: This couldn't be parsed.
+class C2 { int f; C2() : f; }
+                          ^", super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C3 extends core::Object {
+  field core::int* f = null;
+  constructor •() → self::C3*
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:7:26: Error: This couldn't be parsed.
+class C3 { int f; C3() : f++; }
+                         ^"
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C1* c1 = new self::C1::•();
+  c1.{self::C1::toString}(){() →* core::String*};
+  self::C2* c2 = new self::C2::•();
+  c2.{self::C2::toString}(){() →* core::String*};
+  self::C3* c3 = new self::C3::•();
+  c3.{self::C3::toString}(){() →* core::String*};
+}
diff --git a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.modular.expect
new file mode 100644
index 0000000..40f37f3
--- /dev/null
+++ b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:test" as test;
+
+import "dart:test";
+
+static method main() → dynamic {
+  new test::Class::generative();
+  #C2;
+}
+
+library /*isNonNullableByDefault*/;
+import self as test;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+
+@#C3
+class Class extends core::Object /*hasConstConstructor*/  {
+  final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
+  @#C3
+  constructor generative({core::bool defaultValue = #C1}) → test::Class
+    : test::Class::defaultValue = defaultValue, super core::Object::•()
+    ;
+  @#C3
+  const constructor constGenerative({core::bool defaultValue = #C1}) → test::Class
+    : test::Class::defaultValue = defaultValue, super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = true
+  #C2 = test::Class {defaultValue:#C1}
+  #C3 = _in::_Patch {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main.dart:
+- Class.constGenerative (from org-dartlang-testcase:///patch_lib.dart:16:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.modular.expect b/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.modular.expect
new file mode 100644
index 0000000..cbaacd1
--- /dev/null
+++ b/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.modular.expect
@@ -0,0 +1,47 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/continue_inference_after_error.dart:10:3: Error: A prefix can't be used as an expression.
+//   lib(new C().missing());
+//   ^^^
+//
+// pkg/front_end/testcases/general/continue_inference_after_error.dart:10:15: Error: The method 'missing' isn't defined for the class 'C'.
+//  - 'C' is from 'pkg/front_end/testcases/general/continue_inference_after_error.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'missing'.
+//   lib(new C().missing());
+//               ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///continue_inference_after_error_lib.dart" as lib;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:3: Error: A prefix can't be used as an expression.
+  lib(new C().missing());
+  ^^^" in let final core::Object* #t1 = invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:15: Error: The method 'missing' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/continue_inference_after_error.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'missing'.
+  lib(new C().missing());
+              ^^^^^^^" in new self::C::•(){<unresolved>}.missing() in null;
+}
+static method main() → dynamic {}
+
+library;
+import self as self2;
diff --git a/pkg/front_end/testcases/general/control_flow_collection.dart.weak.modular.expect b/pkg/front_end/testcases/general/control_flow_collection.dart.weak.modular.expect
new file mode 100644
index 0000000..ca02ce0
--- /dev/null
+++ b/pkg/front_end/testcases/general/control_flow_collection.dart.weak.modular.expect
@@ -0,0 +1,71 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method main() → dynamic {
+  final core::List<core::int*>* aList = block {
+    final core::List<core::int*>* #t1 = <core::int*>[1];
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      #t1.{core::List::add}{Invariant}(2){(core::int*) →* void};
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      #t1.{core::List::add}{Invariant}(3){(core::int*) →* void};
+    else
+      #t1.{core::List::add}{Invariant}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* void};
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+        #t1.{core::List::add}{Invariant}(4){(core::int*) →* void};
+    for (core::int* i in <core::int*>[5, 6, 7])
+      #t1.{core::List::add}{Invariant}(i){(core::int*) →* void};
+    for (core::int* i in <core::int*>[8, 9, 10])
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+        #t1.{core::List::add}{Invariant}(i){(core::int*) →* void};
+    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t1.{core::List::add}{Invariant}(i){(core::int*) →* void};
+  } =>#t1;
+  final core::Set<core::int*>* aSet = block {
+    final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
+    #t2.{core::Set::add}{Invariant}(1){(core::int*) →* core::bool*};
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      #t2.{core::Set::add}{Invariant}(2){(core::int*) →* core::bool*};
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      #t2.{core::Set::add}{Invariant}(3){(core::int*) →* core::bool*};
+    else
+      #t2.{core::Set::add}{Invariant}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* core::bool*};
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+        #t2.{core::Set::add}{Invariant}(4){(core::int*) →* core::bool*};
+    for (core::int* i in <core::int*>[5, 6, 7])
+      #t2.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+    for (core::int* i in <core::int*>[8, 9, 10])
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+        #t2.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t2.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+  } =>#t2;
+  final core::Map<core::int*, core::int*>* aMap = block {
+    final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
+    #t3.{core::Map::[]=}{Invariant}(1, 1){(core::int*, core::int*) →* void};
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      #t3.{core::Map::[]=}{Invariant}(2, 2){(core::int*, core::int*) →* void};
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      #t3.{core::Map::[]=}{Invariant}(3, 3){(core::int*, core::int*) →* void};
+    else
+      #t3.{core::Map::[]=}{Invariant}(1.{core::int::unary-}(){() →* core::int*}, 1.{core::int::unary-}(){() →* core::int*}){(core::int*, core::int*) →* void};
+    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+        #t3.{core::Map::[]=}{Invariant}(4, 4){(core::int*, core::int*) →* void};
+    for (core::int* i in <core::int*>[5, 6, 7])
+      #t3.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
+    for (core::int* i in <core::int*>[8, 9, 10])
+      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
+        #t3.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
+    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t3.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
+  } =>#t3;
+  core::print(aList);
+  core::print(aSet);
+  core::print(aMap);
+}
+static method oracle() → dynamic
+  return true;
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.modular.expect b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..2ebf6f7
--- /dev/null
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference.dart.weak.modular.expect
@@ -0,0 +1,2158 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:39:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+//   Map<String, List<int>> map40 = {if (oracle("foo")) ...{"bar", []}, "baz": null};
+//                                  ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   var map82 = {if (oracle("foo")) ...mapToInt else ...dynVar, null};
+//                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:44: Error: Expected ':' after this.
+//   Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
+//                                            ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:107:53: Error: Expected ':' after this.
+//   Map<dynamic, dynamic> map10 = {if (oracle("foo")) 42 else "bar": 3.14};
+//                                                     ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:61: Error: Expected ':' after this.
+//   Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
+//                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:109:70: Error: Expected ':' after this.
+//   Map<dynamic, dynamic> map11 = {if (oracle("foo")) "bar": 3.14 else 42};
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:35: Error: Expected ':' after this.
+//   var map12 = {if (oracle("foo")) 42 else "bar": 3.14};
+//                                   ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:52: Error: Expected ':' after this.
+//   var map13 = {if (oracle("foo")) "bar": 3.14 else 42};
+//                                                    ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>[if (oracle("foo")) "bar"];
+//                            ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>{if (oracle("foo")) "bar", null};
+//                            ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <String, int>{if (oracle("foo")) "bar": "bar", "baz": null};
+//                                           ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>[if (oracle("foo")) ...["bar"]];
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>{if (oracle("foo")) ...["bar"], null};
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <String, int>{if (oracle("foo")) ...{"bar": "bar"}, "baz": null};
+//                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[if (oracle("foo")) ...map];
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>{if (oracle("foo")) ...map, null};
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int>{if (oracle("foo")) ...["bar"], "baz": null};
+//                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   <String>[if (oracle("foo")) 42 else 3.14];
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//   <String>[if (oracle("foo")) 42 else 3.14];
+//                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   <String>{if (oracle("foo")) 42 else 3.14, null};
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//   <String>{if (oracle("foo")) 42 else 3.14, null};
+//                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   <String, String>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
+//                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//   <String, String>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
+//                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[if (oracle("foo")) ...map else 42];
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>{if (oracle("foo")) ...map else 42, null};
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int>{if (oracle("foo")) ...[42] else "bar": 42, "baz": null};
+//                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[if (oracle("foo")) 42 else ...map];
+//                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>{if (oracle("foo")) ...map else 42, null};
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int>{if (oracle("foo")) "bar": 42 else ...[42], "baz": null};
+//                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+//   Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
+//                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+//   Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
+//                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   List<int> list20 = [if (42) 42];
+//                           ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   Set<int> set20 = {if (42) 42};
+//                         ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   Map<int, int> map30 = {if (42) 42: 42};
+//                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+//   List<String> list40 = <String>[if (oracle("foo")) true else 42];
+//                                                     ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   List<String> list40 = <String>[if (oracle("foo")) true else 42];
+//                                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+//   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
+//                                                   ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
+//                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+//   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
+//                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
+//                                                                           ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+//   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
+//                                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
+//                                                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:230:14: Error: Can't assign to the final variable 'i'.
+//   <int>[for (i in <int>[1]) i];
+//              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:231:14: Error: Can't assign to the final variable 'i'.
+//   <int>{for (i in <int>[1]) i, null};
+//              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:21: Error: Can't assign to the final variable 'i'.
+// 	<String, int>{for (i in <int>[1]) "bar": i, "baz": null};
+// 	                   ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:17: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// Try removing the keyword, or use a for-each statement.
+//   var list50 = [await for (;;) 42];
+//                 ^^^^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// Try removing the keyword, or use a for-each statement.
+//   var set50 = {await for (;;) 42, null};
+//                ^^^^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:248:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// Try removing the keyword, or use a for-each statement.
+//   var map50 = {await for (;;) "bar": 42, "baz": null};
+//                ^^^^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>[for (int i = 0; oracle("foo"); i++) "bar"];
+//                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>{for (int i = 0; oracle("foo"); i++) "bar", null};
+//                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
+//                                                  ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
+//                                                         ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
+//                                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>[for (int i = 0; oracle("foo"); i++) ...["bar"]];
+//                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>{for (int i = 0; oracle("foo"); i++) ...["bar"], null};
+//                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
+//                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
+//                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
+//                                                                     ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[for (int i = 0; oracle("foo"); i++) ...map];
+//                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>{for (int i = 0; oracle("foo"); i++) ...map, null};
+//                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <int, int>{for (int i = 0; oracle("foo"); i++) ...list, 42: null};
+//                                                     ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
+//                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   <String>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
+//                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//   <String>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   <String, String>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
+//                                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//   <String, String>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
+//                                                                                            ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42];
+//                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42, null};
+//                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...list else "bar": 42, "baz": null};
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map];
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map, null};
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else ...list, "baz": null};
+//                                                                                     ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   var list10 = [for (var i in "not iterable") i];
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   var set10 = {for (var i in "not iterable") i, null};
+//                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   var map10 = {for (var i in "not iterable") "bar": i, "baz": null};
+//                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var list20 = [for (int i in ["not", "int"]) i];
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var list20 = [for (int i in ["not", "int"]) i];
+//                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var set20 = {for (int i in ["not", "int"]) i, null};
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var set20 = {for (int i in ["not", "int"]) i, null};
+//                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
+//                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+//  - 'Stream' is from 'dart:async'.
+//   var list30 = [await for (var i in "not stream") i];
+//                                     ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+//  - 'Stream' is from 'dart:async'.
+//   var set30 = {await for (var i in "not stream") i, null};
+//                                    ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+//  - 'Stream' is from 'dart:async'.
+//   var map30 = {await for (var i in "not stream") "bar": i, "baz": null};
+//                                    ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
+//                                                          ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
+//                                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
+//                                                         ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
+//                                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
+//                                                         ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
+//                                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+//   var list60 = [for (; "not bool";) 42];
+//                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+//   var set60 = {for (; "not bool";) 42, null};
+//                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+//   var map60 = {for (; "not bool";) "bar": 42, "baz": null};
+//                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:255:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
+//   <int>[await for (int i in stream) i];
+//                          ^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:256:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
+//   <int>{await for (int i in stream) i};
+//                          ^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:257:34: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
+//   <String, int>{await for (int i in stream) "bar": i};
+//                                  ^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+import "dart:async" as asy;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  get foo() → core::int*
+    return 42;
+}
+static method oracle<T extends core::Object* = dynamic>([self::oracle::T* t = #C1]) → dynamic
+  return true;
+static method testIfElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::Map<core::String*, core::int*>* mapToInt, core::Map<core::String*, core::double*>* mapToDouble) → dynamic {
+  core::List<core::int*>* list10 = block {
+    final core::List<core::int*>* #t1 = <core::int*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t1.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t1;
+  core::Set<core::int*>* set10 = block {
+    final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t2.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t2;
+  core::Map<core::String*, core::int*>* map10 = block {
+    final core::Map<core::String*, core::int*>* #t3 = <core::String*, core::int*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t3.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
+    #t3.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t3;
+  core::List<dynamic>* list11 = block {
+    final core::List<dynamic>* #t4 = <dynamic>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t4.{core::List::add}{Invariant}(dynVar){(dynamic) →* void};
+  } =>#t4;
+  core::Set<dynamic>* set11 = block {
+    final core::Set<dynamic>* #t5 = col::LinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t5.{core::Set::add}{Invariant}(dynVar){(dynamic) →* core::bool*};
+    #t5.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t5;
+  core::Map<core::String*, dynamic>* map11 = block {
+    final core::Map<core::String*, dynamic>* #t6 = <core::String*, dynamic>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t6.{core::Map::[]=}{Invariant}("bar", dynVar){(core::String*, dynamic) →* void};
+    #t6.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t6;
+  core::List<core::List<core::int*>*>* list12 = block {
+    final core::List<core::List<core::int*>*>* #t7 = <core::List<core::int*>*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t7.{core::List::add}{Invariant}(<core::int*>[42]){(core::List<core::int*>*) →* void};
+  } =>#t7;
+  core::Set<core::List<core::int*>*>* set12 = block {
+    final core::Set<core::List<core::int*>*>* #t8 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t8.{core::Set::add}{Invariant}(<core::int*>[42]){(core::List<core::int*>*) →* core::bool*};
+    #t8.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t8;
+  core::Map<core::String*, core::List<core::int*>*>* map12 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t9 = <core::String*, core::List<core::int*>*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t9.{core::Map::[]=}{Invariant}("bar", <core::int*>[42]){(core::String*, core::List<core::int*>*) →* void};
+    #t9.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t9;
+  core::List<core::int*>* list20 = block {
+    final core::List<core::int*>* #t10 = <core::int*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t10.{core::List::addAll}{Invariant}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
+  } =>#t10;
+  core::Set<core::int*>* set20 = block {
+    final core::Set<core::int*>* #t11 = col::LinkedHashSet::•<core::int*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t11.{core::Set::addAll}{Invariant}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
+    #t11.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t11;
+  core::Map<core::String*, core::int*>* map20 = block {
+    final core::Map<core::String*, core::int*>* #t12 = <core::String*, core::int*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final core::MapEntry<core::String*, core::int*>* #t13 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{core::String*}, #t13.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t12.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t12;
+  core::List<dynamic>* list21 = block {
+    final core::List<dynamic>* #t14 = <dynamic>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t14.{core::List::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
+  } =>#t14;
+  core::Set<dynamic>* set21 = block {
+    final core::Set<dynamic>* #t15 = col::LinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t15.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
+    #t15.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t15;
+  core::Map<core::String*, dynamic>* map21 = block {
+    final core::Map<core::String*, dynamic>* #t16 = <core::String*, dynamic>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final core::MapEntry<core::String*, dynamic>* #t17 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{core::String*}, #t17.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
+    #t16.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t16;
+  core::List<core::List<core::int*>*>* list22 = block {
+    final core::List<core::List<core::int*>*>* #t18 = <core::List<core::int*>*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t18.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t18;
+  core::Set<core::List<core::int*>*>* set22 = block {
+    final core::Set<core::List<core::int*>*>* #t19 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t19.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t19.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t19;
+  core::Map<core::String*, core::List<core::int*>*>* map22 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t20 = <core::String*, core::List<core::int*>*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t21 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::String*}, #t21.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t20.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t20;
+  core::List<core::int*>* list30 = block {
+    final core::List<core::int*>* #t22 = <core::int*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t22.{core::List::addAll}{Invariant}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
+  } =>#t22;
+  core::Set<core::int*>* set30 = block {
+    final core::Set<core::int*>* #t23 = col::LinkedHashSet::•<core::int*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t23.{core::Set::addAll}{Invariant}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
+    #t23.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t23;
+  core::Map<core::String*, core::int*>* map30 = block {
+    final core::Map<core::String*, core::int*>* #t24 = <core::String*, core::int*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<core::String*, core::int*>* #t25 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+          #t24.{core::Map::[]=}{Invariant}(#t25.{core::MapEntry::key}{core::String*}, #t25.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t24.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t24;
+  core::List<dynamic>* list31 = block {
+    final core::List<dynamic>* #t26 = <dynamic>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t26.{core::List::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
+  } =>#t26;
+  core::Set<dynamic>* set31 = block {
+    final core::Set<dynamic>* #t27 = col::LinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t27.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
+    #t27.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t27;
+  core::Map<core::String*, dynamic>* map31 = block {
+    final core::Map<core::String*, dynamic>* #t28 = <core::String*, dynamic>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<core::String*, dynamic>* #t29 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+          #t28.{core::Map::[]=}{Invariant}(#t29.{core::MapEntry::key}{core::String*}, #t29.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
+    #t28.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t28;
+  core::List<core::List<core::int*>*>* list33 = block {
+    final core::List<core::List<core::int*>*>* #t30 = <core::List<core::int*>*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t30.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t30;
+  core::Set<core::List<core::int*>*>* set33 = block {
+    final core::Set<core::List<core::int*>*>* #t31 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t31.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t31.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t31;
+  core::Map<core::String*, core::List<core::int*>*>* map33 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t32 = <core::String*, core::List<core::int*>*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t33 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+          #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::String*}, #t33.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t32.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t32;
+  core::List<core::List<core::int*>*>* list40 = block {
+    final core::List<core::List<core::int*>*>* #t34 = <core::List<core::int*>*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t34.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t34;
+  core::Set<core::List<core::int*>*>* set40 = block {
+    final core::Set<core::List<core::int*>*>* #t35 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t35.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t35.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t35;
+  core::Map<core::String*, core::List<core::int*>*>* map40 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:39:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  Map<String, List<int>> map40 = {if (oracle(\"foo\")) ...{\"bar\", []}, \"baz\": null};
+                                 ^";
+  core::List<core::List<core::int*>*>* list41 = block {
+    final core::List<core::List<core::int*>*>* #t36 = <core::List<core::int*>*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t36.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int*>*>* #t37 = col::LinkedHashSet::•<core::List<core::int*>*>();
+        #t37.{core::Set::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+      } =>#t37){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t36;
+  core::Set<core::List<core::int*>*>* set41 = block {
+    final core::Set<core::List<core::int*>*>* #t38 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t38.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int*>*>* #t39 = col::LinkedHashSet::•<core::List<core::int*>*>();
+        #t39.{core::Set::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+      } =>#t39){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t38.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t38;
+  core::List<core::List<core::int*>*>* list42 = block {
+    final core::List<core::List<core::int*>*>* #t40 = <core::List<core::int*>*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t40.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t40;
+  core::Set<core::List<core::int*>*>* set42 = block {
+    final core::Set<core::List<core::int*>*>* #t41 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t41.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t41.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t41;
+  core::Map<core::String*, core::List<core::int*>*>* map42 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t42 = <core::String*, core::List<core::int*>*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t43 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+          #t42.{core::Map::[]=}{Invariant}(#t43.{core::MapEntry::key}{core::String*}, #t43.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t42.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t42;
+  core::List<core::int*>* list50 = block {
+    final core::List<core::int*>* #t44 = <core::int*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t44.{core::List::addAll}{Invariant}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
+  } =>#t44;
+  core::Set<core::int*>* set50 = block {
+    final core::Set<core::int*>* #t45 = col::LinkedHashSet::•<core::int*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t45.{core::Set::addAll}{Invariant}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
+    #t45.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t45;
+  core::Map<core::String*, core::int*>* map50 = block {
+    final core::Map<core::String*, core::int*>* #t46 = <core::String*, core::int*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final core::MapEntry<core::String*, core::int*>* #t47 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        #t46.{core::Map::[]=}{Invariant}(#t47.{core::MapEntry::key}{core::String*}, #t47.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t46.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t46;
+  core::List<core::int*>* list51 = block {
+    final core::List<core::int*>* #t48 = <core::int*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t48.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::int*>* #t49 = col::LinkedHashSet::•<core::int*>();
+      } =>#t49){(core::Iterable<core::int*>*) →* void};
+  } =>#t48;
+  core::Set<core::int*>* set51 = block {
+    final core::Set<core::int*>* #t50 = col::LinkedHashSet::•<core::int*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t50.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::int*>* #t51 = col::LinkedHashSet::•<core::int*>();
+      } =>#t51){(core::Iterable<core::int*>*) →* void};
+    #t50.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t50;
+  core::List<core::int*>* list52 = block {
+    final core::List<core::int*>* #t52 = <core::int*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t52.{core::List::addAll}{Invariant}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
+  } =>#t52;
+  core::Set<core::int*>* set52 = block {
+    final core::Set<core::int*>* #t53 = col::LinkedHashSet::•<core::int*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t53.{core::Set::addAll}{Invariant}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
+    #t53.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t53;
+  core::Map<core::String*, core::int*>* map52 = block {
+    final core::Map<core::String*, core::int*>* #t54 = <core::String*, core::int*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<core::String*, core::int*>* #t55 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+          #t54.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}{core::String*}, #t55.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t54.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t54;
+  core::List<core::List<core::int*>*>* list60 = block {
+    final core::List<core::List<core::int*>*>* #t56 = <core::List<core::int*>*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t56.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t56;
+  core::Set<core::List<core::int*>*>* set60 = block {
+    final core::Set<core::List<core::int*>*>* #t57 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t57.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t57.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t57;
+  core::Map<core::String*, core::List<core::int*>*>* map60 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t58 = <core::String*, core::List<core::int*>*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t59 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        #t58.{core::Map::[]=}{Invariant}(#t59.{core::MapEntry::key}{core::String*}, #t59.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t58.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t58;
+  core::List<core::List<core::int*>*>* list61 = block {
+    final core::List<core::List<core::int*>*>* #t60 = <core::List<core::int*>*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t60.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t60;
+  core::Set<core::List<core::int*>*>* set61 = block {
+    final core::Set<core::List<core::int*>*>* #t61 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t61.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t61.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t61;
+  core::Map<core::String*, core::List<core::int*>*>* map61 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t62 = <core::String*, core::List<core::int*>*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t63 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+          #t62.{core::Map::[]=}{Invariant}(#t63.{core::MapEntry::key}{core::String*}, #t63.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t62.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t62;
+  core::List<core::List<core::int*>*>* list70 = block {
+    final core::List<core::List<core::int*>*>* #t64 = <core::List<core::int*>*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t64.{core::List::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* void};
+  } =>#t64;
+  core::Set<core::List<core::int*>*>* set70 = block {
+    final core::Set<core::List<core::int*>*>* #t65 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t65.{core::Set::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+    #t65.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t65;
+  core::List<core::List<core::int*>*>* list71 = block {
+    final core::List<core::List<core::int*>*>* #t66 = <core::List<core::int*>*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t66.{core::List::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* void};
+  } =>#t66;
+  core::Set<core::List<core::int*>*>* set71 = block {
+    final core::Set<core::List<core::int*>*>* #t67 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t67.{core::Set::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+    #t67.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t67;
+  core::List<core::num*>* list80 = block {
+    final core::List<core::num*>* #t68 = <core::num*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t68.{core::List::add}{Invariant}(42){(core::num*) →* void};
+    else
+      #t68.{core::List::add}{Invariant}(3.14){(core::num*) →* void};
+  } =>#t68;
+  core::Set<core::num*>* set80 = block {
+    final core::Set<core::num*>* #t69 = col::LinkedHashSet::•<core::num*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t69.{core::Set::add}{Invariant}(42){(core::num*) →* core::bool*};
+    else
+      #t69.{core::Set::add}{Invariant}(3.14){(core::num*) →* core::bool*};
+    #t69.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
+  } =>#t69;
+  core::Map<core::String*, core::num*>* map80 = block {
+    final core::Map<core::String*, core::num*>* #t70 = <core::String*, core::num*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t70.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::num*) →* void};
+    else
+      #t70.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String*, core::num*) →* void};
+    #t70.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
+  } =>#t70;
+  core::List<core::num*>* list81 = block {
+    final core::List<core::num*>* #t71 = <core::num*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t71.{core::List::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
+    else
+      #t71.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
+  } =>#t71;
+  core::Set<core::num*>* set81 = block {
+    final core::Set<core::num*>* #t72 = col::LinkedHashSet::•<core::num*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t72.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
+    else
+      #t72.{core::Set::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
+    #t72.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
+  } =>#t72;
+  core::Map<core::String*, core::num*>* map81 = block {
+    final core::Map<core::String*, core::num*>* #t73 = <core::String*, core::num*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final core::MapEntry<core::String*, core::num*>* #t74 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+        #t73.{core::Map::[]=}{Invariant}(#t74.{core::MapEntry::key}{core::String*}, #t74.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
+    else
+      for (final core::MapEntry<core::String*, core::num*>* #t75 in mapToDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+        #t73.{core::Map::[]=}{Invariant}(#t75.{core::MapEntry::key}{core::String*}, #t75.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
+    #t73.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
+  } =>#t73;
+  core::List<dynamic>* list82 = block {
+    final core::List<dynamic>* #t76 = <dynamic>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t76.{core::List::addAll}{Invariant}(listInt){(core::Iterable<dynamic>*) →* void};
+    else
+      #t76.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
+  } =>#t76;
+  core::Set<dynamic>* set82 = block {
+    final core::Set<dynamic>* #t77 = col::LinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t77.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<dynamic>*) →* void};
+    else
+      #t77.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
+    #t77.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t77;
+  core::Set<dynamic>* map82 = block {
+    final core::Set<dynamic>* #t78 = col::LinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t78.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
+                                     ^"){(dynamic) →* core::bool*};
+    else
+      #t78.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
+    #t78.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t78;
+  core::List<core::num*>* list83 = block {
+    final core::List<core::num*>* #t79 = <core::num*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t79.{core::List::add}{Invariant}(42){(core::num*) →* void};
+    else
+      #t79.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
+  } =>#t79;
+  core::Set<core::num*>* set83 = block {
+    final core::Set<core::num*>* #t80 = col::LinkedHashSet::•<core::num*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t80.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
+    else
+      #t80.{core::Set::add}{Invariant}(3.14){(core::num*) →* core::bool*};
+    #t80.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
+  } =>#t80;
+  core::Map<core::String*, core::num*>* map83 = block {
+    final core::Map<core::String*, core::num*>* #t81 = <core::String*, core::num*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final core::MapEntry<core::String*, core::num*>* #t82 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+        #t81.{core::Map::[]=}{Invariant}(#t82.{core::MapEntry::key}{core::String*}, #t82.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
+    else
+      #t81.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String*, core::num*) →* void};
+    #t81.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
+  } =>#t81;
+  core::List<core::int*>* list90 = block {
+    final core::List<core::int*>* #t83 = <core::int*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t83.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
+  } =>#t83;
+  core::Set<core::int*>* set90 = block {
+    final core::Set<core::int*>* #t84 = col::LinkedHashSet::•<core::int*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t84.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
+    #t84.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t84;
+  core::Map<core::String*, core::int*>* map90 = block {
+    final core::Map<core::String*, core::int*>* #t85 = <core::String*, core::int*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t85.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
+    #t85.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t85;
+  core::List<core::int*>* list91 = block {
+    final core::List<core::int*>* #t86 = <core::int*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final dynamic #t87 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+        final core::int* #t88 = #t87 as{TypeError} core::int*;
+        #t86.{core::List::add}{Invariant}(#t88){(core::int*) →* void};
+      }
+  } =>#t86;
+  core::Set<core::int*>* set91 = block {
+    final core::Set<core::int*>* #t89 = col::LinkedHashSet::•<core::int*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final dynamic #t90 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+        final core::int* #t91 = #t90 as{TypeError} core::int*;
+        #t89.{core::Set::add}{Invariant}(#t91){(core::int*) →* core::bool*};
+      }
+    #t89.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t89;
+  core::Map<core::String*, core::int*>* map91 = block {
+    final core::Map<core::String*, core::int*>* #t92 = <core::String*, core::int*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final core::MapEntry<dynamic, dynamic>* #t93 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}) {
+        final core::String* #t94 = #t93.{core::MapEntry::key}{dynamic} as{TypeError} core::String*;
+        final core::int* #t95 = #t93.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+        #t92.{core::Map::[]=}{Invariant}(#t94, #t95){(core::String*, core::int*) →* void};
+      }
+    #t92.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t92;
+  core::List<core::int*>* list100 = block {
+    final core::List<core::int*>* #t96 = <core::int*>[];
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
+      #t96.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t96;
+  core::Set<core::int*>* set100 = block {
+    final core::Set<core::int*>* #t97 = col::LinkedHashSet::•<core::int*>();
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
+      #t97.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+  } =>#t97;
+  core::Map<core::int*, core::int*>* map100 = block {
+    final core::Map<core::int*, core::int*>* #t98 = <core::int*, core::int*>{};
+    if(dynVar as{TypeError,ForDynamic} core::bool*)
+      #t98.{core::Map::[]=}{Invariant}(42, 42){(core::int*, core::int*) →* void};
+  } =>#t98;
+}
+static method testIfElementErrors(core::Map<core::int*, core::int*>* map) → dynamic {
+  block {
+    final core::List<core::int*>* #t99 = <core::int*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t99.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>[if (oracle(\"foo\")) \"bar\"];
+                           ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
+  } =>#t99;
+  block {
+    final core::Set<core::int*>* #t100 = col::LinkedHashSet::•<core::int*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t100.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>{if (oracle(\"foo\")) \"bar\", null};
+                           ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
+    #t100.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t100;
+  block {
+    final core::Map<core::String*, core::int*>* #t101 = <core::String*, core::int*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t101.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
+                                          ^" in "bar" as{TypeError} core::int*){(core::String*, core::int*) →* void};
+    #t101.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t101;
+  block {
+    final core::List<core::int*>* #t102 = <core::int*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t102.{core::List::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>[if (oracle(\"foo\")) ...[\"bar\"]];
+                               ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
+  } =>#t102;
+  block {
+    final core::Set<core::int*>* #t103 = col::LinkedHashSet::•<core::int*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t103.{core::Set::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
+                               ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
+    #t103.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t103;
+  block {
+    final core::Map<core::String*, core::int*>* #t104 = <core::String*, core::int*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      for (final core::MapEntry<core::String*, core::int*>* #t105 in <core::String*, core::int*>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
+                                              ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        #t104.{core::Map::[]=}{Invariant}(#t105.{core::MapEntry::key}{core::String*}, #t105.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t104.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t104;
+  block {
+    final core::List<core::int*>* #t106 = <core::int*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t106.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[if (oracle(\"foo\")) ...map];
+                              ^"){(core::int*) →* void};
+  } =>#t106;
+  block {
+    final core::Set<core::int*>* #t107 = col::LinkedHashSet::•<core::int*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t107.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>{if (oracle(\"foo\")) ...map, null};
+                              ^"){(core::int*) →* core::bool*};
+    #t107.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t107;
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
+                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
+                                      ^": null};
+  block {
+    final core::List<core::String*>* #t108 = <core::String*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  <String>[if (oracle(\"foo\")) 42 else 3.14];
+                              ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
+    else
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  <String>[if (oracle(\"foo\")) 42 else 3.14];
+                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
+  } =>#t108;
+  block {
+    final core::Set<core::String*>* #t109 = col::LinkedHashSet::•<core::String*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  <String>{if (oracle(\"foo\")) 42 else 3.14, null};
+                              ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
+    else
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  <String>{if (oracle(\"foo\")) 42 else 3.14, null};
+                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
+    #t109.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
+  } =>#t109;
+  block {
+    final core::Map<core::String*, core::String*>* #t110 = <core::String*, core::String*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t110.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
+                                             ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
+    else
+      #t110.{core::Map::[]=}{Invariant}("baz", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
+                                                            ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
+    #t110.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
+  } =>#t110;
+  block {
+    final core::List<core::int*>* #t111 = <core::int*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t111.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[if (oracle(\"foo\")) ...map else 42];
+                              ^"){(core::int*) →* void};
+    else
+      #t111.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t111;
+  block {
+    final core::Set<core::int*>* #t112 = col::LinkedHashSet::•<core::int*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t112.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>{if (oracle(\"foo\")) ...map else 42, null};
+                              ^"){(core::int*) →* core::bool*};
+    else
+      #t112.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t112.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t112;
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
+                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
+                                      ^": null};
+  block {
+    final core::List<core::int*>* #t113 = <core::int*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t113.{core::List::add}{Invariant}(42){(core::int*) →* void};
+    else
+      #t113.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[if (oracle(\"foo\")) 42 else ...map];
+                                      ^"){(core::int*) →* void};
+  } =>#t113;
+  block {
+    final core::Set<core::int*>* #t114 = col::LinkedHashSet::•<core::int*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t114.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>{if (oracle(\"foo\")) ...map else 42, null};
+                              ^"){(core::int*) →* core::bool*};
+    else
+      #t114.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t114.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t114;
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
+                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
+                                                     ^": null};
+  core::Set<dynamic>* set10 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  Set<dynamic> set10 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
+                       ^";
+  core::Map<dynamic, dynamic>* map10 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:107:53: Error: Expected ':' after this.
+  Map<dynamic, dynamic> map10 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
+                                                    ^": null};
+  core::Set<dynamic>* set11 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  Set<dynamic> set11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
+                       ^";
+  core::Map<dynamic, dynamic>* map11 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:109:70: Error: Expected ':' after this.
+  Map<dynamic, dynamic> map11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
+                                                                     ^": null};
+  core::Map<invalid-type, Null>* map12 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:35: Error: Expected ':' after this.
+  var map12 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
+                                  ^": null};
+  core::Map<invalid-type, Null>* map13 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:52: Error: Expected ':' after this.
+  var map13 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
+                                                   ^": null};
+  core::List<core::int*>* list20 = block {
+    final core::List<core::int*>* #t115 = <core::int*>[];
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  List<int> list20 = [if (42) 42];
+                          ^" in 42 as{TypeError} core::bool*)
+      #t115.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t115;
+  core::Set<core::int*>* set20 = block {
+    final core::Set<core::int*>* #t116 = col::LinkedHashSet::•<core::int*>();
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  Set<int> set20 = {if (42) 42};
+                        ^" in 42 as{TypeError} core::bool*)
+      #t116.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+  } =>#t116;
+  core::Map<core::int*, core::int*>* map30 = block {
+    final core::Map<core::int*, core::int*>* #t117 = <core::int*, core::int*>{};
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  Map<int, int> map30 = {if (42) 42: 42};
+                             ^" in 42 as{TypeError} core::bool*)
+      #t117.{core::Map::[]=}{Invariant}(42, 42){(core::int*, core::int*) →* void};
+  } =>#t117;
+  core::List<core::String*>* list40 = block {
+    final core::List<core::String*>* #t118 = <core::String*>[];
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+  List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
+                                                    ^" in true as{TypeError} core::String*){(core::String*) →* void};
+    else
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
+                                                              ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
+  } =>#t118;
+  core::Set<core::String*>* set40 = block {
+    final core::Set<core::String*>* #t119 = col::LinkedHashSet::•<core::String*>();
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+  Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
+                                                  ^" in true as{TypeError} core::String*){(core::String*) →* core::bool*};
+    else
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
+                                                            ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
+  } =>#t119;
+  core::Map<core::String*, core::int*>* map40 = block {
+    final core::Map<core::String*, core::int*>* #t120 = <core::String*, core::int*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+  Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
+                                                            ^" in true as{TypeError} core::String*, 42){(core::String*, core::int*) →* void};
+    else
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
+                                                                          ^" in 42 as{TypeError} core::String*, 42){(core::String*, core::int*) →* void};
+  } =>#t120;
+  core::Map<core::int*, core::String*>* map41 = block {
+    final core::Map<core::int*, core::String*>* #t121 = <core::int*, core::String*>{};
+    if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+  Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
+                                                                ^" in true as{TypeError} core::String*){(core::int*, core::String*) →* void};
+    else
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
+                                                                              ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
+  } =>#t121;
+}
+static method testForElement(dynamic dynVar, core::List<core::int*>* listInt, core::List<core::double*>* listDouble, core::int* index, core::Map<core::String*, core::int*>* mapStringInt, core::Map<core::String*, core::double*>* mapStringDouble) → dynamic {
+  core::List<core::int*>* list10 = block {
+    final core::List<core::int*>* #t122 = <core::int*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t122.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t122;
+  core::Set<core::int*>* set10 = block {
+    final core::Set<core::int*>* #t123 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t123.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t123.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t123;
+  core::Map<core::String*, core::int*>* map10 = block {
+    final core::Map<core::String*, core::int*>* #t124 = <core::String*, core::int*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t124.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
+    #t124.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t124;
+  core::List<dynamic>* list11 = block {
+    final core::List<dynamic>* #t125 = <dynamic>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t125.{core::List::add}{Invariant}(dynVar){(dynamic) →* void};
+  } =>#t125;
+  core::Set<dynamic>* set11 = block {
+    final core::Set<dynamic>* #t126 = col::LinkedHashSet::•<dynamic>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t126.{core::Set::add}{Invariant}(dynVar){(dynamic) →* core::bool*};
+    #t126.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t126;
+  core::Map<core::String*, dynamic>* map11 = block {
+    final core::Map<core::String*, dynamic>* #t127 = <core::String*, dynamic>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t127.{core::Map::[]=}{Invariant}("bar", dynVar){(core::String*, dynamic) →* void};
+    #t127.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t127;
+  core::List<core::List<core::int*>*>* list12 = block {
+    final core::List<core::List<core::int*>*>* #t128 = <core::List<core::int*>*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t128.{core::List::add}{Invariant}(<core::int*>[42]){(core::List<core::int*>*) →* void};
+  } =>#t128;
+  core::Set<core::List<core::int*>*>* set12 = block {
+    final core::Set<core::List<core::int*>*>* #t129 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t129.{core::Set::add}{Invariant}(<core::int*>[42]){(core::List<core::int*>*) →* core::bool*};
+    #t129.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t129;
+  core::Map<core::String*, core::List<core::int*>*>* map12 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t130 = <core::String*, core::List<core::int*>*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t130.{core::Map::[]=}{Invariant}("bar", <core::int*>[42]){(core::String*, core::List<core::int*>*) →* void};
+    #t130.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t130;
+  core::List<core::int*>* list20 = block {
+    final core::List<core::int*>* #t131 = <core::int*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t131.{core::List::addAll}{Invariant}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
+  } =>#t131;
+  core::Set<core::int*>* set20 = block {
+    final core::Set<core::int*>* #t132 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t132.{core::Set::addAll}{Invariant}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
+    #t132.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t132;
+  core::Map<core::String*, core::int*>* map20 = block {
+    final core::Map<core::String*, core::int*>* #t133 = <core::String*, core::int*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<core::String*, core::int*>* #t134 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        #t133.{core::Map::[]=}{Invariant}(#t134.{core::MapEntry::key}{core::String*}, #t134.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t133.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t133;
+  core::List<dynamic>* list21 = block {
+    final core::List<dynamic>* #t135 = <dynamic>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t135.{core::List::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
+  } =>#t135;
+  core::Set<dynamic>* set21 = block {
+    final core::Set<dynamic>* #t136 = col::LinkedHashSet::•<dynamic>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t136.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
+    #t136.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t136;
+  core::Map<core::String*, dynamic>* map21 = block {
+    final core::Map<core::String*, dynamic>* #t137 = <core::String*, dynamic>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<core::String*, dynamic>* #t138 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+        #t137.{core::Map::[]=}{Invariant}(#t138.{core::MapEntry::key}{core::String*}, #t138.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
+    #t137.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t137;
+  core::List<core::List<core::int*>*>* list22 = block {
+    final core::List<core::List<core::int*>*>* #t139 = <core::List<core::int*>*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t139.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t139;
+  core::Set<core::List<core::int*>*>* set22 = block {
+    final core::Set<core::List<core::int*>*>* #t140 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t140.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t140.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t140;
+  core::Map<core::String*, core::List<core::int*>*>* map22 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t141 = <core::String*, core::List<core::int*>*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t142 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        #t141.{core::Map::[]=}{Invariant}(#t142.{core::MapEntry::key}{core::String*}, #t142.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t141.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t141;
+  core::List<core::int*>* list30 = block {
+    final core::List<core::int*>* #t143 = <core::int*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t143.{core::List::addAll}{Invariant}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
+  } =>#t143;
+  core::Set<core::int*>* set30 = block {
+    final core::Set<core::int*>* #t144 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t144.{core::Set::addAll}{Invariant}(<core::int*>[42]){(core::Iterable<core::int*>*) →* void};
+    #t144.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t144;
+  core::Map<core::String*, core::int*>* map30 = block {
+    final core::Map<core::String*, core::int*>* #t145 = <core::String*, core::int*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<core::String*, core::int*>* #t146 in <core::String*, core::int*>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+          #t145.{core::Map::[]=}{Invariant}(#t146.{core::MapEntry::key}{core::String*}, #t146.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t145.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t145;
+  core::List<dynamic>* list31 = block {
+    final core::List<dynamic>* #t147 = <dynamic>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t147.{core::List::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
+  } =>#t147;
+  core::Set<dynamic>* set31 = block {
+    final core::Set<dynamic>* #t148 = col::LinkedHashSet::•<dynamic>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t148.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>*) →* void};
+    #t148.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t148;
+  core::Map<core::String*, dynamic>* map31 = block {
+    final core::Map<core::String*, dynamic>* #t149 = <core::String*, dynamic>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<core::String*, dynamic>* #t150 in <core::String*, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>>})
+          #t149.{core::Map::[]=}{Invariant}(#t150.{core::MapEntry::key}{core::String*}, #t150.{core::MapEntry::value}{dynamic}){(core::String*, dynamic) →* void};
+    #t149.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t149;
+  core::List<core::List<core::int*>*>* list33 = block {
+    final core::List<core::List<core::int*>*>* #t151 = <core::List<core::int*>*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t151.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t151;
+  core::Set<core::List<core::int*>*>* set33 = block {
+    final core::Set<core::List<core::int*>*>* #t152 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t152.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[42]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t152.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t152;
+  core::Map<core::String*, core::List<core::int*>*>* map33 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t153 = <core::String*, core::List<core::int*>*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t154 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+          #t153.{core::Map::[]=}{Invariant}(#t154.{core::MapEntry::key}{core::String*}, #t154.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t153.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t153;
+  core::List<core::List<core::int*>*>* list40 = block {
+    final core::List<core::List<core::int*>*>* #t155 = <core::List<core::int*>*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t155.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t155;
+  core::Set<core::List<core::int*>*>* set40 = block {
+    final core::Set<core::List<core::int*>*>* #t156 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t156.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t156.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t156;
+  core::Map<core::String*, core::List<core::int*>*>* map40 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t157 = <core::String*, core::List<core::int*>*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t158 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        #t157.{core::Map::[]=}{Invariant}(#t158.{core::MapEntry::key}{core::String*}, #t158.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t157.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t157;
+  core::List<core::List<core::int*>*>* list41 = block {
+    final core::List<core::List<core::int*>*>* #t159 = <core::List<core::int*>*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t159.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int*>*>* #t160 = col::LinkedHashSet::•<core::List<core::int*>*>();
+        #t160.{core::Set::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+      } =>#t160){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t159;
+  core::Set<core::List<core::int*>*>* set41 = block {
+    final core::Set<core::List<core::int*>*>* #t161 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t161.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int*>*>* #t162 = col::LinkedHashSet::•<core::List<core::int*>*>();
+        #t162.{core::Set::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+      } =>#t162){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t161.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t161;
+  core::List<core::List<core::int*>*>* list42 = block {
+    final core::List<core::List<core::int*>*>* #t163 = <core::List<core::int*>*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t163.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t163;
+  core::Set<core::List<core::int*>*>* set42 = block {
+    final core::Set<core::List<core::int*>*>* #t164 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t164.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t164.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t164;
+  core::Map<core::String*, core::List<core::int*>*>* map42 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t165 = <core::String*, core::List<core::int*>*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t166 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+          #t165.{core::Map::[]=}{Invariant}(#t166.{core::MapEntry::key}{core::String*}, #t166.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t165.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t165;
+  core::List<core::int*>* list50 = block {
+    final core::List<core::int*>* #t167 = <core::int*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t167.{core::List::addAll}{Invariant}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
+  } =>#t167;
+  core::Set<core::int*>* set50 = block {
+    final core::Set<core::int*>* #t168 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t168.{core::Set::addAll}{Invariant}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
+    #t168.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t168;
+  core::Map<core::String*, core::int*>* map50 = block {
+    final core::Map<core::String*, core::int*>* #t169 = <core::String*, core::int*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<core::String*, core::int*>* #t170 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        #t169.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}{core::String*}, #t170.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t169.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t169;
+  core::List<core::int*>* list51 = block {
+    final core::List<core::int*>* #t171 = <core::int*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t171.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::int*>* #t172 = col::LinkedHashSet::•<core::int*>();
+      } =>#t172){(core::Iterable<core::int*>*) →* void};
+  } =>#t171;
+  core::Set<core::int*>* set51 = block {
+    final core::Set<core::int*>* #t173 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t173.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::int*>* #t174 = col::LinkedHashSet::•<core::int*>();
+      } =>#t174){(core::Iterable<core::int*>*) →* void};
+    #t173.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t173;
+  core::List<core::int*>* list52 = block {
+    final core::List<core::int*>* #t175 = <core::int*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t175.{core::List::addAll}{Invariant}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
+  } =>#t175;
+  core::Set<core::int*>* set52 = block {
+    final core::Set<core::int*>* #t176 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t176.{core::Set::addAll}{Invariant}(<core::int*>[]){(core::Iterable<core::int*>*) →* void};
+    #t176.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t176;
+  core::List<core::List<core::int*>*>* list60 = block {
+    final core::List<core::List<core::int*>*>* #t177 = <core::List<core::int*>*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t177.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t177;
+  core::Set<core::List<core::int*>*>* set60 = block {
+    final core::Set<core::List<core::int*>*>* #t178 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t178.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t178.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t178;
+  core::Map<core::String*, core::List<core::int*>*>* map60 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t179 = <core::String*, core::List<core::int*>*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t180 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+        #t179.{core::Map::[]=}{Invariant}(#t180.{core::MapEntry::key}{core::String*}, #t180.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t179.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t179;
+  core::List<core::List<core::int*>*>* list61 = block {
+    final core::List<core::List<core::int*>*>* #t181 = <core::List<core::int*>*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t181.{core::List::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+  } =>#t181;
+  core::Set<core::List<core::int*>*>* set61 = block {
+    final core::Set<core::List<core::int*>*>* #t182 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t182.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
+    #t182.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t182;
+  core::Map<core::String*, core::List<core::int*>*>* map61 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t183 = <core::String*, core::List<core::int*>*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t184 in <core::String*, core::List<core::int*>*>{"bar": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+          #t183.{core::Map::[]=}{Invariant}(#t184.{core::MapEntry::key}{core::String*}, #t184.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+    #t183.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t183;
+  core::List<core::List<core::int*>*>* list70 = block {
+    final core::List<core::List<core::int*>*>* #t185 = <core::List<core::int*>*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t185.{core::List::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* void};
+  } =>#t185;
+  core::Set<core::List<core::int*>*>* set70 = block {
+    final core::Set<core::List<core::int*>*>* #t186 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t186.{core::Set::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+    #t186.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t186;
+  core::Map<core::String*, core::List<core::int*>*>* map70 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t187 = <core::String*, core::List<core::int*>*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t187.{core::Map::[]=}{Invariant}("bar", <core::int*>[]){(core::String*, core::List<core::int*>*) →* void};
+    #t187.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t187;
+  core::List<core::List<core::int*>*>* list71 = block {
+    final core::List<core::List<core::int*>*>* #t188 = <core::List<core::int*>*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t188.{core::List::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* void};
+  } =>#t188;
+  core::Set<core::List<core::int*>*>* set71 = block {
+    final core::Set<core::List<core::int*>*>* #t189 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t189.{core::Set::add}{Invariant}(<core::int*>[]){(core::List<core::int*>*) →* core::bool*};
+    #t189.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
+  } =>#t189;
+  core::Map<core::String*, core::List<core::int*>*>* map71 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t190 = <core::String*, core::List<core::int*>*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t190.{core::Map::[]=}{Invariant}("bar", <core::int*>[]){(core::String*, core::List<core::int*>*) →* void};
+    #t190.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t190;
+  core::List<core::num*>* list80 = block {
+    final core::List<core::num*>* #t191 = <core::num*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t191.{core::List::add}{Invariant}(42){(core::num*) →* void};
+      else
+        #t191.{core::List::add}{Invariant}(3.14){(core::num*) →* void};
+  } =>#t191;
+  core::Set<core::num*>* set80 = block {
+    final core::Set<core::num*>* #t192 = col::LinkedHashSet::•<core::num*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t192.{core::Set::add}{Invariant}(42){(core::num*) →* core::bool*};
+      else
+        #t192.{core::Set::add}{Invariant}(3.14){(core::num*) →* core::bool*};
+    #t192.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
+  } =>#t192;
+  core::Map<core::String*, core::num*>* map80 = block {
+    final core::Map<core::String*, core::num*>* #t193 = <core::String*, core::num*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t193.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::num*) →* void};
+      else
+        #t193.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String*, core::num*) →* void};
+    #t193.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
+  } =>#t193;
+  core::List<core::num*>* list81 = block {
+    final core::List<core::num*>* #t194 = <core::num*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t194.{core::List::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
+      else
+        #t194.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
+  } =>#t194;
+  core::Set<core::num*>* set81 = block {
+    final core::Set<core::num*>* #t195 = col::LinkedHashSet::•<core::num*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t195.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
+      else
+        #t195.{core::Set::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
+    #t195.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
+  } =>#t195;
+  core::Map<core::String*, core::num*>* map81 = block {
+    final core::Map<core::String*, core::num*>* #t196 = <core::String*, core::num*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<core::String*, core::num*>* #t197 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+          #t196.{core::Map::[]=}{Invariant}(#t197.{core::MapEntry::key}{core::String*}, #t197.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
+      else
+        for (final core::MapEntry<core::String*, core::num*>* #t198 in mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+          #t196.{core::Map::[]=}{Invariant}(#t198.{core::MapEntry::key}{core::String*}, #t198.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
+    #t196.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
+  } =>#t196;
+  core::List<dynamic>* list82 = block {
+    final core::List<dynamic>* #t199 = <dynamic>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t199.{core::List::addAll}{Invariant}(listInt){(core::Iterable<dynamic>*) →* void};
+      else
+        #t199.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
+  } =>#t199;
+  core::Set<dynamic>* set82 = block {
+    final core::Set<dynamic>* #t200 = col::LinkedHashSet::•<dynamic>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t200.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<dynamic>*) →* void};
+      else
+        #t200.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*){(core::Iterable<dynamic>*) →* void};
+    #t200.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t200;
+  core::Map<dynamic, dynamic>* map82 = block {
+    final core::Map<dynamic, dynamic>* #t201 = <dynamic, dynamic>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<dynamic, dynamic>* #t202 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+          #t201.{core::Map::[]=}{Invariant}(#t202.{core::MapEntry::key}{dynamic}, #t202.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+      else
+        for (final core::MapEntry<dynamic, dynamic>* #t203 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+          #t201.{core::Map::[]=}{Invariant}(#t203.{core::MapEntry::key}{dynamic}, #t203.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+    #t201.{core::Map::[]=}{Invariant}("baz", null){(dynamic, dynamic) →* void};
+  } =>#t201;
+  core::List<core::num*>* list83 = block {
+    final core::List<core::num*>* #t204 = <core::num*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t204.{core::List::add}{Invariant}(42){(core::num*) →* void};
+      else
+        #t204.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num*>*) →* void};
+  } =>#t204;
+  core::Set<core::num*>* set83 = block {
+    final core::Set<core::num*>* #t205 = col::LinkedHashSet::•<core::num*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t205.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num*>*) →* void};
+      else
+        #t205.{core::Set::add}{Invariant}(3.14){(core::num*) →* core::bool*};
+    #t205.{core::Set::add}{Invariant}(null){(core::num*) →* core::bool*};
+  } =>#t205;
+  core::Map<core::String*, core::num*>* map83 = block {
+    final core::Map<core::String*, core::num*>* #t206 = <core::String*, core::num*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        for (final core::MapEntry<core::String*, core::num*>* #t207 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::num*>>})
+          #t206.{core::Map::[]=}{Invariant}(#t207.{core::MapEntry::key}{core::String*}, #t207.{core::MapEntry::value}{core::num*}){(core::String*, core::num*) →* void};
+      else
+        #t206.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String*, core::num*) →* void};
+    #t206.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::num*) →* void};
+  } =>#t206;
+  core::List<core::int*>* list90 = block {
+    final core::List<core::int*>* #t208 = <core::int*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t208.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
+  } =>#t208;
+  core::Set<core::int*>* set90 = block {
+    final core::Set<core::int*>* #t209 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t209.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
+    #t209.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t209;
+  core::Map<core::String*, core::int*>* map90 = block {
+    final core::Map<core::String*, core::int*>* #t210 = <core::String*, core::int*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t210.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
+    #t210.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t210;
+  core::List<core::int*>* list91 = block {
+    final core::List<core::int*>* #t211 = <core::int*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final dynamic #t212 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+        final core::int* #t213 = #t212 as{TypeError} core::int*;
+        #t211.{core::List::add}{Invariant}(#t213){(core::int*) →* void};
+      }
+  } =>#t211;
+  core::Set<core::int*>* set91 = block {
+    final core::Set<core::int*>* #t214 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final dynamic #t215 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+        final core::int* #t216 = #t215 as{TypeError} core::int*;
+        #t214.{core::Set::add}{Invariant}(#t216){(core::int*) →* core::bool*};
+      }
+    #t214.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t214;
+  core::Map<core::String*, core::int*>* map91 = block {
+    final core::Map<core::String*, core::int*>* #t217 = <core::String*, core::int*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<dynamic, dynamic>* #t218 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>}) {
+        final core::String* #t219 = #t218.{core::MapEntry::key}{dynamic} as{TypeError} core::String*;
+        final core::int* #t220 = #t218.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+        #t217.{core::Map::[]=}{Invariant}(#t219, #t220){(core::String*, core::int*) →* void};
+      }
+    #t217.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t217;
+  core::List<core::int*>* list100 = block {
+    final core::List<core::int*>* #t221 = <core::int*>[];
+    for (final core::int* #t222 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
+      #t221.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t221;
+  core::Set<core::int*>* set100 = block {
+    final core::Set<core::int*>* #t223 = col::LinkedHashSet::•<core::int*>();
+    for (final core::int* #t224 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
+      #t223.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+  } =>#t223;
+  core::Map<core::String*, core::int*>* map100 = block {
+    final core::Map<core::String*, core::int*>* #t225 = <core::String*, core::int*>{};
+    for (final core::int* #t226 = index = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; index = index.{core::num::+}(1){(core::num*) →* core::int*})
+      #t225.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
+  } =>#t225;
+  core::List<core::int*>* list110 = block {
+    final core::List<core::int*>* #t227 = <core::int*>[];
+    for (core::int* i in <core::int*>[1, 2, 3])
+      #t227.{core::List::add}{Invariant}(i){(core::int*) →* void};
+  } =>#t227;
+  core::Set<core::int*>* set110 = block {
+    final core::Set<core::int*>* #t228 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i in <core::int*>[1, 2, 3])
+      #t228.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+    #t228.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t228;
+  core::Map<core::String*, core::int*>* map110 = block {
+    final core::Map<core::String*, core::int*>* #t229 = <core::String*, core::int*>{};
+    for (core::int* i in <core::int*>[1, 2, 3])
+      #t229.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+    #t229.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t229;
+  core::List<core::int*>* list120 = block {
+    final core::List<core::int*>* #t230 = <core::int*>[];
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t230.{core::List::add}{Invariant}(i as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
+  } =>#t230;
+  core::Set<core::int*>* set120 = block {
+    final core::Set<core::int*>* #t231 = col::LinkedHashSet::•<core::int*>();
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t231.{core::Set::add}{Invariant}(i as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
+    #t231.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t231;
+  core::Map<core::String*, core::int*>* map120 = block {
+    final core::Map<core::String*, core::int*>* #t232 = <core::String*, core::int*>{};
+    for (dynamic i in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*)
+      #t232.{core::Map::[]=}{Invariant}("bar", i as{TypeError,ForDynamic} core::int*){(core::String*, core::int*) →* void};
+    #t232.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t232;
+  core::List<core::int*>* list130 = block {
+    final core::List<core::int*>* #t233 = <core::int*>[];
+    for (core::int* i = 1; i.{core::num::<}(2){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t233.{core::List::add}{Invariant}(i){(core::int*) →* void};
+  } =>#t233;
+  core::Set<core::int*>* set130 = block {
+    final core::Set<core::int*>* #t234 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i = 1; i.{core::num::<}(2){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t234.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+  } =>#t234;
+  core::Map<core::int*, core::int*>* map130 = block {
+    final core::Map<core::int*, core::int*>* #t235 = <core::int*, core::int*>{};
+    for (core::int* i = 1; i.{core::num::<}(2){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t235.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
+  } =>#t235;
+}
+static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic async {
+  block {
+    final core::List<core::int*>* #t236 = <core::int*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
+                                            ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
+  } =>#t236;
+  block {
+    final core::Set<core::int*>* #t237 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
+                                            ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
+    #t237.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t237;
+  block {
+    final core::Map<core::int*, core::int*>* #t238 = <core::int*, core::int*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
+                                                 ^" in "bar" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
+                                                        ^" in "bar" as{TypeError} core::int*){(core::int*, core::int*) →* void};
+    #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
+                                                               ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
+  } =>#t238;
+  block {
+    final core::List<core::int*>* #t239 = <core::int*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t239.{core::List::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
+                                                ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
+  } =>#t239;
+  block {
+    final core::Set<core::int*>* #t240 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t240.{core::Set::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
+                                                ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
+    #t240.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t240;
+  block {
+    final core::Map<core::int*, core::int*>* #t241 = <core::int*, core::int*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<core::int*, core::int*>* #t242 in <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
+                                                     ^" in "bar" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
+                                                            ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
+        #t241.{core::Map::[]=}{Invariant}(#t242.{core::MapEntry::key}{core::int*}, #t242.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
+    #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
+                                                                    ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
+  } =>#t241;
+  block {
+    final core::List<core::int*>* #t243 = <core::int*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
+                                               ^"){(core::int*) →* void};
+  } =>#t243;
+  block {
+    final core::Set<core::int*>* #t244 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
+                                               ^"){(core::int*) →* core::bool*};
+    #t244.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t244;
+  <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
+                                                    ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
+                                                    ^": null};
+  block {
+    final core::List<core::String*>* #t245 = <core::String*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
+                                                             ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
+      else
+        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
+                                                                     ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
+  } =>#t245;
+  block {
+    final core::Set<core::String*>* #t246 = col::LinkedHashSet::•<core::String*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
+                                                             ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
+      else
+        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
+                                                                     ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
+    #t246.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
+  } =>#t246;
+  block {
+    final core::Map<core::String*, core::String*>* #t247 = <core::String*, core::String*>{};
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
+                                                                            ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
+      else
+        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
+                                                                                           ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
+    #t247.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
+  } =>#t247;
+  block {
+    final core::List<core::int*>* #t248 = <core::int*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
+                                                             ^"){(core::int*) →* void};
+      else
+        #t248.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t248;
+  block {
+    final core::Set<core::int*>* #t249 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
+                                                             ^"){(core::int*) →* core::bool*};
+      else
+        #t249.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t249.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t249;
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
+                                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
+                                                                     ^": null};
+  block {
+    final core::List<core::int*>* #t250 = <core::int*>[];
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t250.{core::List::add}{Invariant}(42){(core::int*) →* void};
+      else
+        #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map];
+                                                                     ^"){(core::int*) →* void};
+  } =>#t250;
+  block {
+    final core::Set<core::int*>* #t251 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
+        #t251.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+      else
+        #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map, null};
+                                                                     ^"){(core::int*) →* core::bool*};
+    #t251.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t251;
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
+                                                                                    ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
+                                                                                    ^": null};
+  final core::int* i = 0;
+  block {
+    final core::List<core::int*>* #t252 = <core::int*>[];
+    for (final core::int* #t253 in <core::int*>[1]) {
+      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:230:14: Error: Can't assign to the final variable 'i'.
+  <int>[for (i in <int>[1]) i];
+             ^";
+      #t252.{core::List::add}{Invariant}(i){(core::int*) →* void};
+    }
+  } =>#t252;
+  block {
+    final core::Set<core::int*>* #t254 = col::LinkedHashSet::•<core::int*>();
+    for (final core::int* #t255 in <core::int*>[1]) {
+      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:231:14: Error: Can't assign to the final variable 'i'.
+  <int>{for (i in <int>[1]) i, null};
+             ^";
+      #t254.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+    }
+    #t254.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t254;
+  block {
+    final core::Map<core::String*, core::int*>* #t256 = <core::String*, core::int*>{};
+    for (final core::int* #t257 in <core::int*>[1]) {
+      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:21: Error: Can't assign to the final variable 'i'.
+\t<String, int>{for (i in <int>[1]) \"bar\": i, \"baz\": null};
+\t                   ^";
+      #t256.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+    }
+    #t256.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t256;
+  core::List<dynamic>* list10 = block {
+    final core::List<dynamic>* #t258 = <dynamic>[];
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  var list10 = [for (var i in \"not iterable\") i];
+                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
+      #t258.{core::List::add}{Invariant}(i){(dynamic) →* void};
+  } =>#t258;
+  core::Set<dynamic>* set10 = block {
+    final core::Set<dynamic>* #t259 = col::LinkedHashSet::•<dynamic>();
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  var set10 = {for (var i in \"not iterable\") i, null};
+                             ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
+      #t259.{core::Set::add}{Invariant}(i){(dynamic) →* core::bool*};
+    #t259.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t259;
+  core::Map<core::String*, dynamic>* map10 = block {
+    final core::Map<core::String*, dynamic>* #t260 = <core::String*, dynamic>{};
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  var map10 = {for (var i in \"not iterable\") \"bar\": i, \"baz\": null};
+                             ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
+      #t260.{core::Map::[]=}{Invariant}("bar", i){(core::String*, dynamic) →* void};
+    #t260.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t260;
+  core::List<core::int*>* list20 = block {
+    final core::List<core::int*>* #t261 = <core::int*>[];
+    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var list20 = [for (int i in [\"not\", \"int\"]) i];
+                               ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var list20 = [for (int i in [\"not\", \"int\"]) i];
+                                      ^" in "int" as{TypeError} core::int*])
+      #t261.{core::List::add}{Invariant}(i){(core::int*) →* void};
+  } =>#t261;
+  core::Set<core::int*>* set20 = block {
+    final core::Set<core::int*>* #t262 = col::LinkedHashSet::•<core::int*>();
+    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var set20 = {for (int i in [\"not\", \"int\"]) i, null};
+                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var set20 = {for (int i in [\"not\", \"int\"]) i, null};
+                                     ^" in "int" as{TypeError} core::int*])
+      #t262.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+    #t262.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t262;
+  core::Map<core::String*, core::int*>* map20 = block {
+    final core::Map<core::String*, core::int*>* #t263 = <core::String*, core::int*>{};
+    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
+                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
+                                     ^" in "int" as{TypeError} core::int*])
+      #t263.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+    #t263.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t263;
+  core::List<dynamic>* list30 = block {
+    final core::List<dynamic>* #t264 = <dynamic>[];
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+ - 'Stream' is from 'dart:async'.
+  var list30 = [await for (var i in \"not stream\") i];
+                                    ^" in "not stream" as{TypeError} asy::Stream<dynamic>*)
+      #t264.{core::List::add}{Invariant}(i){(dynamic) →* void};
+  } =>#t264;
+  core::Set<dynamic>* set30 = block {
+    final core::Set<dynamic>* #t265 = col::LinkedHashSet::•<dynamic>();
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+ - 'Stream' is from 'dart:async'.
+  var set30 = {await for (var i in \"not stream\") i, null};
+                                   ^" in "not stream" as{TypeError} asy::Stream<dynamic>*)
+      #t265.{core::Set::add}{Invariant}(i){(dynamic) →* core::bool*};
+    #t265.{core::Set::add}{Invariant}(null){(dynamic) →* core::bool*};
+  } =>#t265;
+  core::Map<core::String*, dynamic>* map30 = block {
+    final core::Map<core::String*, dynamic>* #t266 = <core::String*, dynamic>{};
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+ - 'Stream' is from 'dart:async'.
+  var map30 = {await for (var i in \"not stream\") \"bar\": i, \"baz\": null};
+                                   ^" in "not stream" as{TypeError} asy::Stream<dynamic>*)
+      #t266.{core::Map::[]=}{Invariant}("bar", i){(core::String*, dynamic) →* void};
+    #t266.{core::Map::[]=}{Invariant}("baz", null){(core::String*, dynamic) →* void};
+  } =>#t266;
+  core::List<core::int*>* list40 = block {
+    final core::List<core::int*>* #t267 = <core::int*>[];
+    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
+                                                         ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
+                                                                ^" in "int" as{TypeError} core::int*]))
+      #t267.{core::List::add}{Invariant}(i){(core::int*) →* void};
+  } =>#t267;
+  core::Set<core::int*>* set40 = block {
+    final core::Set<core::int*>* #t268 = col::LinkedHashSet::•<core::int*>();
+    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
+                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
+                                                               ^" in "int" as{TypeError} core::int*]))
+      #t268.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+    #t268.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t268;
+  core::Map<core::String*, core::int*>* map40 = block {
+    final core::Map<core::String*, core::int*>* #t269 = <core::String*, core::int*>{};
+    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
+                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
+                                                               ^" in "int" as{TypeError} core::int*]))
+      #t269.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+    #t269.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t269;
+  core::List<core::int*>* list50 = block {
+    final core::List<core::int*>* #t270 = <core::int*>[];
+    for (; ; )
+      #t270.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t270;
+  core::Set<core::int*>* set50 = block {
+    final core::Set<core::int*>* #t271 = col::LinkedHashSet::•<core::int*>();
+    for (; ; )
+      #t271.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t271.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t271;
+  core::Map<core::String*, core::int*>* map50 = block {
+    final core::Map<core::String*, core::int*>* #t272 = <core::String*, core::int*>{};
+    for (; ; )
+      #t272.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
+    #t272.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t272;
+  core::List<core::int*>* list60 = block {
+    final core::List<core::int*>* #t273 = <core::int*>[];
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+  var list60 = [for (; \"not bool\";) 42];
+                       ^" in "not bool" as{TypeError} core::bool*; )
+      #t273.{core::List::add}{Invariant}(42){(core::int*) →* void};
+  } =>#t273;
+  core::Set<core::int*>* set60 = block {
+    final core::Set<core::int*>* #t274 = col::LinkedHashSet::•<core::int*>();
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+  var set60 = {for (; \"not bool\";) 42, null};
+                      ^" in "not bool" as{TypeError} core::bool*; )
+      #t274.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+    #t274.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t274;
+  core::Map<core::String*, core::int*>* map60 = block {
+    final core::Map<core::String*, core::int*>* #t275 = <core::String*, core::int*>{};
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+  var map60 = {for (; \"not bool\";) \"bar\": 42, \"baz\": null};
+                      ^" in "not bool" as{TypeError} core::bool*; )
+      #t275.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
+    #t275.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
+  } =>#t275;
+}
+static method testForElementErrorsNotAsync(asy::Stream<core::int*>* stream) → dynamic {
+  block {
+    final core::List<core::int*>* #t276 = <core::int*>[];
+    await for (core::int* i in stream)
+      #t276.{core::List::add}{Invariant}(i){(core::int*) →* void};
+  } =>#t276;
+  block {
+    final core::Set<core::int*>* #t277 = col::LinkedHashSet::•<core::int*>();
+    await for (core::int* i in stream)
+      #t277.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+  } =>#t277;
+  block {
+    final core::Map<core::String*, core::int*>* #t278 = <core::String*, core::int*>{};
+    await for (core::int* i in stream)
+      #t278.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
+  } =>#t278;
+}
+static method testPromotion(self::A* a) → dynamic {
+  core::List<core::int*>* list10 = block {
+    final core::List<core::int*>* #t279 = <core::int*>[];
+    if(a is self::B*)
+      #t279.{core::List::add}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* void};
+  } =>#t279;
+  core::Set<core::int*>* set10 = block {
+    final core::Set<core::int*>* #t280 = col::LinkedHashSet::•<core::int*>();
+    if(a is self::B*)
+      #t280.{core::Set::add}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}){(core::int*) →* core::bool*};
+  } =>#t280;
+  core::Map<core::int*, core::int*>* map10 = block {
+    final core::Map<core::int*, core::int*>* #t281 = <core::int*, core::int*>{};
+    if(a is self::B*)
+      #t281.{core::Map::[]=}{Invariant}(a{self::B*}.{self::B::foo}{core::int*}, a{self::B*}.{self::B::foo}{core::int*}){(core::int*, core::int*) →* void};
+  } =>#t281;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/covariant_equals.dart.weak.modular.expect b/pkg/front_end/testcases/general/covariant_equals.dart.weak.modular.expect
new file mode 100644
index 0000000..3f1296f
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_equals.dart.weak.modular.expect
@@ -0,0 +1,284 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   a == c_dynamic; // error
+//        ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   a == c_int; // error
+//        ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   a == c_string; // error
+//        ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+//  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   a == d; // error
+//        ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   b == c_dynamic; // error
+//        ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   b == c_int; // error
+//        ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   b == c_string; // error
+//        ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+//  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   b == d; // error
+//        ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>'.
+//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   c_dynamic == a; // error
+//                ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>'.
+//  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   c_dynamic == b; // error
+//                ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   c_int == a; // error
+//            ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+//  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   c_int == b; // error
+//            ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   c_int == c_string; // error
+//            ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>'.
+//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   c_string == a; // error
+//               ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>'.
+//  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   c_string == b; // error
+//               ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   c_string == c_int; // error
+//               ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>'.
+//  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   c_string == d; // error
+//               ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   d == a; // error
+//        ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+//  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   d == b; // error
+//        ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   d == c_string; // error
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator ==(covariant-by-declaration self::A* other) → core::bool*
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator ==(covariant-by-declaration self::A* other) → core::bool*
+    return true;
+}
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T*>* other) → core::bool*
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C<core::int*> {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+}
+static method main() → dynamic {}
+static method test(self::A* a, self::B* b, self::C<dynamic>* c_dynamic, self::C<core::int*>* c_int, self::C<core::String*>* c_string, self::D* d) → dynamic {
+  a =={self::A::==}{(self::A*) →* core::bool*} a;
+  a =={self::A::==}{(self::A*) →* core::bool*} b;
+  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  a == c_dynamic; // error
+       ^" in c_dynamic as{TypeError} self::A*;
+  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  a == c_int; // error
+       ^" in c_int as{TypeError} self::A*;
+  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  a == c_string; // error
+       ^" in c_string as{TypeError} self::A*;
+  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+ - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  a == d; // error
+       ^" in d as{TypeError} self::A*;
+  b =={self::B::==}{(self::A*) →* core::bool*} a;
+  b =={self::B::==}{(self::A*) →* core::bool*} b;
+  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  b == c_dynamic; // error
+       ^" in c_dynamic as{TypeError} self::A*;
+  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  b == c_int; // error
+       ^" in c_int as{TypeError} self::A*;
+  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  b == c_string; // error
+       ^" in c_string as{TypeError} self::A*;
+  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+ - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  b == d; // error
+       ^" in d as{TypeError} self::A*;
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>'.
+ - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  c_dynamic == a; // error
+               ^" in a as{TypeError} self::C<dynamic>*;
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>'.
+ - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  c_dynamic == b; // error
+               ^" in b as{TypeError} self::C<dynamic>*;
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_dynamic;
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_int;
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_string;
+  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} d;
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+ - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  c_int == a; // error
+           ^" in a as{TypeError} self::C<core::int*>*;
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+ - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  c_int == b; // error
+           ^" in b as{TypeError} self::C<core::int*>*;
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::int*>*;
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_int;
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  c_int == c_string; // error
+           ^" in c_string as{TypeError} self::C<core::int*>*;
+  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} d;
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>'.
+ - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  c_string == a; // error
+              ^" in a as{TypeError} self::C<core::String*>*;
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>'.
+ - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  c_string == b; // error
+              ^" in b as{TypeError} self::C<core::String*>*;
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::String*>*;
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  c_string == c_int; // error
+              ^" in c_int as{TypeError} self::C<core::String*>*;
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} c_string;
+  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>'.
+ - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  c_string == d; // error
+              ^" in d as{TypeError} self::C<core::String*>*;
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+ - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  d == a; // error
+       ^" in a as{TypeError} self::C<core::int*>*;
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+ - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  d == b; // error
+       ^" in b as{TypeError} self::C<core::int*>*;
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::int*>*;
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_int;
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  d == c_string; // error
+       ^" in c_string as{TypeError} self::C<core::int*>*;
+  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} d;
+}
diff --git a/pkg/front_end/testcases/general/covariant_field.dart.weak.modular.expect b/pkg/front_end/testcases/general/covariant_field.dart.weak.modular.expect
new file mode 100644
index 0000000..6453946
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_field.dart.weak.modular.expect
@@ -0,0 +1,90 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/covariant_field.dart:19:31: Error: The parameter 'value' of the method 'C.invariantField' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'A.invariantField'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void set invariantField(int value) {} // error
+//                               ^
+// pkg/front_end/testcases/general/covariant_field.dart:6:7: Context: This is the overridden method ('invariantField').
+//   num invariantField;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::num* invariantField = null;
+  covariant-by-declaration field core::num* covariantField = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object implements self::A {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract get invariantField() → core::num*;
+  abstract set invariantField(core::num* value) → void;
+  abstract get covariantField() → core::num*;
+  abstract set covariantField(covariant-by-declaration core::num* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object implements self::A {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract get invariantField() → core::int*;
+  set invariantField(core::int* value) → void {}
+  abstract get covariantField() → core::int*;
+  set covariantField(covariant-by-declaration core::int* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D extends core::Object implements self::A {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract get invariantField() → core::int*;
+  set invariantField(covariant-by-declaration core::int* value) → void {}
+  abstract get covariantField() → core::int*;
+  set covariantField(covariant-by-declaration core::int* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_field_override.dart.weak.modular.expect b/pkg/front_end/testcases/general/covariant_field_override.dart.weak.modular.expect
new file mode 100644
index 0000000..fb69f60
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::num* field = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  covariant-by-declaration field core::num* field = null;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::A implements self::B {
+  covariant-by-declaration field core::num* field = null;
+  synthetic constructor •() → self::C*
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_generic.dart.weak.modular.expect b/pkg/front_end/testcases/general/covariant_generic.dart.weak.modular.expect
new file mode 100644
index 0000000..f28d890
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_generic.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Callback<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+class Foo<T extends core::Object* = dynamic> extends core::Object {
+  final field self::Foo::T* finalField;
+  final field (self::Foo::T*) →* void callbackField;
+  covariant-by-class field self::Foo::T* mutableField = null;
+  field (self::Foo::T*) →* void mutableCallbackField = null;
+  constructor •(self::Foo::T* finalField, (self::Foo::T*) →* void callbackField) → self::Foo<self::Foo::T*>*
+    : self::Foo::finalField = finalField, self::Foo::callbackField = callbackField, super core::Object::•()
+    ;
+  method method(covariant-by-class self::Foo::T* x) → void {}
+  set setter(covariant-by-class self::Foo::T* x) → void {}
+  method withCallback((self::Foo::T*) →* void callback) → void {
+    callback(this.{self::Foo::finalField}{self::Foo::T*}){(self::Foo::T*) →* void};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::Foo<core::int*>* fooInt = new self::Foo::•<core::int*>(1, (core::int* x) → Null {});
+  fooInt.{self::Foo::method}(3){(core::int*) →* void};
+  fooInt.{self::Foo::setter} = 3;
+  fooInt.{self::Foo::withCallback}((core::int* x) → Null {}){((core::int*) →* void) →* void};
+  fooInt.{self::Foo::withCallback}((core::num* x) → Null {}){((core::int*) →* void) →* void};
+  fooInt.{self::Foo::mutableField} = 3;
+  fooInt.{self::Foo::mutableCallbackField} = (core::int* x) → Null {};
+  self::Foo<core::num*>* fooNum = fooInt;
+  fooNum.{self::Foo::method}(3){(core::num*) →* void};
+  fooNum.{self::Foo::method}(2.5){(core::num*) →* void};
+  fooNum.{self::Foo::setter} = 3;
+  fooNum.{self::Foo::setter} = 2.5;
+  fooNum.{self::Foo::withCallback}((core::num* x) → Null {}){((core::num*) →* void) →* void};
+  fooNum.{self::Foo::mutableField} = 3;
+  fooNum.{self::Foo::mutableField} = 2.5;
+  let final self::Foo<core::num*>* #t1 = fooNum in let final core::int* #t2 = 3 in (#t1.{self::Foo::mutableCallbackField}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void)(#t2){(core::num*) →* void};
+  let final self::Foo<core::num*>* #t3 = fooNum in let final core::double* #t4 = 2.5 in (#t3.{self::Foo::mutableCallbackField}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void)(#t4){(core::num*) →* void};
+  fooNum.{self::Foo::mutableCallbackField} = (core::num* x) → Null {};
+}
diff --git a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.modular.expect b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.modular.expect
new file mode 100644
index 0000000..0390bb6
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method foo(covariant-by-declaration core::num* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method foo(core::num* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method foo(core::num* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _D&A&B = self::A with self::B /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_D&A&B*
+    : super self::A::•()
+    ;
+  forwarding-stub method foo(covariant-by-declaration core::num* x) → void
+    return super.{self::B::foo}(x);
+}
+class D extends self::_D&A&B implements self::C {
+  synthetic constructor •() → self::D*
+    : super self::_D&A&B::•()
+    ;
+  method foo(covariant-by-declaration core::int* x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_super_check.dart.weak.modular.expect b/pkg/front_end/testcases/general/covariant_super_check.dart.weak.modular.expect
new file mode 100644
index 0000000..044d867
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_super_check.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/covariant_super_check.dart:16:27: Error: The parameter 'a' of the method 'C.method' has type 'String', which does not match the corresponding type, 'num', in the overridden method, 'A.method'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   method(covariant String a) {}
+//                           ^
+// pkg/front_end/testcases/general/covariant_super_check.dart:6:3: Context: This is the overridden method ('method').
+//   method(num a) {}
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method method(core::num* a) → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  method method(dynamic a) → dynamic {}
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  method method(covariant-by-declaration core::String* a) → dynamic {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.modular.expect
new file mode 100644
index 0000000..d28fb6f
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.modular.expect
@@ -0,0 +1,51 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<S extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::S*>*
+    : super core::Object::•()
+    ;
+  method method<covariant-by-class T extends self::A::S*>(covariant-by-class self::A::S* s) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<S extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::S*>*
+    : super core::Object::•()
+    ;
+  method method<covariant-by-class T extends self::B::S*>(covariant-by-declaration covariant-by-class self::B::S* s) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<S extends core::Object* = dynamic> extends self::A<self::C::S*> implements self::B<self::C::S*> {
+  synthetic constructor •() → self::C<self::C::S*>*
+    : super self::A::•()
+    ;
+  forwarding-stub forwarding-semi-stub method method<covariant-by-class T extends self::C::S*>(covariant-by-declaration covariant-by-class self::C::S* s) → void
+    return super.{self::A::method}<self::C::method::T*>(s);
+}
+class D<S extends core::Object* = dynamic> extends self::A<self::D::S*> implements self::B<self::D::S*> {
+  synthetic constructor •() → self::D<self::D::S*>*
+    : super self::A::•()
+    ;
+  forwarding-stub method method<covariant-by-class T extends self::D::S*>(covariant-by-declaration covariant-by-class self::D::S* s) → void
+    return super.{self::A::method}<self::D::method::T*>(s);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/crashes/crash_01/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/crashes/crash_01/main.dart.weak.modular.expect
new file mode 100644
index 0000000..fb38c29
--- /dev/null
+++ b/pkg/front_end/testcases/general/crashes/crash_01/main.dart.weak.modular.expect
@@ -0,0 +1,51 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class SliverConstraints extends core::Object {
+  synthetic constructor •() → self::SliverConstraints
+    : super core::Object::•()
+    ;
+}
+abstract class RenderSliver extends mai::RenderObject {
+  synthetic constructor •() → self::RenderSliver
+    : super mai::RenderObject::•()
+    ;
+  get constraints() → self::SliverConstraints
+    return super.{mai::RenderObject::constraints} as{ForNonNullableByDefault} self::SliverConstraints;
+}
+abstract class _RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin = self::RenderSliver with mai::RenderObjectWithChildMixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin
+    : super self::RenderSliver::•()
+    ;
+  abstract member-signature get constraints() → invalid-type; -> self::RenderSliver::constraints
+}
+abstract class RenderSliverSingleBoxAdapter extends self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin {
+  synthetic constructor •() → self::RenderSliverSingleBoxAdapter
+    : super self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin::•()
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/crashes/crash_01/main_lib.dart:2:3: Error: Type 'Constraints' not found.
+//   Constraints get constraints {}
+//   ^^^^^^^^^^^
+//
+import self as mai;
+import "dart:core" as core;
+
+abstract class RenderObject extends core::Object {
+  synthetic constructor •() → mai::RenderObject
+    : super core::Object::•()
+    ;
+  get constraints() → invalid-type {}
+}
+abstract class RenderObjectWithChildMixin extends mai::RenderObject /*isMixinDeclaration*/  {
+}
diff --git a/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.modular.expect
new file mode 100644
index 0000000..923fadf
--- /dev/null
+++ b/pkg/front_end/testcases/general/crashes/crash_03/main.dart.weak.modular.expect
@@ -0,0 +1,79 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/crashes/crash_03/main.dart:7:57: Error: Type 'MouseTrackerAnnotation' not found.
+// mixin _PlatformViewGestureMixin on RenderBox implements MouseTrackerAnnotation {
+//                                                         ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:7: Error: The getter '_hitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
+//  - '_PlatformViewGestureMixin' is from 'pkg/front_end/testcases/general/crashes/crash_03/main.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named '_hitTestBehavior'.
+//       _hitTestBehavior != PlatformViewHitTestBehavior.transparent;
+//       ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:27: Error: The getter 'PlatformViewHitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
+//  - '_PlatformViewGestureMixin' is from 'pkg/front_end/testcases/general/crashes/crash_03/main.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'PlatformViewHitTestBehavior'.
+//       _hitTestBehavior != PlatformViewHitTestBehavior.transparent;
+//                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class Offset extends core::Object {
+  synthetic constructor •() → self::Offset
+    : super core::Object::•()
+    ;
+}
+abstract class _PlatformViewRenderBox&RenderBox&_PlatformViewGestureMixin = mai::RenderBox with self::_PlatformViewGestureMixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_PlatformViewRenderBox&RenderBox&_PlatformViewGestureMixin
+    : super mai::RenderBox::•()
+    ;
+  mixin-super-stub method hitTestSelf(self::Offset position) → core::bool
+    return super.{self::_PlatformViewGestureMixin::hitTestSelf}(position);
+}
+class PlatformViewRenderBox extends self::_PlatformViewRenderBox&RenderBox&_PlatformViewGestureMixin {
+  synthetic constructor •() → self::PlatformViewRenderBox
+    : super self::_PlatformViewRenderBox&RenderBox&_PlatformViewGestureMixin::•()
+    ;
+}
+abstract class _PlatformViewGestureMixin extends mai::RenderBox /*isMixinDeclaration*/  {
+  method hitTestSelf(self::Offset position) → core::bool
+    return !(invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:7: Error: The getter '_hitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
+ - '_PlatformViewGestureMixin' is from 'pkg/front_end/testcases/general/crashes/crash_03/main.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named '_hitTestBehavior'.
+      _hitTestBehavior != PlatformViewHitTestBehavior.transparent;
+      ^^^^^^^^^^^^^^^^" in this{<unresolved>}._hitTestBehavior =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/general/crashes/crash_03/main.dart:9:27: Error: The getter 'PlatformViewHitTestBehavior' isn't defined for the class '_PlatformViewGestureMixin'.
+ - '_PlatformViewGestureMixin' is from 'pkg/front_end/testcases/general/crashes/crash_03/main.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'PlatformViewHitTestBehavior'.
+      _hitTestBehavior != PlatformViewHitTestBehavior.transparent;
+                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^" in this{<unresolved>}.PlatformViewHitTestBehavior{dynamic}.transparent);
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/crashes/crash_03/main_lib.dart:2:20: Error: Type 'Offset' not found.
+//   bool hitTestSelf(Offset position) => false;
+//                    ^^^^^^
+//
+// pkg/front_end/testcases/general/crashes/crash_03/main_lib.dart:2:20: Error: 'Offset' isn't a type.
+//   bool hitTestSelf(Offset position) => false;
+//                    ^^^^^^
+//
+import self as mai;
+import "dart:core" as core;
+
+abstract class RenderBox extends core::Object {
+  synthetic constructor •() → mai::RenderBox
+    : super core::Object::•()
+    ;
+  method hitTestSelf(invalid-type position) → core::bool
+    return false;
+}
diff --git a/pkg/front_end/testcases/general/crashes/crash_04/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/crashes/crash_04/main.dart.weak.modular.expect
new file mode 100644
index 0000000..9b02f5d
--- /dev/null
+++ b/pkg/front_end/testcases/general/crashes/crash_04/main.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/crashes/crash_04/main.dart:1:19: Error: Type 'C' not found.
+// mixin A<T extends C> on D {}
+//                   ^
+//
+// pkg/front_end/testcases/general/crashes/crash_04/main.dart:1:25: Error: Type 'D' not found.
+// mixin A<T extends C> on D {}
+//                         ^
+//
+// pkg/front_end/testcases/general/crashes/crash_04/main.dart:3:17: Error: Type 'D' not found.
+// class B extends D with A {}
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A<T extends invalid-type> extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class _B&D&A = core::Object with self::A<invalid-type> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B&D&A
+    : super core::Object::•()
+    ;
+}
+class B extends self::_B&D&A {
+  synthetic constructor •() → self::B
+    : super self::_B&D&A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/crashes/crash_05/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/crashes/crash_05/main.dart.weak.modular.expect
new file mode 100644
index 0000000..3a5d2de
--- /dev/null
+++ b/pkg/front_end/testcases/general/crashes/crash_05/main.dart.weak.modular.expect
@@ -0,0 +1,98 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/crashes/crash_05/main.dart:6:20: Error: Type 'PointerEvent' not found.
+//   void handleEvent(PointerEvent event, SliverHitTestEntry entry) {}
+//                    ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/crashes/crash_05/main.dart:10:37: Error: Type 'RenderBox' not found.
+//     with RenderObjectWithChildMixin<RenderBox>, RenderSliverHelpers {}
+//                                     ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/crashes/crash_05/main.dart:10:49: Error: Type 'RenderSliverHelpers' not found.
+//     with RenderObjectWithChildMixin<RenderBox>, RenderSliverHelpers {}
+//                                                 ^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/crashes/crash_05/main.dart:9:16: Error: The type 'RenderSliverHelpers' can't be mixed in.
+// abstract class RenderSliverSingleBoxAdapter extends RenderSliver
+//                ^
+//
+// pkg/front_end/testcases/general/crashes/crash_05/main.dart:9:16: Error: 'RenderSliver' doesn't implement 'RenderObject' so it can't be used with 'RenderObjectWithChildMixin<invalid-type>'.
+//  - 'RenderSliver' is from 'pkg/front_end/testcases/general/crashes/crash_05/main.dart'.
+//  - 'RenderObject' is from 'pkg/front_end/testcases/general/crashes/crash_05/main_lib.dart'.
+//  - 'RenderObjectWithChildMixin' is from 'pkg/front_end/testcases/general/crashes/crash_05/main_lib.dart'.
+// abstract class RenderSliverSingleBoxAdapter extends RenderSliver
+//                ^
+//
+// pkg/front_end/testcases/general/crashes/crash_05/main.dart:6:20: Error: 'PointerEvent' isn't a type.
+//   void handleEvent(PointerEvent event, SliverHitTestEntry entry) {}
+//                    ^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class SliverHitTestEntry extends core::Object {
+  synthetic constructor •() → self::SliverHitTestEntry
+    : super core::Object::•()
+    ;
+}
+abstract class RenderSliver extends core::Object {
+  synthetic constructor •() → self::RenderSliver
+    : super core::Object::•()
+    ;
+  method handleEvent(invalid-type event, self::SliverHitTestEntry entry) → void {}
+}
+abstract class _RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin = self::RenderSliver with mai::RenderObjectWithChildMixin<invalid-type> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin
+    : super self::RenderSliver::•()
+    ;
+  forwarding-stub method handleEvent(invalid-type event, covariant-by-declaration invalid-type entry) → void
+    return super.{self::RenderSliver::handleEvent}(event, entry);
+}
+abstract class _RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin&RenderSliverHelpers extends self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin&RenderSliverHelpers
+    : super self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin::•()
+    ;
+}
+abstract class RenderSliverSingleBoxAdapter extends self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin&RenderSliverHelpers {
+  synthetic constructor •() → self::RenderSliverSingleBoxAdapter
+    : super self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin&RenderSliverHelpers::•()
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/crashes/crash_05/main_lib.dart:2:20: Error: Type 'PointerEvent' not found.
+//   void handleEvent(PointerEvent event, covariant HitTestEntry entry) {}
+//                    ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/crashes/crash_05/main_lib.dart:2:50: Error: Type 'HitTestEntry' not found.
+//   void handleEvent(PointerEvent event, covariant HitTestEntry entry) {}
+//                                                  ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/crashes/crash_05/main_lib.dart:2:20: Error: 'PointerEvent' isn't a type.
+//   void handleEvent(PointerEvent event, covariant HitTestEntry entry) {}
+//                    ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/crashes/crash_05/main_lib.dart:2:50: Error: 'HitTestEntry' isn't a type.
+//   void handleEvent(PointerEvent event, covariant HitTestEntry entry) {}
+//                                                  ^^^^^^^^^^^^
+//
+import self as mai;
+import "dart:core" as core;
+
+abstract class RenderObject extends core::Object {
+  synthetic constructor •() → mai::RenderObject
+    : super core::Object::•()
+    ;
+  method handleEvent(invalid-type event, covariant-by-declaration invalid-type entry) → void {}
+}
+abstract class RenderObjectWithChildMixin<ChildType extends mai::RenderObject> extends mai::RenderObject /*isMixinDeclaration*/  {
+}
diff --git a/pkg/front_end/testcases/general/cycles.dart.weak.modular.expect b/pkg/front_end/testcases/general/cycles.dart.weak.modular.expect
new file mode 100644
index 0000000..ec6f025
--- /dev/null
+++ b/pkg/front_end/testcases/general/cycles.dart.weak.modular.expect
@@ -0,0 +1,85 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/cycles.dart:5:7: Error: 'A' is a supertype of itself.
+// class A implements C {}
+//       ^
+//
+// pkg/front_end/testcases/general/cycles.dart:7:7: Error: 'B' is a supertype of itself.
+// class B extends A {}
+//       ^
+//
+// pkg/front_end/testcases/general/cycles.dart:9:7: Error: 'C' is a supertype of itself.
+// class C extends B implements D {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::print(new self::A::•());
+  core::print(new self::B::•());
+  core::print(new self::C::•());
+  core::print(new self::D::•());
+}
diff --git a/pkg/front_end/testcases/general/default_values.dart.weak.modular.expect b/pkg/front_end/testcases/general/default_values.dart.weak.modular.expect
new file mode 100644
index 0000000..7b8886e
--- /dev/null
+++ b/pkg/front_end/testcases/general/default_values.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method topLevel([dynamic a = #C1]) → dynamic
+  return a;
+static method main() → dynamic {
+  core::print(self::topLevel());
+}
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.modular.expect b/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.modular.expect
new file mode 100644
index 0000000..bdaedd7
--- /dev/null
+++ b/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/deferred_type_annotation.dart:7:5: Error: The type 'C' is deferred loaded via prefix 'd' and can't be used as a type annotation.
+//  - 'C' is from 'pkg/front_end/testcases/general/deferred_lib.dart'.
+// Try removing 'deferred' from the import of 'd' or use a supertype of 'C' that isn't deferred.
+// bad(d.C x) {}
+//     ^^^
+//
+import self as self;
+import "deferred_lib.dart" as def;
+
+import "org-dartlang-testcase:///deferred_lib.dart" deferred as d;
+
+static method bad(def::C* x) → dynamic {}
+static method main() → dynamic {}
+
+library;
+import self as def;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::int* y = 1;
+  synthetic constructor •() → def::C*
+    : super core::Object::•()
+    ;
+  static method m() → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* x = 0;
+static method m(dynamic x) → dynamic
+  return null;
diff --git a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.modular.expect b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.modular.expect
new file mode 100644
index 0000000..f789104
--- /dev/null
+++ b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
+//     String s = f();
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method method<T extends core::Object* = dynamic>(self::method::T* a, self::method::T* b) → dynamic {
+  if(a is core::String*) {
+    () →* self::method::T* f = () → self::method::T* => a{self::method::T* & core::String* /* '*' & '*' = '*' */};
+    core::String* s = invalid-expression "pkg/front_end/testcases/general/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
+    String s = f();
+                ^" in f(){() →* self::method::T*} as{TypeError} core::String*;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.modular.expect
new file mode 100644
index 0000000..05dcdaa
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicate_instantiation.dart.weak.modular.expect
@@ -0,0 +1,346 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:13:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   Class<int>;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:15:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>;
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:15:18: Error: Expected '[' before this.
+//   Class<int><int>;
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:16:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>();
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:16:20: Error: Unexpected token ';'.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:16:20: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:16:20: Error: Expected ';' after this.
+//   Class<int><int>();
+//                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:17:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   Class<int>.named;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:17:14: Error: Member not found: 'named'.
+//   Class<int>.named;
+//              ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   Class<int>.named<int>;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:19: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   Class<int>.named<int>;
+//                   ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:19:14: Error: Member not found: 'named'.
+//   Class<int>.named<int>;
+//              ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:20:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   Class<int>.named<int>();
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:20:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   Class<int>.named<int>();
+//              ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:21:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named;
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:21:18: Error: Expected '[' before this.
+//   Class<int><int>.named;
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:22:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named();
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:22:18: Error: Expected '[' before this.
+//   Class<int><int>.named();
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int>;
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int>;
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:24: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   Class<int><int>.named<int>;
+//                        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:24:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int>();
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:24:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int>();
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>;
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:24: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//                        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:28: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>;
+//                            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:34: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>;
+//                                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:12: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:18: Error: Expected '[' before this.
+//   Class<int><int>.named<int><int>();
+//                  ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:24: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//                        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:28: Error: A comparison expression can't be an operand of another comparison expression.
+// Try putting parentheses around one of the comparisons.
+//   Class<int><int>.named<int><int>();
+//                            ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:36: Error: Unexpected token ';'.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:36: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:36: Error: Expected ';' after this.
+//   Class<int><int>.named<int><int>();
+//                                    ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:15:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:16:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>();
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:21:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:21:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:22:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named();
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:22:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'named'.
+//   Class<int><int>.named();
+//                   ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int>;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:23:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int>;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:24:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int>();
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:24:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'named'.
+//   Class<int><int>.named<int>();
+//                   ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int><int>;
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:25:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int><int>;
+//                   ^^^^^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:8: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   Class<int><int>.named<int><int>();
+//        ^
+//
+// pkg/front_end/testcases/general/duplicate_instantiation.dart:26:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+//   Class<int><int>.named<int><int>();
+//                   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  #C1;
+  new self::Class::•<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:15:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>;
+       ^" in #C1{<unresolved>}.<(#C2){dynamic}.>(<core::int>[]);
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:16:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>();
+       ^" in #C1{<unresolved>}.<(#C2){dynamic}.>(<int extends core::Object? = dynamic>() → Null
+    ;
+);
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:17:14: Error: Member not found: 'named'.
+  Class<int>.named;
+             ^^^^^";
+  new self::Class::named<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:19:14: Error: Member not found: 'named'.
+  Class<int>.named<int>;
+             ^^^^^";
+  new self::Class::named<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:21:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named;
+       ^" in #C1{<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:21:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named;
+                  ^^^^^" in <core::int>[]{<unresolved>}.named);
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:22:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named();
+       ^" in #C1{<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:22:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'named'.
+  Class<int><int>.named();
+                  ^^^^^" in <core::int>[]{<unresolved>}.named());
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:23:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int>;
+       ^" in #C1{<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:23:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int>;
+                  ^^^^^" in <core::int>[]{<unresolved>}.named);
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:24:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int>();
+       ^" in #C1{<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:24:19: Error: The method 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'named'.
+  Class<int><int>.named<int>();
+                  ^^^^^" in <core::int>[]{<unresolved>}.named<core::int>());
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:25:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int><int>;
+       ^" in #C1{<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:25:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int><int>;
+                  ^^^^^" in <core::int>[]{<unresolved>}.named){dynamic}.<(#C2){dynamic}.>(<core::int>[]);
+  invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:26:8: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  Class<int><int>.named<int><int>();
+       ^" in #C1{<unresolved>}.<(#C2){dynamic}.>(invalid-expression "pkg/front_end/testcases/general/duplicate_instantiation.dart:26:19: Error: The getter 'named' isn't defined for the class 'List<int>'.
+ - 'List' is from 'dart:core'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'named'.
+  Class<int><int>.named<int><int>();
+                  ^^^^^" in <core::int>[]{<unresolved>}.named){dynamic}.<(#C2){dynamic}.>(<int extends core::Object? = dynamic>() → Null
+    ;
+);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::Class<dynamic>*)
+  #C2 = TypeLiteralConstant(core::int*)
+}
diff --git a/pkg/front_end/testcases/general/duplicate_typedef.dart.weak.modular.expect b/pkg/front_end/testcases/general/duplicate_typedef.dart.weak.modular.expect
new file mode 100644
index 0000000..6428f44
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicate_typedef.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/duplicate_typedef.dart:6:9: Error: 'F' is already declared in this scope.
+// typedef F = void Function();
+//         ^
+// pkg/front_end/testcases/general/duplicate_typedef.dart:5:9: Context: Previous declaration of 'F'.
+// typedef F = void Function();
+//         ^
+//
+// pkg/front_end/testcases/general/duplicate_typedef.dart:9:9: Error: 'G' is already declared in this scope.
+// typedef G<T> = void Function(T);
+//         ^
+// pkg/front_end/testcases/general/duplicate_typedef.dart:8:9: Context: Previous declaration of 'G'.
+// typedef G<T> = void Function(T);
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F = () → void;
+typedef G<contravariant T extends core::Object? = dynamic> = (T%) → void;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.modular.expect b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.modular.expect
new file mode 100644
index 0000000..c5b39f8
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.modular.expect
@@ -0,0 +1,117 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:12:7: Error: 'Dupe' is already declared in this scope.
+// class Dupe {}
+//       ^^^^
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:10:7: Context: Previous declaration of 'Dupe'.
+// class Dupe {}
+//       ^^^^
+//
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:15:3: Error: Type 'Dupe.a' not found.
+//   Dupe.a b;
+//   ^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:8:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
+// import 'duplicated_bad_prefix_lib2.dart' as dupe;
+//                                             ^
+//
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:15:3: Error: 'Dupe.a' isn't a type.
+//   Dupe.a b;
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///duplicated_bad_prefix_lib1.dart" as dupe;
+import "org-dartlang-testcase:///duplicated_bad_prefix_lib2.dart" as dupe;
+
+class Dupe#1 extends core::Object {
+  synthetic constructor •() → self::Dupe#1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Dupe extends core::Object {
+  synthetic constructor •() → self::Dupe*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  field invalid-type b = null;
+  field invalid-type d = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self2::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+library;
+import self as self3;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self3::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect
new file mode 100644
index 0000000..183d7ef
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect
@@ -0,0 +1,693 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:7:1: Error: Import directives must precede part directives.
+// Try moving the import directives before the part directives.
+// import 'duplicated_declarations_lib.dart' as Typedef;
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:9:1: Error: Import directives must precede part directives.
+// Try moving the import directives before the part directives.
+// import 'duplicated_declarations_lib.dart' as Typedef;
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:13:9: Error: 'Typedef' is already declared in this scope.
+// typedef Typedef = Object Function();
+//         ^^^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:11:9: Context: Previous declaration of 'Typedef'.
+// typedef Typedef = void Function();
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:15:1: Error: Directives must appear before any declarations.
+// Try moving the directive before any declarations.
+// import 'duplicated_declarations_lib.dart' as Typedef;
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:19:16: Error: 'OldTypedef' is already declared in this scope.
+// typedef Object OldTypedef();
+//                ^^^^^^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:17:14: Context: Previous declaration of 'OldTypedef'.
+// typedef void OldTypedef();
+//              ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:23:5: Error: 'field' is already declared in this scope.
+// var field = "2nd";
+//     ^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:21:5: Context: Previous declaration of 'field'.
+// var field = "1st";
+//     ^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:29:1: Error: 'main' is already declared in this scope.
+// main() {
+// ^^^^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:25:1: Context: Previous declaration of 'main'.
+// main() {
+// ^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:43:3: Error: 'C' is already declared in this scope.
+//   C(a, b);
+//   ^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:42:3: Context: Previous declaration of 'C'.
+//   C(a);
+//   ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:46:7: Error: 'field' is already declared in this scope.
+//   var field = "2nd";
+//       ^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:44:7: Context: Previous declaration of 'field'.
+//   var field = "1st";
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:52:3: Error: 'm' is already declared in this scope.
+//   m() {
+//   ^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:48:3: Context: Previous declaration of 'm'.
+//   m() {
+//   ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:60:10: Error: 's' is already declared in this scope.
+//   static s() {
+//          ^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:56:10: Context: Previous declaration of 's'.
+//   static s() {
+//          ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:72:7: Error: 'C' is already declared in this scope.
+// class C {
+//       ^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:41:7: Context: Previous declaration of 'C'.
+// class C {
+//       ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:77:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+//   Enum,
+//   ^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:79:3: Error: 'a' is already declared in this scope.
+//   a,
+//   ^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:78:3: Context: Previous declaration of 'a'.
+//   a,
+//   ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:83:6: Error: 'Enum' is already declared in this scope.
+// enum Enum {
+//      ^^^^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:76:6: Context: Previous declaration of 'Enum'.
+// enum Enum {
+//      ^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:95:3: Error: 'toString' is already declared in this scope.
+//   toString,
+//   ^^^^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'toString' is implied by this definition.
+// enum AnotherEnum {
+//      ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:96:3: Error: 'values' is already declared in this scope.
+//   values,
+//   ^^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'values' is implied by this definition.
+// enum AnotherEnum {
+//      ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:11:9: Error: 'Typedef' is already declared in this scope.
+// typedef Typedef = void Function();
+//         ^^^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:13:9: Context: Previous declaration of 'Typedef'.
+// typedef Typedef = Object Function();
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:17:14: Error: 'OldTypedef' is already declared in this scope.
+// typedef void OldTypedef();
+//              ^^^^^^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:19:16: Context: Previous declaration of 'OldTypedef'.
+// typedef Object OldTypedef();
+//                ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:21:5: Error: 'field' is already declared in this scope.
+// var field = "3rd";
+//     ^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:23:5: Context: Previous declaration of 'field'.
+// var field = "2nd";
+//     ^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:27:1: Error: 'main' is already declared in this scope.
+// main() {
+// ^^^^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:29:1: Context: Previous declaration of 'main'.
+// main() {
+// ^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:39:7: Error: 'C' is already declared in this scope.
+// class C {
+//       ^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:72:7: Context: Previous declaration of 'C'.
+// class C {
+//       ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:73:6: Error: 'Enum' is already declared in this scope.
+// enum Enum {
+//      ^^^^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:83:6: Context: Previous declaration of 'Enum'.
+// enum Enum {
+//      ^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:7:1: Error: The part-of directive must be the only directive in a part.
+// Try removing the other directives, or moving them to the library for which this is a part.
+// import 'duplicated_declarations_lib.dart' as Typedef;
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:9:1: Error: The part-of directive must be the only directive in a part.
+// Try removing the other directives, or moving them to the library for which this is a part.
+// import 'duplicated_declarations_lib.dart' as Typedef;
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:13:9: Error: 'Typedef' is already declared in this scope.
+// typedef Typedef = Object Function();
+//         ^^^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:11:9: Context: Previous declaration of 'Typedef'.
+// typedef Typedef = void Function();
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:15:1: Error: The part-of directive must be the only directive in a part.
+// Try removing the other directives, or moving them to the library for which this is a part.
+// import 'duplicated_declarations_lib.dart' as Typedef;
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:19:16: Error: 'OldTypedef' is already declared in this scope.
+// typedef Object OldTypedef();
+//                ^^^^^^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:17:14: Context: Previous declaration of 'OldTypedef'.
+// typedef void OldTypedef();
+//              ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:23:5: Error: 'field' is already declared in this scope.
+// var field = 4;
+//     ^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:21:5: Context: Previous declaration of 'field'.
+// var field = "3rd";
+//     ^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:25:5: Error: 'field' is already declared in this scope.
+// var field = 5.0;
+//     ^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:23:5: Context: Previous declaration of 'field'.
+// var field = 4;
+//     ^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:31:1: Error: 'main' is already declared in this scope.
+// main() {
+// ^^^^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:27:1: Context: Previous declaration of 'main'.
+// main() {
+// ^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:35:1: Error: 'main' is already declared in this scope.
+// main() {
+// ^^^^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:31:1: Context: Previous declaration of 'main'.
+// main() {
+// ^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:41:3: Error: 'C' is already declared in this scope.
+//   C(a, b);
+//   ^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:40:3: Context: Previous declaration of 'C'.
+//   C(a);
+//   ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:44:7: Error: 'field' is already declared in this scope.
+//   var field = "2nd";
+//       ^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:42:7: Context: Previous declaration of 'field'.
+//   var field = "1st";
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:50:3: Error: 'm' is already declared in this scope.
+//   m() {
+//   ^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:46:3: Context: Previous declaration of 'm'.
+//   m() {
+//   ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:58:10: Error: 's' is already declared in this scope.
+//   static s() {
+//          ^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:54:10: Context: Previous declaration of 's'.
+//   static s() {
+//          ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:65:7: Error: 'C' is already declared in this scope.
+// class C {
+//       ^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:39:7: Context: Previous declaration of 'C'.
+// class C {
+//       ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:69:7: Error: 'C' is already declared in this scope.
+// class C {
+//       ^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:65:7: Context: Previous declaration of 'C'.
+// class C {
+//       ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:74:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+//   Enum,
+//   ^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:76:3: Error: 'a' is already declared in this scope.
+//   a,
+//   ^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:75:3: Context: Previous declaration of 'a'.
+//   a,
+//   ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:80:6: Error: 'Enum' is already declared in this scope.
+// enum Enum {
+//      ^^^^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:73:6: Context: Previous declaration of 'Enum'.
+// enum Enum {
+//      ^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:86:6: Error: 'Enum' is already declared in this scope.
+// enum Enum {
+//      ^^^^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:80:6: Context: Previous declaration of 'Enum'.
+// enum Enum {
+//      ^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:7:46: Error: 'Typedef' is already declared in this scope.
+// import 'duplicated_declarations_lib.dart' as Typedef;
+//                                              ^^^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:13:9: Context: Previous declaration of 'Typedef'.
+// typedef Typedef = Object Function();
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:67:19: Error: 'C' isn't a type.
+// class Sub extends C {
+//                   ^
+// pkg/front_end/testcases/general/duplicated_declarations.dart:67:19: Context: This isn't a type.
+// class Sub extends C {
+//                   ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: Can't declare a member that conflicts with an inherited one.
+//   index,
+//   ^^^^^
+// sdk/lib/core/enum.dart:74:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:34:3: Error: Can't use 'main' because it is declared more than once.
+//   main();
+//   ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:35:9: Error: Can't use 'field' because it is declared more than once.
+//   print(field);
+//         ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:36:3: Error: Can't use 'C' because it is declared more than once.
+//   C.s();
+//   ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:37:5: Error: Expected identifier, but got 'this'.
+//   C.this();
+//     ^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:38:6: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+//   C.();
+//      ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:38:5: Error: Expected an identifier, but got '('.
+// Try inserting an identifier before '('.
+//   C.();
+//     ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:64:17: Error: Can't use 's' because it is declared more than once.
+//   static f() => s;
+//                 ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:68:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   Sub() : super(null);
+//                ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:69:16: Error: Superclass has no method named 'm'.
+//   m() => super.m();
+//                ^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:106:41: Error: Can't use 'toString' because it is declared more than once.
+//     "AnotherEnum.toString": AnotherEnum.toString,
+//                                         ^^^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:107:39: Error: Can't use 'values' because it is declared more than once.
+//     "AnotherEnum.values": AnotherEnum.values,
+//                                       ^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:62:17: Error: Can't use 's' because it is declared more than once.
+//   static f() => s;
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
+import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
+import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
+import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
+import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
+import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
+
+part duplicated_declarations_part.dart;
+typedef Typedef = () →* void;
+typedef OldTypedef = () →* void;
+class C#4 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
+  constructor _() → self::C#4*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C#3 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
+  constructor _() → self::C#3*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C#2 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
+  field core::String* field = null;
+  constructor •(dynamic a) → self::C#2*
+    : super core::Object::•()
+    ;
+  method m() → dynamic {
+    "1st";
+  }
+  static method s() → dynamic {
+    "1st";
+  }
+  static method f() → dynamic
+    return invalid-expression "pkg/front_end/testcases/general/duplicated_declarations_part.dart:62:17: Error: Can't use 's' because it is declared more than once.
+  static f() => s;
+                ^";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C#1 extends core::Object {
+  constructor _() → self::C#1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  field core::String* field = null;
+  constructor •(dynamic a) → self::C*
+    : super core::Object::•()
+    ;
+  method m() → dynamic {
+    "1st";
+  }
+  static method s() → dynamic {
+    "1st";
+  }
+  static method f() → dynamic
+    return invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:64:17: Error: Can't use 's' because it is declared more than once.
+  static f() => s;
+                ^";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Sub extends core::Object {
+  constructor •() → self::Sub*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:68:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  Sub() : super(null);
+               ^"
+    ;
+  method m() → dynamic
+    return super.m();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Enum#4 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
+  static const field core::List<self::Enum#4*>* values = #C4;
+  static const field self::Enum#4* a = #C3;
+  const constructor •(core::int* index, core::String* name) → self::Enum#4*
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String*
+    return "Enum#4.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Enum#3 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
+  static const field core::List<self::Enum#3*>* values = #C12;
+  static const field self::Enum#3* a = #C5;
+  static const field self::Enum#3* b = #C8;
+  static const field self::Enum#3* c = #C11;
+  const constructor •(core::int* index, core::String* name) → self::Enum#3*
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String*
+    return "Enum#3.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Enum#2 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
+  static const field core::List<self::Enum#2*>* values = #C17;
+  static const field self::Enum#2* Enum = #C14;
+  static const field self::Enum#2* a = #C15;
+  static const field self::Enum#2* b = #C16;
+  const constructor •(core::int* index, core::String* name) → self::Enum#2*
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String*
+    return "Enum#2.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Enum#1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Enum#1*>* values = #C21;
+  static const field self::Enum#1* a = #C18;
+  static const field self::Enum#1* b = #C19;
+  static const field self::Enum#1* c = #C20;
+  const constructor •(core::int* index, core::String* name) → self::Enum#1*
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String*
+    return "Enum#1.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Enum extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Enum*>* values = #C25;
+  static const field self::Enum* Enum = #C22;
+  static const field self::Enum* a = #C23;
+  static const field self::Enum* b = #C24;
+  const constructor •(core::int* index, core::String* name) → self::Enum*
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String*
+    return "Enum.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class AnotherEnum extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::AnotherEnum*>* values = #C35;
+  static const field self::AnotherEnum* a = #C26;
+  static const field self::AnotherEnum* b = #C27;
+  static const field self::AnotherEnum* c = #C28;
+  static const field self::AnotherEnum* _name = #C31;
+  static const field self::AnotherEnum* index = #C34;
+  const constructor •(core::int* index, core::String* name) → self::AnotherEnum*
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String*
+    return "AnotherEnum.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::String* field;
+static method main() → dynamic {
+  "1st";
+}
+static method foo() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:34:3: Error: Can't use 'main' because it is declared more than once.
+  main();
+  ^"{dynamic}.call();
+  core::print(invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:35:9: Error: Can't use 'field' because it is declared more than once.
+  print(field);
+        ^");
+  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:36:3: Error: Can't use 'C' because it is declared more than once.
+  C.s();
+  ^"{dynamic}.s();
+  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:37:5: Error: Expected identifier, but got 'this'.
+  C.this();
+    ^^^^";
+  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:38:5: Error: Expected an identifier, but got '('.
+Try inserting an identifier before '('.
+  C.();
+    ^";
+}
+static method useAnotherEnum() → dynamic {
+  <core::String*, core::Object*>{"AnotherEnum.a": #C26, "AnotherEnum.b": #C27, "AnotherEnum.c": #C28, "AnotherEnum._name": #C31, "AnotherEnum.index": #C34, "AnotherEnum.toString": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:106:41: Error: Can't use 'toString' because it is declared more than once.
+    \"AnotherEnum.toString\": AnotherEnum.toString,
+                                        ^^^^^^^^", "AnotherEnum.values": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:107:39: Error: Can't use 'values' because it is declared more than once.
+    \"AnotherEnum.values\": AnotherEnum.values,
+                                      ^^^^^^"};
+}
+
+library;
+import self as self2;
+
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::Enum#4 {index:#C1, _name:#C2}
+  #C4 = <self::Enum#4*>[#C3]
+  #C5 = self::Enum#3 {index:#C1, _name:#C2}
+  #C6 = 1
+  #C7 = "b"
+  #C8 = self::Enum#3 {index:#C6, _name:#C7}
+  #C9 = 2
+  #C10 = "c"
+  #C11 = self::Enum#3 {index:#C9, _name:#C10}
+  #C12 = <self::Enum#3*>[#C5, #C8, #C11]
+  #C13 = "Enum"
+  #C14 = self::Enum#2 {index:#C1, _name:#C13}
+  #C15 = self::Enum#2 {index:#C6, _name:#C2}
+  #C16 = self::Enum#2 {index:#C9, _name:#C7}
+  #C17 = <self::Enum#2*>[#C14, #C15, #C16]
+  #C18 = self::Enum#1 {index:#C1, _name:#C2}
+  #C19 = self::Enum#1 {index:#C6, _name:#C7}
+  #C20 = self::Enum#1 {index:#C9, _name:#C10}
+  #C21 = <self::Enum#1*>[#C18, #C19, #C20]
+  #C22 = self::Enum {index:#C1, _name:#C13}
+  #C23 = self::Enum {index:#C6, _name:#C2}
+  #C24 = self::Enum {index:#C9, _name:#C7}
+  #C25 = <self::Enum*>[#C22, #C23, #C24]
+  #C26 = self::AnotherEnum {index:#C1, _name:#C2}
+  #C27 = self::AnotherEnum {index:#C6, _name:#C7}
+  #C28 = self::AnotherEnum {index:#C9, _name:#C10}
+  #C29 = 3
+  #C30 = "_name"
+  #C31 = self::AnotherEnum {index:#C29, _name:#C30}
+  #C32 = 4
+  #C33 = "index"
+  #C34 = self::AnotherEnum {index:#C32, _name:#C33}
+  #C35 = <self::AnotherEnum*>[#C26, #C27, #C28, #C31, #C34]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///duplicated_declarations.dart:
+- Enum#1. (from org-dartlang-testcase:///duplicated_declarations.dart:83:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Enum. (from org-dartlang-testcase:///duplicated_declarations.dart:76:6)
+- AnotherEnum. (from org-dartlang-testcase:///duplicated_declarations.dart:89:6)
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..92572f2
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/duplicated_field_initializer.dart:7:7: Error: 'a' is already declared in this scope.
+//   int a;
+//       ^
+// pkg/front_end/testcases/general/duplicated_field_initializer.dart:6:7: Context: Previous declaration of 'a'.
+//   int a;
+//       ^
+//
+// pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
+//   A(this.a);
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* a = null;
+  constructor •(core::int* a) → self::A*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
+  A(this.a);
+         ^"
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {
+  new self::A::•(1);
+}
diff --git a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.modular.expect b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.modular.expect
new file mode 100644
index 0000000..d6d8288
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.modular.expect
@@ -0,0 +1,47 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/duplicated_named_args_3.dart:13:13: Error: Duplicated named argument 'a'.
+//   C.m(a: 1, a: 2, a: 3);
+//             ^
+//
+// pkg/front_end/testcases/general/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.
+//   C.m(a: 1, a: 2, a: 3);
+//                   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  static method m({core::int* a = #C1}) → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → void {
+  self::C::m(a: invalid-expression "pkg/front_end/testcases/general/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.
+  C.m(a: 1, a: 2, a: 3);
+                  ^" in block {
+    invalid-expression "pkg/front_end/testcases/general/duplicated_named_args_3.dart:13:13: Error: Duplicated named argument 'a'.
+  C.m(a: 1, a: 2, a: 3);
+            ^" in block {
+      1;
+    } =>2;
+  } =>3);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+}
diff --git a/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.modular.expect b/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.modular.expect
new file mode 100644
index 0000000..c400faa
--- /dev/null
+++ b/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/dynamic_and_void.dart:10:1: Error: Type 'dynamic' not found.
+// dynamic testDynamic() => 0;
+// ^^^^^^^
+//
+import self as self;
+
+import "dart:core" show int;
+
+static method testDynamic() → invalid-type
+  return 0;
+static method testVoid() → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.modular.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.modular.expect
new file mode 100644
index 0000000..f367499
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class int extends core::Object {
+  synthetic constructor •() → self::int
+    : super core::Object::•()
+    ;
+}
+class Object extends core::Object {
+  synthetic constructor •() → self::Object
+    : super core::Object::•()
+    ;
+}
+class String extends core::Object {
+  synthetic constructor •() → self::String
+    : super core::Object::•()
+    ;
+}
+class _Enum extends core::Object {
+  synthetic constructor •() → self::_Enum
+    : super core::Object::•()
+    ;
+}
+class List extends core::Object {
+  synthetic constructor •() → self::List
+    : super core::Object::•()
+    ;
+}
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C16;
+  static const field self::E int = #C3;
+  static const field self::E Object = #C6;
+  static const field self::E String = #C9;
+  static const field self::E _Enum = #C12;
+  static const field self::E List = #C15;
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "int"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "Object"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "String"
+  #C9 = self::E {index:#C7, _name:#C8}
+  #C10 = 3
+  #C11 = "_Enum"
+  #C12 = self::E {index:#C10, _name:#C11}
+  #C13 = 4
+  #C14 = "List"
+  #C15 = self::E {index:#C13, _name:#C14}
+  #C16 = <self::E*>[#C3, #C6, #C9, #C12, #C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_names_from_core.dart:
+- E. (from org-dartlang-testcase:///enum_names_from_core.dart:15:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.modular.expect
new file mode 100644
index 0000000..a1e0f80
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_locations/error_location_01.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library;
+import self as self;
+import "error_location_01_lib1.dart" as err;
+import "error_location_01_lib2.dart" as err2;
+
+import "org-dartlang-testcase:///error_location_01_lib1.dart";
+import "org-dartlang-testcase:///error_location_01_lib2.dart";
+
+static method main() → dynamic {
+  err::foo();
+  err2::bar();
+}
+
+library;
+import self as err;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::int* i) → err::Foo*
+    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo() → dynamic {
+  new err::Foo::•(0);
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_locations/error_location_01_lib2.dart:8:9: Error: Constant evaluation error:
+//   const Foo(0);
+//         ^
+// pkg/front_end/testcases/general/error_locations/error_location_01_lib1.dart:6:31: Context: This assertion failed.
+//   const Foo(int i) : assert(i > 0);
+//                               ^
+//
+import self as err2;
+
+import "org-dartlang-testcase:///error_location_01_lib1.dart";
+
+static method bar() → dynamic {
+  invalid-expression "This assertion failed.";
+}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///error_location_01_lib2.dart:
+- Foo. (from org-dartlang-testcase:///error_location_01_lib1.dart:6:9)
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.modular.expect
new file mode 100644
index 0000000..4b68f2c
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_locations/error_location_02.dart.weak.modular.expect
@@ -0,0 +1,84 @@
+library;
+import self as self;
+import "error_location_02_lib1.dart" as err;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///error_location_02_lib1.dart";
+import "org-dartlang-testcase:///error_location_02_lib2.dart";
+import "org-dartlang-testcase:///error_location_02_lib3.dart";
+
+static method main() → dynamic {
+  err::foo();
+  core::print(invalid-expression "This assertion failed.");
+}
+
+library;
+import self as err;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::int* i) → err::Foo*
+    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo() → dynamic {
+  new err::Foo::•(0);
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_locations/error_location_02_lib2.dart:7:24: Error: Constant evaluation error:
+// const fooField = const Foo(0);
+//                        ^
+// pkg/front_end/testcases/general/error_locations/error_location_02_lib1.dart:6:31: Context: This assertion failed.
+//   const Foo(int i) : assert(i > 0);
+//                               ^
+// pkg/front_end/testcases/general/error_locations/error_location_02_lib2.dart:7:7: Context: While analyzing:
+// const fooField = const Foo(0);
+//       ^
+//
+import self as self2;
+import "error_location_02_lib1.dart" as err;
+
+import "org-dartlang-testcase:///error_location_02_lib1.dart";
+
+static const field err::Foo* fooField = invalid-expression "This assertion failed.";
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_locations/error_location_02_lib3.dart:7:19: Error: Constant evaluation error:
+// const fooField2 = fooField;
+//                   ^
+// pkg/front_end/testcases/general/error_locations/error_location_02_lib1.dart:6:31: Context: This assertion failed.
+//   const Foo(int i) : assert(i > 0);
+//                               ^
+// pkg/front_end/testcases/general/error_locations/error_location_02_lib3.dart:7:7: Context: While analyzing:
+// const fooField2 = fooField;
+//       ^
+//
+import self as self3;
+import "error_location_02_lib1.dart" as err;
+
+import "org-dartlang-testcase:///error_location_02_lib2.dart";
+
+static const field err::Foo* fooField2 = invalid-expression "This assertion failed.";
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///error_location_02_lib2.dart:
+- Foo. (from org-dartlang-testcase:///error_location_02_lib1.dart:6:9)
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.modular.expect
new file mode 100644
index 0000000..a11cbcd
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_locations/error_location_03.dart.weak.modular.expect
@@ -0,0 +1,88 @@
+library;
+import self as self;
+import "error_location_03_lib1.dart" as err;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///error_location_03_lib1.dart";
+import "org-dartlang-testcase:///error_location_03_lib2.dart";
+import "org-dartlang-testcase:///error_location_03_lib3.dart";
+
+static method main() → dynamic {
+  err::foo();
+  core::print(invalid-expression "This assertion failed.");
+  core::print(invalid-expression "This assertion failed.");
+}
+
+library;
+import self as err;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::int* i) → err::Foo*
+    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo() → dynamic {
+  new err::Foo::•(0);
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_locations/error_location_03_lib2.dart:7:24: Error: Constant evaluation error:
+// const fooField = const Foo(0);
+//                        ^
+// pkg/front_end/testcases/general/error_locations/error_location_03_lib1.dart:6:31: Context: This assertion failed.
+//   const Foo(int i) : assert(i > 0);
+//                               ^
+// pkg/front_end/testcases/general/error_locations/error_location_03_lib2.dart:7:7: Context: While analyzing:
+// const fooField = const Foo(0);
+//       ^
+//
+import self as self2;
+import "error_location_03_lib1.dart" as err;
+
+import "org-dartlang-testcase:///error_location_03_lib1.dart";
+
+static const field err::Foo* fooField = invalid-expression "This assertion failed.";
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_locations/error_location_03_lib3.dart:7:25: Error: Constant evaluation error:
+// const fooField2 = const Foo(0);
+//                         ^
+// pkg/front_end/testcases/general/error_locations/error_location_03_lib1.dart:6:31: Context: This assertion failed.
+//   const Foo(int i) : assert(i > 0);
+//                               ^
+// pkg/front_end/testcases/general/error_locations/error_location_03_lib3.dart:7:7: Context: While analyzing:
+// const fooField2 = const Foo(0);
+//       ^
+//
+import self as self3;
+import "error_location_03_lib1.dart" as err;
+
+import "org-dartlang-testcase:///error_location_03_lib1.dart";
+
+static const field err::Foo* fooField2 = invalid-expression "This assertion failed.";
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///error_location_03_lib2.dart:
+- Foo. (from org-dartlang-testcase:///error_location_03_lib1.dart:6:9)
+
+org-dartlang-testcase:///error_location_03_lib3.dart:
+- Foo. (from org-dartlang-testcase:///error_location_03_lib1.dart:6:9)
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.modular.expect
new file mode 100644
index 0000000..32f4daa
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_locations/error_location_04.dart.weak.modular.expect
@@ -0,0 +1,76 @@
+library;
+import self as self;
+import "error_location_04_lib1.dart" as err;
+import "error_location_04_lib2.dart" as err2;
+
+import "org-dartlang-testcase:///error_location_04_lib1.dart";
+import "org-dartlang-testcase:///error_location_04_lib2.dart";
+
+static method main() → dynamic {
+  err::foo();
+  err2::bar();
+}
+
+library;
+import self as err;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::int* i) → err::Foo*
+    : assert(i.{core::num::>}(0){(core::num*) →* core::bool*}), super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo() → dynamic {
+  new err::Foo::•(0);
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_locations/error_location_04_lib2.dart:9:27: Error: Constant evaluation error:
+//   const Bar() : x = const Foo(0);
+//                           ^
+// pkg/front_end/testcases/general/error_locations/error_location_04_lib1.dart:6:31: Context: This assertion failed.
+//   const Foo(int i) : assert(i > 0);
+//                               ^
+//
+import self as err2;
+import "dart:core" as core;
+import "error_location_04_lib1.dart" as err;
+
+import "org-dartlang-testcase:///error_location_04_lib1.dart";
+
+class Bar extends core::Object /*hasConstConstructor*/  {
+  final field err::Foo* x;
+  const constructor •() → err2::Bar*
+    : err2::Bar::x = invalid-expression "This assertion failed.", super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method bar() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///error_location_04_lib2.dart:
+- Foo. (from org-dartlang-testcase:///error_location_04_lib1.dart:6:9)
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.modular.expect
new file mode 100644
index 0000000..c53238d
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_locations/error_location_05.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library error_location_05;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_locations/error_location_05_lib1.dart:7:8: Error: Duplicated parameter name 'z'.
+// x1(z, {z}) {}
+//        ^
+// pkg/front_end/testcases/general/error_locations/error_location_05_lib1.dart:7:4: Context: Other parameter named 'z'.
+// x1(z, {z}) {}
+//    ^
+//
+// pkg/front_end/testcases/general/error_locations/error_location_05_lib1.dart:10:9: Error: 'z' is already declared in this scope.
+//   y(z, {z}) {}
+//         ^
+// pkg/front_end/testcases/general/error_locations/error_location_05_lib1.dart:10:5: Context: Previous declaration of 'z'.
+//   y(z, {z}) {}
+//     ^
+//
+import self as self;
+
+part error_location_05_lib1.dart;
+static method /* from org-dartlang-testcase:///error_location_05_lib1.dart */ x1(dynamic z, {dynamic z = #C1}) → dynamic {}
+static method /* from org-dartlang-testcase:///error_location_05_lib1.dart */ x2() → dynamic {
+  function y(dynamic z, {dynamic z = #C1}) → Null {}
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.modular.expect
new file mode 100644
index 0000000..de18361
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_locations/error_location_06.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library error_location_06;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_locations/error_location_06_lib1.dart:12:8: Error: Duplicated parameter name 'z'.
+// x1(z, {z}) {}
+//        ^
+// pkg/front_end/testcases/general/error_locations/error_location_06_lib1.dart:12:4: Context: Other parameter named 'z'.
+// x1(z, {z}) {}
+//    ^
+//
+// pkg/front_end/testcases/general/error_locations/error_location_06_lib1.dart:15:9: Error: 'z' is already declared in this scope.
+//   y(z, {z}) {}
+//         ^
+// pkg/front_end/testcases/general/error_locations/error_location_06_lib1.dart:15:5: Context: Previous declaration of 'z'.
+//   y(z, {z}) {}
+//     ^
+//
+import self as self;
+
+part error_location_06_lib1.dart;
+static method /* from org-dartlang-testcase:///error_location_06_lib1.dart */ x1(dynamic z, {dynamic z = #C1}) → dynamic {}
+static method /* from org-dartlang-testcase:///error_location_06_lib1.dart */ x2() → dynamic {
+  function y(dynamic z, {dynamic z = #C1}) → Null {}
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.modular.expect
new file mode 100644
index 0000000..c6d3c9f
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/annotations.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/annotations.dart:15:16: Error: Type arguments can't have annotations because they aren't declarations.
+//   m() => new A<@annotation @Annotation("test") C>();
+//                ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/annotations.dart:15:28: Error: Type arguments can't have annotations because they aren't declarations.
+//   m() => new A<@annotation @Annotation("test") C>();
+//                            ^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Annotation extends core::Object /*hasConstConstructor*/  {
+  final field core::String* message;
+  const constructor •(core::String* message) → self::Annotation*
+    : self::Annotation::message = message, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A<E extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::E*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method m() → dynamic
+    return new self::A::•<self::C*>();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field dynamic annotation = #C1;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/await_not_in_async.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/await_not_in_async.dart.weak.modular.expect
new file mode 100644
index 0000000..12f76fb
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/await_not_in_async.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/await_not_in_async.dart:4:3: Error: 'await' can only be used in 'async' or 'async*' methods.
+//   await f();
+//   ^^^^^
+//
+import self as self;
+import "dart:async" as asy;
+
+static method f() → asy::Future<void>
+  return asy::Future::value<void>();
+static method g() → void {
+  invalid-expression "pkg/front_end/testcases/general/error_recovery/await_not_in_async.dart:4:3: Error: 'await' can only be used in 'async' or 'async*' methods.
+  await f();
+  ^^^^^";
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..17c2eb1
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.weak.modular.expect
@@ -0,0 +1,377 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:2:3: Error: The name of a constructor must match the name of the enclosing class.
+//   foo.x() {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:5:3: Error: The name of a constructor must match the name of the enclosing class.
+//   foo.x() : initializer = true {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:5:3: Error: 'Foo.x' is already declared in this scope.
+//   foo.x() : initializer = true {
+//   ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:2:3: Context: Previous declaration of 'Foo.x'.
+//   foo.x() {
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:8:3: Error: The name of a constructor must match the name of the enclosing class.
+//   foo() : initializer = true {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:11:7: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   get Foo => 0;
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:12:7: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   get Foo {
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:12:7: Error: 'Foo' is already declared in this scope.
+//   get Foo {
+//       ^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:11:7: Context: Previous declaration of 'Foo'.
+//   get Foo => 0;
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:15:7: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   get Foo.X => 0;
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:15:3: Error: Constructors can't be a getter.
+// Try removing 'get'.
+//   get Foo.X => 0;
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:16:7: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   get Foo.X {
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:16:3: Error: Constructors can't be a getter.
+// Try removing 'get'.
+//   get Foo.X {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:16:7: Error: 'Foo.X' is already declared in this scope.
+//   get Foo.X {
+//       ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:15:7: Context: Previous declaration of 'Foo.X'.
+//   get Foo.X => 0;
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:19:7: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   get Foo : bla = null => 0;
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:19:3: Error: Constructors can't be a getter.
+// Try removing 'get'.
+//   get Foo : bla = null => 0;
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:20:7: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   get Foo.X : bla = null {
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:20:3: Error: Constructors can't be a getter.
+// Try removing 'get'.
+//   get Foo.X : bla = null {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:20:7: Error: 'Foo.X' is already declared in this scope.
+//   get Foo.X : bla = null {
+//       ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:16:7: Context: Previous declaration of 'Foo.X'.
+//   get Foo.X {
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:23:7: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   set Foo => 0;
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:23:7: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   set Foo => 0;
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:24:7: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   set Foo {
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:24:7: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   set Foo {
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:24:7: Error: 'Foo' is already declared in this scope.
+//   set Foo {
+//       ^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:23:7: Context: Previous declaration of 'Foo'.
+//   set Foo => 0;
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:27:7: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   set Foo.X => 0;
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:27:3: Error: Constructors can't be a setter.
+// Try removing 'set'.
+//   set Foo.X => 0;
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:27:7: Error: 'Foo.X' is already declared in this scope.
+//   set Foo.X => 0;
+//       ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:20:7: Context: Previous declaration of 'Foo.X'.
+//   get Foo.X : bla = null {
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:28:7: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   set Foo.X {
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:28:3: Error: Constructors can't be a setter.
+// Try removing 'set'.
+//   set Foo.X {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:28:7: Error: 'Foo.X' is already declared in this scope.
+//   set Foo.X {
+//       ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:27:7: Context: Previous declaration of 'Foo.X'.
+//   set Foo.X => 0;
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:31:7: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   set Foo : bla = null => 0;
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:31:3: Error: Constructors can't be a setter.
+// Try removing 'set'.
+//   set Foo : bla = null => 0;
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:31:7: Error: 'Foo' is already declared in this scope.
+//   set Foo : bla = null => 0;
+//       ^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:19:7: Context: Previous declaration of 'Foo'.
+//   get Foo : bla = null => 0;
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:32:7: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   set Foo.X : bla = null {
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:32:3: Error: Constructors can't be a setter.
+// Try removing 'set'.
+//   set Foo.X : bla = null {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:32:7: Error: 'Foo.X' is already declared in this scope.
+//   set Foo.X : bla = null {
+//       ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:28:7: Context: Previous declaration of 'Foo.X'.
+//   set Foo.X {
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:35:18: Error: An external constructor can't have any initializers.
+//   external Foo() : bla = null;
+//                  ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:35:12: Error: 'Foo' is already declared in this scope.
+//   external Foo() : bla = null;
+//            ^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:31:7: Context: Previous declaration of 'Foo'.
+//   set Foo : bla = null => 0;
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:36:33: Error: An external or native method can't have a body.
+//   external Foo.X() : bla = null {
+//                                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:36:20: Error: An external constructor can't have any initializers.
+//   external Foo.X() : bla = null {
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:36:12: Error: 'Foo.X' is already declared in this scope.
+//   external Foo.X() : bla = null {
+//            ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:32:7: Context: Previous declaration of 'Foo.X'.
+//   set Foo.X : bla = null {
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:39:7: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   int Foo;
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:39:7: Error: 'Foo' is already declared in this scope.
+//   int Foo;
+//       ^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:12:7: Context: Previous declaration of 'Foo'.
+//   get Foo {
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:40:10: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   int A, Foo, B;
+//          ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:40:10: Error: 'Foo' is already declared in this scope.
+//   int A, Foo, B;
+//          ^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:39:7: Context: Previous declaration of 'Foo'.
+//   int Foo;
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:24:7: Error: Conflicts with the implicit setter of the field 'Foo'.
+//   set Foo {
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:23:7: Error: Conflicts with the implicit setter of the field 'Foo'.
+//   set Foo => 0;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:40:10: Error: Conflicts with setter 'Foo'.
+//   int A, Foo, B;
+//          ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:39:7: Error: Conflicts with setter 'Foo'.
+//   int Foo;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:5:13: Error: 'initializer' isn't an instance field of this class.
+//   foo.x() : initializer = true {
+//             ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:8:11: Error: 'initializer' isn't an instance field of this class.
+//   foo() : initializer = true {
+//           ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:15:16: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   get Foo.X => 0;
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:17:5: Error: Constructors can't have a return type.
+// Try removing the return type.
+//     return 0;
+//     ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:19:13: Error: 'bla' isn't an instance field of this class.
+//   get Foo : bla = null => 0;
+//             ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:19:27: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   get Foo : bla = null => 0;
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:20:15: Error: 'bla' isn't an instance field of this class.
+//   get Foo.X : bla = null {
+//               ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:21:5: Error: Constructors can't have a return type.
+// Try removing the return type.
+//     return 0;
+//     ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:23:11: Error: A setter should have exactly one formal parameter.
+//   set Foo => 0;
+//           ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:25:12: Error: Can't return a value from a void function.
+//     return 0;
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:24:11: Error: A setter should have exactly one formal parameter.
+//   set Foo {
+//           ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:27:16: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   set Foo.X => 0;
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:29:5: Error: Constructors can't have a return type.
+// Try removing the return type.
+//     return 0;
+//     ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:31:13: Error: 'bla' isn't an instance field of this class.
+//   set Foo : bla = null => 0;
+//             ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:31:27: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   set Foo : bla = null => 0;
+//                           ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:32:15: Error: 'bla' isn't an instance field of this class.
+//   set Foo.X : bla = null {
+//               ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:33:5: Error: Constructors can't have a return type.
+// Try removing the return type.
+//     return 0;
+//     ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:37:5: Error: Constructors can't have a return type.
+// Try removing the return type.
+//     return 0;
+//     ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:39:7: Error: Field 'Foo' should be initialized because its type 'int' doesn't allow null.
+//   int Foo;
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:40:7: Error: Field 'A' should be initialized because its type 'int' doesn't allow null.
+//   int A, Foo, B;
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:40:15: Error: Field 'B' should be initialized because its type 'int' doesn't allow null.
+//   int A, Foo, B;
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  field core::int A = null;
+  field core::int B = null;
+  constructor x() → self::Foo
+    : super core::Object::•() {}
+  constructor foo() → self::Foo
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:8:11: Error: 'initializer' isn't an instance field of this class.
+  foo() : initializer = true {
+          ^^^^^^^^^^^" {}
+  constructor X() → self::Foo
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:15:16: Error: Constructors can't have a return type.
+Try removing the return type.
+  get Foo.X => 0;
+               ^";
+  constructor •() → self::Foo
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:19:13: Error: 'bla' isn't an instance field of this class.
+  get Foo : bla = null => 0;
+            ^^^"
+    invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:19:27: Error: Constructors can't have a return type.
+Try removing the return type.
+  get Foo : bla = null => 0;
+                          ^";
+  get Foo() → dynamic
+    return 0;
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..4435554
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:2:7: Error: The name of a constructor must match the name of the enclosing class.
+//   get foo.x() {
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:2:3: Error: Constructors can't be a getter.
+// Try removing 'get'.
+//   get foo.x() {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:5:7: Error: The name of a constructor must match the name of the enclosing class.
+//   get foo.x() : initializer = true {
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:5:3: Error: Constructors can't be a getter.
+// Try removing 'get'.
+//   get foo.x() : initializer = true {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:5:7: Error: 'Foo.x' is already declared in this scope.
+//   get foo.x() : initializer = true {
+//       ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:2:7: Context: Previous declaration of 'Foo.x'.
+//   get foo.x() {
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:8:10: Error: A getter can't have formal parameters.
+// Try removing '(...)'.
+//   get foo() : initializer = true {
+//          ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:8:7: Error: The name of a constructor must match the name of the enclosing class.
+//   get foo() : initializer = true {
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:8:3: Error: Constructors can't be a getter.
+// Try removing 'get'.
+//   get foo() : initializer = true {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:5:17: Error: 'initializer' isn't an instance field of this class.
+//   get foo.x() : initializer = true {
+//                 ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:8:15: Error: 'initializer' isn't an instance field of this class.
+//   get foo() : initializer = true {
+//               ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  constructor x() → self::Foo
+    : super core::Object::•() {}
+  constructor foo() → self::Foo
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:8:15: Error: 'initializer' isn't an instance field of this class.
+  get foo() : initializer = true {
+              ^^^^^^^^^^^" {}
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..ef13e6b
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:2:8: Error: The name of a constructor must match the name of the enclosing class.
+//   void foo.x() {
+//        ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:2:3: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   void foo.x() {
+//   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:5:8: Error: The name of a constructor must match the name of the enclosing class.
+//   void foo.x() : initializer = true {
+//        ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:5:3: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   void foo.x() : initializer = true {
+//   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:5:8: Error: 'Foo.x' is already declared in this scope.
+//   void foo.x() : initializer = true {
+//        ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:2:8: Context: Previous declaration of 'Foo.x'.
+//   void foo.x() {
+//        ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:8:8: Error: The name of a constructor must match the name of the enclosing class.
+//   void foo() : initializer = true {
+//        ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:8:3: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   void foo() : initializer = true {
+//   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:5:18: Error: 'initializer' isn't an instance field of this class.
+//   void foo.x() : initializer = true {
+//                  ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:8:16: Error: 'initializer' isn't an instance field of this class.
+//   void foo() : initializer = true {
+//                ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  constructor x() → self::Foo
+    : super core::Object::•() {}
+  constructor foo() → self::Foo
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:8:16: Error: 'initializer' isn't an instance field of this class.
+  void foo() : initializer = true {
+               ^^^^^^^^^^^" {}
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..583688c
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:2:7: Error: The name of a constructor must match the name of the enclosing class.
+//   set foo.x() {
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:2:3: Error: Constructors can't be a setter.
+// Try removing 'set'.
+//   set foo.x() {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:5:7: Error: The name of a constructor must match the name of the enclosing class.
+//   set foo.x() : initializer = true {
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:5:3: Error: Constructors can't be a setter.
+// Try removing 'set'.
+//   set foo.x() : initializer = true {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:5:7: Error: 'Foo.x' is already declared in this scope.
+//   set foo.x() : initializer = true {
+//       ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:2:7: Context: Previous declaration of 'Foo.x'.
+//   set foo.x() {
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:8:7: Error: The name of a constructor must match the name of the enclosing class.
+//   set foo() : initializer = true {
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:8:3: Error: Constructors can't be a setter.
+// Try removing 'set'.
+//   set foo() : initializer = true {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:5:17: Error: 'initializer' isn't an instance field of this class.
+//   set foo.x() : initializer = true {
+//                 ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:8:15: Error: 'initializer' isn't an instance field of this class.
+//   set foo() : initializer = true {
+//               ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  constructor x() → self::Foo
+    : super core::Object::•() {}
+  constructor foo() → self::Foo
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:8:15: Error: 'initializer' isn't an instance field of this class.
+  set foo() : initializer = true {
+              ^^^^^^^^^^^" {}
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.modular.expect
new file mode 100644
index 0000000..eea597e
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.weak.modular.expect
@@ -0,0 +1,71 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:3:10: Error: A getter can't have formal parameters.
+// Try removing '(...)'.
+//   get Foo() {
+//          ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:3:7: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   get Foo() {
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:10: Error: A getter can't have formal parameters.
+// Try removing '(...)'.
+//   get Foo() : initializer = true {
+//          ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:3: Error: Constructors can't be a getter.
+// Try removing 'get'.
+//   get Foo() : initializer = true {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:9:3: Error: Constructors can't be a getter.
+// Try removing 'get'.
+//   get Foo.x() {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:12:3: Error: Constructors can't be a getter.
+// Try removing 'get'.
+//   get Foo.x() : initializer = true {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:12:7: Error: 'Foo.x' is already declared in this scope.
+//   get Foo.x() : initializer = true {
+//       ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:9:7: Context: Previous declaration of 'Foo.x'.
+//   get Foo.x() {
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:15: Error: 'initializer' isn't an instance field of this class.
+//   get Foo() : initializer = true {
+//               ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:12:17: Error: 'initializer' isn't an instance field of this class.
+//   get Foo.x() : initializer = true {
+//                 ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  constructor •() → self::Foo*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:6:15: Error: 'initializer' isn't an instance field of this class.
+  get Foo() : initializer = true {
+              ^^^^^^^^^^^" {}
+  constructor x() → self::Foo*
+    : super core::Object::•() {}
+  get Foo() → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.modular.expect
new file mode 100644
index 0000000..92284b0
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:6:3: Error: 'Foo' is already declared in this scope.
+//   Foo() : initializer = true {
+//   ^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:3:3: Context: Previous declaration of 'Foo'.
+//   Foo() {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:12:3: Error: 'Foo.x' is already declared in this scope.
+//   Foo.x() : initializer = true {
+//   ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:9:3: Context: Previous declaration of 'Foo.x'.
+//   Foo.x() {
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:6:11: Error: 'initializer' isn't an instance field of this class.
+//   Foo() : initializer = true {
+//           ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_ok.dart:12:13: Error: 'initializer' isn't an instance field of this class.
+//   Foo.x() : initializer = true {
+//             ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  constructor •() → self::Foo*
+    : super core::Object::•() {}
+  constructor x() → self::Foo*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..7267317
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.weak.modular.expect
@@ -0,0 +1,145 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:2:9: Error: Expected '{' before this.
+//   Foo() / : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:2:9: Error: Operator declarations must be preceded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//   Foo() / : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:2:9: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   Foo() / : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:2:9: Error: The name of a constructor must match the name of the enclosing class.
+//   Foo() / : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:2:9: Error: Operator '/' should have exactly one parameter.
+//   Foo() / : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:8: Error: Expected '{' before this.
+//   Foo()./ : super() {
+//        ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:3: Error: 'Foo' is already declared in this scope.
+//   Foo()./ : super() {
+//   ^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:2:3: Context: Previous declaration of 'Foo'.
+//   Foo() / : super() {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:8: Error: Expected a class member, but got '.'.
+//   Foo()./ : super() {
+//        ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:9: Error: Operator declarations must be preceded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//   Foo()./ : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:9: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   Foo()./ : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:9: Error: The name of a constructor must match the name of the enclosing class.
+//   Foo()./ : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:9: Error: Operator '/' should have exactly one parameter.
+//   Foo()./ : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:9: Error: 'Foo./' is already declared in this scope.
+//   Foo()./ : super() {
+//         ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:2:9: Context: Previous declaration of 'Foo./'.
+//   Foo() / : super() {
+//         ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:8:9: Error: Expected '{' before this.
+//   foo() / : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:8:9: Error: Operator declarations must be preceded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//   foo() / : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:8:9: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   foo() / : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:8:9: Error: The name of a constructor must match the name of the enclosing class.
+//   foo() / : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:8:9: Error: Operator '/' should have exactly one parameter.
+//   foo() / : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:8:9: Error: 'Foo./' is already declared in this scope.
+//   foo() / : super() {
+//         ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:9: Context: Previous declaration of 'Foo./'.
+//   Foo()./ : super() {
+//         ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:11:8: Error: Expected '{' before this.
+//   foo()./ : super() {
+//        ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:11:3: Error: 'foo' is already declared in this scope.
+//   foo()./ : super() {
+//   ^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:8:3: Context: Previous declaration of 'foo'.
+//   foo() / : super() {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:11:8: Error: Expected a class member, but got '.'.
+//   foo()./ : super() {
+//        ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:11:9: Error: Operator declarations must be preceded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//   foo()./ : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:11:9: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   foo()./ : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:11:9: Error: The name of a constructor must match the name of the enclosing class.
+//   foo()./ : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:11:9: Error: Operator '/' should have exactly one parameter.
+//   foo()./ : super() {
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:11:9: Error: 'Foo./' is already declared in this scope.
+//   foo()./ : super() {
+//         ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:8:9: Context: Previous declaration of 'Foo./'.
+//   foo() / : super() {
+//         ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  constructor •() → self::Foo
+    : super core::Object::•() {}
+  constructor /() → self::Foo
+    : super core::Object::•() {}
+  method foo() → dynamic {}
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.modular.expect
new file mode 100644
index 0000000..b038f45e2
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart.weak.modular.expect
@@ -0,0 +1,65 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:3:3: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   void Foo() {
+//   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:6:3: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   void Foo() : initializer = true {
+//   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:6:8: Error: 'Foo' is already declared in this scope.
+//   void Foo() : initializer = true {
+//        ^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:3:8: Context: Previous declaration of 'Foo'.
+//   void Foo() {
+//        ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:9:3: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   void Foo.x() {
+//   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:12:3: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   void Foo.x() : initializer = true {
+//   ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:12:8: Error: 'Foo.x' is already declared in this scope.
+//   void Foo.x() : initializer = true {
+//        ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:9:8: Context: Previous declaration of 'Foo.x'.
+//   void Foo.x() {
+//        ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:6:16: Error: 'initializer' isn't an instance field of this class.
+//   void Foo() : initializer = true {
+//                ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_return_type.dart:12:18: Error: 'initializer' isn't an instance field of this class.
+//   void Foo.x() : initializer = true {
+//                  ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  constructor •() → self::Foo*
+    : super core::Object::•() {}
+  constructor x() → self::Foo*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.modular.expect
new file mode 100644
index 0000000..b3eba22
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.weak.modular.expect
@@ -0,0 +1,70 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:3:7: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   set Foo() {
+//       ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:6:3: Error: Constructors can't be a setter.
+// Try removing 'set'.
+//   set Foo() : initializer = true {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:9:3: Error: Constructors can't be a setter.
+// Try removing 'set'.
+//   set Foo.x() {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:12:3: Error: Constructors can't be a setter.
+// Try removing 'set'.
+//   set Foo.x() : initializer = true {
+//   ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:12:7: Error: 'Foo.x' is already declared in this scope.
+//   set Foo.x() : initializer = true {
+//       ^^^^^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:9:7: Context: Previous declaration of 'Foo.x'.
+//   set Foo.x() {
+//       ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:3:10: Error: A setter should have exactly one formal parameter.
+//   set Foo() {
+//          ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:6:15: Error: 'initializer' isn't an instance field of this class.
+//   set Foo() : initializer = true {
+//               ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:12:17: Error: 'initializer' isn't an instance field of this class.
+//   set Foo.x() : initializer = true {
+//                 ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  constructor •() → self::Foo*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:6:15: Error: 'initializer' isn't an instance field of this class.
+  set Foo() : initializer = true {
+              ^^^^^^^^^^^" {}
+  constructor x() → self::Foo*
+    : super core::Object::•() {}
+  set Foo(dynamic #synthetic) → void {
+    invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:3:10: Error: A setter should have exactly one formal parameter.
+  set Foo() {
+         ^";
+    {}
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.modular.expect
new file mode 100644
index 0000000..ef2f7e9
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/empty_await_for.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+//   await for () {}
+//              ^
+//
+// pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: Expected 'in' before this.
+//   await for () {}
+//              ^
+//
+import self as self;
+
+static method main() → dynamic async {
+  await for (final dynamic #t1 in invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: This couldn't be parsed.
+  await for () {}
+             ^") {
+    invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_await_for.dart:3:14: Error: This couldn't be parsed.
+  await for () {}
+             ^";
+  }
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.modular.expect
new file mode 100644
index 0000000..35aa6ca
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/empty_for.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+//   for () {}
+//        ^
+//
+// pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:7: Error: Expected ';' after this.
+//   for () {}
+//       ^
+//
+import self as self;
+
+static method main() → dynamic {
+  for (final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: This couldn't be parsed.
+  for () {}
+       ^"; invalid-expression "pkg/front_end/testcases/general/error_recovery/empty_for.dart:3:8: Error: This couldn't be parsed.
+  for () {}
+       ^"; ) {
+  }
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.modular.expect
new file mode 100644
index 0000000..9124332
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/for_in_with_colon.dart:6:13: Error: For-in loops use 'in' rather than a colon.
+// Try replacing the colon with the keyword 'in'.
+//   for(int i : [1, 2, 3]) {
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  for (core::int* i in <core::int*>[1, 2, 3]) {
+    core::print(i);
+  }
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_22313.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_22313.dart.weak.modular.expect
new file mode 100644
index 0000000..4a09d61
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_22313.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_22313.dart:5:20: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class Foo extends A, B {
+//                    ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_22313.dart:9:11: Error: Expected 'extends' instead of this.
+// class Bar extend A, B {
+//           ^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_22313.dart:9:19: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class Bar extend A, B {
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_22313.dart:13:11: Error: Expected 'extends' instead of this.
+// class Baz on A, B {
+//           ^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_22313.dart:13:15: Error: Each class definition can have at most one extends clause.
+// Try choosing one superclass and define your class to implement (or mix in) the others.
+// class Baz on A, B {
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class Foo extends self::A {
+  constructor •() → self::Foo
+    : super self::A::•() {}
+}
+class Bar extends core::Object {
+  constructor •() → self::Bar
+    : super core::Object::•() {}
+}
+class Baz extends core::Object {
+  constructor •() → self::Baz
+    : super core::Object::•() {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.modular.expect
new file mode 100644
index 0000000..fa47aba
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_26810.dart.weak.modular.expect
@@ -0,0 +1,152 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:6:37: Error: Binary operator 'xor' is written as '^' instead of the written out word.
+// Try replacing 'xor' with '^'.
+//   int get a => runtimeType.hashCode xor null.hashCode;
+//                                     ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:11:41: Error: Binary operator 'xor' is written as '^' instead of the written out word.
+// Try replacing 'xor' with '^'.
+//   int get e => 1 + runtimeType.hashCode xor null.hashCode + 3;
+//                                         ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:16:28: Error: Binary operator 'xor' is written as '^' instead of the written out word.
+// Try replacing 'xor' with '^'.
+//   int i(int x, int y) => x xor y;
+//                            ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:23:32: Error: Binary operator 'xor' is written as '^' instead of the written out word.
+// Try replacing 'xor' with '^'.
+//   int o(int x, int y) => 1 + x xor y + 3;
+//                                ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:36:31: Error: Binary operator 'xor' is written as '^' instead of the written out word.
+// Try replacing 'xor' with '^'.
+//   Key(int x, int y) : foo = x xor y, bar = x xor y {
+//                               ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:36:46: Error: Binary operator 'xor' is written as '^' instead of the written out word.
+// Try replacing 'xor' with '^'.
+//   Key(int x, int y) : foo = x xor y, bar = x xor y {
+//                                              ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:8:43: Error: Binary operator 'xor' is written as '^' instead of the written out word.
+// Try replacing 'xor' with '^'.
+//   int get c { return runtimeType.hashCode xor null.hashCode; }
+//                                           ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:13:47: Error: Binary operator 'xor' is written as '^' instead of the written out word.
+// Try replacing 'xor' with '^'.
+//   int get g { return 1 + runtimeType.hashCode xor null.hashCode + 3; }
+//                                               ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:18:34: Error: Binary operator 'xor' is written as '^' instead of the written out word.
+// Try replacing 'xor' with '^'.
+//   int k(int x, int y) { return x xor y; }
+//                                  ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:20:36: Error: Binary operator 'xor' is written as '^' instead of the written out word.
+// Try replacing 'xor' with '^'.
+//   int m(int x, int y) { int z =  x xor y; return z; }
+//                                    ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:25:38: Error: Binary operator 'xor' is written as '^' instead of the written out word.
+// Try replacing 'xor' with '^'.
+//   int q(int x, int y) { return 1 + x xor y + 3; }
+//                                      ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:29:9: Error: Binary operator 'xor' is written as '^' instead of the written out word.
+// Try replacing 'xor' with '^'.
+//     s(x xor y, x xor y);
+//         ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:29:18: Error: Binary operator 'xor' is written as '^' instead of the written out word.
+// Try replacing 'xor' with '^'.
+//     s(x xor y, x xor y);
+//                  ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_26810.dart:37:22: Error: Binary operator 'xor' is written as '^' instead of the written out word.
+// Try replacing 'xor' with '^'.
+//     print("hello ${x xor y}");
+//                      ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Key extends core::Object {
+  field core::int* foo;
+  field core::int* bar;
+  constructor •(core::int* x, core::int* y) → self::Key*
+    : self::Key::foo = x.{core::int::^}(y){(core::int*) →* core::int*}, self::Key::bar = x.{core::int::^}(y){(core::int*) →* core::int*}, super core::Object::•() {
+    core::print("hello ${x.{core::int::^}(y){(core::int*) →* core::int*}}");
+  }
+  constructor NotDuplicate(core::int* x, core::int* y) → self::Key*
+    : self::Key::foo = x.{core::int::^}(y){(core::int*) →* core::int*}, self::Key::bar = x.{core::int::^}(y){(core::int*) →* core::int*}, super core::Object::•() {
+    core::print("hello ${x.{core::int::^}(y){(core::int*) →* core::int*}}");
+  }
+  get a() → core::int*
+    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
+  get b() → core::int*
+    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
+  get c() → core::int* {
+    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
+  }
+  get d() → core::int* {
+    return this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}){(core::int*) →* core::int*};
+  }
+  get e() → core::int*
+    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  get f() → core::int*
+    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  get g() → core::int* {
+    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  }
+  get h() → core::int* {
+    return 1.{core::num::+}(this.{self::Key::runtimeType}{core::Type*}.{core::Type::hashCode}{core::int*}){(core::num*) →* core::int*}.{core::int::^}(null.{core::Object::hashCode}{core::int*}.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  }
+  method i(core::int* x, core::int* y) → core::int*
+    return x.{core::int::^}(y){(core::int*) →* core::int*};
+  method j(core::int* x, core::int* y) → core::int*
+    return x.{core::int::^}(y){(core::int*) →* core::int*};
+  method k(core::int* x, core::int* y) → core::int* {
+    return x.{core::int::^}(y){(core::int*) →* core::int*};
+  }
+  method l(core::int* x, core::int* y) → core::int* {
+    return x.{core::int::^}(y){(core::int*) →* core::int*};
+  }
+  method m(core::int* x, core::int* y) → core::int* {
+    core::int* z = x.{core::int::^}(y){(core::int*) →* core::int*};
+    return z;
+  }
+  method n(core::int* x, core::int* y) → core::int* {
+    core::int* z = x.{core::int::^}(y){(core::int*) →* core::int*};
+    return z;
+  }
+  method o(core::int* x, core::int* y) → core::int*
+    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  method p(core::int* x, core::int* y) → core::int*
+    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  method q(core::int* x, core::int* y) → core::int* {
+    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  }
+  method r(core::int* x, core::int* y) → core::int* {
+    return 1.{core::num::+}(x){(core::num*) →* core::int*}.{core::int::^}(y.{core::num::+}(3){(core::num*) →* core::int*}){(core::int*) →* core::int*};
+  }
+  method s(core::int* x, core::int* y) → dynamic {
+    this.{self::Key::s}(x.{core::int::^}(y){(core::int*) →* core::int*}, x.{core::int::^}(y){(core::int*) →* core::int*}){(core::int*, core::int*) →* dynamic};
+    this.{self::Key::s}(x.{core::int::^}(y){(core::int*) →* core::int*}, x.{core::int::^}(y){(core::int*) →* core::int*}){(core::int*, core::int*) →* dynamic};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..75defa5
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.modular.expect
@@ -0,0 +1,51 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:12: Error: Can't find ')' to match '('.
+// f() { m(T<R(<Z
+//            ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:10: Error: Can't find '>' to match '<'.
+// f() { m(T<R(<Z
+//          ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:8: Error: Can't find ')' to match '('.
+// f() { m(T<R(<Z
+//        ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:5: Error: Can't find '}' to match '{'.
+// f() { m(T<R(<Z
+//     ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:14: Error: 'Z' isn't a type.
+// f() { m(T<R(<Z
+//              ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:15: Error: Expected '[' before this.
+// f() { m(T<R(<Z
+//               ^...
+//
+// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:11: Error: Method not found: 'R'.
+// f() { m(T<R(<Z
+//           ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:9: Error: Undefined name 'T'.
+// f() { m(T<R(<Z
+//         ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:7: Error: Method not found: 'm'.
+// f() { m(T<R(<Z
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:15: Error: Expected ';' after this.
+// f() { m(T<R(<Z
+//               ^...
+//
+import self as self;
+
+static method f() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:7: Error: Method not found: 'm'.
+f() { m(T<R(<Z
+      ^";
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..679fe85
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart:1:6: Error: Can't find ')' to match '('.
+// n<S e(
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart:1:2: Error: Can't find '>' to match '<'.
+// n<S e(
+//  ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart:1:3: Error: Expected '>' after this.
+// n<S e(
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart:1:7: Error: Expected an identifier, but got ''.
+// Try inserting an identifier before ''.
+// n<S e(
+//       ^...
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart:1:7: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// n<S e(
+//       ^...
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart:1:7: Error: Expected '{' before this.
+// n<S e(
+//       ^...
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart:1:3: Error: Type 'S' not found.
+// n<S e(
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart:1:1: Error: Type 'n' not found.
+// n<S e(
+// ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart:1:1: Error: Expected 0 type arguments.
+// n<S e(
+// ^
+//
+import self as self;
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39026.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39026.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..ac2beca
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39026.crash_dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39026.crash_dart:2:8: Error: Operator declarations must be preceded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//     co <{
+//        ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39026.crash_dart:2:8: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//     co <{
+//        ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39026.crash_dart:2:8: Error: Operator '<' should have exactly one parameter.
+//     co <{
+//        ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39026.crash_dart:2:5: Error: Type 'co' not found.
+//     co <{
+//     ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  operator <() → invalid-type {}
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39026_prime.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39026_prime.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..65bece2
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39026_prime.crash_dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39026_prime.crash_dart:2:17: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//     co operator <{
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39026_prime.crash_dart:2:17: Error: Operator '<' should have exactly one parameter.
+//     co operator <{
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39026_prime.crash_dart:2:5: Error: Type 'co' not found.
+//     co operator <{
+//     ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  operator <() → invalid-type {}
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..0292288
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:11: Error: Expected '>' after this.
+// typedef F<Glib.=
+//           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:17: Error: Expected a type, but got ''.
+// typedef F<Glib.=
+//                 ^...
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:16: Error: Expected ';' after this.
+// typedef F<Glib.=
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39033.crash_dart:1:16: Error: Can't create typedef from non-type.
+// typedef F<Glib.=
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<unrelated Glib extends core::Object? = dynamic> = invalid-type;
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..cd13068
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:11: Error: Expected '>' after this.
+// typedef F<Glib.=
+//           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:17: Error: Expected a type, but got ''.
+// typedef F<Glib.=
+//                 ^...
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:16: Error: Expected ';' after this.
+// typedef F<Glib.=
+//                ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39033b.crash_dart:2:16: Error: Can't create typedef from non-type.
+// typedef F<Glib.=
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<unrelated Glib extends core::Object? = dynamic> = invalid-type;
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39058.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39058.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..d532f41
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39058.crash_dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39058.crash_dart:1:5: Error: Can't find ')' to match '('.
+// {<[](
+//     ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39058.crash_dart:1:2: Error: Can't find '>' to match '<'.
+// {<[](
+//  ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39058.crash_dart:1:1: Error: Can't find '}' to match '{'.
+// {<[](
+// ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39058.crash_dart:1:1: Error: Expected a declaration, but got '{'.
+// {<[](
+// ^
+//
+import self as self;
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39058_prime.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39058_prime.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..ae54add
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39058_prime.crash_dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39058_prime.crash_dart:1:1: Error: Expected a declaration, but got '{'.
+// {<[]()>}
+// ^
+//
+import self as self;
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.modular.expect
new file mode 100644
index 0000000..a49ea7c
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39060.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:4: Error: 's' isn't a type.
+//   {s A<}>
+//    ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:6: Error: Expected ';' after this.
+//   {s A<}>
+//      ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:8: Error: Expected a type, but got '}'.
+//   {s A<}>
+//        ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:8: Error: This couldn't be parsed.
+//   {s A<}>
+//        ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:4:1: Error: Expected '[' before this.
+// }
+// ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:4:1: Error: Expected ';' after this.
+// }
+// ^
+//
+import self as self;
+
+static method main() → dynamic {
+  {
+    invalid-type A;
+    <invalid-type>[];
+  }
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..e1e7c23
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:1: Error: Expected a declaration, but got '('.
+// () async => a b < c $? >
+// ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:2: Error: Expected a declaration, but got ')'.
+// () async => a b < c $? >
+//  ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:4: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// () async => a b < c $? >
+//    ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:19: Error: Expected '>' after this.
+// () async => a b < c $? >
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:25: Error: Expected an identifier, but got ''.
+// Try inserting an identifier before ''.
+// () async => a b < c $? >
+//                         ^...
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:24: Error: Expected ';' after this.
+// () async => a b < c $? >
+//                        ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:19: Error: Type 'c' not found.
+// () async => a b < c $? >
+//                   ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:15: Error: Type 'b' not found.
+// () async => a b < c $? >
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:15: Error: Expected 0 type arguments.
+// () async => a b < c $? >
+//               ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:13: Error: Expected ';' after this.
+// () async => a b < c $? >
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:13: Error: Undefined name 'a'.
+// () async => a b < c $? >
+//             ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:15: Error: Unexpected token 'b'.
+// () async => a b < c $? >
+//               ^
+//
+import self as self;
+
+static method async() → dynamic
+  return invalid-expression "pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:13: Error: Undefined name 'a'.
+() async => a b < c \$? >
+            ^";
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..34c35fb
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart:3:5: Error: Expected '{' before this.
+//     /
+//     ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart:3:5: Error: Operator declarations must be preceded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//     /
+//     ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart:3:5: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//     /
+//     ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart:3:5: Error: The name of a constructor must match the name of the enclosing class.
+//     /
+//     ^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart:3:5: Error: Operator '/' should have exactly one parameter.
+//     /
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  constructor •() → self::C
+    : super core::Object::•() {}
+  constructor /() → self::C
+    : super core::Object::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.modular.expect
new file mode 100644
index 0000000..0b3c58e
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39958_01.dart:2:5: Error: Type 'void' can't have type arguments.
+// Try removing the type arguments.
+// void<int> f() {}
+//     ^
+//
+import self as self;
+
+static method f() → void {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.modular.expect
new file mode 100644
index 0000000..f4c6611
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart:2:1: Error: Expected 0 type arguments.
+// dynamic<int> f() {}
+// ^
+//
+import self as self;
+
+static method f() → invalid-type {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.modular.expect
new file mode 100644
index 0000000..46d364b
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart:2:1: Error: Expected 0 type arguments.
+// int<int> f() {}
+// ^
+//
+import self as self;
+
+static method f() → invalid-type {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.modular.expect
new file mode 100644
index 0000000..b829820
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:2:1: Error: Type 'Foo' not found.
+// Foo<int> f() {}
+// ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:2:1: Error: Expected 0 type arguments.
+// Foo<int> f() {}
+// ^
+//
+import self as self;
+
+static method f() → invalid-type {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_43090.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_43090.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..c79c850
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/issue_43090.crash_dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/issue_43090.crash_dart:1:12: Error: Expected an identifier, but got '='.
+// Try inserting an identifier before '='.
+// typedef A< = void Function();
+//            ^
+//
+import self as self;
+
+typedef A = () → void;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.modular.expect
new file mode 100644
index 0000000..c923736
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:4:3: Error: 'yield' can only be used in 'sync*' or 'async*' methods.
+//   yield f();
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
+//  - 'List' is from 'dart:core'.
+// List<int> g() {
+//           ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+static method f() → asy::Future<core::int>
+  return asy::Future::value<core::int>(7);
+static method g() → core::List<core::int> {
+  invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:4:3: Error: 'yield' can only be used in 'sync*' or 'async*' methods.
+  yield f();
+  ^";
+  return invalid-expression "pkg/front_end/testcases/general/error_recovery/yield_not_in_generator.dart:3:11: Error: A non-null value must be returned since the return type 'List<int>' doesn't allow null.
+ - 'List' is from 'dart:core'.
+List<int> g() {
+          ^" in null;
+}
diff --git a/pkg/front_end/testcases/general/escape.dart.weak.modular.expect b/pkg/front_end/testcases/general/escape.dart.weak.modular.expect
new file mode 100644
index 0000000..e9c05d7
--- /dev/null
+++ b/pkg/front_end/testcases/general/escape.dart.weak.modular.expect
@@ -0,0 +1,89 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field dynamic field = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  field dynamic field = null;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic x) → core::bool*
+    return false;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class X extends core::Object implements self::A, self::B {
+  field dynamic field = null;
+  synthetic constructor •() → self::X*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method useAsA(self::A* object) → void {
+  dynamic _ = object.{self::A::field}{dynamic};
+}
+static method useAsB(self::B* object) → void {
+  dynamic _ = object.{self::B::field}{dynamic};
+  self::escape(object);
+}
+static method escape(dynamic x) → void {
+  x == null ?{dynamic} x = "" : null;
+  x == null ?{dynamic} x = 45 : null;
+  if(!(x is core::int*) && !(x is core::String*)) {
+    x{dynamic}.field = 45;
+  }
+}
+static method main() → dynamic {
+  self::X* object = new self::X::•();
+  self::useAsA(new self::A::•());
+  self::useAsA(object);
+  self::useAsB(new self::B::•());
+  self::useAsB(object);
+}
diff --git a/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.modular.expect
new file mode 100644
index 0000000..b77b7a9
--- /dev/null
+++ b/pkg/front_end/testcases/general/experiment_release_version/main.dart.weak.modular.expect
@@ -0,0 +1,120 @@
+//
+// Problems outside component:
+//
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart:5:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// int? versionedUnallowedPackage; // error
+//    ^
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// int? versioned_2_8_AllowedPackage; // error
+//    ^
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// int? versioned_2_9_AllowedPackage; // error
+//    ^
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_10_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// int? versionedAllowedPackage; // error
+//    ^
+// pkg/front_end/testcases/general/experiment_release_version/not_allowed_package/lib/versioned_2_10_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+library;
+import self as self;
+
+import "package:allowed_package/unversioned_lib.dart";
+import "package:allowed_package/versioned_2_8_lib.dart";
+import "package:allowed_package/versioned_2_9_lib.dart";
+import "package:allowed_package/versioned_2_10_lib.dart";
+import "package:not_allowed_package/unversioned_lib.dart";
+import "package:not_allowed_package/versioned_2_8_lib.dart";
+import "package:not_allowed_package/versioned_2_9_lib.dart";
+import "package:not_allowed_package/versioned_2_10_lib.dart";
+import "org-dartlang-testcase:///unversioned_lib.dart";
+import "org-dartlang-testcase:///versioned_2_8_lib.dart";
+import "org-dartlang-testcase:///versioned_2_9_lib.dart";
+import "org-dartlang-testcase:///versioned_2_10_lib.dart";
+
+static method main() → dynamic {}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/experiment_release_version/unversioned_lib.dart:5:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// int? unversionedLibrary; // error
+//    ^
+// pkg/front_end/testcases/general/experiment_release_version/unversioned_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+import self as self2;
+import "dart:core" as core;
+
+static field core::int? unversionedLibrary;
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// int? versioned_2_8_Library; // error
+//    ^
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_8_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+import self as self3;
+import "dart:core" as core;
+
+static field core::int? versioned_2_8_Library;
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// int? versioned_2_9_Library; // error
+//    ^
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_9_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+import self as self4;
+import "dart:core" as core;
+
+static field core::int? versioned_2_9_Library;
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_10_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// int? versioned_2_10_Library; // error
+//    ^
+// pkg/front_end/testcases/general/experiment_release_version/versioned_2_10_lib.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+import self as self5;
+import "dart:core" as core;
+
+static field core::int? versioned_2_10_Library;
diff --git a/pkg/front_end/testcases/general/export_main.dart.weak.modular.expect b/pkg/front_end/testcases/general/export_main.dart.weak.modular.expect
new file mode 100644
index 0000000..94479f0
--- /dev/null
+++ b/pkg/front_end/testcases/general/export_main.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "hello.dart" as hel;
+additionalExports = (hel::main)
+
+export "org-dartlang-testcase:///hello.dart" show main;
+
+
+library;
+import self as hel;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::print("Hello, World!");
+}
diff --git a/pkg/front_end/testcases/general/export_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/export_test.dart.weak.modular.expect
new file mode 100644
index 0000000..497ce03
--- /dev/null
+++ b/pkg/front_end/testcases/general/export_test.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library;
+import self as self;
+import "dart:core" as core;
+additionalExports = (core::print)
+
+import "dart:developer" show UserTag;
+export "dart:core" show print;
+
+static method main() → dynamic {
+  core::print(#C1);
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(dev::UserTag*)
+}
diff --git a/pkg/front_end/testcases/general/expressions.dart.weak.modular.expect b/pkg/front_end/testcases/general/expressions.dart.weak.modular.expect
new file mode 100644
index 0000000..20f5b17
--- /dev/null
+++ b/pkg/front_end/testcases/general/expressions.dart.weak.modular.expect
@@ -0,0 +1,101 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/expressions.dart:74:16: Error: Method not found: 'int.toString'.
+//     print(int?.toString());
+//                ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method foo({dynamic fisk = #C1}) → dynamic {
+  core::print(fisk);
+}
+static method caller(dynamic f) → dynamic {
+  f{dynamic}.call();
+}
+static method main() → dynamic {
+  core::int* i = 0;
+  core::print(i =={core::num::==}{(core::Object*) →* core::bool*} 1 ?{core::String*} "bad" : "good");
+  core::print("${i}");
+  core::print("'${i}'");
+  core::print(" '${i}' ");
+  core::print(" '${i}' '${i}'");
+  core::print(" '${i}' '${i}'");
+  core::print("foobar");
+  core::print(" '${i}' '${i}' '${i}' '${i}'");
+  try {
+    throw "fisk";
+  }
+  on core::String* catch(final core::String* e, final core::StackTrace* s) {
+    core::print(e);
+    if(!(s == null))
+      core::print(s);
+  }
+  for (; false; ) {
+  }
+  core::List<core::String*>* list = <core::String*>["Hello, World!"];
+  core::print(list.{core::List::[]}(i){(core::int*) →* core::String*});
+  list.{core::List::[]=}(i, "Hello, Brave New World!"){(core::int*, core::String*) →* void};
+  core::print(list.{core::List::[]}(i){(core::int*) →* core::String*});
+  i = 87;
+  core::print(i.{core::int::unary-}(){() →* core::int*});
+  core::print(i.{core::int::~}(){() →* core::int*});
+  core::print(!(i =={core::num::==}{(core::Object*) →* core::bool*} 42));
+  core::print(i = i.{core::num::-}(1){(core::num*) →* core::int*});
+  core::print(i = i.{core::num::+}(1){(core::num*) →* core::int*});
+  core::print(let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::-}(1){(core::num*) →* core::int*} in #t1);
+  core::print(let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3);
+  core::print(new core::Object::•());
+  core::print(#C2);
+  core::print(core::List::filled<core::String*>(2, null).{core::Object::runtimeType}{core::Type*});
+  self::foo(fisk: "Blorp gulp");
+  function f() → Null {
+    core::print("f was called");
+  }
+  self::caller(f);
+  self::caller(() → Null {
+    core::print("<anon> was called");
+  });
+  function g([dynamic message = #C1]) → Null {
+    core::print(message);
+  }
+  g("Hello, World"){([dynamic]) →* Null};
+  self::caller(([dynamic x = #C1]) → Null {
+    core::print("<anon> was called with ${x}");
+  });
+  function h({dynamic message = #C1}) → Null {
+    core::print(message);
+  }
+  h(message: "Hello, World"){({message: dynamic}) →* Null};
+  self::caller(({dynamic x = #C1}) → Null {
+    core::print("<anon> was called with ${x}");
+  });
+  core::print(#C3.{core::Type::toString}(){() →* core::String*});
+  core::print(#C3);
+  core::print(let final core::Type* #t5 = #C3 in block {
+    #t5.{core::Type::toString}(){() →* core::String*};
+  } =>#t5);
+  try {
+    core::print(invalid-expression "pkg/front_end/testcases/general/expressions.dart:74:16: Error: Method not found: 'int.toString'.
+    print(int?.toString());
+               ^^^^^^^^");
+    throw "Shouldn't work";
+  }
+  on core::NoSuchMethodError* catch(final core::NoSuchMethodError* e) {
+    core::print("As expected: ${e}");
+  }
+  core::print(core::int::parse("42"));
+}
+
+constants  {
+  #C1 = null
+  #C2 = core::Object {}
+  #C3 = TypeLiteralConstant(core::int*)
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///expressions.dart:
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.modular.expect b/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.modular.expect
new file mode 100644
index 0000000..8ead278
--- /dev/null
+++ b/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.modular.expect
@@ -0,0 +1,77 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/extend_with_type_variable.dart:13:7: Error: The type 'M' can't be mixed in.
+// class Class2<T, M extends Mixin<T>> extends SuperClass with M {}
+//       ^
+//
+// pkg/front_end/testcases/general/extend_with_type_variable.dart:11:7: Error: The type variable 'S' can't be used as supertype.
+// class Class1<T, S extends SuperClass> extends S with Mixin<T> {}
+//       ^
+//
+// pkg/front_end/testcases/general/extend_with_type_variable.dart:13:7: Error: The type variable 'M' can't be used as supertype.
+// class Class2<T, M extends Mixin<T>> extends SuperClass with M {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class SuperClass extends core::Object {
+  synthetic constructor •() → self::SuperClass*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Mixin<T extends core::Object* = dynamic> extends core::Object /*isMixinDeclaration*/  {
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Class1&S&Mixin<T extends core::Object* = dynamic, S extends self::SuperClass*> = core::Object with self::Mixin<self::_Class1&S&Mixin::T*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1&S&Mixin<self::_Class1&S&Mixin::T*, self::_Class1&S&Mixin::S*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class1<T extends core::Object* = dynamic, S extends self::SuperClass*> extends self::_Class1&S&Mixin<self::Class1::T*, self::Class1::S*> {
+  synthetic constructor •() → self::Class1<self::Class1::T*, self::Class1::S*>*
+    : super self::_Class1&S&Mixin::•()
+    ;
+}
+abstract class _Class2&SuperClass&M<T extends core::Object* = dynamic, M extends self::Mixin<self::_Class2&SuperClass&M::T*>* = self::Mixin<dynamic>*> extends self::SuperClass /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2&SuperClass&M<self::_Class2&SuperClass&M::T*, self::_Class2&SuperClass&M::M*>*
+    : super self::SuperClass::•()
+    ;
+}
+class Class2<T extends core::Object* = dynamic, M extends self::Mixin<self::Class2::T*>* = self::Mixin<dynamic>*> extends self::_Class2&SuperClass&M<self::Class2::T*, self::Class2::M*> {
+  synthetic constructor •() → self::Class2<self::Class2::T*, self::Class2::M*>*
+    : super self::_Class2&SuperClass&M::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/extension_annotation.dart.weak.modular.expect b/pkg/front_end/testcases/general/extension_annotation.dart.weak.modular.expect
new file mode 100644
index 0000000..d44af16
--- /dev/null
+++ b/pkg/front_end/testcases/general/extension_annotation.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+@#C1
+extension Extension on core::int {
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::A {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///extension_annotation.dart:
+- A. (from org-dartlang-testcase:///extension_annotation.dart:6:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.modular.expect b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.modular.expect
new file mode 100644
index 0000000..dfe0844
--- /dev/null
+++ b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: This requires the 'extension-types' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// test(E e) {} // Error.
+//      ^
+//
+// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: 'E' isn't a type.
+// test(E e) {} // Error.
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+extension E on self::A {
+}
+static method test(invalid-type e) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.modular.expect b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.modular.expect
new file mode 100644
index 0000000..0c596cb
--- /dev/null
+++ b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart:9:11: Error: This requires the 'extension-types' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// extension type E on A {} // Error because of 'type'.
+//           ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+extension type E on self::A {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/external.dart.weak.modular.expect b/pkg/front_end/testcases/general/external.dart.weak.modular.expect
new file mode 100644
index 0000000..5e9b241
--- /dev/null
+++ b/pkg/front_end/testcases/general/external.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:isolate" as iso;
+import "dart:async" as asy;
+
+import "dart:isolate";
+
+static field dynamic subscription;
+static method onData(dynamic x) → void {
+  core::print(x);
+  self::subscription{dynamic}.cancel();
+}
+static method main() → dynamic {
+  core::String* string = core::String::fromCharCode(65);
+  iso::ReceivePort* port = iso::ReceivePort::•();
+  self::subscription = port.{iso::ReceivePort::listen}(#C1){((dynamic) →* void, {cancelOnError: core::bool*, onDone: () →* void, onError: core::Function*}) →* asy::StreamSubscription<dynamic>*};
+  port.{iso::ReceivePort::sendPort}{iso::SendPort*}.{iso::SendPort::send}(string){(core::Object*) →* void};
+}
+
+constants  {
+  #C1 = static-tearoff self::onData
+}
diff --git a/pkg/front_end/testcases/general/external_import.dart.weak.modular.expect b/pkg/front_end/testcases/general/external_import.dart.weak.modular.expect
new file mode 100644
index 0000000..0d7662f
--- /dev/null
+++ b/pkg/front_end/testcases/general/external_import.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+@#C2
+@#C4
+@#C6
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/external_import.dart:7:1: Error: Dart native extensions are no longer supported.
+// Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
+// import 'dart-ext:here';
+// ^
+//
+// pkg/front_end/testcases/general/external_import.dart:8:1: Error: Dart native extensions are no longer supported.
+// Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
+// import 'dart-ext:foo/../there';
+// ^
+//
+// pkg/front_end/testcases/general/external_import.dart:9:1: Error: Dart native extensions are no longer supported.
+// Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
+// import 'dart-ext:/usr/local/somewhere';
+// ^
+//
+import self as self;
+import "dart:_internal" as _in;
+
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "dart-ext:here"
+  #C2 = _in::ExternalName {name:#C1}
+  #C3 = "dart-ext:foo/../there"
+  #C4 = _in::ExternalName {name:#C3}
+  #C5 = "dart-ext:/usr/local/somewhere"
+  #C6 = _in::ExternalName {name:#C5}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///external_import.dart:
+- ExternalName. (from org-dartlang-sdk:///sdk/lib/internal/internal.dart:92:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/external_method.dart.weak.modular.expect b/pkg/front_end/testcases/general/external_method.dart.weak.modular.expect
new file mode 100644
index 0000000..323ca66
--- /dev/null
+++ b/pkg/front_end/testcases/general/external_method.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  external method externalMethod() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+external static method externalMethod() → void;
+static method main() → void {}
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect
new file mode 100644
index 0000000..0cdd47c
--- /dev/null
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:test" as test;
+
+import "dart:test";
+
+static method main() → dynamic {
+  test::Class::fact();
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/factory_patch/patch_lib.dart:22:52: Error: Can't have a default value here because any default values of 'Class._internal' would be used instead.
+// Try removing the default value.
+//   const factory Class.redirect({bool defaultValue: true}) = Class._internal;
+//                                                    ^
+//
+import self as test;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+
+@#C1
+class Class extends core::Object {
+  final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  const constructor _internal({core::bool defaultValue = #C3}) → test::Class
+    : test::Class::defaultValue = defaultValue, super core::Object::•()
+    ;
+  @#C1
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C4}) → test::Class
+    return new test::Class::_internal(defaultValue: defaultValue);
+  @#C1
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C4}) → test::Class
+    return throw "unsupported";
+  @#C1
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C4}) → test::Class
+    return new test::Class::_internal(defaultValue: defaultValue);
+}
+
+constants  {
+  #C1 = _in::_Patch {}
+  #C2 = constructor-tearoff test::Class::redirect
+  #C3 = false
+  #C4 = true
+}
diff --git a/pkg/front_end/testcases/general/fallthrough.dart.weak.modular.expect b/pkg/front_end/testcases/general/fallthrough.dart.weak.modular.expect
new file mode 100644
index 0000000..4348081
--- /dev/null
+++ b/pkg/front_end/testcases/general/fallthrough.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/fallthrough.dart:8:5: Error: Switch case may fall through to the next case.
+//     case 3:
+//     ^
+//
+// pkg/front_end/testcases/general/fallthrough.dart:12:5: Error: Switch case may fall through to the next case.
+//     case 6:
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main(core::List<core::String*>* args) → void {
+  core::int* x = args.{core::List::length}{core::int*};
+  #L1:
+  switch(x) {
+    #L2:
+    case #C1:
+      {
+        x = 4;
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///fallthrough.dart", 8);
+      }
+    #L3:
+    case #C2:
+      {
+        break #L1;
+      }
+    #L4:
+    case #C3:
+    case #C4:
+      {
+        if(args.{core::List::[]}(0){(core::int*) →* core::String*} =={core::String::==}{(core::Object*) →* core::bool*} "") {
+          break #L1;
+        }
+        else {
+          return;
+        }
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///fallthrough.dart", 12);
+      }
+    #L5:
+    case #C5:
+      {}
+  }
+}
+
+constants  {
+  #C1 = 3
+  #C2 = 5
+  #C3 = 6
+  #C4 = 7
+  #C5 = 4
+}
diff --git a/pkg/front_end/testcases/general/ffi_sample.dart.weak.modular.expect b/pkg/front_end/testcases/general/ffi_sample.dart.weak.modular.expect
new file mode 100644
index 0000000..6895041
--- /dev/null
+++ b/pkg/front_end/testcases/general/ffi_sample.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library;
+import self as self;
+import "dart:ffi" as ffi;
+import "dart:core" as core;
+
+import "dart:ffi";
+import "package:ffi/ffi.dart";
+
+class Coordinate extends ffi::Struct {
+  @#C1
+  field core::double* x = null;
+  @#C1
+  field core::double* y = null;
+  field ffi::Pointer<self::Coordinate*>* next = null;
+  static factory allocate(ffi::Allocator* allocator, core::double* x, core::double* y, ffi::Pointer<self::Coordinate*>* next) → self::Coordinate* {
+    return let final self::Coordinate* #t1 = ffi::StructPointer|get#ref<self::Coordinate*>(ffi::AllocatorAlloc|call<self::Coordinate*>(allocator)) in block {
+      #t1.{self::Coordinate::x} = x;
+      #t1.{self::Coordinate::y} = y;
+      #t1.{self::Coordinate::next} = next;
+    } =>#t1;
+  }
+  abstract member-signature get _typedDataBase() → core::Object*; -> ffi::_Compound::_typedDataBase
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = ffi::Double {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///ffi_sample.dart:
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:122:9)
+- _NativeDouble. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:34:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/fibonacci.dart.weak.modular.expect b/pkg/front_end/testcases/general/fibonacci.dart.weak.modular.expect
new file mode 100644
index 0000000..df2b7da
--- /dev/null
+++ b/pkg/front_end/testcases/general/fibonacci.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method fibonacci(core::int* n) → core::int* {
+  if(n.{core::num::<}(2){(core::num*) →* core::bool*})
+    return n;
+  return self::fibonacci(n.{core::num::-}(1){(core::num*) →* core::int*}).{core::num::+}(self::fibonacci(n.{core::num::-}(2){(core::num*) →* core::int*})){(core::num*) →* core::int*};
+}
+static method main() → dynamic {
+  for (core::int* i = 0; i.{core::num::<}(20){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    core::print(self::fibonacci(i));
+  }
+}
diff --git a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.modular.expect b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.modular.expect
new file mode 100644
index 0000000..6307537
--- /dev/null
+++ b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/field_initializer_capture_this.dart:6:17: Error: Can't access 'this' in a field initializer to read 'x'.
+//   var f = () => x; // error
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field () →* invalid-type f = () → invalid-type => invalid-expression "pkg/front_end/testcases/general/field_initializer_capture_this.dart:6:17: Error: Can't access 'this' in a field initializer to read 'x'.
+  var f = () => x; // error
+                ^";
+  field dynamic x = null;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/final_field_setter.dart.weak.modular.expect b/pkg/front_end/testcases/general/final_field_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..b2023bc
--- /dev/null
+++ b/pkg/front_end/testcases/general/final_field_setter.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  final field core::int* field = 42;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  set field(core::int* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static final field core::int* field = 42;
+static set field(core::int* value) → void {}
+static method main() → dynamic {
+  self::field = self::field;
+  self::Class* c = new self::Class::•();
+  c.{self::Class::field} = self::field;
+}
diff --git a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.modular.expect b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.modular.expect
new file mode 100644
index 0000000..5cfbd7c
--- /dev/null
+++ b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.modular.expect
@@ -0,0 +1,137 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+abstract class TestMixin<R extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object /*isMixinDeclaration*/  {
+  method test(covariant-by-class asy::Future<self::TestMixin::R*>* fetch) → asy::Future<self::TestMixin::T*>* async {
+    final self::TestMixin::R* response = await fetch;
+    self::TestMixin::T* result;
+    if(response is self::Response<dynamic>*) {
+      result = response{self::TestMixin::R* & self::Response<dynamic>* /* '*' & '*' = '*' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} self::TestMixin::T*;
+    }
+    else
+      if(response is self::PagingResponse<dynamic>*) {
+        result = response{self::TestMixin::R* & self::PagingResponse<dynamic>* /* '*' & '*' = '*' */}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>*}.{self::PagingResponseData::data}{core::List<dynamic>*} as self::TestMixin::T*;
+      }
+      else
+        if(response is self::TestMixin::T*) {
+          result = response{self::TestMixin::R* & self::TestMixin::T* /* '*' & '*' = '*' */};
+        }
+        else {
+          throw core::Exception::•("Invalid response type");
+        }
+    return result;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class PagingResponse<T extends core::Object* = dynamic> extends core::Object {
+  final field self::PagingResponseData<self::PagingResponse::T*>* data;
+  constructor •(self::PagingResponseData<self::PagingResponse::T*>* data) → self::PagingResponse<self::PagingResponse::T*>*
+    : self::PagingResponse::data = data, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class PagingResponseData<T extends core::Object* = dynamic> extends core::Object {
+  final field core::List<self::PagingResponseData::T*>* data;
+  constructor •(core::List<self::PagingResponseData::T*>* data) → self::PagingResponseData<self::PagingResponseData::T*>*
+    : self::PagingResponseData::data = data, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Response<T extends core::Object* = dynamic> extends core::Object {
+  final field self::Response::T* data;
+  constructor •(self::Response::T* data) → self::Response<self::Response::T*>*
+    : self::Response::data = data, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Class1&Object&TestMixin = core::Object with self::TestMixin<self::Response<core::String*>*, core::String*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Class1&Object&TestMixin*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method test(covariant-by-class asy::Future<self::Response<core::String*>*>* fetch) → asy::Future<core::String*>*
+    return super.{self::TestMixin::test}(fetch);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class1 extends self::_Class1&Object&TestMixin {
+  synthetic constructor •() → self::Class1*
+    : super self::_Class1&Object&TestMixin::•()
+    ;
+  method _test() → dynamic {
+    final self::Response<core::String*>* response = new self::Response::•<core::String*>("test");
+    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String*>*>(response)){(asy::Future<self::Response<core::String*>*>*) →* asy::Future<core::String*>*};
+  }
+}
+abstract class _Class2&Object&TestMixin = core::Object with self::TestMixin<self::PagingResponse<core::String*>*, core::String*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Class2&Object&TestMixin*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method test(covariant-by-class asy::Future<self::PagingResponse<core::String*>*>* fetch) → asy::Future<core::String*>*
+    return super.{self::TestMixin::test}(fetch);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class2 extends self::_Class2&Object&TestMixin {
+  synthetic constructor •() → self::Class2*
+    : super self::_Class2&Object&TestMixin::•()
+    ;
+  method _test() → dynamic {
+    final self::PagingResponse<core::String*>* response = new self::PagingResponse::•<core::String*>(new self::PagingResponseData::•<core::String*>(<core::String*>["test"]));
+    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String*>*>(response)){(asy::Future<self::PagingResponse<core::String*>*>*) →* asy::Future<core::String*>*};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.modular.expect
new file mode 100644
index 0000000..5ba0d07
--- /dev/null
+++ b/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+static method main() → void {
+  function f({core::int* x = #C1}) → core::int*
+    return null;
+  new mai::Registry::•().{mai::DynamicDispatchRegistry::register}(f){(({x: core::int*}) →* core::int*) →* ({x: core::int*}) →* core::int*};
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/for_in_scope.dart.weak.modular.expect b/pkg/front_end/testcases/general/for_in_scope.dart.weak.modular.expect
new file mode 100644
index 0000000..78f359e
--- /dev/null
+++ b/pkg/front_end/testcases/general/for_in_scope.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main(core::List<core::String*>* arguments) → dynamic {
+  for (core::String* arguments in arguments) {
+    core::print(arguments);
+  }
+}
diff --git a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.modular.expect b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.modular.expect
new file mode 100644
index 0000000..ba021d0
--- /dev/null
+++ b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.modular.expect
@@ -0,0 +1,200 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/for_in_without_declaration.dart:32:10: Error: Expected an identifier, but got 'super'.
+// Try inserting an identifier before 'super'.
+//     for (super.superInstanceField in []) {}
+//          ^^^^^
+//
+// pkg/front_end/testcases/general/for_in_without_declaration.dart:33:10: Error: Expected an identifier, but got 'super'.
+// Try inserting an identifier before 'super'.
+//     for (super.untypedSuperInstanceField in []) {}
+//          ^^^^^
+//
+// pkg/front_end/testcases/general/for_in_without_declaration.dart:35:11: Error: Unexpected token '.'.
+//     for (c.instanceField in []) {}
+//           ^
+//
+// pkg/front_end/testcases/general/for_in_without_declaration.dart:36:11: Error: Unexpected token '.'.
+//     for (c.untypedSuperInstanceField in []) {}
+//           ^
+//
+// pkg/front_end/testcases/general/for_in_without_declaration.dart:38:20: Error: Unexpected token '.'.
+//     for (unresolved.foo in []) {}
+//                    ^
+//
+// pkg/front_end/testcases/general/for_in_without_declaration.dart:39:11: Error: Unexpected token '.'.
+//     for (c.unresolved in []) {}
+//           ^
+//
+// pkg/front_end/testcases/general/for_in_without_declaration.dart:40:14: Error: Unexpected token '('.
+//     for (main() in []) {}
+//              ^
+//
+// pkg/front_end/testcases/general/for_in_without_declaration.dart:40:10: Error: Can't assign to this, so it can't be used in a for-in loop.
+//     for (main() in []) {}
+//          ^^^^
+//
+// pkg/front_end/testcases/general/for_in_without_declaration.dart:41:15: Error: Unexpected token ','.
+//     for (var x, y in <int>[]) {
+//               ^
+//
+// pkg/front_end/testcases/general/for_in_without_declaration.dart:41:10: Error: A for-in loop can't have more than one loop variable.
+//     for (var x, y in <int>[]) {
+//          ^^^
+//
+// pkg/front_end/testcases/general/for_in_without_declaration.dart:46:10: Error: Can't assign to the const variable 'constant'.
+//     for (constant in []) {}
+//          ^^^^^^^^
+//
+// pkg/front_end/testcases/general/for_in_without_declaration.dart:37:10: Error: The setter 'unresolved' isn't defined for the class 'C'.
+//  - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
+//     for (unresolved in []) {}
+//          ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/for_in_without_declaration.dart:38:10: Error: The getter 'unresolved' isn't defined for the class 'C'.
+//  - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+//     for (unresolved.foo in []) {}
+//          ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/for_in_without_declaration.dart:39:12: Error: The setter 'unresolved' isn't defined for the class 'C'.
+//  - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
+//     for (c.unresolved in []) {}
+//            ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  field core::int* superInstanceField = null;
+  field dynamic untypedSuperInstanceField = null;
+  synthetic constructor •() → self::Super*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::Super {
+  field core::int* instanceField = null;
+  field dynamic untypedInstanceField = null;
+  static field core::double* staticField = null;
+  static field dynamic untypedStaticField = null;
+  synthetic constructor •() → self::C*
+    : super self::Super::•()
+    ;
+  method m() → dynamic {
+    core::String* local;
+    dynamic untypedLocal;
+    for (final core::String* #t1 in <core::String*>[]) {
+      local = #t1;
+    }
+    for (final dynamic #t2 in <dynamic>[]) {
+      untypedLocal = #t2;
+    }
+    for (final core::int* #t3 in <core::int*>[]) {
+      this.{self::C::instanceField} = #t3;
+    }
+    for (final dynamic #t4 in <dynamic>[]) {
+      this.{self::C::untypedInstanceField} = #t4;
+    }
+    for (final core::double* #t5 in <core::double*>[]) {
+      self::C::staticField = #t5;
+    }
+    for (final dynamic #t6 in <dynamic>[]) {
+      self::C::untypedStaticField = #t6;
+    }
+    for (final core::bool* #t7 in <core::bool*>[]) {
+      self::topLevelField = #t7;
+    }
+    for (final dynamic #t8 in <dynamic>[]) {
+      self::untypedTopLevelField = #t8;
+    }
+    for (final core::int* #t9 in <core::int*>[]) {
+      super.{self::Super::superInstanceField} = #t9;
+    }
+    for (final dynamic #t10 in <dynamic>[]) {
+      super.{self::Super::untypedSuperInstanceField} = #t10;
+    }
+    self::C* c = new self::C::•();
+    for (final core::int* #t11 in <core::int*>[]) {
+      c.{self::C::instanceField} = #t11;
+    }
+    for (final dynamic #t12 in <dynamic>[]) {
+      c.{self::Super::untypedSuperInstanceField} = #t12;
+    }
+    for (final dynamic #t13 in <dynamic>[]) {
+      invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:37:10: Error: The setter 'unresolved' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
+    for (unresolved in []) {}
+         ^^^^^^^^^^" in this{<unresolved>}.unresolved = invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:37:10: Error: The setter 'unresolved' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
+    for (unresolved in []) {}
+         ^^^^^^^^^^";
+    }
+    for (final dynamic #t14 in <dynamic>[]) {
+      invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:38:10: Error: The getter 'unresolved' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+    for (unresolved.foo in []) {}
+         ^^^^^^^^^^" in this{<unresolved>}.unresolved{<invalid>}.foo = #t14;
+    }
+    for (final dynamic #t15 in <dynamic>[]) {
+      invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:39:12: Error: The setter 'unresolved' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
+    for (c.unresolved in []) {}
+           ^^^^^^^^^^" in c{<unresolved>}.unresolved = invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:39:12: Error: The setter 'unresolved' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
+    for (c.unresolved in []) {}
+           ^^^^^^^^^^";
+    }
+    {
+      invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:40:10: Error: Can't assign to this, so it can't be used in a for-in loop.
+    for (main() in []) {}
+         ^^^^";
+      for (final dynamic #t16 in <dynamic>[]) {
+        invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:40:10: Error: Can't assign to this, so it can't be used in a for-in loop.
+    for (main() in []) {}
+         ^^^^";
+        self::main();
+      }
+    }
+    {
+      invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:41:10: Error: A for-in loop can't have more than one loop variable.
+    for (var x, y in <int>[]) {
+         ^^^";
+      for (final core::int* #t17 in <core::int*>[]) {
+        invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:41:10: Error: A for-in loop can't have more than one loop variable.
+    for (var x, y in <int>[]) {
+         ^^^";
+        dynamic x;
+        dynamic y;
+        core::print(x);
+        core::print(y);
+      }
+    }
+    for (final dynamic #t18 in <dynamic>[]) {
+      invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:46:10: Error: Can't assign to the const variable 'constant'.
+    for (constant in []) {}
+         ^^^^^^^^";
+    }
+  }
+}
+static field core::bool* topLevelField;
+static field dynamic untypedTopLevelField;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.modular.expect b/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.modular.expect
new file mode 100644
index 0000000..f1523c5
--- /dev/null
+++ b/pkg/front_end/testcases/general/forwarding_semi_stub.dart.weak.modular.expect
@@ -0,0 +1,99 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Super<self::Super::T%>
+    : super core::Object::•()
+    ;
+  method method1(core::int a) → void {}
+  method method2({core::int? a = #C1}) → void {}
+  method method3(core::int a) → void {}
+  method method4(core::num a) → void {}
+  method method5({core::int? a = #C1}) → void {}
+  method method6({core::num? a = #C1}) → void {}
+  method method7(covariant-by-class core::List<self::Super::T%> a) → void {}
+  method method8({covariant-by-class core::List<self::Super::T%>? a = #C1}) → void {}
+  method method9(covariant-by-class core::List<self::Super::T%> a) → void {}
+  method method10(covariant-by-class core::Iterable<self::Super::T%> a) → void {}
+  method method11({covariant-by-class core::List<self::Super::T%>? a = #C1}) → void {}
+  method method12({covariant-by-class core::Iterable<self::Super::T%>? a = #C1}) → void {}
+  set setter1(core::int a) → void {}
+  set setter2(core::num a) → void {}
+  set setter3(covariant-by-class core::List<self::Super::T%> a) → void {}
+  set setter4(covariant-by-class core::Iterable<self::Super::T%> a) → void {}
+}
+class Interface<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Interface<self::Interface::T%>
+    : super core::Object::•()
+    ;
+  method method1(covariant-by-declaration core::num a) → void {}
+  method method2({covariant-by-declaration core::num? a = #C1}) → void {}
+  method method7(covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> a) → void {}
+  method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%>? a = #C1}) → void {}
+  set setter1(covariant-by-declaration core::num a) → void {}
+  set setter3(covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> a) → void {}
+}
+abstract class Class<T extends core::Object? = dynamic> extends self::Super<self::Class::T%> implements self::Interface<self::Class::T%> {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super self::Super::•()
+    ;
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::num) → void */ method3(covariant-by-declaration core::int a) → void
+    return super.{self::Super::method3}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ method4(covariant-by-declaration core::num a) → void
+    return super.{self::Super::method4}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::num?}) → void */ method5({covariant-by-declaration core::int? a = #C1}) → void
+    return super.{self::Super::method5}(a: a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::int?}) → void */ method6({covariant-by-declaration core::num? a = #C1}) → void
+    return super.{self::Super::method6}(a: a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::Iterable<self::Class::T%>) → void */ method9(covariant-by-declaration covariant-by-class core::List<self::Class::T%> a) → void
+    return super.{self::Super::method9}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::List<self::Class::T%>) → void */ method10(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::method10}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::Iterable<self::Class::T%>?}) → void */ method11({covariant-by-declaration covariant-by-class core::List<self::Class::T%>? a = #C1}) → void
+    return super.{self::Super::method11}(a: a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: ({a: core::List<self::Class::T%>?}) → void */ method12({covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%>? a = #C1}) → void
+    return super.{self::Super::method12}(a: a);
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter2(covariant-by-declaration core::num a) → void
+    return super.{self::Super::setter2} = a;
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::List<self::Class::T%>) → void */ setter4(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::setter4} = a;
+  forwarding-stub method method1(covariant-by-declaration core::num a) → void
+    return super.{self::Super::method1}(a as core::int);
+  forwarding-stub method method2({covariant-by-declaration core::num? a = #C1}) → void
+    return super.{self::Super::method2}(a: a as core::int?);
+  forwarding-stub method method7(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::method7}(a as core::List<self::Class::T%>);
+  forwarding-stub method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%>? a = #C1}) → void
+    return super.{self::Super::method8}(a: a as core::List<self::Class::T%>?);
+  forwarding-stub set setter1(covariant-by-declaration core::num a) → void
+    return super.{self::Super::setter1} = a as core::int;
+  forwarding-stub set setter3(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::setter3} = a as core::List<self::Class::T%>;
+}
+class Subclass<T extends core::Object? = dynamic> extends self::Class<self::Subclass::T%> {
+  synthetic constructor •() → self::Subclass<self::Subclass::T%>
+    : super self::Class::•()
+    ;
+  method method1(covariant-by-declaration core::num a) → void {}
+  method method2({covariant-by-declaration core::num? a = #C1}) → void {}
+  method method3(covariant-by-declaration core::num a) → void {}
+  method method4(covariant-by-declaration core::num a) → void {}
+  method method5({covariant-by-declaration core::num? a = #C1}) → void {}
+  method method6({covariant-by-declaration core::num? a = #C1}) → void {}
+  method method7(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void {}
+  method method8({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a = #C1}) → void {}
+  method method9(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void {}
+  method method10(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void {}
+  method method11({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a = #C1}) → void {}
+  method method12({covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%>? a = #C1}) → void {}
+  set setter1(covariant-by-declaration core::num a) → void {}
+  set setter2(covariant-by-declaration core::num a) → void {}
+  set setter3(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void {}
+  set setter4(covariant-by-declaration covariant-by-class core::Iterable<self::Subclass::T%> a) → void {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.modular.expect b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.modular.expect
new file mode 100644
index 0000000..6b4bf1c
--- /dev/null
+++ b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.modular.expect
@@ -0,0 +1,79 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator +(covariant-by-declaration core::int* a) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  operator +(dynamic b) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object implements self::A, self::B {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub operator +(covariant-by-declaration dynamic b) → dynamic;
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  operator +(dynamic d) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E extends self::D {
+  synthetic constructor •() → self::E*
+    : super self::D::•()
+    ;
+  forwarding-stub forwarding-semi-stub operator /* signature-type: (core::int*) →* dynamic */ +(covariant-by-declaration dynamic e) → dynamic
+    return super.{self::D::+}(e);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_bad_use.dart.weak.modular.expect b/pkg/front_end/testcases/general/function_bad_use.dart.weak.modular.expect
new file mode 100644
index 0000000..044f5c0
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_bad_use.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/function_bad_use.dart:1:7: Error: 'Function' is a built-in identifier, could not used as a class name.
+// class Function {}
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/general/function_bad_use.dart:3:9: Error: 'Function' is a built-in identifier, could not used as a type identifier.
+// class C<Function> {}
+//         ^^^^^^^^
+//
+// pkg/front_end/testcases/general/function_bad_use.dart:5:9: Error: 'Function' is a built-in identifier, could not used as a type identifier.
+// mixin M<Function> implements List<Function> {}
+//         ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Function extends core::Object {
+  synthetic constructor •() → self::Function
+    : super core::Object::•()
+    ;
+}
+class C<Function extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::Function%>
+    : super core::Object::•()
+    ;
+}
+abstract class M<Function extends core::Object? = dynamic> extends core::Object implements core::List<self::M::Function%> /*isMixinDeclaration*/  {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_call1.dart.weak.modular.expect b/pkg/front_end/testcases/general/function_call1.dart.weak.modular.expect
new file mode 100644
index 0000000..c5b503d
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call1.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/function_call1.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+//  - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   foo();
+//      ^
+//
+// pkg/front_end/testcases/general/function_call1.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+//  - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   bar();
+//      ^
+//
+// pkg/front_end/testcases/general/function_call1.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+//  - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field1 = closure1();
+//                      ^
+//
+// pkg/front_end/testcases/general/function_call1.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+//  - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field2 = closure2();
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class _Closure1 extends core::Object {
+  synthetic constructor •() → self::_Closure1
+    : super core::Object::•()
+    ;
+  get call() → self::_Closure1
+    return this;
+}
+class _Closure2 extends core::Object {
+  final field self::_Closure2 call;
+  constructor •(self::_Closure2 call) → self::_Closure2
+    : self::_Closure2::call = call, super core::Object::•()
+    ;
+}
+late static field self::_Closure1 closure1;
+late static field self::_Closure2 closure2;
+static field invalid-type field1 = invalid-expression "pkg/front_end/testcases/general/function_call1.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field1 = closure1();
+                     ^";
+static field invalid-type field2 = invalid-expression "pkg/front_end/testcases/general/function_call1.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field2 = closure2();
+                     ^";
+static method test(self::_Closure1 foo, self::_Closure2 bar) → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/function_call1.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  foo();
+     ^";
+  invalid-expression "pkg/front_end/testcases/general/function_call1.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call1.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  bar();
+     ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_call2.dart.weak.modular.expect b/pkg/front_end/testcases/general/function_call2.dart.weak.modular.expect
new file mode 100644
index 0000000..c0f6881
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_call2.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/function_call2.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+//  - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   foo();
+//      ^
+//
+// pkg/front_end/testcases/general/function_call2.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+//  - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//   bar();
+//      ^
+//
+// pkg/front_end/testcases/general/function_call2.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+//  - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field1 = closure1();
+//                      ^
+//
+// pkg/front_end/testcases/general/function_call2.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+//  - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+// var field2 = closure2();
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class _Closure1 extends core::Object {
+  synthetic constructor •() → self::_Closure1
+    : super core::Object::•()
+    ;
+  get call() → () → void
+    return () → void {};
+}
+class _Closure2 extends core::Object {
+  final field () → void call;
+  constructor •(() → void call) → self::_Closure2
+    : self::_Closure2::call = call, super core::Object::•()
+    ;
+}
+late static field self::_Closure1 closure1;
+late static field self::_Closure2 closure2;
+static field invalid-type field1 = invalid-expression "pkg/front_end/testcases/general/function_call2.dart:23:22: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field1 = closure1();
+                     ^";
+static field invalid-type field2 = invalid-expression "pkg/front_end/testcases/general/function_call2.dart:24:22: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+var field2 = closure2();
+                     ^";
+static method test(self::_Closure1 foo, self::_Closure2 bar) → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/function_call2.dart:16:6: Error: Cannot invoke an instance of '_Closure1' because it declares 'call' to be something other than a method.
+ - '_Closure1' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  foo();
+     ^";
+  invalid-expression "pkg/front_end/testcases/general/function_call2.dart:17:6: Error: Cannot invoke an instance of '_Closure2' because it declares 'call' to be something other than a method.
+ - '_Closure2' is from 'pkg/front_end/testcases/general/function_call2.dart'.
+Try changing 'call' to a method or explicitly invoke 'call'.
+  bar();
+     ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_in_field.dart.weak.modular.expect b/pkg/front_end/testcases/general/function_in_field.dart.weak.modular.expect
new file mode 100644
index 0000000..a2c6a44
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_in_field.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static field () →* core::int* x = () → core::int* {
+  core::int* y = 42;
+  return y;
+};
+static method main() → dynamic {
+  core::print(self::x(){() →* core::int*});
+}
diff --git a/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.modular.expect b/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.modular.expect
new file mode 100644
index 0000000..c7ced86
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_invocation_bounds.dart.weak.modular.expect
@@ -0,0 +1,56 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/function_invocation_bounds.dart:9:8: Error: Inferred type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'local'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   local("");
+//        ^
+//
+// pkg/front_end/testcases/general/function_invocation_bounds.dart:10:8: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'local'.
+// Try changing type arguments so that they conform to the bounds.
+//   local<String>(throw '');
+//        ^
+//
+// pkg/front_end/testcases/general/function_invocation_bounds.dart:13:8: Error: Expected 1 type arguments.
+//   local<int, String>(throw '');
+//        ^
+//
+// pkg/front_end/testcases/general/function_invocation_bounds.dart:15:4: Error: Inferred type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   f("");
+//    ^
+//
+// pkg/front_end/testcases/general/function_invocation_bounds.dart:16:4: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try changing type arguments so that they conform to the bounds.
+//   f<String>(throw '');
+//    ^
+//
+// pkg/front_end/testcases/general/function_invocation_bounds.dart:19:4: Error: Expected 1 type arguments.
+//   f<int, String>(throw '');
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef G<invariant T extends core::Object? = dynamic> = (T%) → T%;
+static method test() → dynamic {
+  function local<T extends core::num>(T t) → T
+    return t;
+  local<core::String>(""){(core::String) → core::String};
+  local<core::String>(throw ""){(core::String) → core::String};
+  local<core::int>(0){(core::int) → core::int};
+  local<core::int>(throw ""){(core::int) → core::int};
+  invalid-expression "pkg/front_end/testcases/general/function_invocation_bounds.dart:13:8: Error: Expected 1 type arguments.
+  local<int, String>(throw '');
+       ^" in local{<inapplicable>}.<core::int, core::String>(throw "");
+  <T extends core::num>(T) → T f = local;
+  f<core::String>(""){(core::String) → core::String};
+  f<core::String>(throw ""){(core::String) → core::String};
+  f<core::int>(0){(core::int) → core::int};
+  f<core::int>(throw ""){(core::int) → core::int};
+  invalid-expression "pkg/front_end/testcases/general/function_invocation_bounds.dart:19:4: Error: Expected 1 type arguments.
+  f<int, String>(throw '');
+   ^" in f{<inapplicable>}.<core::int, core::String>(throw "");
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_type_assignments.dart.weak.modular.expect b/pkg/front_end/testcases/general/function_type_assignments.dart.weak.modular.expect
new file mode 100644
index 0000000..0333159
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_type_assignments.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/function_type_assignments.dart:11:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'String'.
+// String x = identity; // No bound
+//            ^
+//
+// pkg/front_end/testcases/general/function_type_assignments.dart:12:12: Error: A value of type 'T Function<T extends Object>(T)' can't be assigned to a variable of type 'String'.
+//  - 'Object' is from 'dart:core'.
+// String y = identityObject; // Object bound
+//            ^
+//
+// pkg/front_end/testcases/general/function_type_assignments.dart:13:12: Error: A value of type 'T Function<T extends List<T>>(T)' can't be assigned to a variable of type 'String'.
+//  - 'List' is from 'dart:core'.
+// String z = identityList; // List<T> bound
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::String* x = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:11:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'String'.
+String x = identity; // No bound
+           ^" in #C1 as{TypeError} core::String*;
+static field core::String* y = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:12:12: Error: A value of type 'T Function<T extends Object>(T)' can't be assigned to a variable of type 'String'.
+ - 'Object' is from 'dart:core'.
+String y = identityObject; // Object bound
+           ^" in #C2 as{TypeError} core::String*;
+static field core::String* z = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:13:12: Error: A value of type 'T Function<T extends List<T>>(T)' can't be assigned to a variable of type 'String'.
+ - 'List' is from 'dart:core'.
+String z = identityList; // List<T> bound
+           ^" in #C3 as{TypeError} core::String*;
+static method identity<T extends core::Object* = dynamic>(self::identity::T* t) → self::identity::T*
+  return t;
+static method identityObject<T extends core::Object*>(self::identityObject::T* t) → self::identityObject::T*
+  return t;
+static method identityList<T extends core::List<self::identityList::T*>* = core::List<dynamic>*>(self::identityList::T* t) → self::identityList::T*
+  return t;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::identity
+  #C2 = static-tearoff self::identityObject
+  #C3 = static-tearoff self::identityList
+}
diff --git a/pkg/front_end/testcases/general/function_type_default_value.dart.weak.modular.expect b/pkg/front_end/testcases/general/function_type_default_value.dart.weak.modular.expect
new file mode 100644
index 0000000..37aef15
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_type_default_value.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/function_type_default_value.dart:5:19: Error: Expected an identifier, but got ':'.
+// Try inserting an identifier before ':'.
+// void Function({obj: Object}) x;
+//                   ^
+//
+// pkg/front_end/testcases/general/function_type_default_value.dart:5:19: Error: Can't have a default value in a function type.
+// void Function({obj: Object}) x;
+//                   ^
+//
+// pkg/front_end/testcases/general/function_type_default_value.dart:5:16: Error: Type 'obj' not found.
+// void Function({obj: Object}) x;
+//                ^^^
+//
+// pkg/front_end/testcases/general/function_type_default_value.dart:5:16: Error: 'obj' isn't a type.
+// void Function({obj: Object}) x;
+//                ^^^
+//
+import self as self;
+
+static field () →* void x;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_type_is_check.dart.weak.modular.expect b/pkg/front_end/testcases/general/function_type_is_check.dart.weak.modular.expect
new file mode 100644
index 0000000..3994837
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_type_is_check.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart" show Expect;
+
+static method test(dynamic f) → dynamic {
+  if(f is (core::Object*, core::StackTrace*) →* void)
+    return 1;
+  if(f is (core::Object*) →* void)
+    return 10;
+  if(f is () →* void)
+    return 100;
+}
+static method main() → dynamic {
+  exp::Expect::equals(111, self::test(() → Null => null){dynamic}.+(self::test((core::Object* o) → Null => null)){dynamic}.+(self::test((core::Object* o, core::StackTrace* t) → Null => null)));
+}
diff --git a/pkg/front_end/testcases/general/function_type_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/general/function_type_parameter.dart.weak.modular.expect
new file mode 100644
index 0000000..9c2602d
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_type_parameter.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/function_type_parameter.dart:11:20: Error: A type variable on a function type can't have annotations.
+// void Function<@A() T>(T)? f;
+//                    ^
+//
+// pkg/front_end/testcases/general/function_type_parameter.dart:13:32: Error: A type variable on a function type can't have annotations.
+// typedef F = void Function<@A() T>(T);
+//                                ^
+//
+// pkg/front_end/testcases/general/function_type_parameter.dart:19:33: Error: A type variable on a function type can't have annotations.
+// void method2(void Function<@A() T>(T) f) {}
+//                                 ^
+//
+// pkg/front_end/testcases/general/function_type_parameter.dart:21:42: Error: A type variable on a function type can't have annotations.
+// class Class<T extends void Function<@A() S>(S)> {}
+//                                          ^
+//
+// pkg/front_end/testcases/general/function_type_parameter.dart:21:13: Error: Type variables can't have generic function types in their bounds.
+// class Class<T extends void Function<@A() S>(S)> {}
+//             ^
+//
+// pkg/front_end/testcases/general/function_type_parameter.dart:26:22: Error: A type variable on a function type can't have annotations.
+//   void Function<@A() T>(T)? f;
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F = <T extends core::Object? = dynamic>(T%) → void;
+typedef G<@#C1 contravariant T extends core::Object? = dynamic> = (T%) → void;
+class A extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class Class<T extends <S extends core::Object? = dynamic>(S%) → void = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
+    : super core::Object::•()
+    ;
+}
+static field <T extends core::Object? = dynamic>(T%) →? void f;
+static method method1<@#C1 T extends core::Object? = dynamic>(self::method1::T% t) → void {}
+static method method2(<T extends core::Object? = dynamic>(T%) → void f) → void {}
+static method main() → dynamic {
+  function local<@#C1 T extends core::Object? = dynamic>(T% t) → void {}
+  <T extends core::Object? = dynamic>(T%) →? void f;
+}
+
+constants  {
+  #C1 = self::A {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///function_type_parameter.dart:
+- A. (from org-dartlang-testcase:///function_type_parameter.dart:8:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/function_type_recovery.dart.weak.modular.expect b/pkg/front_end/testcases/general/function_type_recovery.dart.weak.modular.expect
new file mode 100644
index 0000000..b221bcb
--- /dev/null
+++ b/pkg/front_end/testcases/general/function_type_recovery.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/function_type_recovery.dart:8:31: Error: Inline function types cannot be used for parameters in a generic function type.
+// Try changing the inline function type (as in 'int f()') to a prefixed function type using the `Function` keyword (as in 'int Function() f').
+// typedef F = int Function(int f(String x));
+//                               ^
+//
+// pkg/front_end/testcases/general/function_type_recovery.dart:12:27: Error: Inline function types cannot be used for parameters in a generic function type.
+// Try changing the inline function type (as in 'int f()') to a prefixed function type using the `Function` keyword (as in 'int Function() f').
+//   String Function(String g(int y)) g = null;
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F = ((core::String*) →* core::int*) →* core::int*;
+static method main() → dynamic {
+  ((core::String*) →* core::int*) →* core::int* f = null;
+  ((core::int*) →* core::String*) →* core::String* g = null;
+}
diff --git a/pkg/front_end/testcases/general/functions.dart.weak.modular.expect b/pkg/front_end/testcases/general/functions.dart.weak.modular.expect
new file mode 100644
index 0000000..a0fd727
--- /dev/null
+++ b/pkg/front_end/testcases/general/functions.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  function local(({a: dynamic}) →* void f) → void {
+    f(a: "Hello, World"){({a: dynamic}) →* void};
+    f(){({a: dynamic}) →* void};
+  }
+  local(({dynamic a = #C1}) → Null {
+    core::print(a);
+  }){(({a: dynamic}) →* void) →* void};
+}
+
+constants  {
+  #C1 = "Default greeting!"
+}
diff --git a/pkg/front_end/testcases/general/future_or_null.dart.weak.modular.expect b/pkg/front_end/testcases/general/future_or_null.dart.weak.modular.expect
new file mode 100644
index 0000000..040f77f
--- /dev/null
+++ b/pkg/front_end/testcases/general/future_or_null.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+
+import "dart:async";
+
+static get foo() → FutureOr<Null>*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/future_or_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/future_or_test.dart.weak.modular.expect
new file mode 100644
index 0000000..cc061fb
--- /dev/null
+++ b/pkg/front_end/testcases/general/future_or_test.dart.weak.modular.expect
@@ -0,0 +1,61 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  field self::A* a = null;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method bar() → asy::Future<dynamic>* async 
+    return this.{self::B::a}{self::A*}.{self::A::foo}(){() →* dynamic};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  field self::B* b = new self::B::•();
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method baz() → asy::Future<core::int*>* async 
+    return this.{self::C::b}{self::B*}.{self::B::bar}(){() →* asy::Future<dynamic>*} as{TypeError} FutureOr<core::int*>*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/future_return.dart.weak.modular.expect b/pkg/front_end/testcases/general/future_return.dart.weak.modular.expect
new file mode 100644
index 0000000..3514a60
--- /dev/null
+++ b/pkg/front_end/testcases/general/future_return.dart.weak.modular.expect
@@ -0,0 +1,81 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/future_return.dart:11:7: Error: Functions marked 'async' must have a return type assignable to 'Future'.
+// Class returnClass() async => new Class();
+//       ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/future_return.dart:17:7: Error: Functions marked 'async' must have a return type assignable to 'Future'.
+// Class returnClassFromDynamic() async => returnDynamic();
+//       ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/future_return.dart:23:7: Error: Functions marked 'async' must have a return type assignable to 'Future'.
+// Class returnClassFromFutureClass() async => returnFutureClass();
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/future_return.dart:30:7: Error: Functions marked 'async' must have a return type assignable to 'Future'.
+// Class returnClassFromFutureOrClass() async => returnFutureOrClass();
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method returnDynamic() → dynamic
+  return new self::Class::•();
+static method returnClass() → self::Class* async 
+  return new self::Class::•();
+static method returnFutureClass() → asy::Future<self::Class*>* async 
+  return new self::Class::•();
+static method returnFutureOrClass() → FutureOr<self::Class*>* async 
+  return new self::Class::•();
+static method returnClassFromDynamic() → self::Class* async 
+  return self::returnDynamic() as{TypeError} FutureOr<self::Class*>*;
+static method returnFutureClassDynamic() → asy::Future<self::Class*>* async 
+  return self::returnDynamic() as{TypeError} FutureOr<self::Class*>*;
+static method returnFutureOrClassDynamic() → FutureOr<self::Class*>* async 
+  return self::returnDynamic() as{TypeError} FutureOr<self::Class*>*;
+static method returnClassFromFutureClass() → self::Class* async 
+  return self::returnFutureClass();
+static method returnFutureClassFromFutureClass() → asy::Future<self::Class*>* async 
+  return self::returnFutureClass();
+static method returnFutureOrClassFromFutureClass() → FutureOr<self::Class*>* async 
+  return self::returnFutureClass();
+static method returnClassFromFutureOrClass() → self::Class* async 
+  return self::returnFutureOrClass();
+static method returnFutureClassFromFutureOrClass() → asy::Future<self::Class*>* async 
+  return self::returnFutureOrClass();
+static method returnFutureOrClassFromFutureOrClass() → FutureOr<self::Class*>* async 
+  return self::returnFutureOrClass();
+static method main() → dynamic async {
+  await self::returnClass();
+  await self::returnFutureClass();
+  await self::returnFutureOrClass();
+  await self::returnClassFromDynamic();
+  await self::returnFutureClassDynamic();
+  await self::returnFutureOrClassDynamic();
+  await self::returnClassFromFutureClass();
+  await self::returnFutureClassFromFutureClass();
+  await self::returnFutureOrClassFromFutureClass();
+  await self::returnClassFromFutureOrClass();
+  await self::returnFutureClassFromFutureOrClass();
+  await self::returnFutureOrClassFromFutureOrClass();
+}
diff --git a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.modular.expect b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.modular.expect
new file mode 100644
index 0000000..20b824e
--- /dev/null
+++ b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/generic_function_type_in_message.dart:8:11: Error: A value of type 'num Function<A extends num, B extends num>(A, B)' can't be assigned to a variable of type 'int'.
+//   int x = add;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method add<A extends core::num*, B extends core::num*>(self::add::A* a, self::add::B* b) → core::num*
+  return a.{core::num::+}(b){(core::num*) →* core::num*};
+static method test() → dynamic {
+  core::int* x = invalid-expression "pkg/front_end/testcases/general/generic_function_type_in_message.dart:8:11: Error: A value of type 'num Function<A extends num, B extends num>(A, B)' can't be assigned to a variable of type 'int'.
+  int x = add;
+          ^" in #C1 as{TypeError} core::int*;
+}
+static method main() → dynamic {
+  if(self::add<core::int*, core::int*>(1, 2).{core::num::<}(3){(core::num*) →* core::bool*})
+    self::test();
+}
+
+constants  {
+  #C1 = static-tearoff self::add
+}
diff --git a/pkg/front_end/testcases/general/generic_function_typedef.dart.weak.modular.expect b/pkg/front_end/testcases/general/generic_function_typedef.dart.weak.modular.expect
new file mode 100644
index 0000000..509ac9e
--- /dev/null
+++ b/pkg/front_end/testcases/general/generic_function_typedef.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef E1<unrelated T extends core::Object* = dynamic> = () →* void;
+typedef E2<unrelated T extends core::num*> = () →* void;
+typedef E3<unrelated T extends core::Object* = dynamic, unrelated S extends core::Object* = dynamic> = () →* void;
+typedef E4<unrelated T extends core::num*, unrelated S extends core::num*> = () →* void;
+typedef E5<unrelated T extends S* = core::num*, unrelated S extends core::num*> = () →* void;
+typedef E6<unrelated T extends core::num*, unrelated S extends T* = core::num*> = () →* void;
+typedef F1 = <T extends core::Object* = dynamic>() →* void;
+typedef F2 = <T extends core::num* = dynamic>() →* void;
+typedef F3 = <T extends core::Object* = dynamic, S extends core::Object* = dynamic>() →* void;
+typedef F4 = <T extends core::num* = dynamic, S extends core::num* = dynamic>() →* void;
+typedef F5 = <T extends S* = dynamic, S extends core::num* = dynamic>() →* void;
+typedef F6 = <T extends core::num* = dynamic, S extends T* = dynamic>() →* void;
+typedef G1<invariant X extends core::Object* = dynamic> = <T extends X* = dynamic>() →* void;
+typedef G2<invariant X extends core::num*> = <T extends X* = dynamic>() →* void;
+typedef G3<invariant X extends core::Object* = dynamic, invariant Y extends core::Object* = dynamic> = <T extends X* = dynamic, S extends Y* = dynamic>() →* void;
+typedef G4<invariant X extends core::num*, invariant Y extends core::num*> = <T extends X* = dynamic, S extends Y* = dynamic>() →* void;
+typedef G5<invariant X extends core::num*> = <T extends S* = dynamic, S extends X* = dynamic>() →* void;
+typedef G6<invariant X extends core::num*> = <T extends X* = dynamic, S extends T* = dynamic>() →* void;
+typedef H1 = (<T extends core::Object* = dynamic>() →* void) →* void;
+typedef H2 = (<T extends core::num* = dynamic>() →* void) →* void;
+typedef H3 = (<T extends core::Object* = dynamic, S extends core::Object* = dynamic>() →* void) →* void;
+typedef H4 = (<T extends core::num* = dynamic, S extends core::num* = dynamic>() →* void) →* void;
+typedef H5 = (<T extends S* = dynamic, S extends core::num* = dynamic>() →* void) →* void;
+typedef H6 = (<T extends core::num* = dynamic, S extends T* = dynamic>() →* void) →* void;
+static field <T extends core::Object* = dynamic>() →* void f1;
+static field <T extends core::num* = dynamic>() →* void f2;
+static field <T extends core::Object* = dynamic, S extends core::Object* = dynamic>() →* void f3;
+static field <T extends core::num* = dynamic, S extends core::num* = dynamic>() →* void f4;
+static field <T extends S* = dynamic, S extends core::num* = dynamic>() →* void f5;
+static field <T extends core::num* = dynamic, S extends T* = dynamic>() →* void f6;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/generic_typedef_in_generic_class.dart.weak.modular.expect b/pkg/front_end/testcases/general/generic_typedef_in_generic_class.dart.weak.modular.expect
new file mode 100644
index 0000000..9a41483
--- /dev/null
+++ b/pkg/front_end/testcases/general/generic_typedef_in_generic_class.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F = <T extends core::Object? = dynamic, S extends core::Object? = dynamic>(T%, S%) → T%;
+class Class<A extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::A%>
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    core::print(#C1);
+    core::print(#C1);
+  }
+}
+static method main() → dynamic {
+  new self::Class::•<core::int>().{self::Class::method}(){() → dynamic};
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(T*, S*) →* T*)
+}
diff --git a/pkg/front_end/testcases/general/getter_call.dart.weak.modular.expect b/pkg/front_end/testcases/general/getter_call.dart.weak.modular.expect
new file mode 100644
index 0000000..bcf489c
--- /dev/null
+++ b/pkg/front_end/testcases/general/getter_call.dart.weak.modular.expect
@@ -0,0 +1,187 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::Function* field1a = #C1;
+  field () →* core::int* field1b = #C1;
+  field (core::int*) →* core::int* field2 = #C2;
+  field (core::int*, core::int*) →* core::int* field3 = #C3;
+  field (core::int*, [core::int*]) →* core::int* field4 = #C4;
+  field ([core::int*, core::int*]) →* core::int* field5 = #C5;
+  field (core::int*, {b: core::int*}) →* core::int* field6 = #C6;
+  field ({a: core::int*, b: core::int*}) →* core::int* field7 = #C7;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  get getter1a() → core::Function*
+    return #C1;
+  get getter1b() → () →* core::int*
+    return #C1;
+  get getter2() → (core::int*) →* core::int*
+    return #C2;
+  get getter3() → (core::int*, core::int*) →* core::int*
+    return #C3;
+  get getter4() → (core::int*, [core::int*]) →* core::int*
+    return #C4;
+  get getter5() → ([core::int*, core::int*]) →* core::int*
+    return #C5;
+  get getter6() → (core::int*, {b: core::int*}) →* core::int*
+    return #C6;
+  get getter7() → ({a: core::int*, b: core::int*}) →* core::int*
+    return #C7;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Subclass extends self::Class {
+  synthetic constructor •() → self::Subclass*
+    : super self::Class::•()
+    ;
+  get field1a() → core::Function* {
+    self::enableRead = false;
+    return #C1;
+  }
+  get field1b() → () →* core::int* {
+    self::enableRead = false;
+    return #C1;
+  }
+  get field2() → (core::int*) →* core::int* {
+    self::enableRead = false;
+    return #C2;
+  }
+  get field3() → (core::int*, core::int*) →* core::int* {
+    self::enableRead = false;
+    return #C3;
+  }
+  get field4() → (core::int*, [core::int*]) →* core::int* {
+    self::enableRead = false;
+    return #C4;
+  }
+  get field5() → ([core::int*, core::int*]) →* core::int* {
+    self::enableRead = false;
+    return #C5;
+  }
+  get field6() → (core::int*, {b: core::int*}) →* core::int* {
+    self::enableRead = false;
+    return #C6;
+  }
+  get field7() → ({a: core::int*, b: core::int*}) →* core::int* {
+    self::enableRead = false;
+    return #C7;
+  }
+  get getter1a() → core::Function* {
+    self::enableRead = false;
+    return #C1;
+  }
+  get getter1b() → () →* core::int* {
+    self::enableRead = false;
+    return #C1;
+  }
+  get getter2() → (core::int*) →* core::int* {
+    self::enableRead = false;
+    return #C2;
+  }
+  get getter3() → (core::int*, core::int*) →* core::int* {
+    self::enableRead = false;
+    return #C3;
+  }
+  get getter4() → (core::int*, [core::int*]) →* core::int* {
+    self::enableRead = false;
+    return #C4;
+  }
+  get getter5() → ([core::int*, core::int*]) →* core::int* {
+    self::enableRead = false;
+    return #C5;
+  }
+  get getter6() → (core::int*, {b: core::int*}) →* core::int* {
+    self::enableRead = false;
+    return #C6;
+  }
+  get getter7() → ({a: core::int*, b: core::int*}) →* core::int* {
+    self::enableRead = false;
+    return #C7;
+  }
+}
+static field core::bool* enableRead = true;
+static method read(core::int* value) → core::int*
+  return self::enableRead ?{core::int*} value : 1.{core::int::unary-}(){() →* core::int*};
+static method method1() → core::int*
+  return 0;
+static method method2(core::int* a) → core::int*
+  return a.{core::int::unary-}(){() →* core::int*};
+static method method3(core::int* a, core::int* b) → core::int*
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
+static method method4(core::int* a, [core::int* b = #C8]) → core::int*
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
+static method method5([core::int* a = #C8, core::int* b = #C8]) → core::int*
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
+static method method6(core::int* a, {core::int* b = #C8}) → core::int*
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
+static method method7({core::int* a = #C8, core::int* b = #C8}) → core::int*
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
+static method main() → dynamic {
+  self::callField(new self::Class::•());
+  self::callGetter(new self::Class::•());
+  self::callField(new self::Subclass::•());
+  self::callGetter(new self::Subclass::•());
+}
+static method callField(self::Class* c) → dynamic {
+  self::expect(0, c.{self::Class::field1a}{core::Function*}());
+  self::expect(0, c.{self::Class::field1b}{() →* core::int*}(){() →* core::int*});
+  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t1 = c in let final core::int* #t2 = self::read(42) in #t1.{self::Class::field2}{(core::int*) →* core::int*}(#t2){(core::int*) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t3 = c in let final core::int* #t4 = self::read(12) in let final core::int* #t5 = self::read(23) in #t3.{self::Class::field3}{(core::int*, core::int*) →* core::int*}(#t4, #t5){(core::int*, core::int*) →* core::int*});
+  self::expect(12, let final self::Class* #t6 = c in let final core::int* #t7 = self::read(12) in #t6.{self::Class::field4}{(core::int*, [core::int*]) →* core::int*}(#t7){(core::int*, [core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t8 = c in let final core::int* #t9 = self::read(12) in let final core::int* #t10 = self::read(23) in #t8.{self::Class::field4}{(core::int*, [core::int*]) →* core::int*}(#t9, #t10){(core::int*, [core::int*]) →* core::int*});
+  self::expect(0, c.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t11 = c in let final core::int* #t12 = self::read(12) in #t11.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(#t12){([core::int*, core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t13 = c in let final core::int* #t14 = self::read(12) in let final core::int* #t15 = self::read(23) in #t13.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(#t14, #t15){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t16 = c in let final core::int* #t17 = self::read(12) in #t16.{self::Class::field6}{(core::int*, {b: core::int*}) →* core::int*}(#t17){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t18 = c in let final core::int* #t19 = self::read(12) in let final core::int* #t20 = self::read(23) in #t18.{self::Class::field6}{(core::int*, {b: core::int*}) →* core::int*}(#t19, b: #t20){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(0, c.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(12, let final self::Class* #t21 = c in let final core::int* #t22 = self::read(12) in #t21.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t22){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t23 = c in let final core::int* #t24 = self::read(23) in #t23.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t24){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t25 = c in let final core::int* #t26 = self::read(12) in let final core::int* #t27 = self::read(23) in #t25.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t26, b: #t27){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t28 = c in let final core::int* #t29 = self::read(23) in let final core::int* #t30 = self::read(12) in #t28.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t29, a: #t30){({a: core::int*, b: core::int*}) →* core::int*});
+}
+static method callGetter(self::Class* c) → dynamic {
+  self::expect(0, c.{self::Class::getter1a}{core::Function*}());
+  self::expect(0, c.{self::Class::getter1b}{() →* core::int*}(){() →* core::int*});
+  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}{(core::int*) →* core::int*}(#t32){(core::int*) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}{(core::int*, core::int*) →* core::int*}(#t34, #t35){(core::int*, core::int*) →* core::int*});
+  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}{(core::int*, [core::int*]) →* core::int*}(#t37){(core::int*, [core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}{(core::int*, [core::int*]) →* core::int*}(#t39, #t40){(core::int*, [core::int*]) →* core::int*});
+  self::expect(0, c.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(#t42){([core::int*, core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(#t44, #t45){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}{(core::int*, {b: core::int*}) →* core::int*}(#t47){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}{(core::int*, {b: core::int*}) →* core::int*}(#t49, b: #t50){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(0, c.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t52){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t54){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t56, b: #t57){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t59, a: #t60){({a: core::int*, b: core::int*}) →* core::int*});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  self::enableRead = true;
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+    throw "Expected ${expected}, ${actual}";
+}
+
+constants  {
+  #C1 = static-tearoff self::method1
+  #C2 = static-tearoff self::method2
+  #C3 = static-tearoff self::method3
+  #C4 = static-tearoff self::method4
+  #C5 = static-tearoff self::method5
+  #C6 = static-tearoff self::method6
+  #C7 = static-tearoff self::method7
+  #C8 = 0
+}
diff --git a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.modular.expect
new file mode 100644
index 0000000..e38d7f0
--- /dev/null
+++ b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.modular.expect
@@ -0,0 +1,423 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:15:14: Error: The type 'String' of the getter 'A.property3' is not assignable to the type 'int' of the setter 'A.property3'.
+//   String get property3; // error
+//              ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:16:12: Context: This is the declaration of the setter 'A.property3'.
+//   void set property3(int i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:33:18: Error: The type 'num' of the getter 'A.property9' is not assignable to the type 'String' of the setter 'A.property9'.
+//   static num get property9 => 0; // error
+//                  ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:34:19: Context: This is the declaration of the setter 'A.property9'.
+//   static void set property9(String value) {}
+//                   ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:56:12: Error: The type 'int' of the inherited getter 'B1.property2' is not assignable to the type 'String' of the setter 'B2.property2'.
+//   void set property2(String i); // error
+//            ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:40:11: Context: This is the declaration of the getter 'B1.property2'.
+//   int get property2;
+//           ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:58:12: Error: The type 'String' of the inherited getter 'B1.property3' is not assignable to the type 'int' of the setter 'B2.property3'.
+//   void set property3(int i); // error
+//            ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:42:14: Context: This is the declaration of the getter 'B1.property3'.
+//   String get property3;
+//              ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:62:12: Error: The type 'int' of the inherited field 'B1.property5' is not assignable to the type 'String' of the setter 'B2.property5'.
+//   void set property5(String i); // error
+//            ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:46:13: Context: This is the declaration of the field 'B1.property5'.
+//   final int property5;
+//             ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:64:12: Error: The type 'String' of the inherited field 'B1.property6' is not assignable to the type 'int' of the setter 'B2.property6'.
+//   void set property6(int i); // error
+//            ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:48:16: Context: This is the declaration of the field 'B1.property6'.
+//   final String property6;
+//                ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:84:11: Error: The type 'int' of the getter 'C2.property2' is not assignable to the type 'String' of the inherited setter 'C1.property2'.
+//   int get property2; // error
+//           ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:70:12: Context: This is the declaration of the setter 'C1.property2'.
+//   void set property2(String i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:86:14: Error: The type 'String' of the getter 'C2.property3' is not assignable to the type 'int' of the inherited setter 'C1.property3'.
+//   String get property3; // error
+//              ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:72:12: Context: This is the declaration of the setter 'C1.property3'.
+//   void set property3(int i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:92:11: Error: The type 'int' of the getter 'C2.property5' is not assignable to the type 'String' of the inherited setter 'C1.property5'.
+//   int get property5; // error
+//           ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:76:10: Context: This is the declaration of the setter 'C1.property5'.
+//   String property5;
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:96:14: Error: The type 'String' of the getter 'C2.property6' is not assignable to the type 'int' of the inherited setter 'C1.property6'.
+//   String get property6; // error
+//              ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:7: Context: This is the declaration of the setter 'C1.property6'.
+//   int property6;
+//       ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:92:11: Error: The return type of the method 'C2.property5' is 'int', which does not match the return type, 'String', of the overridden method, 'C1.property5'.
+// Change to a subtype of 'String'.
+//   int get property5; // error
+//           ^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:76:10: Context: This is the overridden method ('property5').
+//   String property5;
+//          ^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:96:14: Error: The return type of the method 'C2.property6' is 'String', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
+// Change to a subtype of 'int'.
+//   String get property6; // error
+//              ^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:7: Context: This is the overridden method ('property6').
+//   int property6;
+//       ^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:115:16: Error: The type 'int' of the inherited getter 'D1.property2' is not assignable to the type 'String' of the inherited setter 'D2.property2'.
+// abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
+//                ^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:102:11: Context: This is the declaration of the getter 'D1.property2'.
+//   int get property2;
+//           ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:110:12: Context: This is the declaration of the setter 'D2.property2'.
+//   void set property2(String i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:115:16: Error: The type 'String' of the inherited getter 'D1.property3' is not assignable to the type 'int' of the inherited setter 'D2.property3'.
+// abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
+//                ^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:104:14: Context: This is the declaration of the getter 'D1.property3'.
+//   String get property3;
+//              ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:112:12: Context: This is the declaration of the setter 'D2.property3'.
+//   void set property3(int i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:117:16: Error: The type 'int' of the inherited getter 'D1.property2' is not assignable to the type 'String' of the inherited setter 'D2.property2'.
+// abstract class D4
+//                ^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:102:11: Context: This is the declaration of the getter 'D1.property2'.
+//   int get property2;
+//           ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:110:12: Context: This is the declaration of the setter 'D2.property2'.
+//   void set property2(String i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:117:16: Error: The type 'String' of the inherited getter 'D1.property3' is not assignable to the type 'int' of the inherited setter 'D2.property3'.
+// abstract class D4
+//                ^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:104:14: Context: This is the declaration of the getter 'D1.property3'.
+//   String get property3;
+//              ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:112:12: Context: This is the declaration of the setter 'D2.property3'.
+//   void set property3(int i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:130:14: Error: The type 'String' of the getter 'property3' is not assignable to the type 'int' of the setter 'property3'.
+//   String get property3 => ''; // error
+//              ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:131:12: Context: This is the declaration of the setter 'property3'.
+//   void set property3(int i) {}
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:142:14: Error: The type 'String' of the getter 'property6' is not assignable to the type 'S' of the setter 'property6'.
+//   String get property6 => ''; // error
+//              ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:143:12: Context: This is the declaration of the setter 'property6'.
+//   void set property6(S i) {}
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:154:18: Error: The type 'num' of the getter 'property9' is not assignable to the type 'String' of the setter 'property9'.
+//   static num get property9 => 0; // error
+//                  ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:155:19: Context: This is the declaration of the setter 'property9'.
+//   static void set property9(String value) {}
+//                   ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
+//   S get property4 => 0; // ok
+//                      ^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:136:23: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
+//   S get property5a => 0; // ok
+//                       ^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:139:23: Error: A value of type 'int' can't be assigned to a variable of type 'T'.
+//   T get property5b => 0; // ok
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  field core::int* property4 = null;
+  field core::int* property5 = null;
+  covariant-by-declaration field core::String* property6 = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract get property1() → core::int*;
+  abstract set property1(core::int* i) → void;
+  abstract get property2a() → core::num*;
+  abstract set property2a(core::int* i) → void;
+  abstract get property2b() → core::int*;
+  abstract set property2b(core::num* i) → void;
+  abstract get property3() → core::String*;
+  abstract set property3(core::int* i) → void;
+  static get property7() → core::int*
+    return 0;
+  static set property7(core::int* value) → void {}
+  static get property8a() → core::int*
+    return 0;
+  static set property8a(core::num* value) → void {}
+  static get property8b() → core::num*
+    return 0;
+  static set property8b(core::int* value) → void {}
+  static get property9() → core::num*
+    return 0;
+  static set property9(core::String* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B1 extends core::Object {
+  final field core::int* property4;
+  final field core::int* property5;
+  final field core::String* property6;
+  constructor •(core::int* property4, core::int* property5, core::String* property6) → self::B1*
+    : self::B1::property4 = property4, self::B1::property5 = property5, self::B1::property6 = property6, super core::Object::•()
+    ;
+  abstract get property1() → core::int*;
+  abstract get property2() → core::int*;
+  abstract get property3() → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B2 extends core::Object implements self::B1 {
+  synthetic constructor •() → self::B2*
+    : super core::Object::•()
+    ;
+  abstract set property1(core::int* i) → void;
+  abstract set property2(core::String* i) → void;
+  abstract set property3(core::int* i) → void;
+  abstract set property4(core::int* i) → void;
+  abstract set property5(core::String* i) → void;
+  abstract set property6(core::int* i) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C1 extends core::Object {
+  field core::int* property4 = null;
+  field core::String* property5 = null;
+  field core::int* property6 = null;
+  synthetic constructor •() → self::C1*
+    : super core::Object::•()
+    ;
+  abstract set property1(core::int* i) → void;
+  abstract set property2(core::String* i) → void;
+  abstract set property3(core::int* i) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C2 extends core::Object implements self::C1 {
+  synthetic constructor •() → self::C2*
+    : super core::Object::•()
+    ;
+  abstract get property1() → core::int*;
+  abstract get property2() → core::int*;
+  abstract get property3() → core::String*;
+  abstract get property4() → core::int*;
+  abstract get property5() → core::int*;
+  abstract get property6() → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D1 extends core::Object {
+  synthetic constructor •() → self::D1*
+    : super core::Object::•()
+    ;
+  abstract get property1() → core::int*;
+  abstract get property2() → core::int*;
+  abstract get property3() → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D2 extends core::Object {
+  synthetic constructor •() → self::D2*
+    : super core::Object::•()
+    ;
+  abstract set property1(core::int* i) → void;
+  abstract set property2(core::String* i) → void;
+  abstract set property3(core::int* i) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D3 extends core::Object implements self::D1, self::D2 {
+  synthetic constructor •() → self::D3*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D4 extends core::Object implements self::D3 {
+  synthetic constructor •() → self::D4*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension<T extends core::num*, S extends T* = core::num*> on core::int* {
+  get property1 = self::Extension|get#property1;
+  get property2a = self::Extension|get#property2a;
+  get property2b = self::Extension|get#property2b;
+  get property3 = self::Extension|get#property3;
+  get property4 = self::Extension|get#property4;
+  get property5a = self::Extension|get#property5a;
+  get property5b = self::Extension|get#property5b;
+  get property6 = self::Extension|get#property6;
+  static get property7 = get self::Extension|property7;
+  static get property8a = get self::Extension|property8a;
+  static get property8b = get self::Extension|property8b;
+  static get property9 = get self::Extension|property9;
+  set property1 = self::Extension|set#property1;
+  set property2a = self::Extension|set#property2a;
+  set property2b = self::Extension|set#property2b;
+  set property3 = self::Extension|set#property3;
+  set property4 = self::Extension|set#property4;
+  set property5a = self::Extension|set#property5a;
+  set property5b = self::Extension|set#property5b;
+  set property6 = self::Extension|set#property6;
+  static set property7 = set self::Extension|property7;
+  static set property8a = set self::Extension|property8a;
+  static set property8b = set self::Extension|property8b;
+  static set property9 = set self::Extension|property9;
+}
+static method Extension|get#property1<T extends core::num*, S extends self::Extension|get#property1::T* = core::num*>(lowered final core::int* #this) → core::int*
+  return 0;
+static method Extension|set#property1<T extends core::num*, S extends self::Extension|set#property1::T* = core::num*>(lowered final core::int* #this, core::int* i) → void {}
+static method Extension|get#property2a<T extends core::num*, S extends self::Extension|get#property2a::T* = core::num*>(lowered final core::int* #this) → core::num*
+  return 0;
+static method Extension|set#property2a<T extends core::num*, S extends self::Extension|set#property2a::T* = core::num*>(lowered final core::int* #this, core::int* i) → void {}
+static method Extension|get#property2b<T extends core::num*, S extends self::Extension|get#property2b::T* = core::num*>(lowered final core::int* #this) → core::int*
+  return 0;
+static method Extension|set#property2b<T extends core::num*, S extends self::Extension|set#property2b::T* = core::num*>(lowered final core::int* #this, core::num* i) → void {}
+static method Extension|get#property3<T extends core::num*, S extends self::Extension|get#property3::T* = core::num*>(lowered final core::int* #this) → core::String*
+  return "";
+static method Extension|set#property3<T extends core::num*, S extends self::Extension|set#property3::T* = core::num*>(lowered final core::int* #this, core::int* i) → void {}
+static method Extension|get#property4<T extends core::num*, S extends self::Extension|get#property4::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property4::S*
+  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
+  S get property4 => 0; // ok
+                     ^" in 0 as{TypeError} Never;
+static method Extension|set#property4<T extends core::num*, S extends self::Extension|set#property4::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property4::S* i) → void {}
+static method Extension|get#property5a<T extends core::num*, S extends self::Extension|get#property5a::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property5a::S*
+  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:136:23: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
+  S get property5a => 0; // ok
+                      ^" in 0 as{TypeError} Never;
+static method Extension|set#property5a<T extends core::num*, S extends self::Extension|set#property5a::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property5a::T* i) → void {}
+static method Extension|get#property5b<T extends core::num*, S extends self::Extension|get#property5b::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property5b::T*
+  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:139:23: Error: A value of type 'int' can't be assigned to a variable of type 'T'.
+  T get property5b => 0; // ok
+                      ^" in 0 as{TypeError} Never;
+static method Extension|set#property5b<T extends core::num*, S extends self::Extension|set#property5b::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property5b::S* i) → void {}
+static method Extension|get#property6<T extends core::num*, S extends self::Extension|get#property6::T* = core::num*>(lowered final core::int* #this) → core::String*
+  return "";
+static method Extension|set#property6<T extends core::num*, S extends self::Extension|set#property6::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property6::S* i) → void {}
+static get Extension|property7() → core::int*
+  return 0;
+static set Extension|property7(core::int* value) → void {}
+static get Extension|property8a() → core::int*
+  return 0;
+static set Extension|property8a(core::num* value) → void {}
+static get Extension|property8b() → core::num*
+  return 0;
+static set Extension|property8b(core::int* value) → void {}
+static get Extension|property9() → core::num*
+  return 0;
+static set Extension|property9(core::String* value) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.modular.expect b/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.modular.expect
new file mode 100644
index 0000000..5744ee3
--- /dev/null
+++ b/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/having_part_with_part_and_annotation_lib1.dart:10:6: Error: A file that's a part of a library can't have parts itself.
+// Try moving the 'part' declaration to the containing library.
+// part 'having_part_with_part_and_annotation_lib2.dart';
+//      ^
+// pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart: Context: This is the containing library.
+//
+import self as self;
+import "dart:core" as core;
+
+@#C1
+part having_part_with_part_and_annotation_lib1.dart;
+static const field core::int* Foo = #C1;
+static const field core::int* Bar = #C2 /* from org-dartlang-testcase:///having_part_with_part_and_annotation_lib1.dart */;
+static method fromMain() → void {}
+static method main() → dynamic {}
+static method /* from org-dartlang-testcase:///having_part_with_part_and_annotation_lib1.dart */ fromLib1() → void {}
+
+constants  {
+  #C1 = 42
+  #C2 = 43
+}
diff --git a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.modular.expect b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.modular.expect
new file mode 100644
index 0000000..9054021
--- /dev/null
+++ b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart:6:6: Error: The language version override has to be the same in the library and its part(s).
+// part 'having_part_with_parts_and_annotation_lib1.dart';
+//      ^
+// pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart:4:1: Context: This is language version annotation in the library.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:4:6: Error: A file that's a part of a library can't have parts itself.
+// Try moving the 'part' declaration to the containing library.
+// part 'having_part_with_parts_and_annotation_lib2.dart';
+//      ^
+// pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart: Context: This is the containing library.
+//
+// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:6:6: Error: A file that's a part of a library can't have parts itself.
+// Try moving the 'part' declaration to the containing library.
+// part 'having_part_with_parts_and_annotation_lib2.dart';
+//      ^
+// pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart: Context: This is the containing library.
+//
+import self as self;
+import "dart:core" as core;
+
+@#C1
+part having_part_with_parts_and_annotation_lib1.dart;
+static const field core::int* Foo = #C1;
+static const field core::int* Bar = #C2 /*isNonNullableByDefault, from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
+static const field core::int* Baz = #C3 /*isNonNullableByDefault, from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
+static method fromMain() → void {}
+static method main() → dynamic {}
+static method /*isNonNullableByDefault, from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */ fromLib1() → void {}
+
+constants  {
+  #C1 = 42
+  #C2 = 43
+  #C3 = 44
+}
diff --git a/pkg/front_end/testcases/general/hello.dart.weak.modular.expect b/pkg/front_end/testcases/general/hello.dart.weak.modular.expect
new file mode 100644
index 0000000..fea7b39
--- /dev/null
+++ b/pkg/front_end/testcases/general/hello.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::print("Hello, World!");
+}
diff --git a/pkg/front_end/testcases/general/hierarchy.dart.weak.modular.expect b/pkg/front_end/testcases/general/hierarchy.dart.weak.modular.expect
new file mode 100644
index 0000000..3c3d062
--- /dev/null
+++ b/pkg/front_end/testcases/general/hierarchy.dart.weak.modular.expect
@@ -0,0 +1,325 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: The non-abstract class 'A6' is missing implementations for these members:
+//  - A1.extendedInterfaceMember
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class A6 extends A1 implements A1 {}
+//       ^^
+// pkg/front_end/testcases/general/hierarchy.dart:7:8: Context: 'A1.extendedInterfaceMember' is defined here.
+//   void extendedInterfaceMember();
+//        ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:41:7: Error: The non-abstract class 'B5' is missing implementations for these members:
+//  - B1.twiceInterfaceMember
+//  - B2.twiceInterfaceMember
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class B5 extends B4 {}
+//       ^^
+// pkg/front_end/testcases/general/hierarchy.dart:27:8: Context: 'B1.twiceInterfaceMember' is defined here.
+//   void twiceInterfaceMember() {}
+//        ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/hierarchy.dart:32:8: Context: 'B2.twiceInterfaceMember' is defined here.
+//   void twiceInterfaceMember() {}
+//        ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:43:7: Error: The non-abstract class 'B6' is missing implementations for these members:
+//  - B1.twiceInterfaceMember
+//  - B2.twiceInterfaceMember
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class B6 extends B3 implements B1, B2 {}
+//       ^^
+// pkg/front_end/testcases/general/hierarchy.dart:27:8: Context: 'B1.twiceInterfaceMember' is defined here.
+//   void twiceInterfaceMember() {}
+//        ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/hierarchy.dart:32:8: Context: 'B2.twiceInterfaceMember' is defined here.
+//   void twiceInterfaceMember() {}
+//        ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:57:7: Error: The non-abstract class 'C4' is missing implementations for these members:
+//  - C1.mixedInAndImplementedInterfaceMember
+//  - C2.mixedInAndImplementedInterfaceMember
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class C4 extends C3 {}
+//       ^^
+// pkg/front_end/testcases/general/hierarchy.dart:47:8: Context: 'C1.mixedInAndImplementedInterfaceMember' is defined here.
+//   void mixedInAndImplementedInterfaceMember();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/hierarchy.dart:52:8: Context: 'C2.mixedInAndImplementedInterfaceMember' is defined here.
+//   void mixedInAndImplementedInterfaceMember() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:59:7: Error: The non-abstract class 'C5' is missing implementations for these members:
+//  - C1.mixedInAndImplementedInterfaceMember
+//  - C2.mixedInAndImplementedInterfaceMember
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class C5 with C1 implements C2 {}
+//       ^^
+// pkg/front_end/testcases/general/hierarchy.dart:47:8: Context: 'C1.mixedInAndImplementedInterfaceMember' is defined here.
+//   void mixedInAndImplementedInterfaceMember();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/hierarchy.dart:52:8: Context: 'C2.mixedInAndImplementedInterfaceMember' is defined here.
+//   void mixedInAndImplementedInterfaceMember() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: 'A1' can't be used in both 'extends' and 'implements' clauses.
+// Try removing one of the occurrences.
+// class A6 extends A1 implements A1 {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A1 extends core::Object {
+  synthetic constructor •() → self::A1*
+    : super core::Object::•()
+    ;
+  method extendedClassMember() → void {}
+  abstract method extendedInterfaceMember() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class A2 extends core::Object {
+  synthetic constructor •() → self::A2*
+    : super core::Object::•()
+    ;
+  method mixedInClassMember() → void {}
+  abstract method mixedInInterfaceMember() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A3&A1&A2 = self::A1 with self::A2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A3&A1&A2*
+    : super self::A1::•()
+    ;
+  mixin-super-stub method mixedInClassMember() → void
+    return super.{self::A2::mixedInClassMember}();
+  abstract mixin-stub method mixedInInterfaceMember() → void; -> self::A2::mixedInInterfaceMember
+}
+abstract class A3 extends self::_A3&A1&A2 {
+  synthetic constructor •() → self::A3*
+    : super self::_A3&A1&A2::•()
+    ;
+  method declaredClassMember() → void {}
+  abstract method declaredInterfaceMember() → void;
+}
+abstract class A4 = self::A1 with self::A2 {
+  synthetic constructor •() → self::A4*
+    : super self::A1::•()
+    ;
+  mixin-super-stub method mixedInClassMember() → void
+    return super.{self::A2::mixedInClassMember}();
+  abstract mixin-stub method mixedInInterfaceMember() → void; -> self::A2::mixedInInterfaceMember
+}
+abstract class A5 extends core::Object implements self::A1 {
+  synthetic constructor •() → self::A5*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A6 extends self::A1 implements self::A1 {
+  synthetic constructor •() → self::A6*
+    : super self::A1::•()
+    ;
+}
+abstract class B1 extends core::Object {
+  synthetic constructor •() → self::B1*
+    : super core::Object::•()
+    ;
+  method twiceInterfaceMember() → void {}
+  method extendedAndImplementedMember() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B2 extends core::Object {
+  synthetic constructor •() → self::B2*
+    : super core::Object::•()
+    ;
+  method twiceInterfaceMember() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B3 extends core::Object {
+  synthetic constructor •() → self::B3*
+    : super core::Object::•()
+    ;
+  method extendedAndImplementedMember() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B4 extends self::B3 implements self::B1, self::B2 {
+  synthetic constructor •() → self::B4*
+    : super self::B3::•()
+    ;
+}
+class B5 extends self::B4 {
+  synthetic constructor •() → self::B5*
+    : super self::B4::•()
+    ;
+}
+class B6 extends self::B3 implements self::B1, self::B2 {
+  synthetic constructor •() → self::B6*
+    : super self::B3::•()
+    ;
+}
+abstract class C1 extends core::Object {
+  synthetic constructor •() → self::C1*
+    : super core::Object::•()
+    ;
+  method mixedInAndImplementedClassMember() → void {}
+  abstract method mixedInAndImplementedInterfaceMember() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C2 extends core::Object {
+  synthetic constructor •() → self::C2*
+    : super core::Object::•()
+    ;
+  method mixedInAndImplementedClassMember() → void {}
+  method mixedInAndImplementedInterfaceMember() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C3&Object&C1 = core::Object with self::C1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C3&Object&C1*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method mixedInAndImplementedClassMember() → void
+    return super.{self::C1::mixedInAndImplementedClassMember}();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract mixin-stub method mixedInAndImplementedInterfaceMember() → void; -> self::C1::mixedInAndImplementedInterfaceMember
+}
+abstract class C3 extends self::_C3&Object&C1 implements self::C2 {
+  synthetic constructor •() → self::C3*
+    : super self::_C3&Object&C1::•()
+    ;
+}
+class C4 extends self::C3 {
+  synthetic constructor •() → self::C4*
+    : super self::C3::•()
+    ;
+}
+abstract class _C5&Object&C1 = core::Object with self::C1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C5&Object&C1*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method mixedInAndImplementedClassMember() → void
+    return super.{self::C1::mixedInAndImplementedClassMember}();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract mixin-stub method mixedInAndImplementedInterfaceMember() → void; -> self::C1::mixedInAndImplementedInterfaceMember
+}
+class C5 extends self::_C5&Object&C1 implements self::C2 {
+  synthetic constructor •() → self::C5*
+    : super self::_C5&Object&C1::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.modular.expect b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.modular.expect
new file mode 100644
index 0000000..d1b803d
--- /dev/null
+++ b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static field (core::int) → core::int implicitInstantiation = #C2;
+static const field (core::int) → core::int implicitConstInstantiation = #C2;
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method create<T extends core::Object? = dynamic>() → (self::create::T%) → self::create::T%
+  return #C1<self::create::T%>;
+static method main() → dynamic {
+  self::expect(true, core::identical(self::implicitInstantiation, self::implicitInstantiation));
+  self::expect(true, core::identical(self::implicitInstantiation, #C2));
+  self::expect(false, core::identical(self::implicitInstantiation, self::create<core::int>()));
+  self::expect(true, core::identical(#C2, self::implicitInstantiation));
+  self::expect(true, core::identical(#C2, #C2));
+  self::expect(false, core::identical(#C2, self::create<core::int>()));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = static-tearoff self::id
+  #C2 = instantiation #C1 <core::int*>
+}
diff --git a/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.modular.expect b/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.modular.expect
new file mode 100644
index 0000000..9873ac0
--- /dev/null
+++ b/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  method method() → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::Class* a;
+  self::Class* b = new self::Class::•();
+  let final self::Class* #t1 = let final self::Class* #t2 = a in #t2 == null ?{self::Class*} b : #t2 in block {
+    #t1.{self::Class::method}(){() →* dynamic};
+  } =>#t1;
+}
diff --git a/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.modular.expect b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.modular.expect
new file mode 100644
index 0000000..e781dcd
--- /dev/null
+++ b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::Object* a;
+  core::Object* b;
+  return <core::Object*>[let final core::Object* #t1 = a in #t1 == null ?{core::Object*} b : #t1];
+}
diff --git a/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.modular.expect b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.modular.expect
new file mode 100644
index 0000000..cc17e25
--- /dev/null
+++ b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method main() → dynamic {
+  core::Object* a;
+  core::Object* b;
+  return block {
+    final core::Set<core::Object*>* #t1 = col::LinkedHashSet::•<core::Object*>();
+    #t1.{core::Set::add}{Invariant}(let final core::Object* #t2 = a in #t2 == null ?{core::Object*} b : #t2){(core::Object*) →* core::bool*};
+  } =>#t1;
+}
diff --git a/pkg/front_end/testcases/general/ignore_function.dart.weak.modular.expect b/pkg/front_end/testcases/general/ignore_function.dart.weak.modular.expect
new file mode 100644
index 0000000..004e6cc
--- /dev/null
+++ b/pkg/front_end/testcases/general/ignore_function.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/ignore_function.dart:18:7: Error: 'Function' is a built-in identifier, could not used as a class name.
+// class Function {
+//       ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic other) → core::bool*
+    return false;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object implements self::Function {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic other) → core::bool*
+    return false;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Function extends core::Object {
+  synthetic constructor •() → self::Function*
+    : super core::Object::•()
+    ;
+  operator ==(core::Object* other) → core::bool*
+    return false;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.modular.expect b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.modular.expect
new file mode 100644
index 0000000..96419b3
--- /dev/null
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.
+//   var x = void f<T>(T t) {};
+//                ^
+//
+// pkg/front_end/testcases/general/illegal_named_function_expression.dart:8:14: Error: A function expression can't have a name.
+//   print(void g<T>(T t) {});
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  <T extends core::Object* = dynamic>(T*) →* Null x = let final <T extends core::Object* = dynamic>(T*) →* Null f = <T extends core::Object* = dynamic>(T* t) → Null {} in f;
+  core::print(x.{core::Object::runtimeType}{core::Type*});
+  core::print(let final <T extends core::Object* = dynamic>(T*) →* Null g = <T extends core::Object* = dynamic>(T* t) → Null {} in g);
+}
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.modular.expect b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.modular.expect
new file mode 100644
index 0000000..63bcf5a
--- /dev/null
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.
+//   print(void f() {});
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  function f() → void {}
+  core::print(let final () →* Null f = () → Null {} in f);
+}
diff --git a/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.modular.expect b/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.modular.expect
new file mode 100644
index 0000000..e8b7608
--- /dev/null
+++ b/pkg/front_end/testcases/general/implement_semi_stub.dart.weak.modular.expect
@@ -0,0 +1,222 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:52:23: Error: The parameter 'a' of the method 'Class1.method1' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Class.method1'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void method1(double a) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:39:8: Context: This is the overridden method ('method1').
+//   void method1(covariant int a);
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:53:23: Error: The parameter 'b' of the method 'Class1.method2' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Super.method2'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void method2(double b) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:7:8: Context: This is the overridden method ('method2').
+//   void method2(int b) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:54:23: Error: The parameter 'a' of the method 'Class1.method3' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Class.method3'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void method3(double a, double b) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:41:8: Context: This is the overridden method ('method3').
+//   void method3(covariant int a, num b);
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:54:33: Error: The parameter 'b' of the method 'Class1.method3' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Super.method3'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void method3(double a, double b) {} // error
+//                                 ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:8:8: Context: This is the overridden method ('method3').
+//   void method3(num a, int b) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:55:33: Error: The parameter 'a' of the method 'Class1.method4' has type 'double', which does not match the corresponding type, 'num', in the overridden method, 'Super.method4'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void method4({required double a}) {} // error
+//                                 ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:9:8: Context: This is the overridden method ('method4').
+//   void method4({required num a}) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:56:33: Error: The parameter 'b' of the method 'Class1.method5' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Super.method5'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void method5({required double b}) {} // error
+//                                 ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:10:8: Context: This is the overridden method ('method5').
+//   void method5({required int b}) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:58:23: Error: The parameter 'a' of the method 'Class1.method7' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Class.method7'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void method7(Set<T> a) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:42:8: Context: This is the overridden method ('method7').
+//   void method7(covariant List<T> a);
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:59:23: Error: The parameter 'b' of the method 'Class1.method8' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Super.method8'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void method8(Set<T> b) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:13:8: Context: This is the overridden method ('method8').
+//   void method8(List<T> b) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:60:23: Error: The parameter 'a' of the method 'Class1.method9' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Class.method9'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void method9(Set<T> a, Set<T> b) {} // error
+//                       ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:44:8: Context: This is the overridden method ('method9').
+//   void method9(covariant List<T> a, Iterable<T> b);
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:60:33: Error: The parameter 'b' of the method 'Class1.method9' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Super.method9'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void method9(Set<T> a, Set<T> b) {} // error
+//                                 ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:14:8: Context: This is the overridden method ('method9').
+//   void method9(Iterable<T> a, List<T> b) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:61:34: Error: The parameter 'a' of the method 'Class1.method10' has type 'Set<T>', which does not match the corresponding type, 'Iterable<T>', in the overridden method, 'Super.method10'.
+//  - 'Set' is from 'dart:core'.
+//  - 'Iterable' is from 'dart:core'.
+// Change to a supertype of 'Iterable<T>', or, for a covariant parameter, a subtype.
+//   void method10({required Set<T> a}) {} // error
+//                                  ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:15:8: Context: This is the overridden method ('method10').
+//   void method10({required Iterable<T> a}) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:62:34: Error: The parameter 'b' of the method 'Class1.method11' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Super.method11'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void method11({required Set<T> b}) {} // error
+//                                  ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:16:8: Context: This is the overridden method ('method11').
+//   void method11({required List<T> b}) {}
+//        ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:64:27: Error: The parameter 'a' of the method 'Class1.setter1' has type 'double', which does not match the corresponding type, 'int', in the overridden method, 'Class.setter1'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void set setter1(double a) {} // error
+//                           ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:45:12: Context: This is the overridden method ('setter1').
+//   void set setter1(covariant int a);
+//            ^
+//
+// pkg/front_end/testcases/general/implement_semi_stub.dart:66:27: Error: The parameter 'a' of the method 'Class1.setter3' has type 'Set<T>', which does not match the corresponding type, 'List<T>', in the overridden method, 'Class.setter3'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// Change to a supertype of 'List<T>', or, for a covariant parameter, a subtype.
+//   void set setter3(Set<T> a) {} // error
+//                           ^
+// pkg/front_end/testcases/general/implement_semi_stub.dart:47:12: Context: This is the overridden method ('setter3').
+//   void set setter3(covariant List<T> a);
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Super<self::Super::T%>
+    : super core::Object::•()
+    ;
+  method method1(core::num a) → void {}
+  method method2(core::int b) → void {}
+  method method3(core::num a, core::int b) → void {}
+  method method4({required core::num a = #C1}) → void {}
+  method method5({required core::int b = #C1}) → void {}
+  method method7(covariant-by-class core::Iterable<self::Super::T%> a) → void {}
+  method method8(covariant-by-class core::List<self::Super::T%> b) → void {}
+  method method9(covariant-by-class core::Iterable<self::Super::T%> a, covariant-by-class core::List<self::Super::T%> b) → void {}
+  method method10({required covariant-by-class core::Iterable<self::Super::T%> a = #C1}) → void {}
+  method method11({required covariant-by-class core::List<self::Super::T%> b = #C1}) → void {}
+  set setter1(core::num a) → void {}
+  set setter3(covariant-by-class core::Iterable<self::Super::T%> a) → void {}
+}
+abstract class Interface<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Interface<self::Interface::T%>
+    : super core::Object::•()
+    ;
+  method method2(covariant-by-declaration core::num b) → void {}
+  method method3(core::num a, covariant-by-declaration core::num b) → void {}
+  method method5({required core::int b = #C1}) → void {}
+  method method8(covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> b) → void {}
+  method method9(covariant-by-class core::Iterable<self::Interface::T%> a, covariant-by-declaration covariant-by-class core::Iterable<self::Interface::T%> b) → void {}
+  method method11({required covariant-by-class core::List<self::Interface::T%> b = #C1}) → void {}
+}
+class Class<T extends core::Object? = dynamic> extends self::Super<self::Class::T%> implements self::Interface<self::Class::T%> {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super self::Super::•()
+    ;
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ method1(covariant-by-declaration core::num a) → void
+    return super.{self::Super::method1}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::num) → void */ method2(covariant-by-declaration core::int b) → void
+    return super.{self::Super::method2}(b);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int, core::num) → void */ method3(covariant-by-declaration core::num a, covariant-by-declaration core::int b) → void
+    return super.{self::Super::method3}(a, b);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::List<self::Class::T%>) → void */ method7(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::method7}(a);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::Iterable<self::Class::T%>) → void */ method8(covariant-by-declaration covariant-by-class core::List<self::Class::T%> b) → void
+    return super.{self::Super::method8}(b);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::List<self::Class::T%>, core::Iterable<self::Class::T%>) → void */ method9(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a, covariant-by-declaration covariant-by-class core::List<self::Class::T%> b) → void
+    return super.{self::Super::method9}(a, b);
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter1(covariant-by-declaration core::num a) → void
+    return super.{self::Super::setter1} = a;
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::List<self::Class::T%>) → void */ setter3(covariant-by-declaration covariant-by-class core::Iterable<self::Class::T%> a) → void
+    return super.{self::Super::setter3} = a;
+}
+class Class1<T extends core::Object? = dynamic> extends core::Object implements self::Class<self::Class1::T%> {
+  synthetic constructor •() → self::Class1<self::Class1::T%>
+    : super core::Object::•()
+    ;
+  method method1(covariant-by-declaration core::double a) → void {}
+  method method2(covariant-by-declaration core::double b) → void {}
+  method method3(covariant-by-declaration core::double a, covariant-by-declaration core::double b) → void {}
+  method method4({required core::double a = #C1}) → void {}
+  method method5({required core::double b = #C1}) → void {}
+  method method7(covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> a) → void {}
+  method method8(covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> b) → void {}
+  method method9(covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> a, covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> b) → void {}
+  method method10({required covariant-by-class core::Set<self::Class1::T%> a = #C1}) → void {}
+  method method11({required covariant-by-class core::Set<self::Class1::T%> b = #C1}) → void {}
+  set setter1(covariant-by-declaration core::double a) → void {}
+  set setter3(covariant-by-declaration covariant-by-class core::Set<self::Class1::T%> a) → void {}
+}
+abstract class Interface2<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Interface2<self::Interface2::T%>
+    : super core::Object::•()
+    ;
+  abstract method method1(core::int a) → void;
+  abstract method method2(core::int b) → void;
+  abstract method method3(core::int a, core::int b) → void;
+  abstract method method7(covariant-by-class core::List<self::Interface2::T%> a) → void;
+  abstract method method8(covariant-by-class core::List<self::Interface2::T%> b) → void;
+  abstract method method9(covariant-by-class core::List<self::Interface2::T%> a, covariant-by-class core::List<self::Interface2::T%> b) → void;
+  abstract set setter1(core::int a) → void;
+  abstract set setter3(covariant-by-class core::List<self::Interface2::T%> a) → void;
+}
+abstract class Class2<T extends core::Object? = dynamic> extends core::Object implements self::Class<self::Class2::T%>, self::Interface2<self::Class2::T%> {
+  synthetic constructor •() → self::Class2<self::Class2::T%>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.modular.expect b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.modular.expect
new file mode 100644
index 0000000..93d939a
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object /*hasConstConstructor*/  {
+  static const field core::int* constField = #C1;
+  const constructor •(dynamic x) → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field core::int* constTopLevelField = #C2;
+static method main() → dynamic {
+  new self::C::•(#C1);
+  new self::C::•(#C2);
+}
+
+constants  {
+  #C1 = 87
+  #C2 = 42
+}
diff --git a/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.modular.expect b/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.modular.expect
new file mode 100644
index 0000000..febd66a
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::bool* v1;
+  field core::num* v2;
+  constructor •(core::bool* v1, core::num* v2) → self::A*
+    : self::A::v1 = v1, self::A::v2 = v2, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M1 extends core::Object {
+  field core::num* v2 = 1.{core::int::unary-}(){() →* core::int*};
+  synthetic constructor •() → self::M1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C = self::A with self::M1 {
+  synthetic constructor •(core::bool* v1, core::num* v2) → self::C*
+    : super self::A::•(v1, v2)
+    ;
+  mixin-super-stub get v2() → core::num*
+    return super.{self::M1::v2};
+  mixin-super-stub set v2(core::num* value) → void
+    return super.{self::M1::v2} = value;
+}
+static method main() → dynamic {
+  self::C* c = new self::C::•(true, 2);
+  self::expect(true, c.{self::A::v1}{core::bool*});
+  self::expect(1.{core::int::unary-}(){() →* core::int*}, c.{self::C::v2}{core::num*});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/general/implicit_covariance.dart.weak.modular.expect b/pkg/front_end/testcases/general/implicit_covariance.dart.weak.modular.expect
new file mode 100644
index 0000000..3fd3297
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_covariance.dart.weak.modular.expect
@@ -0,0 +1,71 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant-by-class self::A::T* x) → dynamic;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B<T extends core::Object* = dynamic> extends core::Object implements self::A<self::B::T*> {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method foo(core::num* x) → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _D&C&B<T extends core::num*> = self::C with self::B<self::_D&C&B::T*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_D&C&B<self::_D&C&B::T*>*
+    : super self::C::•()
+    ;
+  forwarding-stub method foo(covariant-by-class core::num* x) → dynamic
+    return super.{self::C::foo}(x);
+}
+class D<T extends core::num*> extends self::_D&C&B<self::D::T*> {
+  synthetic constructor •() → self::D<self::D::T*>*
+    : super self::_D&C&B::•()
+    ;
+}
+class E<T extends core::num*> = self::C with self::B<self::E::T*> {
+  synthetic constructor •() → self::E<self::E::T*>*
+    : super self::C::•()
+    ;
+  forwarding-stub method foo(covariant-by-class core::num* x) → dynamic
+    return super.{self::C::foo}(x);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/implicit_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/general/implicit_instantiation.dart.weak.modular.expect
new file mode 100644
index 0000000..b226b4e
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_instantiation.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/implicit_instantiation.dart:18:25: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+//   int Function(int) f = alias;
+//                         ^
+//
+// pkg/front_end/testcases/general/implicit_instantiation.dart:20:7: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+//   g = alias;
+//       ^
+//
+// pkg/front_end/testcases/general/implicit_instantiation.dart:21:21: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+//   int Function(int) h = c;
+//                     ^
+//
+// pkg/front_end/testcases/general/implicit_instantiation.dart:22:3: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+//   g = c;
+//   ^
+//
+// pkg/front_end/testcases/general/implicit_instantiation.dart:23:10: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'int Function(int)'.
+//   method(alias);
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object? = dynamic>(self::Class::call::T% t) → self::Class::call::T%
+    return t;
+}
+static field <T extends core::Object? = dynamic>(T%) → T% alias = #C1;
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method method((core::int) → core::int f) → dynamic {}
+static method test() → dynamic {
+  self::Class c = new self::Class::•();
+  (core::int) → core::int f = invalid-expression "pkg/front_end/testcases/general/implicit_instantiation.dart:18:25: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+  int Function(int) f = alias;
+                        ^" in self::alias as{TypeError,ForNonNullableByDefault} (core::int) → core::int;
+  (core::int) → core::int g;
+  g = invalid-expression "pkg/front_end/testcases/general/implicit_instantiation.dart:20:7: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+  g = alias;
+      ^" in self::alias as{TypeError,ForNonNullableByDefault} (core::int) → core::int;
+  (core::int) → core::int h = invalid-expression "pkg/front_end/testcases/general/implicit_instantiation.dart:21:21: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+  int Function(int) h = c;
+                    ^" in (let final self::Class #t1 = c in #t1 == null ?{<T extends core::Object? = dynamic>(T%) → T%} null : #t1.{self::Class::call}{<T extends core::Object? = dynamic>(T%) → T%}) as{TypeError,ForNonNullableByDefault} (core::int) → core::int;
+  g = invalid-expression "pkg/front_end/testcases/general/implicit_instantiation.dart:22:3: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+  g = c;
+  ^" in (let final self::Class #t2 = c in #t2 == null ?{<T extends core::Object? = dynamic>(T%) → T%} null : #t2.{self::Class::call}{<T extends core::Object? = dynamic>(T%) → T%}) as{TypeError,ForNonNullableByDefault} (core::int) → core::int;
+  self::method(invalid-expression "pkg/front_end/testcases/general/implicit_instantiation.dart:23:10: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'int Function(int)'.
+  method(alias);
+         ^" in self::alias as{TypeError,ForNonNullableByDefault} (core::int) → core::int);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::id
+}
diff --git a/pkg/front_end/testcases/general/implicit_new.dart.weak.modular.expect b/pkg/front_end/testcases/general/implicit_new.dart.weak.modular.expect
new file mode 100644
index 0000000..908fc59
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_new.dart.weak.modular.expect
@@ -0,0 +1,106 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/implicit_new.dart:18:18: Error: Couldn't find constructor 'Bar'.
+//   var y = prefix.Bar();
+//                  ^^^
+//
+// pkg/front_end/testcases/general/implicit_new.dart:19:10: Error: Couldn't find constructor 'Bar'.
+//   prefix.Bar();
+//          ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///implicit_new.dart" as prefix;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  operator +(dynamic other) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar extends core::Object {
+  constructor named() → self::Bar*
+    : super core::Object::•()
+    ;
+  operator +(dynamic other) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class IndexTester extends core::Object {
+  synthetic constructor •() → self::IndexTester*
+    : super core::Object::•()
+    ;
+  operator [](dynamic _) → dynamic
+    return null;
+  operator []=(dynamic _a, dynamic _b) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method testNSM() → dynamic {
+  invalid-type y = invalid-expression "pkg/front_end/testcases/general/implicit_new.dart:18:18: Error: Couldn't find constructor 'Bar'.
+  var y = prefix.Bar();
+                 ^^^";
+  invalid-expression "pkg/front_end/testcases/general/implicit_new.dart:19:10: Error: Couldn't find constructor 'Bar'.
+  prefix.Bar();
+         ^^^";
+}
+static method f(dynamic x) → dynamic
+  return x;
+static method main() → dynamic {
+  self::Foo* x = new self::Foo::•();
+  x = new self::Foo::•();
+  self::Bar* z = new self::Bar::named();
+  z = new self::Bar::named();
+  self::f(new self::Foo::•());
+  self::f(new self::Foo::•());
+  self::f(new self::Bar::named());
+  self::f(new self::Bar::named());
+  core::List<core::Object*>* l = <core::Object*>[new self::Foo::•(), new self::Bar::named()];
+  l = <core::Object*>[new self::Foo::•(), new self::Bar::named()];
+  core::Map<core::String*, core::Object*>* m = <core::String*, core::Object*>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
+  m = <core::String*, core::Object*>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
+  self::IndexTester* i = new self::IndexTester::•();
+  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) →* dynamic};
+  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) →* dynamic};
+  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) →* dynamic};
+  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) →* dynamic};
+  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) →* void};
+  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) →* void};
+  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) →* void};
+  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) →* void};
+  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) →* dynamic};
+  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) →* dynamic};
+  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) →* dynamic};
+  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) →* dynamic};
+}
diff --git a/pkg/front_end/testcases/general/implicit_new2.dart.weak.modular.expect b/pkg/front_end/testcases/general/implicit_new2.dart.weak.modular.expect
new file mode 100644
index 0000000..a487595
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_new2.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field void voidValue = null;
+static method main() → void {
+  self::test1();
+  self::test2();
+  self::test3();
+  self::test4();
+  self::test5();
+  self::test6();
+}
+static method test1() → FutureOr<FutureOr<void>> {}
+static method test2() → FutureOr<FutureOr<void>> {
+  return asy::Future::value<void>(0);
+}
+static method test3() → FutureOr<FutureOr<void>> {
+  return null as{ForNonNullableByDefault} FutureOr<void>;
+}
+static method test4() → FutureOr<FutureOr<void>> {
+  return asy::Future::value<asy::Future<void>>(asy::Future::value<void>(null));
+}
+static method test5() → FutureOr<FutureOr<void>> {
+  return 42;
+}
+static method test6() → FutureOr<FutureOr<void>> {
+  return asy::Future::value<FutureOr<void>?>(42);
+}
+static method test() → FutureOr<FutureOr<void>> {
+  return asy::Future::value<asy::Future<asy::Future<void>>>(asy::Future::value<asy::Future<void>>(asy::Future::value<void>(null)));
+}
diff --git a/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.modular.expect
new file mode 100644
index 0000000..ef54b52
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+class ImplicitScopeTest extends core::Object {
+  synthetic constructor •() → self::ImplicitScopeTest*
+    : super core::Object::•()
+    ;
+  static method alwaysTrue() → core::bool* {
+    return 1.{core::num::+}(1){(core::num*) →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2;
+  }
+  static method testMain() → dynamic {
+    core::String* a = "foo";
+    dynamic b;
+    if(self::ImplicitScopeTest::alwaysTrue()) {
+      core::String* a = "bar";
+    }
+    else {
+      core::String* b = a;
+    }
+    exp::Expect::equals("foo", a);
+    exp::Expect::equals(null, b);
+    while (!self::ImplicitScopeTest::alwaysTrue()) {
+      core::String* a = "bar";
+      core::String* b = "baz";
+    }
+    exp::Expect::equals("foo", a);
+    exp::Expect::equals(null, b);
+    for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+      core::String* a = "bar";
+      core::String* b = "baz";
+    }
+    exp::Expect::equals("foo", a);
+    exp::Expect::equals(null, b);
+    do {
+      core::String* a = "bar";
+      core::String* b = "baz";
+    }
+    while ("black" =={core::String::==}{(core::Object*) →* core::bool*} "white")
+    exp::Expect::equals("foo", a);
+    exp::Expect::equals(null, b);
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::ImplicitScopeTest::testMain();
+}
diff --git a/pkg/front_end/testcases/general/implicit_super_call.dart.weak.modular.expect b/pkg/front_end/testcases/general/implicit_super_call.dart.weak.modular.expect
new file mode 100644
index 0000000..f6e3ccb
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_super_call.dart.weak.modular.expect
@@ -0,0 +1,190 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:67:5: Error: Cannot invoke `super` because it declares 'call' to be something other than a method.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//     super(0); // error
+//     ^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:81:5: Error: Cannot invoke `super` because it declares 'call' to be something other than a method.
+// Try changing 'call' to a method or explicitly invoke 'call'.
+//     super(0); // error
+//     ^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:95:5: Error: Superclass has no method named 'call'.
+//     super(0); // error
+//     ^^^^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:96:11: Error: Superclass has no method named 'call'.
+//     super.call(0); // error
+//           ^^^^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:104:5: Error: Superclass has no method named 'call'.
+//     super(); // error
+//     ^^^^
+//
+// pkg/front_end/testcases/general/implicit_super_call.dart:105:11: Error: Superclass has no method named 'call'.
+//     super.call(); // error
+//           ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super1 extends core::Object {
+  synthetic constructor •() → self::Super1
+    : super core::Object::•()
+    ;
+  method call() → void {}
+}
+class Class1 extends self::Super1 {
+  synthetic constructor •() → self::Class1
+    : super self::Super1::•()
+    ;
+  method method() → void {
+    super.{self::Super1::call}();
+    super.{self::Super1::call}();
+  }
+}
+class Super2 extends core::Object {
+  synthetic constructor •() → self::Super2
+    : super core::Object::•()
+    ;
+  method call(core::int a, [core::int? b = #C1]) → core::int
+    return a;
+}
+class Class2 extends self::Super2 {
+  synthetic constructor •() → self::Class2
+    : super self::Super2::•()
+    ;
+  method method() → void {
+    super.{self::Super2::call}(0);
+    super.{self::Super2::call}(0, 1);
+    super.{self::Super2::call}(0);
+    super.{self::Super2::call}(0, 1);
+  }
+}
+class Super3 extends core::Object {
+  synthetic constructor •() → self::Super3
+    : super core::Object::•()
+    ;
+  method call(core::int a, {core::int? b = #C1, core::int? c = #C1}) → core::int
+    return a;
+}
+class Class3 extends self::Super3 {
+  synthetic constructor •() → self::Class3
+    : super self::Super3::•()
+    ;
+  method method() → void {
+    super.{self::Super3::call}(0);
+    super.{self::Super3::call}(0, b: 1);
+    super.{self::Super3::call}(0, c: 1);
+    super.{self::Super3::call}(0, b: 1, c: 2);
+    super.{self::Super3::call}(0, c: 1, b: 2);
+    super.{self::Super3::call}(0);
+    super.{self::Super3::call}(0, b: 1);
+    super.{self::Super3::call}(0, c: 1);
+    super.{self::Super3::call}(0, b: 1, c: 2);
+    super.{self::Super3::call}(0, c: 1, b: 2);
+  }
+}
+class Super4 extends core::Object {
+  synthetic constructor •() → self::Super4
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object? = dynamic>(self::Super4::call::T% a) → self::Super4::call::T%
+    return a;
+}
+class Class4 extends self::Super4 {
+  synthetic constructor •() → self::Class4
+    : super self::Super4::•()
+    ;
+  method method() → void {
+    super.{self::Super4::call}<core::int>(0);
+    super.{self::Super4::call}<core::int>(0);
+    super.{self::Super4::call}<core::int>(0);
+    super.{self::Super4::call}<core::int>(0);
+  }
+}
+class Super5 extends core::Object {
+  synthetic constructor •() → self::Super5
+    : super core::Object::•()
+    ;
+  get call() → (core::int) → core::int
+    return (core::int a) → core::int => a;
+}
+class Class5 extends self::Super5 {
+  synthetic constructor •() → self::Class5
+    : super self::Super5::•()
+    ;
+  method test() → void {
+    invalid-expression "pkg/front_end/testcases/general/implicit_super_call.dart:67:5: Error: Cannot invoke `super` because it declares 'call' to be something other than a method.
+Try changing 'call' to a method or explicitly invoke 'call'.
+    super(0); // error
+    ^";
+  }
+  method method() → void {
+    super.{self::Super5::call}(0){(core::int) → core::int};
+  }
+}
+class Super6 extends core::Object {
+  field (core::int) → core::int call = (core::int a) → core::int => a;
+  synthetic constructor •() → self::Super6
+    : super core::Object::•()
+    ;
+}
+class Class6 extends self::Super6 {
+  synthetic constructor •() → self::Class6
+    : super self::Super6::•()
+    ;
+  method test() → void {
+    invalid-expression "pkg/front_end/testcases/general/implicit_super_call.dart:81:5: Error: Cannot invoke `super` because it declares 'call' to be something other than a method.
+Try changing 'call' to a method or explicitly invoke 'call'.
+    super(0); // error
+    ^";
+  }
+  method method() → void {
+    super.{self::Super6::call}(0){(core::int) → core::int};
+  }
+}
+class Super7 extends core::Object {
+  synthetic constructor •() → self::Super7
+    : super core::Object::•()
+    ;
+  set call((core::int) → core::int value) → void {}
+}
+class Class7 extends self::Super7 {
+  synthetic constructor •() → self::Class7
+    : super self::Super7::•()
+    ;
+  method test() → void {
+    super.call(0);
+    super.call(0);
+  }
+}
+class Super8 extends core::Object {
+  synthetic constructor •() → self::Super8
+    : super core::Object::•()
+    ;
+}
+class Class8 extends self::Super8 {
+  synthetic constructor •() → self::Class8
+    : super self::Super8::•()
+    ;
+  method test() → void {
+    super.call();
+    super.call();
+  }
+}
+static method main() → dynamic {
+  new self::Class1::•().{self::Class1::method}(){() → void};
+  new self::Class2::•().{self::Class2::method}(){() → void};
+  new self::Class3::•().{self::Class3::method}(){() → void};
+  new self::Class4::•().{self::Class4::method}(){() → void};
+  new self::Class5::•().{self::Class5::method}(){() → void};
+  new self::Class6::•().{self::Class6::method}(){() → void};
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/implicit_this.dart.weak.modular.expect b/pkg/front_end/testcases/general/implicit_this.dart.weak.modular.expect
new file mode 100644
index 0000000..23d7a44
--- /dev/null
+++ b/pkg/front_end/testcases/general/implicit_this.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method m() → dynamic {
+    core::print("Called m");
+  }
+  method testC() → dynamic {
+    this.{self::C::m}(){() →* dynamic};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method testD() → dynamic {
+    this.{self::C::m}(){() →* dynamic};
+  }
+}
+static method main() → dynamic {
+  new self::C::•().{self::C::testC}(){() →* dynamic};
+  new self::D::•().{self::D::testD}(){() →* dynamic};
+}
diff --git a/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.modular.expect b/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.modular.expect
new file mode 100644
index 0000000..14ee367
--- /dev/null
+++ b/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/import_conflicting_getters.dart:11:9: Error: 'foo' is imported from both 'pkg/front_end/testcases/general/import_conflicting_getters_lib1.dart' and 'pkg/front_end/testcases/general/import_conflicting_getters_lib2.dart'.
+//   print(foo);
+//         ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///import_conflicting_getters_lib1.dart";
+import "org-dartlang-testcase:///import_conflicting_getters_lib2.dart";
+
+static method main() → dynamic {}
+static method errors() → dynamic {
+  core::print(invalid-expression "pkg/front_end/testcases/general/import_conflicting_getters.dart:11:9: Error: 'foo' is imported from both 'pkg/front_end/testcases/general/import_conflicting_getters_lib1.dart' and 'pkg/front_end/testcases/general/import_conflicting_getters_lib2.dart'.
+  print(foo);
+        ^^^");
+}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+static get foo() → core::int*
+  return 42;
+
+library;
+import self as self3;
+import "dart:core" as core;
+
+static get foo() → core::int*
+  return 87;
diff --git a/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.modular.expect b/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.modular.expect
new file mode 100644
index 0000000..26d7537
--- /dev/null
+++ b/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/import_conflicting_setters.dart:11:3: Error: Setter not found: 'foo'.
+//   foo = 42;
+//   ^^^
+//
+import self as self;
+
+import "org-dartlang-testcase:///import_conflicting_setters_lib1.dart";
+import "org-dartlang-testcase:///import_conflicting_setters_lib2.dart";
+
+static method main() → dynamic {}
+static method errors() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/import_conflicting_setters.dart:11:3: Error: Setter not found: 'foo'.
+  foo = 42;
+  ^^^";
+}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+static set foo(core::int* value) → void {}
+
+library;
+import self as self3;
+import "dart:core" as core;
+
+static set foo(core::int* value) → void {}
diff --git a/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.modular.expect b/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.modular.expect
new file mode 100644
index 0000000..d883515
--- /dev/null
+++ b/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/import_conflicting_type_member.dart:6:1: Error: 'Foo' is imported from both 'pkg/front_end/testcases/general/import_conflicting_type_member_lib1.dart' and 'pkg/front_end/testcases/general/import_conflicting_type_member_lib2.dart'.
+// import 'import_conflicting_type_member_lib2.dart';
+// ^^^
+//
+// pkg/front_end/testcases/general/import_conflicting_type_member.dart:12:3: Error: 'Foo' is imported from both 'pkg/front_end/testcases/general/import_conflicting_type_member_lib1.dart' and 'pkg/front_end/testcases/general/import_conflicting_type_member_lib2.dart'.
+//   Foo();
+//   ^^^
+//
+import self as self;
+
+import "org-dartlang-testcase:///import_conflicting_type_member_lib1.dart";
+import "org-dartlang-testcase:///import_conflicting_type_member_lib2.dart";
+
+static method main() → dynamic {}
+static method errors() → dynamic {
+  invalid-type foo;
+  invalid-expression "pkg/front_end/testcases/general/import_conflicting_type_member.dart:12:3: Error: 'Foo' is imported from both 'pkg/front_end/testcases/general/import_conflicting_type_member_lib1.dart' and 'pkg/front_end/testcases/general/import_conflicting_type_member_lib2.dart'.
+  Foo();
+  ^^^";
+}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self2::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+library;
+import self as self3;
+
+static method Foo() → dynamic {}
diff --git a/pkg/front_end/testcases/general/import_conflicting_types.dart.weak.modular.expect b/pkg/front_end/testcases/general/import_conflicting_types.dart.weak.modular.expect
new file mode 100644
index 0000000..6154f37
--- /dev/null
+++ b/pkg/front_end/testcases/general/import_conflicting_types.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/import_conflicting_types.dart:6:1: Error: 'Foo' is imported from both 'pkg/front_end/testcases/general/import_conflicting_types_lib1.dart' and 'pkg/front_end/testcases/general/import_conflicting_types_lib2.dart'.
+// import 'import_conflicting_types_lib2.dart';
+// ^^^
+//
+import self as self;
+
+import "org-dartlang-testcase:///import_conflicting_types_lib1.dart";
+import "org-dartlang-testcase:///import_conflicting_types_lib2.dart";
+
+static method main() → dynamic {}
+static method errors() → dynamic {
+  invalid-type foo;
+}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self2::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+library;
+import self as self3;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self3::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.modular.expect
new file mode 100644
index 0000000..2967d68
--- /dev/null
+++ b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.modular.expect
@@ -0,0 +1,51 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:6:7: Error: 'this' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   C.a(this);
+//       ^^^^
+//
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:7:12: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+//   C.b(this.);
+//            ^
+//
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:8:7: Error: 'this' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   C.c(this, p);
+//       ^^^^
+//
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:9:12: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//   C.d(this., p);
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  constructor a(dynamic this) → self::C*
+    : super core::Object::•()
+    ;
+  constructor b() → self::C*
+    : super core::Object::•()
+    ;
+  constructor c(dynamic this, dynamic p) → self::C*
+    : super core::Object::•()
+    ;
+  constructor d() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/general/infer_equals.dart.weak.modular.expect b/pkg/front_end/testcases/general/infer_equals.dart.weak.modular.expect
new file mode 100644
index 0000000..4b8aa53e
--- /dev/null
+++ b/pkg/front_end/testcases/general/infer_equals.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field dynamic field = null;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic o) → core::bool* {
+    if(!(o is self::Class*))
+      return false;
+    return this.{self::Class::field}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} o{dynamic}.field;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.modular.expect b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.modular.expect
new file mode 100644
index 0000000..4796a9b
--- /dev/null
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.modular.expect
@@ -0,0 +1,297 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:49:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field2; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the overridden members.
+//   var field2 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the overridden members.
+//   var field2 = '';
+//       ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:51:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field4 = 0; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
+//   var field4 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
+//   var field4 = '';
+//       ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:53:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field6; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
+//   int field6;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the overridden members.
+//   String field6;
+//          ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:55:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field8 = 0; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
+//   int field8;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
+//   String field8;
+//          ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:58:7: Error: Can't infer a type for 'field11' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field11; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:16:5: Context: This is one of the overridden members.
+//   T field11;
+//     ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:37:5: Context: This is one of the overridden members.
+//   S field11;
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:64:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field17; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the overridden members.
+//   var field17 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the overridden members.
+//   String field17;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:65:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field18; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the overridden members.
+//   int field18;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the overridden members.
+//   var field18 = '';
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:90:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field2; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the overridden members.
+//   var field2 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the overridden members.
+//   var field2 = '';
+//       ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:92:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field4 = 0; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
+//   var field4 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
+//   var field4 = '';
+//       ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:94:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field6; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
+//   int field6;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the overridden members.
+//   String field6;
+//          ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:96:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field8 = 0; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
+//   int field8;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
+//   String field8;
+//          ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:105:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field17; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the overridden members.
+//   var field17 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the overridden members.
+//   String field17;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:106:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field18; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the overridden members.
+//   int field18;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the overridden members.
+//   var field18 = '';
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:61:7: Error: The return type of the method 'C.field14' is 'int', which does not match the return type, 'String', of the overridden method, 'B.field14'.
+// Change to a subtype of 'String'.
+//   int field14; // error
+//       ^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:40:5: Context: This is the overridden method ('field14').
+//   S field14;
+//     ^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:61:7: Error: The field 'C.field14' has type 'int', which does not match the corresponding type, 'String', in the overridden setter, 'B.field14'.
+//   int field14; // error
+//       ^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:40:5: Context: This is the overridden method ('field14').
+//   S field14;
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  field core::int* field1 = 0;
+  field core::int* field2 = 0;
+  field core::int* field3 = 0;
+  field core::int* field4 = 0;
+  field core::int* field5 = null;
+  field core::int* field6 = null;
+  field core::int* field7 = null;
+  field core::int* field8 = null;
+  field dynamic field9 = null;
+  covariant-by-class field self::A::T* field10 = null;
+  covariant-by-class field self::A::T* field11 = null;
+  covariant-by-class field self::A::T* field12 = null;
+  covariant-by-class field self::A::T* field13 = null;
+  covariant-by-class field self::A::T* field14 = null;
+  field core::int* field15 = 0;
+  field core::int* field16 = null;
+  field core::int* field17 = 0;
+  field core::int* field18 = null;
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
+  field core::int* field1 = 1;
+  field core::String* field2 = "";
+  field core::int* field3 = 1;
+  field core::String* field4 = "";
+  field core::int* field5 = null;
+  field core::String* field6 = null;
+  field core::int* field7 = null;
+  field core::String* field8 = null;
+  field dynamic field9 = null;
+  covariant-by-class field self::B::T* field10 = null;
+  covariant-by-class field self::B::S* field11 = null;
+  covariant-by-class field self::B::T* field12 = null;
+  covariant-by-class field self::B::T* field13 = null;
+  covariant-by-class field self::B::S* field14 = null;
+  field core::int* field15 = null;
+  field core::int* field16 = 0;
+  field core::String* field17 = null;
+  field core::String* field18 = "";
+  synthetic constructor •() → self::B<self::B::T*, self::B::S*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object implements self::A<core::int*>, self::B<core::int*, core::String*> {
+  field core::int* field1;
+  field invalid-type field2;
+  field core::int* field3 = 0;
+  field invalid-type field4 = 0;
+  field core::int* field5;
+  field invalid-type field6;
+  field core::int* field7 = 0;
+  field invalid-type field8 = 0;
+  field dynamic field9;
+  covariant-by-class field core::int* field10;
+  covariant-by-class field invalid-type field11;
+  covariant-by-class field core::int* field12;
+  covariant-by-class field core::int* field13 = 0;
+  covariant-by-class field core::int* field14;
+  field core::int* field15;
+  field core::int* field16;
+  field invalid-type field17;
+  field invalid-type field18;
+  constructor •(core::int* field1, invalid-type field2, core::int* field3, invalid-type field4, core::int* field5, invalid-type field6, core::int* field7, invalid-type field8, dynamic field9, core::int* field10, invalid-type field11, core::int* field12, core::int* field13, core::int* field14, core::int* field15, core::int* field16, invalid-type field17, invalid-type field18) → self::C*
+    : self::C::field1 = field1, self::C::field2 = field2, self::C::field3 = field3, self::C::field4 = field4, self::C::field5 = field5, self::C::field6 = field6, self::C::field7 = field7, self::C::field8 = field8, self::C::field9 = field9, self::C::field10 = field10, self::C::field11 = field11, self::C::field12 = field12, self::C::field13 = field13, self::C::field14 = field14, self::C::field15 = field15, self::C::field16 = field16, self::C::field17 = field17, self::C::field18 = field18, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<T extends core::Object* = dynamic> extends core::Object implements self::A<self::D::T*>, self::B<self::D::T*, self::D::T*> {
+  field core::int* field1;
+  field invalid-type field2;
+  field core::int* field3 = 0;
+  field invalid-type field4 = 0;
+  field core::int* field5;
+  field invalid-type field6;
+  field core::int* field7 = 0;
+  field invalid-type field8 = 0;
+  field dynamic field9;
+  covariant-by-class field self::D::T* field10;
+  covariant-by-class field self::D::T* field11;
+  covariant-by-class field self::D::T* field12;
+  covariant-by-class field self::D::T* field13 = null;
+  covariant-by-class field self::D::T* field14;
+  field core::int* field15;
+  field core::int* field16;
+  field invalid-type field17;
+  field invalid-type field18;
+  constructor •(core::int* field1, invalid-type field2, core::int* field3, invalid-type field4, core::int* field5, invalid-type field6, core::int* field7, invalid-type field8, dynamic field9, self::D::T* field10, self::D::T* field11, self::D::T* field12, self::D::T* field13, self::D::T* field14, core::int* field15, core::int* field16, invalid-type field17, invalid-type field18) → self::D<self::D::T*>*
+    : self::D::field1 = field1, self::D::field2 = field2, self::D::field3 = field3, self::D::field4 = field4, self::D::field5 = field5, self::D::field6 = field6, self::D::field7 = field7, self::D::field8 = field8, self::D::field9 = field9, self::D::field10 = field10, self::D::field11 = field11, self::D::field12 = field12, self::D::field13 = field13, self::D::field14 = field14, self::D::field15 = field15, self::D::field16 = field16, self::D::field17 = field17, self::D::field18 = field18, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/general/infer_field_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/infer_field_type.dart.weak.modular.expect
new file mode 100644
index 0000000..aa6a7e49
--- /dev/null
+++ b/pkg/front_end/testcases/general/infer_field_type.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends self::B {
+  field core::int* field = null;
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  get field() → core::int*
+    return null;
+  set field(core::int* value) → void {}
+}
+class A extends core::Object {
+  field core::int* field = 0;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* topLevelFieldFromA = new self::A::•().{self::A::field}{core::int*};
+static field core::int* topLevelFieldFromB = new self::B::•().{self::B::field}{core::int*};
+static field core::int* topLevelFieldFromC = new self::C::•().{self::C::field}{core::int*};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.modular.expect
new file mode 100644
index 0000000..bf294a6
--- /dev/null
+++ b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.modular.expect
@@ -0,0 +1,127 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Base extends core::Object {
+  synthetic constructor •() → self::Base*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class MixinA<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::MixinA<self::MixinA::T*>*
+    : super core::Object::•()
+    ;
+  abstract method method(core::Object* t) → self::MixinA::T*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Class&Base&MixinA = self::Base with self::MixinA<dynamic> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Base&MixinA*
+    : super self::Base::•()
+    ;
+  abstract mixin-stub method method(core::Object* t) → dynamic; -> self::MixinA::method
+}
+abstract class Class extends self::_Class&Base&MixinA {
+  synthetic constructor •() → self::Class*
+    : super self::_Class&Base&MixinA::•()
+    ;
+  method method(core::Object* t) → dynamic {}
+}
+abstract class YamlNode extends core::Object {
+  synthetic constructor •() → self::YamlNode*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Map<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Map<self::Map::K*, self::Map::V*>*
+    : super core::Object::•()
+    ;
+  abstract operator [](core::Object* key) → self::Map::V*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class MapMixin<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object implements self::Map<self::MapMixin::K*, self::MapMixin::V*> {
+  synthetic constructor •() → self::MapMixin<self::MapMixin::K*, self::MapMixin::V*>*
+    : super core::Object::•()
+    ;
+  abstract operator [](core::Object* key) → self::MapMixin::V*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class UnmodifiableMapMixin<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object implements self::Map<self::UnmodifiableMapMixin::K*, self::UnmodifiableMapMixin::V*> {
+  synthetic constructor •() → self::UnmodifiableMapMixin<self::UnmodifiableMapMixin::K*, self::UnmodifiableMapMixin::V*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _YamlMap&YamlNode&MapMixin = self::YamlNode with self::MapMixin<dynamic, dynamic> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin*
+    : super self::YamlNode::•()
+    ;
+  abstract mixin-stub operator [](core::Object* key) → dynamic; -> self::MapMixin::[]
+}
+abstract class _YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin = self::_YamlMap&YamlNode&MapMixin with self::UnmodifiableMapMixin<dynamic, dynamic> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin*
+    : super self::_YamlMap&YamlNode&MapMixin::•()
+    ;
+}
+class YamlMap extends self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin {
+  synthetic constructor •() → self::YamlMap*
+    : super self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin::•()
+    ;
+  operator [](core::Object* key) → dynamic {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.modular.expect b/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.modular.expect
new file mode 100644
index 0000000..4574621
--- /dev/null
+++ b/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.modular.expect
@@ -0,0 +1,100 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:9:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+//   d = <S>(S a, S b) => a;
+//          ^
+//
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:15:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+//   d = f;
+//       ^
+//
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:20:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+//   d = <S>(a, S b) => a;
+//          ^
+//
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:25:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+//   d = <S>(a, S b) => b;
+//          ^
+//
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:30:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+//   d = <S>(a, b) => a;
+//          ^
+//
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:35:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+//   d = (a, b, c) => a;
+//       ^
+//
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:40:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
+//   d = (a) => a;
+//       ^
+//
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:45:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+//   d = <S>(a, b, c) => a;
+//          ^
+//
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:50:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+//   d = <S>(a) => a;
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant T extends core::Object* = dynamic> = (T*, T*) →* T*;
+static method test1() → dynamic {
+  (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:9:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = <S>(S a, S b) => a;
+         ^" in (<S extends core::Object* = dynamic>(S* a, S* b) → S* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
+}
+static method test2() → dynamic {
+  (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
+  <S extends core::Object* = dynamic>(S*, S*) →* S* f = <S extends core::Object* = dynamic>(S* a, S* b) → S* => a;
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:15:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = f;
+      ^" in f as{TypeError} (core::int*, core::int*) →* core::int*;
+}
+static method test3a() → dynamic {
+  (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:20:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = <S>(a, S b) => a;
+         ^" in (<S extends core::Object* = dynamic>(dynamic a, S* b) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
+}
+static method test3b() → dynamic {
+  (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:25:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = <S>(a, S b) => b;
+         ^" in (<S extends core::Object* = dynamic>(dynamic a, S* b) → S* => b) as{TypeError} (core::int*, core::int*) →* core::int*;
+}
+static method test4() → dynamic {
+  (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:30:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = <S>(a, b) => a;
+         ^" in (<S extends core::Object* = dynamic>(dynamic a, dynamic b) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
+}
+static method test5() → dynamic {
+  (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:35:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = (a, b, c) => a;
+      ^" in ((core::int* a, core::int* b, dynamic c) → core::int* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
+}
+static method test6() → dynamic {
+  (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:40:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = (a) => a;
+      ^" in ((core::int* a) → core::int* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
+}
+static method test7() → dynamic {
+  (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:45:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = <S>(a, b, c) => a;
+         ^" in (<S extends core::Object* = dynamic>(dynamic a, dynamic b, dynamic c) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
+}
+static method test8() → dynamic {
+  (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:50:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = <S>(a) => a;
+         ^" in (<S extends core::Object* = dynamic>(dynamic a) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.modular.expect b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.modular.expect
new file mode 100644
index 0000000..4e6b1e4
--- /dev/null
+++ b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::Map<core::String*, (core::String*) →* Null>* map = <core::String*, (core::String*) →* Null>{"foo": (core::String* a) → Null {
+    core::int* c = a.{core::String::length}{core::int*};
+  }};
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/inherit_function.dart.weak.modular.expect b/pkg/front_end/testcases/general/inherit_function.dart.weak.modular.expect
new file mode 100644
index 0000000..8b7e846
--- /dev/null
+++ b/pkg/front_end/testcases/general/inherit_function.dart.weak.modular.expect
@@ -0,0 +1,70 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&Function extends core::Object {
+  synthetic constructor •() → self::_C&Object&Function*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::_C&Object&Function {
+  synthetic constructor •() → self::C*
+    : super self::_C&Object&Function::•()
+    ;
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/initialzation_errors.dart.weak.modular.expect b/pkg/front_end/testcases/general/initialzation_errors.dart.weak.modular.expect
new file mode 100644
index 0000000..fc29ac4
--- /dev/null
+++ b/pkg/front_end/testcases/general/initialzation_errors.dart.weak.modular.expect
@@ -0,0 +1,321 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:9:16: Error: 'x' was already initialized by this constructor.
+//         this.x = 42 {}
+//                ^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:16:16: Error: 'x' was already initialized by this constructor.
+//         this.x = 42 {}
+//                ^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:22:16: Error: 'x' is a final instance variable that was initialized at the declaration.
+//       : this.x = 41,
+//                ^
+// pkg/front_end/testcases/general/initialzation_errors.dart:20:13: Context: 'x' was initialized here.
+//   final int x = 2;
+//             ^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:23:16: Error: 'x' was already initialized by this constructor.
+//         this.x = 42 {}
+//                ^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:30:16: Error: A redirecting constructor can't have other initializers.
+//       : this.x = 41,
+//                ^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:32:16: Error: A redirecting constructor can't have other initializers.
+//         this.y = 42 {}
+//                ^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:43:16: Error: A redirecting constructor can't have other initializers.
+//         this.x = 1,
+//                ^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:44:16: Error: A redirecting constructor can't have other initializers.
+//         this.y = 2 {}
+//                ^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:49:16: Error: A redirecting constructor can't have other initializers.
+//       : this.x = 1,
+//                ^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:51:16: Error: A redirecting constructor can't have other initializers.
+//         this.y = 2;
+//                ^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:53:9: Error: A redirecting constructor can't have a 'super' initializer.
+//       : super(),
+//         ^^^^^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:55:16: Error: Can't have initializers after 'super'.
+//         this.x = 1,
+//                ^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:56:16: Error: Can't have initializers after 'super'.
+//         this.y = 2;
+//                ^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:58:16: Error: A redirecting constructor can't have other initializers.
+//       : this.x = 1,
+//                ^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:59:16: Error: A redirecting constructor can't have other initializers.
+//         this.y = 2,
+//                ^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:62:9: Error: A redirecting constructor can't have other initializers.
+//       : assert(true),
+//         ^^^^^^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:66:9: Error: A redirecting constructor can't have other initializers.
+//         assert(true);
+//         ^^^^^^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:72:9: Error: A redirecting constructor can't have a 'super' initializer.
+//         super() {}
+//         ^^^^^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:78:9: Error: A redirecting constructor can't have a 'super' initializer.
+//       : super(),
+//         ^^^^^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:80:9: Error: Can't have more than one 'super' initializer.
+//         super() {}
+//         ^^^^^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:87:14: Error: A redirecting constructor can't have more than one redirection.
+//         this.named();
+//              ^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:94:9: Error: Can't have more than one 'super' initializer.
+//         super() {}
+//         ^^^^^
+//
+// pkg/front_end/testcases/general/initialzation_errors.dart:101:16: Error: Can't have initializers after 'super'.
+//         this.x = 42 {}
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* x;
+  constructor •() → self::A*
+    : self::A::x = 41, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:9:16: Error: 'x' was already initialized by this constructor.
+        this.x = 42 {}
+               ^", super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  final field core::int* x;
+  constructor •() → self::B*
+    : self::B::x = 41, final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:16:16: Error: 'x' was already initialized by this constructor.
+        this.x = 42 {}
+               ^", super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  final field core::int* x = 2;
+  constructor •() → self::C*
+    : final dynamic #t3 = throw new core::_DuplicatedFieldInitializerError::•("x"), final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:23:16: Error: 'x' was already initialized by this constructor.
+        this.x = 42 {}
+               ^", super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends core::Object {
+  final field core::int* x;
+  final field core::int* y;
+  constructor •() → self::D*
+    : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:30:16: Error: A redirecting constructor can't have other initializers.
+      : this.x = 41,
+               ^", final dynamic #t6 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:32:16: Error: A redirecting constructor can't have other initializers.
+        this.y = 42 {}
+               ^", this self::D::named() {}
+  constructor named() → self::D*
+    : self::D::x = 41, self::D::y = 42, super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E extends core::Object {
+  final field core::int* x;
+  final field core::int* y;
+  constructor •() → self::E*
+    : final dynamic #t7 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:43:16: Error: A redirecting constructor can't have other initializers.
+        this.x = 1,
+               ^", final dynamic #t8 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:44:16: Error: A redirecting constructor can't have other initializers.
+        this.y = 2 {}
+               ^", this self::E::named() {}
+  constructor named() → self::E*
+    : self::E::x = 41, self::E::y = 42, super core::Object::•() {}
+  constructor named2() → self::E*
+    : final dynamic #t9 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:49:16: Error: A redirecting constructor can't have other initializers.
+      : this.x = 1,
+               ^", final dynamic #t10 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:51:16: Error: A redirecting constructor can't have other initializers.
+        this.y = 2;
+               ^", this self::E::named()
+    ;
+  constructor named3() → self::E*
+    : final dynamic #t11 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:53:9: Error: A redirecting constructor can't have a 'super' initializer.
+      : super(),
+        ^^^^^", final dynamic #t12 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:55:16: Error: Can't have initializers after 'super'.
+        this.x = 1,
+               ^", final dynamic #t13 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:56:16: Error: Can't have initializers after 'super'.
+        this.y = 2;
+               ^", super core::Object::•()
+    ;
+  constructor named4() → self::E*
+    : final dynamic #t14 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:58:16: Error: A redirecting constructor can't have other initializers.
+      : this.x = 1,
+               ^", final dynamic #t15 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:59:16: Error: A redirecting constructor can't have other initializers.
+        this.y = 2,
+               ^", this self::E::named()
+    ;
+  constructor named5() → self::E*
+    : final dynamic #t16 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:62:9: Error: A redirecting constructor can't have other initializers.
+      : assert(true),
+        ^^^^^^", this self::E::named()
+    ;
+  constructor named6() → self::E*
+    : final dynamic #t17 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:66:9: Error: A redirecting constructor can't have other initializers.
+        assert(true);
+        ^^^^^^", this self::E::named()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F extends core::Object {
+  constructor •() → self::F*
+    : final dynamic #t18 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:72:9: Error: A redirecting constructor can't have a 'super' initializer.
+        super() {}
+        ^^^^^", this self::F::named() {}
+  constructor named() → self::F*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class G extends core::Object {
+  constructor •() → self::G*
+    : final dynamic #t19 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:78:9: Error: A redirecting constructor can't have a 'super' initializer.
+      : super(),
+        ^^^^^", final dynamic #t20 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:80:9: Error: Can't have more than one 'super' initializer.
+        super() {}
+        ^^^^^", super core::Object::•() {}
+  constructor named() → self::G*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class H extends core::Object {
+  constructor •() → self::H*
+    : final dynamic #t21 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:87:14: Error: A redirecting constructor can't have more than one redirection.
+        this.named();
+             ^", this self::H::named()
+    ;
+  constructor named() → self::H*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class I extends core::Object {
+  constructor •() → self::I*
+    : final dynamic #t22 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:94:9: Error: Can't have more than one 'super' initializer.
+        super() {}
+        ^^^^^", super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class J extends core::Object {
+  field core::int* x;
+  constructor •() → self::J*
+    : final dynamic #t23 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:101:16: Error: Can't have initializers after 'super'.
+        this.x = 42 {}
+               ^", super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.modular.expect b/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.modular.expect
new file mode 100644
index 0000000..22c9052
--- /dev/null
+++ b/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/instance_setter_conflict.dart:11:14: Error: Can't declare a member that conflicts with an inherited one.
+//   static get v {
+//              ^
+// pkg/front_end/testcases/general/instance_setter_conflict.dart:6:7: Context: This is the inherited member.
+//   int v;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* v = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::A {
+  static field core::int* n = null;
+  synthetic constructor •() → self::C*
+    : super self::A::•()
+    ;
+  static get v() → dynamic {
+    return self::C::n;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/interface_conflict.dart.weak.modular.expect b/pkg/front_end/testcases/general/interface_conflict.dart.weak.modular.expect
new file mode 100644
index 0000000..35d40fb
--- /dev/null
+++ b/pkg/front_end/testcases/general/interface_conflict.dart.weak.modular.expect
@@ -0,0 +1,83 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/interface_conflict.dart:13:16: Error: Class 'C' inherits multiple members named 'n' with incompatible signatures.
+// Try adding a declaration of 'n' to 'C'.
+// abstract class C implements A, B {}
+//                ^
+// pkg/front_end/testcases/general/interface_conflict.dart:6:11: Context: This is one of the overridden members.
+//   int get n => 1;
+//           ^
+// pkg/front_end/testcases/general/interface_conflict.dart:10:14: Context: This is one of the overridden members.
+//   double get n => 2.0;
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  get n() → core::int*
+    return 1;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get n() → core::double*
+    return 2.0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object implements self::A, self::B {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D extends core::Object implements self::C {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.modular.expect b/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.modular.expect
new file mode 100644
index 0000000..a99ce5f
--- /dev/null
+++ b/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.modular.expect
@@ -0,0 +1,64 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/interface_contravariant_from_class.dart:17:16: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'B'.
+// abstract class C<T> extends B<F<T>> implements I<F<T>> {}
+//                ^
+//
+// pkg/front_end/testcases/general/interface_contravariant_from_class.dart:17:16: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'I'.
+// abstract class C<T> extends B<F<T>> implements I<F<T>> {}
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+class B<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  method f(core::int* x) → self::B::T* {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T*>*
+    : super core::Object::•()
+    ;
+  abstract method f(core::Object* x) → self::I::T*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.modular.expect b/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.modular.expect
new file mode 100644
index 0000000..5ba8fab
--- /dev/null
+++ b/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.modular.expect
@@ -0,0 +1,64 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart:17:16: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'B'.
+// abstract class C<T> extends B<F<T>> implements I<F<T>> {}
+//                ^
+//
+// pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart:17:16: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'I'.
+// abstract class C<T> extends B<F<T>> implements I<F<T>> {}
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+class B<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  method f((self::B::T*) →* void x, core::int* y) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T*>*
+    : super core::Object::•()
+    ;
+  abstract method f((self::I::T*) →* void x, core::Object* y) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.modular.expect b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.modular.expect
new file mode 100644
index 0000000..68f6ac0
--- /dev/null
+++ b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.modular.expect
@@ -0,0 +1,88 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart:13:7: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// class B<T> implements A<F<T>> {
+//       ^
+//
+// pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart:17:16: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'A'.
+// abstract class I<T> implements A<F<T>> {
+//                ^
+//
+// pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart:21:16: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'B'.
+// abstract class C<T> extends B<F<T>> implements I<F<T>> {}
+//                ^
+//
+// pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart:21:16: Error: Can't use implicitly 'out' variable 'T' in an 'in' position in supertype 'I'.
+// abstract class C<T> extends B<F<T>> implements I<F<T>> {}
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+abstract class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract method f(covariant-by-class self::A::T* x, core::int* y) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  method f((self::B::T*) →* void x, core::int* y) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T*>*
+    : super core::Object::•()
+    ;
+  abstract method f((self::I::T*) →* void x, core::Object* y) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.modular.expect b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.modular.expect
new file mode 100644
index 0000000..a16acb5
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   i = s;
+//       ^
+//
+// pkg/front_end/testcases/general/invalid_assignment.dart:13:9: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   i ??= s;
+//         ^
+//
+// pkg/front_end/testcases/general/invalid_assignment.dart:15:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/general/invalid_assignment.dart'.
+//   a += 1;
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator +(core::int* i) → core::String*
+    return "";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test(core::int* i, core::String* s, self::A* a) → dynamic {
+  i = 1;
+  i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  i = s;
+      ^" in s as{TypeError} core::int*;
+  i == null ?{core::int*} i = 1 : null;
+  i == null ?{core::Object*} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:13:9: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  i ??= s;
+        ^" in s as{TypeError} core::int* : null;
+  a = new self::A::•();
+  a = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
+ - 'A' is from 'pkg/front_end/testcases/general/invalid_assignment.dart'.
+  a += 1;
+    ^" in a.{self::A::+}(1){(core::int*) →* core::String*} as{TypeError} self::A*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_cast.dart.weak.modular.expect b/pkg/front_end/testcases/general/invalid_cast.dart.weak.modular.expect
new file mode 100644
index 0000000..6d764be
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_cast.dart.weak.modular.expect
@@ -0,0 +1,175 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_cast.dart:22:25: Error: The list literal type 'List<Object>' isn't of expected type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//  - 'Object' is from 'dart:core'.
+// Change the type of the list literal or the context in which it is used.
+//   List<int> a = <Object>[];
+//                         ^
+//
+// pkg/front_end/testcases/general/invalid_cast.dart:23:40: Error: The map literal type 'Map<Object, String>' isn't of expected type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'Object' is from 'dart:core'.
+// Change the type of the map literal or the context in which it is used.
+//   Map<int, String> b = <Object, String>{};
+//                                        ^
+//
+// pkg/front_end/testcases/general/invalid_cast.dart:24:37: Error: The map literal type 'Map<int, Object>' isn't of expected type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'Object' is from 'dart:core'.
+// Change the type of the map literal or the context in which it is used.
+//   Map<int, String> c = <int, Object>{};
+//                                     ^
+//
+// pkg/front_end/testcases/general/invalid_cast.dart:25:28: Error: The function expression type 'int Function(int)' isn't of expected type 'int Function(Object)'.
+//  - 'Object' is from 'dart:core'.
+// Change the type of the function expression or the context in which it is used.
+//   int Function(Object) d = (int i) => i;
+//                            ^
+//
+// pkg/front_end/testcases/general/invalid_cast.dart:28:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
+//  - 'C' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
+//  - 'D' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
+// Change the type of the object being constructed or the context in which it is used.
+//   D g = new C.nonFact();
+//             ^
+//
+// pkg/front_end/testcases/general/invalid_cast.dart:29:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
+//  - 'C' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
+//  - 'D' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
+// Change the type of the object being constructed or the context in which it is used.
+//   D h = new C.nonFact2();
+//             ^
+//
+// pkg/front_end/testcases/general/invalid_cast.dart:30:31: Error: The static method has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+//  - 'Object' is from 'dart:core'.
+// Change the type of the method or the context in which it is used.
+//   void Function(Object) i = C.staticFunction;
+//                               ^
+//
+// pkg/front_end/testcases/general/invalid_cast.dart:31:29: Error: The top level function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+//  - 'Object' is from 'dart:core'.
+// Change the type of the function or the context in which it is used.
+//   void Function(Object) j = topLevelFunction;
+//                             ^
+//
+// pkg/front_end/testcases/general/invalid_cast.dart:32:29: Error: The local function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+//  - 'Object' is from 'dart:core'.
+// Change the type of the function or the context in which it is used.
+//   void Function(Object) k = localFunction;
+//                             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  constructor nonFact() → self::C*
+    : super core::Object::•()
+    ;
+  constructor nonFact2() → self::C*
+    : this self::C::nonFact()
+    ;
+  static factory fact() → self::C*
+    return null;
+  static factory fact2() → self::C*
+    return new self::D::•();
+  static method staticFunction(core::int* i) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+}
+static method topLevelFunction(core::int* i) → void {}
+static method bad() → dynamic {
+  function localFunction(core::int* i) → void {}
+  core::List<core::int*>* a = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:22:25: Error: The list literal type 'List<Object>' isn't of expected type 'List<int>'.
+ - 'List' is from 'dart:core'.
+ - 'Object' is from 'dart:core'.
+Change the type of the list literal or the context in which it is used.
+  List<int> a = <Object>[];
+                        ^" in <core::Object*>[];
+  core::Map<core::int*, core::String*>* b = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:23:40: Error: The map literal type 'Map<Object, String>' isn't of expected type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+ - 'Object' is from 'dart:core'.
+Change the type of the map literal or the context in which it is used.
+  Map<int, String> b = <Object, String>{};
+                                       ^" in <core::Object*, core::String*>{};
+  core::Map<core::int*, core::String*>* c = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:24:37: Error: The map literal type 'Map<int, Object>' isn't of expected type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+ - 'Object' is from 'dart:core'.
+Change the type of the map literal or the context in which it is used.
+  Map<int, String> c = <int, Object>{};
+                                    ^" in <core::int*, core::Object*>{};
+  (core::Object*) →* core::int* d = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:25:28: Error: The function expression type 'int Function(int)' isn't of expected type 'int Function(Object)'.
+ - 'Object' is from 'dart:core'.
+Change the type of the function expression or the context in which it is used.
+  int Function(Object) d = (int i) => i;
+                           ^" in (core::int* i) → core::int* => i;
+  self::D* e = self::C::fact() as{TypeError} self::D*;
+  self::D* f = new self::D::•() as{TypeError} self::D*;
+  self::D* g = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:28:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
+ - 'C' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
+ - 'D' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
+Change the type of the object being constructed or the context in which it is used.
+  D g = new C.nonFact();
+            ^" in new self::C::nonFact();
+  self::D* h = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:29:13: Error: The constructor returns type 'C' that isn't of expected type 'D'.
+ - 'C' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
+ - 'D' is from 'pkg/front_end/testcases/general/invalid_cast.dart'.
+Change the type of the object being constructed or the context in which it is used.
+  D h = new C.nonFact2();
+            ^" in new self::C::nonFact2();
+  (core::Object*) →* void i = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:30:31: Error: The static method has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+ - 'Object' is from 'dart:core'.
+Change the type of the method or the context in which it is used.
+  void Function(Object) i = C.staticFunction;
+                              ^" in #C2;
+  (core::Object*) →* void j = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:31:29: Error: The top level function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+ - 'Object' is from 'dart:core'.
+Change the type of the function or the context in which it is used.
+  void Function(Object) j = topLevelFunction;
+                            ^" in #C3;
+  (core::Object*) →* void k = invalid-expression "pkg/front_end/testcases/general/invalid_cast.dart:32:29: Error: The local function has type 'void Function(int)' that isn't of expected type 'void Function(Object)'.
+ - 'Object' is from 'dart:core'.
+Change the type of the function or the context in which it is used.
+  void Function(Object) k = localFunction;
+                            ^" in localFunction;
+}
+static method ok() → dynamic {
+  function localFunction(core::int* i) → void {}
+  core::List<core::int*>* a = <core::int*>[];
+  core::Map<core::int*, core::String*>* b = <core::int*, core::String*>{};
+  core::Map<core::int*, core::String*>* c = <core::int*, core::String*>{};
+  (core::int*) →* core::int* d = (core::int* i) → core::int* => i;
+  self::D* e = self::C::fact() as{TypeError} self::D*;
+  self::D* f = new self::D::•() as{TypeError} self::D*;
+  self::C* g = new self::C::nonFact();
+  self::C* h = new self::C::nonFact2();
+  (core::int*) →* void i = #C2;
+  (core::int*) →* void j = #C3;
+  (core::int*) →* void k = localFunction;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::fact2
+  #C2 = static-tearoff self::C::staticFunction
+  #C3 = static-tearoff self::topLevelFunction
+}
diff --git a/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.modular.expect b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.modular.expect
new file mode 100644
index 0000000..bf9baa8
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_for_in_iterable.dart.weak.modular.expect
@@ -0,0 +1,56 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable.dart:14:27: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   for (var v in takesNoArg(0)) {}
+//                           ^
+// pkg/front_end/testcases/general/invalid_for_in_iterable.dart:7:10: Context: Found this candidate, but the arguments don't match.
+// Iterable takesNoArg() => null;
+//          ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable.dart:15:17: Error: This expression has type 'void' and can't be used.
+//   for (var v in returnVoid()) {}
+//                 ^
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable.dart:16:17: Error: The type 'int' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   for (var v in returnInt()) {}
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method takesNoArg() → core::Iterable<dynamic>*
+  return null;
+static method returnVoid() → void {}
+static method returnInt() → core::int*
+  return 42;
+static method returnDynamic() → dynamic
+  return <dynamic>[];
+static method returnObject() → core::Object*
+  return 0;
+static method test() → dynamic {
+  for (dynamic v in invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:14:27: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  for (var v in takesNoArg(0)) {}
+                          ^") {
+  }
+  for (dynamic v in invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:15:17: Error: This expression has type 'void' and can't be used.
+  for (var v in returnVoid()) {}
+                ^" in self::returnVoid()) {
+  }
+  for (dynamic v in invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable.dart:16:17: Error: The type 'int' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  for (var v in returnInt()) {}
+                ^" in self::returnInt() as{TypeError} core::Iterable<dynamic>*) {
+  }
+  for (dynamic v in self::returnDynamic() as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+  }
+  for (dynamic v in self::returnObject() as{TypeError} core::Iterable<dynamic>*) {
+  }
+  for (dynamic v in throw "") {
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.weak.modular.expect b/pkg/front_end/testcases/general/invalid_operator.dart.weak.modular.expect
new file mode 100644
index 0000000..c3f1e06
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.weak.modular.expect
@@ -0,0 +1,968 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:6:12: Error: Operator '==' should have exactly one parameter.
+//   operator ==() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:7:12: Error: Operator '<' should have exactly one parameter.
+//   operator <() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:8:12: Error: Operator '>' should have exactly one parameter.
+//   operator >() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:9:12: Error: Operator '<=' should have exactly one parameter.
+//   operator <=() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:10:12: Error: Operator '>=' should have exactly one parameter.
+//   operator >=() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:11:12: Error: Operator '+' should have exactly one parameter.
+//   operator +() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:12:12: Error: Operator '/' should have exactly one parameter.
+//   operator /() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:13:12: Error: Operator '~/' should have exactly one parameter.
+//   operator ~/() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:14:12: Error: Operator '*' should have exactly one parameter.
+//   operator *() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:15:12: Error: Operator '%' should have exactly one parameter.
+//   operator %() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:16:12: Error: Operator '|' should have exactly one parameter.
+//   operator |() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:17:12: Error: Operator '^' should have exactly one parameter.
+//   operator ^() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:18:12: Error: Operator '&' should have exactly one parameter.
+//   operator &() => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:19:12: Error: Operator '<<' should have exactly one parameter.
+//   operator <<() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:20:12: Error: Operator '>>' should have exactly one parameter.
+//   operator >>() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:21:12: Error: Operator '[]=' should have exactly two parameters.
+//   operator []=(a, b, c) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:22:12: Error: Operator '[]' should have exactly one parameter.
+//   operator []() => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:23:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~(a) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:27:12: Error: Operator '==' should have exactly one parameter.
+//   operator ==(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:28:12: Error: Operator '<' should have exactly one parameter.
+//   operator <(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:29:12: Error: Operator '>' should have exactly one parameter.
+//   operator >(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:30:12: Error: Operator '<=' should have exactly one parameter.
+//   operator <=(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:31:12: Error: Operator '>=' should have exactly one parameter.
+//   operator >=(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:32:12: Error: Operator '-' should have zero or one parameter.
+// With zero parameters, it has the syntactic form '-a', formally known as 'unary-'. With one parameter, it has the syntactic form 'a - b', formally known as '-'.
+//   operator -(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:33:12: Error: Operator '+' should have exactly one parameter.
+//   operator +(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:34:12: Error: Operator '/' should have exactly one parameter.
+//   operator /(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:35:12: Error: Operator '~/' should have exactly one parameter.
+//   operator ~/(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:36:12: Error: Operator '*' should have exactly one parameter.
+//   operator *(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:37:12: Error: Operator '%' should have exactly one parameter.
+//   operator %(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:38:12: Error: Operator '|' should have exactly one parameter.
+//   operator |(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:39:12: Error: Operator '^' should have exactly one parameter.
+//   operator ^(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:40:12: Error: Operator '&' should have exactly one parameter.
+//   operator &(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:41:12: Error: Operator '<<' should have exactly one parameter.
+//   operator <<(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:42:12: Error: Operator '>>' should have exactly one parameter.
+//   operator >>(a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:43:12: Error: Operator '[]=' should have exactly two parameters.
+//   operator []=(a, b, c) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:44:12: Error: Operator '[]' should have exactly one parameter.
+//   operator [](a, b) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:45:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~(a, b) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:49:16: Error: An operator can't have optional parameters.
+//   operator ==([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:50:15: Error: An operator can't have optional parameters.
+//   operator <([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:51:15: Error: An operator can't have optional parameters.
+//   operator >([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:52:16: Error: An operator can't have optional parameters.
+//   operator <=([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:53:16: Error: An operator can't have optional parameters.
+//   operator >=([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:54:15: Error: An operator can't have optional parameters.
+//   operator -([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:55:15: Error: An operator can't have optional parameters.
+//   operator +([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:56:15: Error: An operator can't have optional parameters.
+//   operator /([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:57:16: Error: An operator can't have optional parameters.
+//   operator ~/([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:58:15: Error: An operator can't have optional parameters.
+//   operator *([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:59:15: Error: An operator can't have optional parameters.
+//   operator %([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:60:15: Error: An operator can't have optional parameters.
+//   operator |([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:61:15: Error: An operator can't have optional parameters.
+//   operator ^([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:62:15: Error: An operator can't have optional parameters.
+//   operator &([a]) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:63:16: Error: An operator can't have optional parameters.
+//   operator <<([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:64:16: Error: An operator can't have optional parameters.
+//   operator >>([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:65:17: Error: An operator can't have optional parameters.
+//   operator []=([a, b]) => true;
+//                 ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:65:20: Error: An operator can't have optional parameters.
+//   operator []=([a, b]) => true;
+//                    ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:66:16: Error: An operator can't have optional parameters.
+//   operator []([a]) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:67:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~([a]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:71:16: Error: An operator can't have optional parameters.
+//   operator ==({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:72:15: Error: An operator can't have optional parameters.
+//   operator <({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:73:15: Error: An operator can't have optional parameters.
+//   operator >({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:74:16: Error: An operator can't have optional parameters.
+//   operator <=({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:75:16: Error: An operator can't have optional parameters.
+//   operator >=({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:76:15: Error: An operator can't have optional parameters.
+//   operator -({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:77:15: Error: An operator can't have optional parameters.
+//   operator +({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:78:15: Error: An operator can't have optional parameters.
+//   operator /({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:79:16: Error: An operator can't have optional parameters.
+//   operator ~/({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:80:15: Error: An operator can't have optional parameters.
+//   operator *({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:81:15: Error: An operator can't have optional parameters.
+//   operator %({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:82:15: Error: An operator can't have optional parameters.
+//   operator |({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:83:15: Error: An operator can't have optional parameters.
+//   operator ^({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:84:15: Error: An operator can't have optional parameters.
+//   operator &({a}) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:85:16: Error: An operator can't have optional parameters.
+//   operator <<({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:86:16: Error: An operator can't have optional parameters.
+//   operator >>({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:87:17: Error: An operator can't have optional parameters.
+//   operator []=({a, b}) => true;
+//                 ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:87:20: Error: An operator can't have optional parameters.
+//   operator []=({a, b}) => true;
+//                    ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:88:16: Error: An operator can't have optional parameters.
+//   operator []({a}) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:89:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~({a}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:93:12: Error: Operator '==' should have exactly one parameter.
+//   operator ==(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:94:12: Error: Operator '<' should have exactly one parameter.
+//   operator <(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:95:12: Error: Operator '>' should have exactly one parameter.
+//   operator >(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:96:12: Error: Operator '<=' should have exactly one parameter.
+//   operator <=(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:97:12: Error: Operator '>=' should have exactly one parameter.
+//   operator >=(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:98:12: Error: Operator '-' should have zero or one parameter.
+// With zero parameters, it has the syntactic form '-a', formally known as 'unary-'. With one parameter, it has the syntactic form 'a - b', formally known as '-'.
+//   operator -(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:99:12: Error: Operator '+' should have exactly one parameter.
+//   operator +(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:100:12: Error: Operator '/' should have exactly one parameter.
+//   operator /(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:101:12: Error: Operator '~/' should have exactly one parameter.
+//   operator ~/(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:102:12: Error: Operator '*' should have exactly one parameter.
+//   operator *(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:103:12: Error: Operator '%' should have exactly one parameter.
+//   operator %(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:104:12: Error: Operator '|' should have exactly one parameter.
+//   operator |(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:105:12: Error: Operator '^' should have exactly one parameter.
+//   operator ^(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:106:12: Error: Operator '&' should have exactly one parameter.
+//   operator &(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:107:12: Error: Operator '<<' should have exactly one parameter.
+//   operator <<(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:108:12: Error: Operator '>>' should have exactly one parameter.
+//   operator >>(a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:109:12: Error: Operator '[]=' should have exactly two parameters.
+//   operator []=(a, b, [c]) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:110:12: Error: Operator '[]' should have exactly one parameter.
+//   operator [](a, [b]) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:111:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~(a, [b]) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:115:12: Error: Operator '==' should have exactly one parameter.
+//   operator ==(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:116:12: Error: Operator '<' should have exactly one parameter.
+//   operator <(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:117:12: Error: Operator '>' should have exactly one parameter.
+//   operator >(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:118:12: Error: Operator '<=' should have exactly one parameter.
+//   operator <=(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:119:12: Error: Operator '>=' should have exactly one parameter.
+//   operator >=(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:120:12: Error: Operator '-' should have zero or one parameter.
+// With zero parameters, it has the syntactic form '-a', formally known as 'unary-'. With one parameter, it has the syntactic form 'a - b', formally known as '-'.
+//   operator -(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:121:12: Error: Operator '+' should have exactly one parameter.
+//   operator +(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:122:12: Error: Operator '/' should have exactly one parameter.
+//   operator /(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:123:12: Error: Operator '~/' should have exactly one parameter.
+//   operator ~/(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:124:12: Error: Operator '*' should have exactly one parameter.
+//   operator *(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:125:12: Error: Operator '%' should have exactly one parameter.
+//   operator %(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:126:12: Error: Operator '|' should have exactly one parameter.
+//   operator |(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:127:12: Error: Operator '^' should have exactly one parameter.
+//   operator ^(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:128:12: Error: Operator '&' should have exactly one parameter.
+//   operator &(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:129:12: Error: Operator '<<' should have exactly one parameter.
+//   operator <<(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:130:12: Error: Operator '>>' should have exactly one parameter.
+//   operator >>(a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:131:12: Error: Operator '[]=' should have exactly two parameters.
+//   operator []=(a, b, {c}) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:132:12: Error: Operator '[]' should have exactly one parameter.
+//   operator [](a, {b}) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:133:12: Error: Operator '~' shouldn't have any parameters.
+//   operator ~(a, {b}) => true;
+//            ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:137:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator ==<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:138:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator ><T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:139:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator <=<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:140:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator >=<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:141:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator -<T>() => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:142:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator -<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:143:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator +<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:144:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator /<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:145:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator ~/<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:146:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator *<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:147:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator %<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:148:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator |<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:149:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator ^<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:150:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator &<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:151:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator <<<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:152:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator >><T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:153:16: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator []=<T>(a, b) => true;
+//                ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:154:15: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator []<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:155:14: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator ~<T>() => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:137:12: Error: Can't infer types for '==' as the overridden members don't have a combined signature.
+// Try adding explicit types.
+//   operator ==<T>(a) => true;
+//            ^^
+// sdk/lib/_internal/vm/lib/object_patch.dart:29:26: Context: This is one of the overridden members.
+//   external bool operator ==(Object other);
+//                          ^^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:6:12: Error: The method 'Operators1.==' has fewer positional arguments than those of overridden method 'Object.=='.
+//   operator ==() => true;
+//            ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:29:26: Context: This is the overridden method ('==').
+//   external bool operator ==(Object other);
+//                          ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:27:12: Error: The method 'Operators2.==' has more required arguments than those of overridden method 'Object.=='.
+//   operator ==(a, b) => true;
+//            ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:29:26: Context: This is the overridden method ('==').
+//   external bool operator ==(Object other);
+//                          ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:71:12: Error: The method 'Operators4.==' has fewer positional arguments than those of overridden method 'Object.=='.
+//   operator ==({a}) => true;
+//            ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:29:26: Context: This is the overridden method ('==').
+//   external bool operator ==(Object other);
+//                          ^
+//
+// pkg/front_end/testcases/general/invalid_operator.dart:137:12: Error: Declared type variables of 'Operators7.==' doesn't match those on overridden method 'Object.=='.
+//   operator ==<T>(a) => true;
+//            ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:29:26: Context: This is the overridden method ('==').
+//   external bool operator ==(Object other);
+//                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Operators1 extends core::Object {
+  synthetic constructor •() → self::Operators1*
+    : super core::Object::•()
+    ;
+  operator ==() → core::bool*
+    return true;
+  operator <() → dynamic
+    return true;
+  operator >() → dynamic
+    return true;
+  operator <=() → dynamic
+    return true;
+  operator >=() → dynamic
+    return true;
+  operator +() → dynamic
+    return true;
+  operator /() → dynamic
+    return true;
+  operator ~/() → dynamic
+    return true;
+  operator *() → dynamic
+    return true;
+  operator %() → dynamic
+    return true;
+  operator |() → dynamic
+    return true;
+  operator ^() → dynamic
+    return true;
+  operator &() → dynamic
+    return true;
+  operator <<() → dynamic
+    return true;
+  operator >>() → dynamic
+    return true;
+  operator []=(dynamic a, dynamic b, dynamic c) → void
+    return true;
+  operator []() → dynamic
+    return true;
+  operator ~(dynamic a) → dynamic
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Operators2 extends core::Object {
+  synthetic constructor •() → self::Operators2*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic a, dynamic b) → core::bool*
+    return true;
+  operator <(dynamic a, dynamic b) → dynamic
+    return true;
+  operator >(dynamic a, dynamic b) → dynamic
+    return true;
+  operator <=(dynamic a, dynamic b) → dynamic
+    return true;
+  operator >=(dynamic a, dynamic b) → dynamic
+    return true;
+  operator -(dynamic a, dynamic b) → dynamic
+    return true;
+  operator +(dynamic a, dynamic b) → dynamic
+    return true;
+  operator /(dynamic a, dynamic b) → dynamic
+    return true;
+  operator ~/(dynamic a, dynamic b) → dynamic
+    return true;
+  operator *(dynamic a, dynamic b) → dynamic
+    return true;
+  operator %(dynamic a, dynamic b) → dynamic
+    return true;
+  operator |(dynamic a, dynamic b) → dynamic
+    return true;
+  operator ^(dynamic a, dynamic b) → dynamic
+    return true;
+  operator &(dynamic a, dynamic b) → dynamic
+    return true;
+  operator <<(dynamic a, dynamic b) → dynamic
+    return true;
+  operator >>(dynamic a, dynamic b) → dynamic
+    return true;
+  operator []=(dynamic a, dynamic b, dynamic c) → void
+    return true;
+  operator [](dynamic a, dynamic b) → dynamic
+    return true;
+  operator ~(dynamic a, dynamic b) → dynamic
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Operators3 extends core::Object {
+  synthetic constructor •() → self::Operators3*
+    : super core::Object::•()
+    ;
+  operator ==([dynamic a = #C1]) → core::bool*
+    return true;
+  operator <([dynamic a = #C1]) → dynamic
+    return true;
+  operator >([dynamic a = #C1]) → dynamic
+    return true;
+  operator <=([dynamic a = #C1]) → dynamic
+    return true;
+  operator >=([dynamic a = #C1]) → dynamic
+    return true;
+  operator -([dynamic a = #C1]) → dynamic
+    return true;
+  operator +([dynamic a = #C1]) → dynamic
+    return true;
+  operator /([dynamic a = #C1]) → dynamic
+    return true;
+  operator ~/([dynamic a = #C1]) → dynamic
+    return true;
+  operator *([dynamic a = #C1]) → dynamic
+    return true;
+  operator %([dynamic a = #C1]) → dynamic
+    return true;
+  operator |([dynamic a = #C1]) → dynamic
+    return true;
+  operator ^([dynamic a = #C1]) → dynamic
+    return true;
+  operator &([dynamic a = #C1]) → dynamic
+    return true;
+  operator <<([dynamic a = #C1]) → dynamic
+    return true;
+  operator >>([dynamic a = #C1]) → dynamic
+    return true;
+  operator []=([dynamic a = #C1, dynamic b = #C1]) → void
+    return true;
+  operator []([dynamic a = #C1]) → dynamic
+    return true;
+  operator ~([dynamic a = #C1]) → dynamic
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Operators4 extends core::Object {
+  synthetic constructor •() → self::Operators4*
+    : super core::Object::•()
+    ;
+  operator ==({dynamic a = #C1}) → core::bool*
+    return true;
+  operator <({dynamic a = #C1}) → dynamic
+    return true;
+  operator >({dynamic a = #C1}) → dynamic
+    return true;
+  operator <=({dynamic a = #C1}) → dynamic
+    return true;
+  operator >=({dynamic a = #C1}) → dynamic
+    return true;
+  operator -({dynamic a = #C1}) → dynamic
+    return true;
+  operator +({dynamic a = #C1}) → dynamic
+    return true;
+  operator /({dynamic a = #C1}) → dynamic
+    return true;
+  operator ~/({dynamic a = #C1}) → dynamic
+    return true;
+  operator *({dynamic a = #C1}) → dynamic
+    return true;
+  operator %({dynamic a = #C1}) → dynamic
+    return true;
+  operator |({dynamic a = #C1}) → dynamic
+    return true;
+  operator ^({dynamic a = #C1}) → dynamic
+    return true;
+  operator &({dynamic a = #C1}) → dynamic
+    return true;
+  operator <<({dynamic a = #C1}) → dynamic
+    return true;
+  operator >>({dynamic a = #C1}) → dynamic
+    return true;
+  operator []=({dynamic a = #C1, dynamic b = #C1}) → void
+    return true;
+  operator []({dynamic a = #C1}) → dynamic
+    return true;
+  operator ~({dynamic a = #C1}) → dynamic
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Operators5 extends core::Object {
+  synthetic constructor •() → self::Operators5*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic a, [dynamic b = #C1]) → core::bool*
+    return true;
+  operator <(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator >(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator <=(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator >=(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator -(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator +(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator /(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator ~/(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator *(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator %(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator |(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator ^(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator &(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator <<(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator >>(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator []=(dynamic a, dynamic b, [dynamic c = #C1]) → void
+    return true;
+  operator [](dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  operator ~(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Operators6 extends core::Object {
+  synthetic constructor •() → self::Operators6*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic a, {dynamic b = #C1}) → core::bool*
+    return true;
+  operator <(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator >(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator <=(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator >=(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator -(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator +(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator /(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator ~/(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator *(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator %(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator |(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator ^(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator &(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator <<(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator >>(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator []=(dynamic a, dynamic b, {dynamic c = #C1}) → void
+    return true;
+  operator [](dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  operator ~(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Operators7 extends core::Object {
+  synthetic constructor •() → self::Operators7*
+    : super core::Object::•()
+    ;
+  operator ==<T extends core::Object* = dynamic>(invalid-type a) → invalid-type
+    return true;
+  operator ><T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator <=<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator >=<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator unary-<T extends core::Object* = dynamic>() → dynamic
+    return true;
+  operator -<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator +<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator /<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator ~/<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator *<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator %<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator |<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator ^<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator &<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator <<<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator >><T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator []=<T extends core::Object* = dynamic>(dynamic a, dynamic b) → void
+    return true;
+  operator []<T extends core::Object* = dynamic>(dynamic a) → dynamic
+    return true;
+  operator ~<T extends core::Object* = dynamic>() → dynamic
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/invalid_operator2.dart.weak.modular.expect b/pkg/front_end/testcases/general/invalid_operator2.dart.weak.modular.expect
new file mode 100644
index 0000000..7ad624a
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_operator2.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:12: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   operator <<T>(a) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:14: Error: Expected '{' before this.
+//   operator <<T>(a) => true;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:12: Error: Operator '<<' should have exactly one parameter.
+//   operator <<T>(a) => true;
+//            ^^
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:15: Error: Operator declarations must be preceded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//   operator <<T>(a) => true;
+//               ^
+//
+// pkg/front_end/testcases/general/invalid_operator2.dart:6:14: Error: Type 'T' not found.
+//   operator <<T>(a) => true;
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Operators7 extends core::Object {
+  synthetic constructor •() → self::Operators7*
+    : super core::Object::•()
+    ;
+  operator <<() → dynamic {}
+  operator >(dynamic a) → invalid-type
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_operator_override.dart.weak.modular.expect b/pkg/front_end/testcases/general/invalid_operator_override.dart.weak.modular.expect
new file mode 100644
index 0000000..aad884f
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_operator_override.dart.weak.modular.expect
@@ -0,0 +1,120 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_operator_override.dart:13:18: Error: The parameter 'b' of the method 'B.+' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'A.+'.
+//  - 'B' is from 'pkg/front_end/testcases/general/invalid_operator_override.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/invalid_operator_override.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   A operator +(B b) => b;
+//                  ^
+// pkg/front_end/testcases/general/invalid_operator_override.dart:6:14: Context: This is the overridden method ('+').
+//   A operator +(A a) => a;
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator_override.dart:14:14: Error: The return type of the method 'B.unary-' is 'A', which does not match the return type, 'B', of the overridden method, 'A.unary-'.
+//  - 'A' is from 'pkg/front_end/testcases/general/invalid_operator_override.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/general/invalid_operator_override.dart'.
+// Change to a subtype of 'B'.
+//   A operator -() => this;
+//              ^
+// pkg/front_end/testcases/general/invalid_operator_override.dart:7:14: Context: This is the overridden method ('unary-').
+//   B operator -() => new B();
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator_override.dart:15:19: Error: The parameter 'b' of the method 'B.[]' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'A.[]'.
+//  - 'B' is from 'pkg/front_end/testcases/general/invalid_operator_override.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/invalid_operator_override.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   B operator [](B b) => b;
+//                   ^
+// pkg/front_end/testcases/general/invalid_operator_override.dart:8:14: Context: This is the overridden method ('[]').
+//   B operator [](A a) => new B();
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator_override.dart:16:23: Error: The parameter 'b' of the method 'B.[]=' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'A.[]='.
+//  - 'B' is from 'pkg/front_end/testcases/general/invalid_operator_override.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/invalid_operator_override.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void operator []=(B b, A a) {}
+//                       ^
+// pkg/front_end/testcases/general/invalid_operator_override.dart:9:17: Context: This is the overridden method ('[]=').
+//   void operator []=(A a1, A a2) {}
+//                 ^
+//
+// pkg/front_end/testcases/general/invalid_operator_override.dart:20:14: Error: The return type of the method 'C.[]' is 'A', which does not match the return type, 'B', of the overridden method, 'A.[]'.
+//  - 'A' is from 'pkg/front_end/testcases/general/invalid_operator_override.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/general/invalid_operator_override.dart'.
+// Change to a subtype of 'B'.
+//   A operator [](B b) => b;
+//              ^
+// pkg/front_end/testcases/general/invalid_operator_override.dart:8:14: Context: This is the overridden method ('[]').
+//   B operator [](A a) => new B();
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator_override.dart:20:19: Error: The parameter 'b' of the method 'C.[]' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'A.[]'.
+//  - 'B' is from 'pkg/front_end/testcases/general/invalid_operator_override.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/invalid_operator_override.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   A operator [](B b) => b;
+//                   ^
+// pkg/front_end/testcases/general/invalid_operator_override.dart:8:14: Context: This is the overridden method ('[]').
+//   B operator [](A a) => new B();
+//              ^
+//
+// pkg/front_end/testcases/general/invalid_operator_override.dart:21:28: Error: The parameter 'b' of the method 'C.[]=' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'A.[]='.
+//  - 'B' is from 'pkg/front_end/testcases/general/invalid_operator_override.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/invalid_operator_override.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void operator []=(A a, B b) {}
+//                            ^
+// pkg/front_end/testcases/general/invalid_operator_override.dart:9:17: Context: This is the overridden method ('[]=').
+//   void operator []=(A a1, A a2) {}
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator +(self::A* a) → self::A*
+    return a;
+  operator unary-() → self::B*
+    return new self::B::•();
+  operator [](self::A* a) → self::B*
+    return new self::B::•();
+  operator []=(self::A* a1, self::A* a2) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::B* b) → self::A*
+    return b;
+  operator unary-() → self::A*
+    return this;
+  operator [](self::B* b) → self::B*
+    return b;
+  operator []=(self::B* b, self::A* a) → void {}
+}
+class C extends self::A {
+  synthetic constructor •() → self::C*
+    : super self::A::•()
+    ;
+  operator [](self::B* b) → self::A*
+    return b;
+  operator []=(self::A* a, self::B* b) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.modular.expect
new file mode 100644
index 0000000..096efed
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.modular.expect
@@ -0,0 +1,110 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_setter_return_type.dart:5:1: Error: The return type of the setter must be 'void' or absent.
+// Try removing the return type, or define a method rather than a setter.
+// int set setter1(_) {} // error
+// ^
+//
+// pkg/front_end/testcases/general/invalid_setter_return_type.dart:6:1: Error: The return type of the setter must be 'void' or absent.
+// Try removing the return type, or define a method rather than a setter.
+// dynamic set setter2(_) {} // error
+// ^
+//
+// pkg/front_end/testcases/general/invalid_setter_return_type.dart:11:3: Error: The return type of the setter must be 'void' or absent.
+// Try removing the return type, or define a method rather than a setter.
+//   int set setter1(_) {} // error
+//   ^
+//
+// pkg/front_end/testcases/general/invalid_setter_return_type.dart:12:3: Error: The return type of the operator []= must be 'void'.
+// Try changing the return type to 'void'.
+//   int operator []=(a, b) {} // error
+//   ^
+//
+// pkg/front_end/testcases/general/invalid_setter_return_type.dart:16:3: Error: The return type of the setter must be 'void' or absent.
+// Try removing the return type, or define a method rather than a setter.
+//   dynamic set setter2(_) {} // error
+//   ^
+//
+// pkg/front_end/testcases/general/invalid_setter_return_type.dart:17:3: Error: The return type of the operator []= must be 'void'.
+// Try changing the return type to 'void'.
+//   dynamic operator []=(a, b) {} // error
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1*
+    : super core::Object::•()
+    ;
+  set setter1(dynamic _) → void {}
+  operator []=(dynamic a, dynamic b) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2*
+    : super core::Object::•()
+    ;
+  set setter2(dynamic _) → void {}
+  operator []=(dynamic a, dynamic b) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class3 extends core::Object {
+  synthetic constructor •() → self::Class3*
+    : super core::Object::•()
+    ;
+  set setter3(dynamic _) → void {}
+  operator []=(dynamic a, dynamic b) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class4 extends core::Object {
+  synthetic constructor •() → self::Class4*
+    : super core::Object::•()
+    ;
+  set setter4(dynamic _) → void {}
+  operator []=(dynamic a, dynamic b) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static set setter1(dynamic _) → void {}
+static set setter2(dynamic _) → void {}
+static set setter3(dynamic _) → void {}
+static set setter4(dynamic _) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_super_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/general/invalid_super_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..09921df
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_super_initializer.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_super_initializer.dart:8:8: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//   B(): super()?.foo() {}
+//        ^
+//
+// pkg/front_end/testcases/general/invalid_super_initializer.dart:8:8: Error: Expected an initializer.
+//   B(): super()?.foo() {}
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •() → self::B
+    : final dynamic #t1 = let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_super_initializer.dart:8:8: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+  B(): super()?.foo() {}
+       ^" in #t2 == null ?{dynamic} null : #t2{dynamic}.foo() {}
+}
+static method bad() → dynamic {
+  new self::B::•();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/invalid_type.dart.weak.modular.expect
new file mode 100644
index 0000000..5bf84b6
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_type.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_type.dart:7:5: Error: Expected identifier, but got 'this'.
+//     this.bar();
+//     ^^^^
+//
+// pkg/front_end/testcases/general/invalid_type.dart:12:12: Error: 'Missing' isn't a type.
+//   (null as Missing).bar();
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/general/invalid_type.dart:13:8: Error: The method 'bar' isn't defined for the class 'Null'.
+// Try correcting the name to the name of an existing method, or defining a method named 'bar'.
+//   null.bar();
+//        ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  static method foo() → dynamic {
+    invalid-expression "pkg/front_end/testcases/general/invalid_type.dart:7:5: Error: Expected identifier, but got 'this'.
+    this.bar();
+    ^^^^"{dynamic}.bar();
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  (null as invalid-type){dynamic}.bar();
+  invalid-expression "pkg/front_end/testcases/general/invalid_type.dart:13:8: Error: The method 'bar' isn't defined for the class 'Null'.
+Try correcting the name to the name of an existing method, or defining a method named 'bar'.
+  null.bar();
+       ^^^" in null{<unresolved>}.bar();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invocations.dart.weak.modular.expect b/pkg/front_end/testcases/general/invocations.dart.weak.modular.expect
new file mode 100644
index 0000000..64be843
--- /dev/null
+++ b/pkg/front_end/testcases/general/invocations.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invocations.dart:7:3: Error: Method not found: 'z'.
+//   z("Hello, World!");
+//   ^
+//
+// pkg/front_end/testcases/general/invocations.dart:8:3: Error: Undefined name 'z'.
+//   z.print("Hello, World!");
+//   ^
+//
+// pkg/front_end/testcases/general/invocations.dart:9:3: Error: Undefined name 'y'.
+//   y.z.print("Hello, World!");
+//   ^
+//
+// pkg/front_end/testcases/general/invocations.dart:10:3: Error: Undefined name 'x'.
+//   x.y.z.print("Hello, World!");
+//   ^
+//
+// pkg/front_end/testcases/general/invocations.dart:14:7: Error: Method not found: 'z'.
+//       z("Hello, World!") +
+//       ^
+//
+// pkg/front_end/testcases/general/invocations.dart:15:7: Error: Undefined name 'z'.
+//       z.print("Hello, World!") +
+//       ^
+//
+// pkg/front_end/testcases/general/invocations.dart:16:7: Error: Undefined name 'y'.
+//       y.z.print("Hello, World!") +
+//       ^
+//
+// pkg/front_end/testcases/general/invocations.dart:17:7: Error: Undefined name 'x'.
+//       x.y.z.print("Hello, World!");
+//       ^
+//
+// pkg/front_end/testcases/general/invocations.dart:13:7: Error: This expression has type 'void' and can't be used.
+//       print("Hello, World!") +
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::print("Hello, World!");
+  invalid-expression "pkg/front_end/testcases/general/invocations.dart:7:3: Error: Method not found: 'z'.
+  z(\"Hello, World!\");
+  ^";
+  invalid-expression "pkg/front_end/testcases/general/invocations.dart:8:3: Error: Undefined name 'z'.
+  z.print(\"Hello, World!\");
+  ^"{dynamic}.print("Hello, World!");
+  invalid-expression "pkg/front_end/testcases/general/invocations.dart:9:3: Error: Undefined name 'y'.
+  y.z.print(\"Hello, World!\");
+  ^"{<invalid>}.z{dynamic}.print("Hello, World!");
+  invalid-expression "pkg/front_end/testcases/general/invocations.dart:10:3: Error: Undefined name 'x'.
+  x.y.z.print(\"Hello, World!\");
+  ^"{<invalid>}.y{<invalid>}.z{dynamic}.print("Hello, World!");
+  1.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:13:7: Error: This expression has type 'void' and can't be used.
+      print(\"Hello, World!\") +
+      ^" in core::print("Hello, World!")){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:14:7: Error: Method not found: 'z'.
+      z(\"Hello, World!\") +
+      ^"){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Undefined name 'z'.
+      z.print(\"Hello, World!\") +
+      ^"{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Undefined name 'y'.
+      y.z.print(\"Hello, World!\") +
+      ^"{<invalid>}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Undefined name 'x'.
+      x.y.z.print(\"Hello, World!\");
+      ^"{<invalid>}.y{<invalid>}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+}
diff --git a/pkg/front_end/testcases/general/issue129167943.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue129167943.dart.weak.modular.expect
new file mode 100644
index 0000000..dbcaed7
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue129167943.dart.weak.modular.expect
@@ -0,0 +1,244 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract method foo(core::num* x) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object implements self::B {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant-by-declaration core::int* x) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D1 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D1*
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant-by-declaration core::int* x) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D2 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D2*
+    : super core::Object::•()
+    ;
+  method foo(covariant-by-declaration core::int* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D3 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D3*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method foo(covariant-by-declaration core::num* x) → void;
+}
+abstract class D4 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D4*
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant-by-declaration core::int* x) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D5 extends core::Object implements self::A, self::C, self::B {
+  synthetic constructor •() → self::D5*
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant-by-declaration core::num* x) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class E extends core::Object {
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  abstract set foo(core::num* x) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class G extends core::Object implements self::E {
+  synthetic constructor •() → self::G*
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant-by-declaration core::int* x) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class H1 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H1*
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant-by-declaration core::int* x) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class H2 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H2*
+    : super core::Object::•()
+    ;
+  set foo(covariant-by-declaration core::int* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class H3 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H3*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub set foo(covariant-by-declaration core::num* x) → void;
+}
+abstract class H4 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H4*
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant-by-declaration core::int* x) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class H5 extends core::Object implements self::A, self::E, self::G {
+  synthetic constructor •() → self::H5*
+    : super core::Object::•()
+    ;
+  abstract set foo(covariant-by-declaration core::num* x) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue31767.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue31767.dart.weak.modular.expect
new file mode 100644
index 0000000..af92d7d
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue31767.dart.weak.modular.expect
@@ -0,0 +1,135 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "issue31767_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue31767_lib.dart";
+
+class C extends core::Object {
+  final field core::int* w;
+  constructor foo(core::int* x, [core::int* y = #C1, core::int* z = #C1]) → self::C*
+    : self::C::w = self::p("x", x).{core::num::+}(self::p("y", y)){(core::num*) →* core::int*}.{core::num::+}(self::p("z", z)){(core::num*) →* core::int*}, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M extends self::C /*isMixinDeclaration*/  {
+  get w2() → core::int*
+    return this.{self::C::w}{core::int*}.{core::num::*}(this.{self::C::w}{core::int*}){(core::num*) →* core::int*};
+}
+class D = self::C with self::M {
+  synthetic constructor foo(core::int* x, [core::int* y = #C1, core::int* z = #C1]) → self::D*
+    : super self::C::foo(x, y, z)
+    ;
+  mixin-super-stub get w2() → core::int*
+    return super.{self::M::w2};
+}
+abstract class N extends iss::A /*isMixinDeclaration*/  {
+  get w2() → core::int*
+    return this.{iss::A::w}{core::int*}.{core::num::*}(this.{iss::A::w}{core::int*}){(core::num*) →* core::int*};
+}
+class E = iss::A with self::N {
+  synthetic constructor foo(core::int* x, [core::int* y = #C2, core::int* z = #C2, iss::_A* a = #C4]) → self::E*
+    : super iss::A::foo(x, y, z, a)
+    ;
+  mixin-super-stub get w2() → core::int*
+    return super.{self::N::w2};
+}
+static field core::StringBuffer* sb;
+static method p(core::String* name, core::int* value) → core::int* {
+  self::sb.{core::StringBuffer::write}("${name} = ${value}, "){(core::Object*) →* void};
+  return value;
+}
+static method main() → dynamic {
+  self::sb = new core::StringBuffer::•();
+  iss::A* a = new iss::A::foo(1, 2);
+  self::expect("x = 1, y = 2, z = 3, ", self::sb.{core::StringBuffer::toString}(){() →* core::String*});
+  self::expect(6, a.{iss::A::w}{core::int*});
+  self::expect(5, a.{iss::A::a}{iss::_A*}.{iss::_A::field}{core::int*});
+  self::sb = new core::StringBuffer::•();
+  self::C* c = new self::C::foo(1, 2);
+  self::expect("x = 1, y = 2, z = 0, ", self::sb.{core::StringBuffer::toString}(){() →* core::String*});
+  self::expect(3, c.{self::C::w}{core::int*});
+  self::sb = new core::StringBuffer::•();
+  self::D* d = new self::D::foo(1, 2);
+  self::expect("x = 1, y = 2, z = 0, ", self::sb.{core::StringBuffer::toString}(){() →* core::String*});
+  self::expect(3, d.{self::C::w}{core::int*});
+  self::expect(9, d.{self::D::w2}{core::int*});
+  self::sb = new core::StringBuffer::•();
+  self::E* e = new self::E::foo(1, 2);
+  self::expect("x = 1, y = 2, z = 3, ", self::sb.{core::StringBuffer::toString}(){() →* core::String*});
+  self::expect(6, e.{iss::A::w}{core::int*});
+  self::expect(36, e.{self::E::w2}{core::int*});
+  self::expect(5, e.{iss::A::a}{iss::_A*}.{iss::_A::field}{core::int*});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+library;
+import self as iss;
+import "dart:core" as core;
+import "issue31767.dart" as self;
+
+import "org-dartlang-testcase:///issue31767.dart";
+
+class A extends core::Object {
+  final field core::int* w;
+  final field iss::_A* a;
+  constructor foo(core::int* x, [core::int* y = #C2, core::int* z = #C2, iss::_A* a = #C4]) → iss::A*
+    : iss::A::a = a, iss::A::w = self::p("x", x).{core::num::+}(self::p("y", y)){(core::num*) →* core::int*}.{core::num::+}(self::p("z", z)){(core::num*) →* core::int*}, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class _A extends core::Object /*hasConstConstructor*/  {
+  final field core::int* field;
+  const constructor •(core::int* field) → iss::_A*
+    : iss::_A::field = field, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field core::int* _private = #C2;
+
+constants  {
+  #C1 = 0
+  #C2 = 3
+  #C3 = 5
+  #C4 = iss::_A {field:#C3}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue31767.dart:
+- _A. (from org-dartlang-testcase:///issue31767_lib.dart:20:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
+org-dartlang-testcase:///issue31767_lib.dart:
+- _A. (from org-dartlang-testcase:///issue31767_lib.dart:20:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/issue34515.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue34515.dart.weak.modular.expect
new file mode 100644
index 0000000..6ca6a9d
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue34515.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue34515.dart:9:3: Error: 'ImportedClass' is imported from both 'pkg/front_end/testcases/general/issue34515_lib1.dart' and 'pkg/front_end/testcases/general/issue34515_lib2.dart'.
+//   ImportedClass(1);
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue34515.dart:10:3: Error: 'ImportedClass' is imported from both 'pkg/front_end/testcases/general/issue34515_lib1.dart' and 'pkg/front_end/testcases/general/issue34515_lib2.dart'.
+//   ImportedClass("a");
+//   ^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue34515_lib1.dart";
+import "org-dartlang-testcase:///issue34515_lib2.dart";
+
+static method test() → void {
+  let final core::Object* #t1 = 1 in invalid-expression "pkg/front_end/testcases/general/issue34515.dart:9:3: Error: 'ImportedClass' is imported from both 'pkg/front_end/testcases/general/issue34515_lib1.dart' and 'pkg/front_end/testcases/general/issue34515_lib2.dart'.
+  ImportedClass(1);
+  ^^^^^^^^^^^^^";
+  let final core::Object* #t2 = "a" in invalid-expression "pkg/front_end/testcases/general/issue34515.dart:10:3: Error: 'ImportedClass' is imported from both 'pkg/front_end/testcases/general/issue34515_lib1.dart' and 'pkg/front_end/testcases/general/issue34515_lib2.dart'.
+  ImportedClass(\"a\");
+  ^^^^^^^^^^^^^";
+}
+static method main() → dynamic {}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+class ImportedClass extends core::Object {
+  constructor •(core::int* a) → self2::ImportedClass*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+library;
+import self as self3;
+import "dart:core" as core;
+
+class ImportedClass extends core::Object {
+  constructor •(core::String* a) → self3::ImportedClass*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/general/issue34714.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue34714.dart.weak.modular.expect
new file mode 100644
index 0000000..c0cc024
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue34714.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
+    return new self::B::•<self::A::•::T*>();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends core::Object* = dynamic> extends core::Object implements self::A<self::B::T*> {
+  constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+}
diff --git a/pkg/front_end/testcases/general/issue34899.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue34899.dart.weak.modular.expect
new file mode 100644
index 0000000..c1735e3
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue34899.dart.weak.modular.expect
@@ -0,0 +1,76 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+class Foo<T extends core::Object* = dynamic> extends core::Object {
+  final field () →* asy::Future<dynamic>* quux;
+  covariant-by-class field self::Foo::T* t;
+  constructor •(() →* asy::Future<dynamic>* quux, self::Foo::T* t) → self::Foo<self::Foo::T*>*
+    : self::Foo::quux = quux, self::Foo::t = t, super core::Object::•()
+    ;
+  method call() → asy::Future<self::Foo::T*>*
+    return this.{self::Foo::quux}{() →* asy::Future<dynamic>*}(){() →* asy::Future<dynamic>*}.{asy::Future::then}<self::Foo::T*>((dynamic _) → self::Foo::T* => this.{self::Foo::t}{self::Foo::T*}){((dynamic) →* FutureOr<self::Foo::T*>*, {onError: core::Function*}) →* asy::Future<self::Foo::T*>*};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar extends core::Object {
+  field self::Foo<self::Baz*>* qux = null;
+  synthetic constructor •() → self::Bar*
+    : super core::Object::•()
+    ;
+  method quuz() → asy::Future<void>*
+    return this.{self::Bar::qux}{self::Foo<self::Baz*>*}.{self::Foo::call}(){() →* asy::Future<self::Baz*>*}.{asy::Future::then}<self::Grault*>((self::Baz* baz) → self::Grault* => this.{self::Bar::corge}(baz){(self::Baz*) →* self::Grault*}){((self::Baz*) →* FutureOr<self::Grault*>*, {onError: core::Function*}) →* asy::Future<self::Grault*>*}.{asy::Future::then}<void>((self::Grault* grault) → void => this.{self::Bar::garply}(grault){(self::Grault*) →* void}){((self::Grault*) →* FutureOr<void>*, {onError: core::Function*}) →* asy::Future<void>*};
+  method corge(self::Baz* baz) → self::Grault*
+    return null;
+  method garply(self::Grault* grault) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Baz extends core::Object {
+  synthetic constructor •() → self::Baz*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Grault extends core::Object {
+  synthetic constructor •() → self::Grault*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue35875.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue35875.dart.weak.modular.expect
new file mode 100644
index 0000000..fe26450
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue35875.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* a = null;
+  constructor •(core::int* a) → self::A*
+    : super core::Object::•() {
+    this.{self::A::a} = a;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue37027.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue37027.dart.weak.modular.expect
new file mode 100644
index 0000000..eeb421b
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue37027.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+class C extends core::Object {
+  final field core::Set<core::int> s;
+  constructor •(core::List<core::int> ell) → self::C
+    : self::C::s = block {
+      final core::Set<core::int> #t1 = col::LinkedHashSet::•<core::int>();
+      for (core::int e in ell)
+        if(e.{core::int::isOdd}{core::bool})
+          #t1.{core::Set::add}{Invariant}(2.{core::num::*}(e){(core::num) → core::int}){(core::int) → core::bool};
+    } =>#t1, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue37381.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue37381.dart.weak.modular.expect
new file mode 100644
index 0000000..8ec0e22
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue37381.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  method f<R extends core::Object* = dynamic>(<X extends core::Object* = dynamic>(self::A<X*>*) →* self::A::f::R* f) → self::A::f::R*
+    return f<self::A::X*>(this){(self::A<self::A::X*>*) →* self::A::f::R*};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::A<core::num*>* a = new self::A::•<core::int*>();
+  a.{self::A::f}<core::int*>(<X extends core::Object* = dynamic>(self::A<X*>* _) → core::int* => 42){(<X extends core::Object* = dynamic>(self::A<X*>*) →* core::int*) →* core::int*};
+}
diff --git a/pkg/front_end/testcases/general/issue37753.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue37753.dart.weak.modular.expect
new file mode 100644
index 0000000..8ce1e9b
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue37753.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method getElements() → core::Iterable<core::int*>* sync* {
+  core::Iterable<core::int*>* elements;
+  elements = (() → core::Iterable<core::int*>* sync* {
+    yield 7;
+  })(){() →* core::Iterable<core::int*>*};
+  yield* elements;
+}
+static method main() → dynamic
+  return core::print(self::getElements());
diff --git a/pkg/front_end/testcases/general/issue37776.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue37776.dart.weak.modular.expect
new file mode 100644
index 0000000..7840a4b
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue37776.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue37776.dart:11:7: Error: 'X' is already declared in this scope.
+// class X {
+//       ^
+// pkg/front_end/testcases/general/issue37776.dart:7:7: Context: Previous declaration of 'X'.
+// class X {
+//       ^
+//
+// pkg/front_end/testcases/general/issue37776.dart:16:9: Error: Couldn't find constructor 'X.foo'.
+//   const X.foo();
+//         ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class X#1 extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → self::X#1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class X extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → self::X*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {
+  invalid-expression "pkg/front_end/testcases/general/issue37776.dart:16:9: Error: Couldn't find constructor 'X.foo'.
+  const X.foo();
+        ^^^";
+}
diff --git a/pkg/front_end/testcases/general/issue38253.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38253.dart.weak.modular.expect
new file mode 100644
index 0000000..293f3f6
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue38253.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue38253.dart:9:1: Error: Expected ';' after this.
+// }
+// ^
+//
+// pkg/front_end/testcases/general/issue38253.dart:6:3: Error: 'g' isn't a type.
+//   g f(){
+//   ^
+//
+// pkg/front_end/testcases/general/issue38253.dart:7:5: Error: A value must be explicitly returned from a non-void function.
+//     return;
+//     ^
+//
+import self as self;
+
+static field () → Null a = () → Null {
+  function f() → invalid-type {
+    return invalid-expression "pkg/front_end/testcases/general/issue38253.dart:7:5: Error: A value must be explicitly returned from a non-void function.
+    return;
+    ^" in null;
+  }
+};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue38253b.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38253b.dart.weak.modular.expect
new file mode 100644
index 0000000..3d3ebd1
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue38253b.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue38253b.dart:6:3: Error: 'g' isn't a type.
+//   g f1() {
+//   ^
+//
+// pkg/front_end/testcases/general/issue38253b.dart:10:3: Error: 'g' isn't a type.
+//   g f2() async {
+//   ^
+//
+// pkg/front_end/testcases/general/issue38253b.dart:7:5: Error: A value must be explicitly returned from a non-void function.
+//     return;
+//     ^
+//
+// pkg/front_end/testcases/general/issue38253b.dart:11:5: Error: A value must be explicitly returned from a non-void async function.
+//     return;
+//     ^
+//
+import self as self;
+
+static field () → Null a = () → Null {
+  function f1() → invalid-type {
+    return invalid-expression "pkg/front_end/testcases/general/issue38253b.dart:7:5: Error: A value must be explicitly returned from a non-void function.
+    return;
+    ^" in null;
+  }
+  function f2() → invalid-type async {
+    return invalid-expression "pkg/front_end/testcases/general/issue38253b.dart:11:5: Error: A value must be explicitly returned from a non-void async function.
+    return;
+    ^" in null;
+  }
+};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue38253c.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38253c.dart.weak.modular.expect
new file mode 100644
index 0000000..2de98d4
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue38253c.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue38253c.dart:6:3: Error: 'g' isn't a type.
+//   g f1() {}
+//   ^
+//
+// pkg/front_end/testcases/general/issue38253c.dart:7:3: Error: 'g' isn't a type.
+//   g f2() async {}
+//   ^
+//
+// pkg/front_end/testcases/general/issue38253c.dart:8:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   int f3() {}
+//   ^
+//
+// pkg/front_end/testcases/general/issue38253c.dart:9:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   Future<int> f4() async {}
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static field () → Null a = () → Null {
+  function f1() → invalid-type {}
+  function f2() → invalid-type async {}
+  function f3() → core::int {
+    return invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:8:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  int f3() {}
+  ^" in null;
+  }
+  function f4() → asy::Future<core::int> async {
+    return invalid-expression "pkg/front_end/testcases/general/issue38253c.dart:9:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  Future<int> f4() async {}
+  ^" in null;
+  }
+};
+static field (dynamic) → asy::Future<dynamic> b = (dynamic f) → asy::Future<dynamic> async => await f;
+static field (dynamic) → dynamic c = (dynamic f) → dynamic => f;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue38812.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38812.dart.weak.modular.expect
new file mode 100644
index 0000000..1bcd793
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue38812.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef G<unrelated X extends core::Object* = dynamic> = () →* void;
+class A<X extends () →* void, Y extends () →* void> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*, self::A::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::A::•<() →* void, () →* void>();
+}
diff --git a/pkg/front_end/testcases/general/issue38938.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38938.dart.weak.modular.expect
new file mode 100644
index 0000000..2ed9c3f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue38938.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue38938.dart:7:7: Error: 'v' is already declared in this scope.
+//   int v;
+//       ^
+// pkg/front_end/testcases/general/issue38938.dart:6:7: Context: Previous declaration of 'v'.
+//   int v;
+//       ^
+//
+// pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
+//   A(this.v);
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* v = null;
+  constructor •(core::int* v) → self::A*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
+  A(this.v);
+         ^"
+    ;
+  constructor second() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/general/issue38943.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38943.dart.weak.modular.expect
new file mode 100644
index 0000000..c723406
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue38943.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class D<X extends () →* void> extends core::Object {
+  constructor _() → self::D<self::D::X*>*
+    : super core::Object::•() {}
+  static factory foo<X extends () →* void>() → self::D<self::D::foo::X*>*
+    return new self::D::_<self::D::foo::X*>();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::print(self::D::foo<() →* void>());
+}
diff --git a/pkg/front_end/testcases/general/issue38944.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38944.dart.weak.modular.expect
new file mode 100644
index 0000000..6ac58de
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue38944.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue38944.dart:6:7: Error: Can't use implicitly 'out' variable 'X' in an 'inout' position in supertype 'A'.
+// class B<X> extends Object with A<void Function<Y extends X>()> {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<Q extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::Q*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _B&Object&A<X extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<X extends core::Object* = dynamic> extends self::_B&Object&A<self::B::X*> {
+  synthetic constructor •() → self::B<self::B::X*>*
+    : super self::_B&Object&A::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/general/issue38961.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue38961.dart.weak.modular.expect
new file mode 100644
index 0000000..a588600
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue38961.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue38961.dart:7:7: Error: 'x' is already declared in this scope.
+//   var x = this;
+//       ^
+// pkg/front_end/testcases/general/issue38961.dart:6:11: Context: Previous declaration of 'x'.
+//   dynamic x = this;
+//           ^
+//
+// pkg/front_end/testcases/general/issue38961.dart:6:15: Error: Can't access 'this' in a field initializer.
+//   dynamic x = this;
+//               ^^^^
+//
+// pkg/front_end/testcases/general/issue38961.dart:7:11: Error: Can't access 'this' in a field initializer.
+//   var x = this;
+//           ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field dynamic x = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/general/issue39344.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue39344.dart.weak.modular.expect
new file mode 100644
index 0000000..fd2787d
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue39344.dart.weak.modular.expect
@@ -0,0 +1,116 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue39344.dart:19:12: Error: A value of type 'List<T>' can't be assigned to a variable of type 'List<B>'.
+//  - 'List' is from 'dart:core'.
+//  - 'B' is from 'pkg/front_end/testcases/general/issue39344.dart'.
+//       xs = ys;
+//            ^
+//
+// pkg/front_end/testcases/general/issue39344.dart:31:13: Error: A value of type 'List<List<T>>' can't be assigned to a variable of type 'List<List<B>>'.
+//  - 'List' is from 'dart:core'.
+//  - 'B' is from 'pkg/front_end/testcases/general/issue39344.dart'.
+//       xss = yss;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class Class<T extends self::A*> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T*>*
+    : super core::Object::•()
+    ;
+  method method1a(covariant-by-class self::Class::T* t) → void {
+    if(t is self::B*) {
+      core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
+      self::xs = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:19:12: Error: A value of type 'List<T>' can't be assigned to a variable of type 'List<B>'.
+ - 'List' is from 'dart:core'.
+ - 'B' is from 'pkg/front_end/testcases/general/issue39344.dart'.
+      xs = ys;
+           ^" in ys as{TypeError} core::List<self::B*>*;
+    }
+  }
+  method method1b(covariant-by-class self::Class::T* t) → void {
+    if(t is self::B*) {
+      core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
+      self::xss = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:31:13: Error: A value of type 'List<List<T>>' can't be assigned to a variable of type 'List<List<B>>'.
+ - 'List' is from 'dart:core'.
+ - 'B' is from 'pkg/front_end/testcases/general/issue39344.dart'.
+      xss = yss;
+            ^" in yss as{TypeError} core::List<core::List<self::B*>*>*;
+    }
+  }
+  method method2a(covariant-by-class self::Class::T* t) → void {
+    dynamic alias;
+    if(t is self::B*) {
+      core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
+      alias = ys;
+      self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
+    }
+  }
+  method method2b(covariant-by-class self::Class::T* t) → void {
+    dynamic alias;
+    if(t is self::B*) {
+      core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
+      alias = yss;
+      self::xss = alias as{TypeError,ForDynamic} core::List<core::List<self::B*>*>*;
+    }
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::List<self::B*>* xs;
+static field core::List<core::List<self::B*>*>* xss;
+static method main() → void {
+  self::throws(() → Null {
+    new self::Class::•<self::A*>().{self::Class::method2a}(new self::B::•()){(self::A*) →* void};
+    core::print(self::xs.{core::Object::runtimeType}{core::Type*});
+  });
+  self::throws(() → Null {
+    new self::Class::•<self::A*>().{self::Class::method2b}(new self::B::•()){(self::A*) →* void};
+    core::print(self::xs.{core::Object::runtimeType}{core::Type*});
+  });
+}
+static method errors() → void {
+  new self::Class::•<self::A*>().{self::Class::method1a}(new self::B::•()){(self::A*) →* void};
+  new self::Class::•<self::A*>().{self::Class::method1b}(new self::B::•()){(self::A*) →* void};
+}
+static method throws(() →* void f) → void {
+  try {
+    f(){() →* void};
+  }
+  on dynamic catch(final dynamic e) {
+    core::print(e);
+    return;
+  }
+  throw "Expected throws";
+}
diff --git a/pkg/front_end/testcases/general/issue39421.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue39421.dart.weak.modular.expect
new file mode 100644
index 0000000..cb1d71a
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue39421.dart.weak.modular.expect
@@ -0,0 +1,78 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue39421.dart:9:7: Error: 'A' is already declared in this scope.
+// class A {}
+//       ^
+// pkg/front_end/testcases/general/issue39421.dart:7:7: Context: Previous declaration of 'A'.
+// class A {}
+//       ^
+//
+// pkg/front_end/testcases/general/issue39421.dart:16:12: Error: 'A' isn't a type.
+//   foo(List<A> a) {}
+//            ^
+// pkg/front_end/testcases/general/issue39421.dart:16:12: Context: This isn't a type.
+//   foo(List<A> a) {}
+//            ^
+//
+// pkg/front_end/testcases/general/issue39421.dart:16:12: Error: Can't use 'A' because it is declared more than once.
+//   foo(List<A> a) {}
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A#1 extends core::Object {
+  synthetic constructor •() → self::A#1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method foo(core::List<Null>* a) → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  method foo(core::List<invalid-type>* a) → dynamic {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue39817.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue39817.dart.weak.modular.expect
new file mode 100644
index 0000000..cad4f51
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue39817.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+
+static method foo() → dynamic {
+  Null _null;
+  for (dynamic i in _null) {
+  }
+  ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue40242.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue40242.dart.weak.modular.expect
new file mode 100644
index 0000000..69ece96a
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue40242.dart.weak.modular.expect
@@ -0,0 +1,70 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue40242.dart:9:5: Error: Can't assign to 'this'.
+//     this = new C();
+//     ^^^^
+//
+// pkg/front_end/testcases/general/issue40242.dart:15:3: Error: Can't assign to the final variable 'c1'.
+//   c1 = new C();
+//   ^^
+//
+// pkg/front_end/testcases/general/issue40242.dart:16:3: Error: Can't assign to a type literal.
+//   C = Object;
+//   ^
+//
+// pkg/front_end/testcases/general/issue40242.dart:18:6: Error: Can't assign to a parenthesized expression.
+//   (c2) = new C();
+//      ^
+//
+// pkg/front_end/testcases/general/issue40242.dart:20:3: Error: Can't assign to the const variable 'c3'.
+//   c3 = null;
+//   ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension E on self::C* {
+  method errors = self::E|errors;
+  tearoff errors = self::E|get#errors;
+}
+static method E|errors(lowered final self::C* #this) → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/issue40242.dart:9:5: Error: Can't assign to 'this'.
+    this = new C();
+    ^^^^";
+}
+static method E|get#errors(lowered final self::C* #this) → () →* dynamic
+  return () → dynamic => self::E|errors(#this);
+static method errors() → dynamic {
+  final self::C* c1 = new self::C::•();
+  invalid-expression "pkg/front_end/testcases/general/issue40242.dart:15:3: Error: Can't assign to the final variable 'c1'.
+  c1 = new C();
+  ^^";
+  invalid-expression "pkg/front_end/testcases/general/issue40242.dart:16:3: Error: Can't assign to a type literal.
+  C = Object;
+  ^";
+  self::C* c2;
+  invalid-expression "pkg/front_end/testcases/general/issue40242.dart:18:6: Error: Can't assign to a parenthesized expression.
+  (c2) = new C();
+     ^";
+  invalid-expression "pkg/front_end/testcases/general/issue40242.dart:20:3: Error: Can't assign to the const variable 'c3'.
+  c3 = null;
+  ^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue40428.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue40428.dart.weak.modular.expect
new file mode 100644
index 0000000..d89d308
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue40428.dart.weak.modular.expect
@@ -0,0 +1,84 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue40428.dart:28:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+//   new NamedMixin1(0);
+//                   ^
+//
+// pkg/front_end/testcases/general/issue40428.dart:29:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+//   new NamedMixin2(0);
+//                   ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class SuperClass1 extends core::Object {
+  final field core::String* value;
+  constructor •(core::String* value) → self::SuperClass1*
+    : self::SuperClass1::value = value, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class SuperClass2 extends core::Object {
+  final field core::String* value;
+  constructor •(core::String* i) → self::SuperClass2*
+    : self::SuperClass2::value = i, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class NamedMixin1 = self::SuperClass1 with self::Mixin {
+  synthetic constructor •(core::String* value) → self::NamedMixin1*
+    : super self::SuperClass1::•(value)
+    ;
+}
+class NamedMixin2 = self::SuperClass2 with self::Mixin {
+  synthetic constructor •(core::String* i) → self::NamedMixin2*
+    : super self::SuperClass2::•(i)
+    ;
+}
+static method main() → void {
+  new self::NamedMixin1::•("");
+  new self::NamedMixin2::•("");
+}
+static method errors() → dynamic {
+  new self::NamedMixin1::•(invalid-expression "pkg/front_end/testcases/general/issue40428.dart:28:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+  new NamedMixin1(0);
+                  ^" in 0 as{TypeError} core::String*);
+  new self::NamedMixin2::•(invalid-expression "pkg/front_end/testcases/general/issue40428.dart:29:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+  new NamedMixin2(0);
+                  ^" in 0 as{TypeError} core::String*);
+}
diff --git a/pkg/front_end/testcases/general/issue40662.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue40662.dart.weak.modular.expect
new file mode 100644
index 0000000..dc6a6d8
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue40662.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method bar(core::int* a, core::List<core::int*>* b) → dynamic {
+  self::expect(1.{core::int::unary-}(){() →* core::int*}, a);
+  self::expect(1.{core::int::unary-}(){() →* core::int*}, b.{core::List::[]}(0){(core::int*) →* core::int*}.{core::num::-}(2){(core::num*) →* core::int*});
+}
+static method foo(core::int* x) → dynamic async 
+  return self::bar(x.{core::num::-}(1){(core::num*) →* core::int*}, !(x == null) ?{core::List<core::int*>*} <core::int*>[x.{core::num::+}(1){(core::num*) →* core::int*}, x.{core::num::+}(2){(core::num*) →* core::int*}, await null] : null);
+static method main() → void async 
+  return await self::foo(0);
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/general/issue40744.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue40744.dart.weak.modular.expect
new file mode 100644
index 0000000..cab8593
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue40744.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static const field core::Map<core::String*, dynamic>* generatorConfigDefaultJson = #C3;
+static method helper(core::Map<core::String*, dynamic>* input) → void {
+  core::print(input);
+}
+static method main() → void {
+  final core::Map<core::String*, Null>* nullValueMap = core::Map::fromEntries<core::String*, Null>(#C3.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, dynamic>*>*}.{core::Iterable::map}<core::MapEntry<core::String*, Null>*>((core::MapEntry<core::String*, dynamic>* e) → core::MapEntry<core::String*, Null>* => new core::MapEntry::_<core::String*, Null>(e.{core::MapEntry::key}{core::String*}, null)){((core::MapEntry<core::String*, dynamic>*) →* core::MapEntry<core::String*, Null>*) →* core::Iterable<core::MapEntry<core::String*, Null>*>*});
+  self::helper(nullValueMap);
+}
+
+constants  {
+  #C1 = "a"
+  #C2 = 1
+  #C3 = <core::String*, dynamic>{#C1:#C2)
+}
diff --git a/pkg/front_end/testcases/general/issue40982.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue40982.dart.weak.modular.expect
new file mode 100644
index 0000000..9eb651c
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue40982.dart.weak.modular.expect
@@ -0,0 +1,109 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue40982.dart:28:9: Error: A constant constructor can't call a non-constant super constructor.
+//   const E1();
+//         ^
+//
+// pkg/front_end/testcases/general/issue40982.dart:34:9: Error: A constant constructor can't call a non-constant super constructor.
+//   const E3();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object /*isMixinDeclaration*/  {
+  static const field core::int* value = #C1;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C1&A&B = self::A with self::B /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C1&A&B*
+    : super self::A::•()
+    ;
+}
+class C1 extends self::_C1&A&B /*hasConstConstructor*/  {
+  const constructor •() → self::C1*
+    : super self::_C1&A&B::•()
+    ;
+}
+class C2 = self::A with self::B /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::C2*
+    : super self::A::•()
+    ;
+}
+class C3 extends self::C2 /*hasConstConstructor*/  {
+  const constructor •() → self::C3*
+    : super self::C2::•()
+    ;
+}
+abstract class D extends core::Object /*isMixinDeclaration*/  {
+  field core::int* value = 1;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _E1&A&D = self::A with self::D /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_E1&A&D*
+    : super self::A::•()
+    ;
+  mixin-super-stub get value() → core::int*
+    return super.{self::D::value};
+  mixin-super-stub set value(core::int* value) → void
+    return super.{self::D::value} = value;
+}
+class E1 extends self::_E1&A&D /*hasConstConstructor*/  {
+  const constructor •() → self::E1*
+    : super self::_E1&A&D::•()
+    ;
+}
+class E2 = self::A with self::D {
+  synthetic constructor •() → self::E2*
+    : super self::A::•()
+    ;
+  mixin-super-stub get value() → core::int*
+    return super.{self::D::value};
+  mixin-super-stub set value(core::int* value) → void
+    return super.{self::D::value} = value;
+}
+class E3 extends self::E2 /*hasConstConstructor*/  {
+  const constructor •() → self::E3*
+    : super self::E2::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+}
diff --git a/pkg/front_end/testcases/general/issue41070.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue41070.dart.weak.modular.expect
new file mode 100644
index 0000000..d159c73
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue41070.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Base extends core::Object /*hasConstConstructor*/  {
+  final field core::int* x;
+  const constructor •(core::int* x) → self::Base*
+    : self::Base::x = x, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Application = self::Base with self::Mixin /*hasConstConstructor*/  {
+  const synthetic constructor •(core::int* x) → self::Application*
+    : super self::Base::•(x)
+    ;
+}
+static method main() → dynamic {
+  self::expect(42, #C2.{self::Base::x}{core::int*});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+  #C2 = self::Application {x:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue41070.dart:
+- Application. (from org-dartlang-testcase:///issue41070.dart:12:7)
+- Base. (from org-dartlang-testcase:///issue41070.dart:9:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue41210a.dart.weak.modular.expect
new file mode 100644
index 0000000..f270273
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue41210a.dart.weak.modular.expect
@@ -0,0 +1,201 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue41210a.dart:23:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
+// class C with A, B {} // error
+//       ^
+// pkg/front_end/testcases/general/issue41210a.dart:20:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
+//   String method(num i);
+//          ^
+// pkg/front_end/testcases/general/issue41210a.dart:23:7: Context: This is the overridden method ('method').
+// class C with A, B {} // error
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface*
+    : super core::Object::•()
+    ;
+  abstract method method(core::num* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2*
+    : super core::Object::•()
+    ;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class A extends core::Object implements self::Interface /*isMixinDeclaration*/  {
+  method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return s;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object implements self::Interface {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract method method(core::num* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&A&B = self::_C&Object&A with self::B /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A&B*
+    : super self::_C&Object&A::•()
+    ;
+  abstract mixin-stub method method(core::num* i) → core::String*; -> self::B::method
+}
+class C extends self::_C&Object&A&B {
+  synthetic constructor •() → self::C*
+    : super self::_C&Object&A&B::•()
+    ;
+}
+abstract class D extends core::Object implements self::Interface, self::Interface2 {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _E&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _E&Object&A&D = self::_E&Object&A with self::D /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E&Object&A&D*
+    : super self::_E&Object&A::•()
+    ;
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::_E&Object&A::method}(i, s: s);
+}
+class E extends self::_E&Object&A&D {
+  synthetic constructor •() → self::E*
+    : super self::_E&Object&A&D::•()
+    ;
+}
+abstract class F extends core::Object implements self::Interface {
+  synthetic constructor •() → self::F*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _G&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_G&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _G&Object&A&F = self::_G&Object&A with self::F /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_G&Object&A&F*
+    : super self::_G&Object&A::•()
+    ;
+}
+class G extends self::_G&Object&A&F {
+  synthetic constructor •() → self::G*
+    : super self::_G&Object&A&F::•()
+    ;
+}
+static method main() → dynamic {
+  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num*) →* core::String*});
+}
+
+constants  {
+  #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.modular.expect
new file mode 100644
index 0000000..daf4b8e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.modular.expect
@@ -0,0 +1,158 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface*
+    : super core::Object::•()
+    ;
+  abstract method method(core::num* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2*
+    : super core::Object::•()
+    ;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class A extends core::Object implements self::Interface /*isMixinDeclaration*/  {
+  method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return s;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object implements self::Interface {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract method method(core::num* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D extends core::Object implements self::Interface, self::Interface2 {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _E&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _E&Object&A&D = self::_E&Object&A with self::D /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E&Object&A&D*
+    : super self::_E&Object&A::•()
+    ;
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::_E&Object&A::method}(i, s: s);
+}
+class E extends self::_E&Object&A&D {
+  synthetic constructor •() → self::E*
+    : super self::_E&Object&A&D::•()
+    ;
+}
+abstract class F extends core::Object implements self::Interface {
+  synthetic constructor •() → self::F*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _G&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_G&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _G&Object&A&F = self::_G&Object&A with self::F /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_G&Object&A&F*
+    : super self::_G&Object&A::•()
+    ;
+}
+class G extends self::_G&Object&A&F {
+  synthetic constructor •() → self::G*
+    : super self::_G&Object&A&F::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.modular.expect
new file mode 100644
index 0000000..d12bb3b
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.modular.expect
@@ -0,0 +1,111 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue41210b/issue41210.dart:9:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
+// class C with A, B {} // error
+//       ^
+// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:20:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
+//   String method(num i);
+//          ^
+// pkg/front_end/testcases/general/issue41210b/issue41210.dart:9:7: Context: This is the overridden method ('method').
+// class C with A, B {} // error
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+import "issue41210_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue41210_lib.dart";
+
+abstract class _C&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A&B*
+    : super self::_C&Object&A::•()
+    ;
+  abstract mixin-stub method method(core::num* i) → core::String*; -> iss::B::method
+}
+class C extends self::_C&Object&A&B {
+  synthetic constructor •() → self::C*
+    : super self::_C&Object&A&B::•()
+    ;
+}
+abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E&Object&A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(i, s: s);
+}
+abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E&Object&A&D*
+    : super self::_E&Object&A::•()
+    ;
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::_E&Object&A::method}(i, s: s);
+}
+class E extends self::_E&Object&A&D {
+  synthetic constructor •() → self::E*
+    : super self::_E&Object&A&D::•()
+    ;
+}
+abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_G&Object&A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(i, s: s);
+}
+abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_G&Object&A&F*
+    : super self::_G&Object&A::•()
+    ;
+}
+class G extends self::_G&Object&A&F {
+  synthetic constructor •() → self::G*
+    : super self::_G&Object&A&F::•()
+    ;
+}
+static method main() → dynamic {
+  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num*) →* core::String*});
+}
+
+constants  {
+  #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.modular.expect
new file mode 100644
index 0000000..038d724
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.modular.expect
@@ -0,0 +1,209 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart:7:7: Error: Applying the mixin 'B' to 'Object with A' introduces an erroneous override of 'method'.
+// class C with A, B {} // error
+//       ^
+// pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart:20:10: Context: The method 'B.method' has fewer named arguments than those of overridden method 'Object with A.method'.
+//   String method(num i);
+//          ^
+// pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart:7:7: Context: This is the overridden method ('method').
+// class C with A, B {} // error
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+import "issue41210_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue41210_lib.dart";
+
+abstract class _C&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A&B*
+    : super self::_C&Object&A::•()
+    ;
+  abstract mixin-stub method method(core::num* i) → core::String*; -> iss::B::method
+}
+class C extends self::_C&Object&A&B {
+  synthetic constructor •() → self::C*
+    : super self::_C&Object&A&B::•()
+    ;
+}
+abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E&Object&A&D*
+    : super self::_E&Object&A::•()
+    ;
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::_E&Object&A::method}(i, s: s);
+}
+class E extends self::_E&Object&A&D {
+  synthetic constructor •() → self::E*
+    : super self::_E&Object&A&D::•()
+    ;
+}
+abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_G&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_G&Object&A&F*
+    : super self::_G&Object&A::•()
+    ;
+}
+class G extends self::_G&Object&A&F {
+  synthetic constructor •() → self::G*
+    : super self::_G&Object&A&F::•()
+    ;
+}
+static method main() → dynamic {
+  core::print(new self::C::•().{self::_C&Object&A&B::method}(0){(core::num*) →* core::String*});
+}
+
+library;
+import self as iss;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → iss::Interface*
+    : super core::Object::•()
+    ;
+  abstract method method(core::num* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Interface2 extends core::Object {
+  synthetic constructor •() → iss::Interface2*
+    : super core::Object::•()
+    ;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class A extends core::Object implements iss::Interface /*isMixinDeclaration*/  {
+  method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return s;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object implements iss::Interface {
+  synthetic constructor •() → iss::B*
+    : super core::Object::•()
+    ;
+  abstract method method(core::num* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
+  synthetic constructor •() → iss::D*
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class F extends core::Object implements iss::Interface {
+  synthetic constructor •() → iss::F*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+constants  {
+  #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.modular.expect
new file mode 100644
index 0000000..20cd047
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "issue41210_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue41210_lib.dart";
+
+abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E&Object&A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(i, s: s);
+}
+abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E&Object&A&D*
+    : super self::_E&Object&A::•()
+    ;
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::_E&Object&A::method}(i, s: s);
+}
+class E extends self::_E&Object&A&D {
+  synthetic constructor •() → self::E*
+    : super self::_E&Object&A&D::•()
+    ;
+}
+abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_G&Object&A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(i, s: s);
+}
+abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_G&Object&A&F*
+    : super self::_G&Object&A::•()
+    ;
+}
+class G extends self::_G&Object&A&F {
+  synthetic constructor •() → self::G*
+    : super self::_G&Object&A&F::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.modular.expect
new file mode 100644
index 0000000..cf99014
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.modular.expect
@@ -0,0 +1,166 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "issue41210_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue41210_lib.dart";
+
+abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _E&Object&A&D = self::_E&Object&A with iss::D /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E&Object&A&D*
+    : super self::_E&Object&A::•()
+    ;
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::_E&Object&A::method}(i, s: s);
+}
+class E extends self::_E&Object&A&D {
+  synthetic constructor •() → self::E*
+    : super self::_E&Object&A&D::•()
+    ;
+}
+abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_G&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_G&Object&A&F*
+    : super self::_G&Object&A::•()
+    ;
+}
+class G extends self::_G&Object&A&F {
+  synthetic constructor •() → self::G*
+    : super self::_G&Object&A&F::•()
+    ;
+}
+static method main() → dynamic {}
+
+library;
+import self as iss;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → iss::Interface*
+    : super core::Object::•()
+    ;
+  abstract method method(core::num* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Interface2 extends core::Object {
+  synthetic constructor •() → iss::Interface2*
+    : super core::Object::•()
+    ;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class A extends core::Object implements iss::Interface /*isMixinDeclaration*/  {
+  method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return s;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object implements iss::Interface {
+  synthetic constructor •() → iss::B*
+    : super core::Object::•()
+    ;
+  abstract method method(core::num* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
+  synthetic constructor •() → iss::D*
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class F extends core::Object implements iss::Interface {
+  synthetic constructor •() → iss::F*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+constants  {
+  #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/general/issue41252.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue41252.dart.weak.modular.expect
new file mode 100644
index 0000000..6d313f3
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue41252.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue41252.dart:7:20: Error: 'X' is already declared in this scope.
+//   static final int X = 0;
+//                    ^
+// pkg/front_end/testcases/general/issue41252.dart:6:20: Context: Previous declaration of 'X'.
+//   static final int X = 0;
+//                    ^
+//
+// pkg/front_end/testcases/general/issue41252.dart:9:26: Error: Can't use 'X' because it is declared more than once.
+//   static final int foo = X + 1;
+//                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field core::int X = null;
+  static final field core::int foo = invalid-expression "pkg/front_end/testcases/general/issue41252.dart:9:26: Error: Can't use 'X' because it is declared more than once.
+  static final int foo = X + 1;
+                         ^"{<invalid>}.+(1);
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue42435.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue42435.dart.weak.modular.expect
new file mode 100644
index 0000000..3dd8dc5
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue42435.dart.weak.modular.expect
@@ -0,0 +1,190 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue42435.dart:7:22: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+// typedef F = Function<Y extends A>();
+//                      ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue42435.dart:10:14: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+//   B(Function<Z extends A>() a);
+//              ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue42435.dart:11:26: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+//   factory B.foo(Function<Z extends A>() a) => new B(a);
+//                          ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue42435.dart:12:17: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+//   foo2(Function<Z extends A>() a) {}
+//                 ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue42435.dart:13:12: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+//   Function<Z extends A>() foo3() => throw 42;
+//            ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue42435.dart:14:12: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+//   Function<Z extends A>() get foo4 => throw 42;
+//            ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue42435.dart:16:12: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+//   Function<Z extends A>() foo6 = (() => throw 42)();
+//            ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue42435.dart:15:26: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+//   void set foo5(Function<Z extends A>() a) {}
+//                          ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue42435.dart:19:15: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+// bar2(Function<Z extends A>() a) {}
+//               ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue42435.dart:20:10: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+// Function<Z extends A>() bar3() => throw 42;
+//          ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue42435.dart:21:10: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+// Function<Z extends A>() get bar4 => throw 42;
+//          ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue42435.dart:23:10: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+// Function<Z extends A>() bar6 = (() => throw 42)();
+//          ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue42435.dart:26:17: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+//   baz2(Function<Z extends A>() a) {}
+//                 ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue42435.dart:27:12: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+//   Function<Z extends A>() baz3() => throw 42;
+//            ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue42435.dart:28:12: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+//   Function<Z extends A>() get baz4 => throw 42;
+//            ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue42435.dart:29:26: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+//   void set baz5(Function<Z extends A>() a) {}
+//                          ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue42435.dart:22:24: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+// void set bar5(Function<Z extends A>() a) {}
+//                        ^
+// pkg/front_end/testcases/general/issue42435.dart:5:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+typedef F = <Y extends self::A<self::A<dynamic>> = dynamic>() → dynamic;
+class A<X extends self::A<self::A::X> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  field <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic foo6 = let final Never #t1 = (() → Never => throw 42)(){() → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  constructor •(<Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic a) → self::B
+    : super core::Object::•()
+    ;
+  static factory foo(<Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic a) → self::B
+    return new self::B::•(a);
+  method foo2(<Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic a) → dynamic {}
+  method foo3() → <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic
+    return throw 42;
+  get foo4() → <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic
+    return throw 42;
+  set foo5(<Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic a) → void {}
+}
+extension E on core::int {
+  method baz2 = self::E|baz2;
+  tearoff baz2 = self::E|get#baz2;
+  method baz3 = self::E|baz3;
+  tearoff baz3 = self::E|get#baz3;
+  get baz4 = self::E|get#baz4;
+  set baz5 = self::E|set#baz5;
+}
+static field <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic bar6 = let final Never #t2 = (() → Never => throw 42)(){() → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+static method bar2(<Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic a) → dynamic {}
+static method bar3() → <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic
+  return throw 42;
+static get bar4() → <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic
+  return throw 42;
+static set bar5(<Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic a) → void {}
+static method E|baz2(lowered final core::int #this, <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic a) → dynamic {}
+static method E|get#baz2(lowered final core::int #this) → (<Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic) → dynamic
+  return (<Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic a) → dynamic => self::E|baz2(#this, a);
+static method E|baz3(lowered final core::int #this) → <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic
+  return throw 42;
+static method E|get#baz3(lowered final core::int #this) → () → <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic
+  return () → <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic => self::E|baz3(#this);
+static method E|get#baz4(lowered final core::int #this) → <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic
+  return throw 42;
+static method E|set#baz5(lowered final core::int #this, <Z extends self::A<self::A<dynamic>> = dynamic>() → dynamic a) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue42435_2.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue42435_2.dart.weak.modular.expect
new file mode 100644
index 0000000..aa9fc93
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue42435_2.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue42435_2.dart:3:27: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+// typedef AAlias = Function<X extends A>();
+//                           ^
+// pkg/front_end/testcases/general/issue42435_2.dart:1:9: Context: Bound of this variable references variable 'X' from the same declaration.
+// class A<X extends A<X>> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef AAlias = <X extends self::A<self::A<dynamic>> = dynamic>() → dynamic;
+class A<X extends self::A<self::A::X> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue42610.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue42610.dart.weak.modular.expect
new file mode 100644
index 0000000..44db974
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue42610.dart.weak.modular.expect
@@ -0,0 +1,56 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue42610.dart:6:4: Error: 'final' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   #final;
+//    ^^^^^
+//
+// pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
+// Try adding an initializer ('= expression') to the declaration.
+//   final x;
+//         ^
+//
+// pkg/front_end/testcases/general/issue42610.dart:8:9: Error: The const variable 'y' must be initialized.
+// Try adding an initializer ('= expression') to the declaration.
+//   const y;
+//         ^
+//
+// pkg/front_end/testcases/general/issue42610.dart:9:13: Error: The final variable 'z' must be initialized.
+// Try adding an initializer ('= expression') to the declaration.
+//   final int z;
+//             ^
+//
+// pkg/front_end/testcases/general/issue42610.dart:10:13: Error: The const variable 'w' must be initialized.
+// Try adding an initializer ('= expression') to the declaration.
+//   const int w;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  #C1;
+  final invalid-type x = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  final x;
+        ^";
+  const invalid-type y = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:8:9: Error: The const variable 'y' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  const y;
+        ^";
+  final core::int* z = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:9:13: Error: The final variable 'z' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  final int z;
+            ^";
+  const core::int* w = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:10:13: Error: The const variable 'w' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+  const int w;
+            ^";
+}
+static method main() → void {}
+
+constants  {
+  #C1 = #final
+}
diff --git a/pkg/front_end/testcases/general/issue42615.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue42615.dart.weak.modular.expect
new file mode 100644
index 0000000..08aafe4
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue42615.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+class Class<T extends core::Object* = dynamic> extends core::Object {
+  constructor •({() →* FutureOr<core::List<self::Class::T*>*>* a = #C1}) → self::Class<self::Class::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method method() → dynamic
+  return null;
+static method main() → dynamic {
+  new self::Class::•<dynamic>(a: () → FutureOr<core::List<dynamic>*>* async => self::method() as{TypeError} FutureOr<core::List<dynamic>*>*);
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/issue42694.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue42694.dart.weak.modular.expect
new file mode 100644
index 0000000..f8b3fdc
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue42694.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract set setter(core::int* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object implements self::A {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get setter() → core::int*
+    return throw "";
+  set setter(core::int* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue42997.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue42997.dart.weak.modular.expect
new file mode 100644
index 0000000..b11e219
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue42997.dart.weak.modular.expect
@@ -0,0 +1,87 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue42997.dart:9:16: Error: Expected a function body or '=>'.
+// Try adding {}.
+// PropertyState();
+//                ^
+//
+// pkg/front_end/testcases/general/issue42997.dart:10:7: Error: 'PropertyState' is already declared in this scope.
+// class PropertyState<I, O> {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue42997.dart:9:1: Context: Previous declaration of 'PropertyState'.
+// PropertyState();
+// ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue42997.dart:12:10: Error: Can't use 'PropertyState' because it is declared more than once.
+//     for (PropertyState<Object, Object>> state in _states) ;
+//          ^
+//
+// pkg/front_end/testcases/general/issue42997.dart:12:24: Error: Expected ';' after this.
+//     for (PropertyState<Object, Object>> state in _states) ;
+//                        ^^^^^^
+//
+// pkg/front_end/testcases/general/issue42997.dart:12:30: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     for (PropertyState<Object, Object>> state in _states) ;
+//                              ^
+//
+// pkg/front_end/testcases/general/issue42997.dart:12:47: Error: Unexpected token 'in'.
+//     for (PropertyState<Object, Object>> state in _states) ;
+//                                               ^^
+//
+// pkg/front_end/testcases/general/issue42997.dart:12:41: Error: The getter 'state' isn't defined for the class 'PropertyState#1<I, O>'.
+//  - 'PropertyState#1' is from 'pkg/front_end/testcases/general/issue42997.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'state'.
+//     for (PropertyState<Object, Object>> state in _states) ;
+//                                         ^^^^^
+//
+// pkg/front_end/testcases/general/issue42997.dart:12:38: Error: The operator '>>' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '>>' operator.
+//     for (PropertyState<Object, Object>> state in _states) ;
+//                                      ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class PropertyState#1<I extends core::Object* = dynamic, O extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::PropertyState#1<self::PropertyState#1::I*, self::PropertyState#1::O*>*
+    : super core::Object::•()
+    ;
+  method dispose() → void {
+    for (final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:10: Error: Can't use 'PropertyState' because it is declared more than once.
+    for (PropertyState<Object, Object>> state in _states) ;
+         ^"{<invalid>}.<(#C1); invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:30: Error: This couldn't be parsed.
+    for (PropertyState<Object, Object>> state in _states) ;
+                             ^"; invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:30: Error: This couldn't be parsed.
+    for (PropertyState<Object, Object>> state in _states) ;
+                             ^", invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:38: Error: The operator '>>' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '>>' operator.
+    for (PropertyState<Object, Object>> state in _states) ;
+                                     ^^" in #C1{<unresolved>}.>>(invalid-expression "pkg/front_end/testcases/general/issue42997.dart:12:41: Error: The getter 'state' isn't defined for the class 'PropertyState#1<I, O>'.
+ - 'PropertyState#1' is from 'pkg/front_end/testcases/general/issue42997.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'state'.
+    for (PropertyState<Object, Object>> state in _states) ;
+                                        ^^^^^" in this{<unresolved>}.state))
+      ;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+static abstract method PropertyState() → dynamic;
+
+constants  {
+  #C1 = TypeLiteralConstant(core::Object*)
+}
diff --git a/pkg/front_end/testcases/general/issue43290.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue43290.dart.weak.modular.expect
new file mode 100644
index 0000000..436e5dd
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue43290.dart.weak.modular.expect
@@ -0,0 +1,82 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue43290.dart:15:25: Error: Not a constant expression.
+//     const Class(length: length);
+//                         ^^^^^^
+//
+// pkg/front_end/testcases/general/issue43290.dart:23:15: Error: Not a constant expression.
+//     const a = length;
+//               ^^^^^^
+//
+// pkg/front_end/testcases/general/issue43290.dart:11:11: Error: Constant evaluation error:
+//     const Class(length: this.length);
+//           ^
+// pkg/front_end/testcases/general/issue43290.dart:11:30: Context: Not a constant expression.
+//     const Class(length: this.length);
+//                              ^
+//
+// pkg/front_end/testcases/general/issue43290.dart:15:11: Error: Constant evaluation error:
+//     const Class(length: length);
+//           ^
+// pkg/front_end/testcases/general/issue43290.dart:15:25: Context: Not a constant expression.
+//     const Class(length: length);
+//                         ^
+//
+// pkg/front_end/testcases/general/issue43290.dart:19:20: Error: Constant evaluation error:
+//     const a = this.length;
+//                    ^
+// pkg/front_end/testcases/general/issue43290.dart:19:20: Context: Not a constant expression.
+//     const a = this.length;
+//                    ^
+// pkg/front_end/testcases/general/issue43290.dart:19:11: Context: While analyzing:
+//     const a = this.length;
+//           ^
+//
+// pkg/front_end/testcases/general/issue43290.dart:23:15: Error: Constant evaluation error:
+//     const a = length;
+//               ^
+// pkg/front_end/testcases/general/issue43290.dart:23:15: Context: Not a constant expression.
+//     const a = length;
+//               ^
+// pkg/front_end/testcases/general/issue43290.dart:23:11: Context: While analyzing:
+//     const a = length;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object /*hasConstConstructor*/  {
+  final field core::int* length;
+  const constructor •({core::int* length = #C1}) → self::Class*
+    : self::Class::length = length, super core::Object::•()
+    ;
+  method method1a() → dynamic {
+    invalid-expression "Not a constant expression.";
+  }
+  method method1b() → dynamic {
+    invalid-expression "Not a constant expression.";
+  }
+  method method2a() → dynamic {
+    const core::int* a = invalid-expression "Not a constant expression.";
+  }
+  method method2b() → dynamic {
+    const core::int* a = invalid-expression "Not a constant expression.";
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect
new file mode 100644
index 0000000..b4cfb49
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Expected a class member, but got 'this'.
+//         this.y = 2;
+//         ^^^^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:13: Error: Expected a class member, but got '.'.
+//         this.y = 2;
+//             ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:14: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+//         this.y = 2;
+//              ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:14: Error: 'y' is already declared in this scope.
+//         this.y = 2;
+//              ^
+// pkg/front_end/testcases/general/issue43363.dart:7:13: Context: Previous declaration of 'y'.
+//   final int y;
+//             ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
+//         this.x = 1;
+//                ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
+//               this.y = 6;
+//                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::Object {
+  final field core::int* x;
+  final field core::int* y = null;
+  constructor •() → self::E*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
+        this.x = 1;
+               ^", this self::E::named()
+    ;
+  constructor named() → self::E*
+    : self::E::x = 5, final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
+              this.y = 6;
+                   ^"
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue43721.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue43721.dart.weak.modular.expect
new file mode 100644
index 0000000..4ca7943
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue43721.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue43721.dart:18:3: Error: Inferred type argument 'FutureOr<num>' doesn't conform to the bound 'FutureOr<int>' of the type variable 'T' on 'error'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   error(z); // Error.
+//   ^
+// pkg/front_end/testcases/general/issue43721.dart:10:7: Context: This is the type variable whose bound isn't conformed to.
+// error<T extends FutureOr<int>>(T t) {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method ok<T extends FutureOr<core::num*>*>(self::ok::T* t) → dynamic {}
+static method error<T extends FutureOr<core::int*>*>(self::error::T* t) → dynamic {}
+static method bar(core::bool* condition) → dynamic {
+  FutureOr<core::int*>* x = null;
+  core::num* n = 1;
+  FutureOr<core::num*>* z = condition ?{FutureOr<core::num*>*} x : n;
+  self::ok<FutureOr<core::num*>*>(z);
+  self::error<FutureOr<core::num*>*>(z);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue43975.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue43975.dart.weak.modular.expect
new file mode 100644
index 0000000..a1da936
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue43975.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue43975.dart:5:9: Error: The typedef 'F' has a reference to itself.
+// typedef F = void Function<X extends F>() Function();
+//         ^
+//
+import self as self;
+
+typedef F = invalid-type;
+static method main() → void {}
diff --git a/pkg/front_end/testcases/general/issue44007.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue44007.dart.weak.modular.expect
new file mode 100644
index 0000000..efd3a92
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue44007.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue44007.dart:16:35: Error: Expected ',' before this.
+//   print(DateTime.parse(2019-01-17 00:00:00.000));
+//                                   ^^
+//
+// pkg/front_end/testcases/general/issue44007.dart:16:35: Error: Expected an identifier, but got '00'.
+// Try inserting an identifier before '00'.
+//   print(DateTime.parse(2019-01-17 00:00:00.000));
+//                                   ^^
+//
+// pkg/front_end/testcases/general/issue44007.dart:16:40: Error: Expected ')' before this.
+//   print(DateTime.parse(2019-01-17 00:00:00.000));
+//                                        ^
+//
+// pkg/front_end/testcases/general/issue44007.dart:16:18: Error: Expected an identifier, but got 'parse'.
+// Try inserting an identifier before 'parse'.
+//   print(DateTime.parse(2019-01-17 00:00:00.000));
+//                  ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  core::List<core::DateTime> list = <core::DateTime>[new core::DateTime::now().{core::DateTime::add}(new core::Duration::•(days: 3)){(core::Duration) → core::DateTime}, new core::DateTime::now().{core::DateTime::add}(new core::Duration::•(days: 2)){(core::Duration) → core::DateTime}, new core::DateTime::now(), new core::DateTime::now().{core::DateTime::subtract}(new core::Duration::•(days: 1)){(core::Duration) → core::DateTime}];
+  list.{core::List::sort}((core::DateTime a, core::DateTime b) → core::int => a.{core::DateTime::compareTo}(b){(core::DateTime) → core::int}){([(core::DateTime, core::DateTime) →? core::int]) → void};
+  core::print(list);
+  core::print(invalid-expression "pkg/front_end/testcases/general/issue44007.dart:16:18: Error: Expected an identifier, but got 'parse'.
+Try inserting an identifier before 'parse'.
+  print(DateTime.parse(2019-01-17 00:00:00.000));
+                 ^^^^^");
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue44347.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue44347.dart.weak.modular.expect
new file mode 100644
index 0000000..0fce86b
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue44347.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue44347.dart:8:6: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   Set<int>.();
+//      ^
+//
+// pkg/front_end/testcases/general/issue44347.dart:8:13: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+//   Set<int>.();
+//             ^
+//
+// pkg/front_end/testcases/general/issue44347.dart:8:12: Error: Expected an identifier, but got '('.
+// Try inserting an identifier before '('.
+//   Set<int>.();
+//            ^
+//
+import self as self;
+
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/issue44347.dart:8:12: Error: Expected an identifier, but got '('.
+Try inserting an identifier before '('.
+  Set<int>.();
+           ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue44476.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue44476.dart.weak.modular.expect
new file mode 100644
index 0000000..645587c
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue44476.dart.weak.modular.expect
@@ -0,0 +1,88 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue44476.dart:7:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// foo(A<num> x) {
+//            ^
+// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue44476.dart:9:19: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//     barbar(A<num> yy) => null;
+//                   ^
+// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue44476.dart:8:14: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   bar(A<num> y) {
+//              ^
+// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue44476.dart:12:26: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//     var bazbaz = (A<num> zz) => null;
+//                          ^
+// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue44476.dart:12:9: Error: Inferred type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     var bazbaz = (A<num> zz) => null;
+//         ^
+// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue44476.dart:11:21: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   var baz = (A<num> z) {
+//                     ^
+// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue44476.dart:11:7: Error: Inferred type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   var baz = (A<num> z) {
+//       ^
+// pkg/front_end/testcases/general/issue44476.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::int*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo(self::A<core::num*>* x) → dynamic {
+  function bar(self::A<core::num*>* y) → Null {
+    function barbar(self::A<core::num*>* yy) → Null
+      return null;
+  }
+  (self::A<core::num*>*) →* Null baz = (self::A<core::num*>* z) → Null {
+    (self::A<core::num*>*) →* Null bazbaz = (self::A<core::num*>* zz) → Null => null;
+  };
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue44654.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue44654.dart.weak.modular.expect
new file mode 100644
index 0000000..0832149
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue44654.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method test2() → void {
+  core::String* string = null;
+  if(let final core::String* #t1 = string in #t1 == null ?{core::bool*} null : #t1.{core::String::isNotEmpty}{core::bool*})
+    ;
+}
+static method main() → void {
+  try {
+    self::test2();
+  }
+  on dynamic catch(final dynamic e, final core::StackTrace* s) {
+    self::checkFirstLineHasPosition(s);
+  }
+}
+static method checkFirstLineHasPosition(core::StackTrace* stackTrace) → void {
+  core::String* firstLine = "${stackTrace}".{core::String::split}("
+"){(core::Pattern*) →* core::List<core::String*>*}.{core::Iterable::firstWhere}((core::String* line) → core::bool* => line.{core::String::startsWith}("#0"){(core::Pattern*, [core::int*]) →* core::bool*}){((core::String*) →* core::bool*, {orElse: () →* core::String*}) →* core::String*};
+  core::int* lastParen = firstLine.{core::String::lastIndexOf}(")"){(core::Pattern*, [core::int*]) →* core::int*};
+  if(!(lastParen =={core::num::==}{(core::Object*) →* core::bool*} 1.{core::int::unary-}(){() →* core::int*})) {
+    core::int* secondColon = firstLine.{core::String::lastIndexOf}(":", lastParen.{core::num::-}(1){(core::num*) →* core::int*}){(core::Pattern*, [core::int*]) →* core::int*};
+    if(!(secondColon =={core::num::==}{(core::Object*) →* core::bool*} 1.{core::int::unary-}(){() →* core::int*})) {
+      core::int* firstColon = firstLine.{core::String::lastIndexOf}(":", secondColon.{core::num::-}(1){(core::num*) →* core::int*}){(core::Pattern*, [core::int*]) →* core::int*};
+      core::String* lineText = firstLine.{core::String::substring}(firstColon.{core::num::+}(1){(core::num*) →* core::int*}, secondColon){(core::int*, [core::int*]) →* core::String*};
+      core::String* posText = firstLine.{core::String::substring}(secondColon.{core::num::+}(1){(core::num*) →* core::int*}, lastParen){(core::int*, [core::int*]) →* core::String*};
+      core::int* line = core::int::tryParse(lineText);
+      core::int* pos = core::int::tryParse(posText);
+      if(!(line == null) && !(pos == null)) {
+        core::print("Found position ${line}:${pos}");
+        return;
+      }
+    }
+  }
+  throw "No position found in \"${firstLine}\"";
+}
diff --git a/pkg/front_end/testcases/general/issue44733.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue44733.dart.weak.modular.expect
new file mode 100644
index 0000000..0b3bd97
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue44733.dart.weak.modular.expect
@@ -0,0 +1,79 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue44733.dart:22:3: Error: Type 'F' not found.
+//   F get y => super.y as F;
+//   ^
+//
+// pkg/front_end/testcases/general/issue44733.dart:5:16: Error: 'A' doesn't implement 'D' so it can't be used with 'C'.
+//  - 'A' is from 'pkg/front_end/testcases/general/issue44733.dart'.
+//  - 'D' is from 'pkg/front_end/testcases/general/issue44733.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/general/issue44733.dart'.
+// abstract class B extends A with C {}
+//                ^
+//
+// pkg/front_end/testcases/general/issue44733.dart:9:12: Error: Expected identifier, but got 'super'.
+// B get x => super.x;
+//            ^^^^^
+//
+// pkg/front_end/testcases/general/issue44733.dart:18:9: Error: A non-null value must be returned since the return type 'E' doesn't allow null.
+//  - 'E' is from 'pkg/front_end/testcases/general/issue44733.dart'.
+//   E get y {}
+//         ^
+//
+// pkg/front_end/testcases/general/issue44733.dart:22:25: Error: 'F' isn't a type.
+//   F get y => super.y as F;
+//                         ^
+//
+// pkg/front_end/testcases/general/issue44733.dart:22:20: Error: Superclass has no getter named 'y'.
+//   F get y => super.y as F;
+//                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class _B&A&C = self::A with self::C /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B&A&C
+    : super self::A::•()
+    ;
+}
+abstract class B extends self::_B&A&C {
+  synthetic constructor •() → self::B
+    : super self::_B&A&C::•()
+    ;
+}
+abstract class C extends self::D /*isMixinDeclaration*/  {
+}
+abstract class E extends core::Object {
+  synthetic constructor •() → self::E
+    : super core::Object::•()
+    ;
+}
+abstract class D extends core::Object {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+  get y() → self::E {
+    return invalid-expression "pkg/front_end/testcases/general/issue44733.dart:18:9: Error: A non-null value must be returned since the return type 'E' doesn't allow null.
+ - 'E' is from 'pkg/front_end/testcases/general/issue44733.dart'.
+  E get y {}
+        ^" in null;
+  }
+}
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  get y() → invalid-type
+    return super.y as{ForNonNullableByDefault} invalid-type;
+}
+static get x() → self::B
+  return invalid-expression "pkg/front_end/testcases/general/issue44733.dart:9:12: Error: Expected identifier, but got 'super'.
+B get x => super.x;
+           ^^^^^"{<invalid>}.x;
+static method f() → void {
+  switch(self::x.{self::A::y}{invalid-type}{<invalid>}.z) {
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue45003/main.dart.weak.modular.expect
new file mode 100644
index 0000000..d657617
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "foo_lib.dart" as foo;
+
+import "org-dartlang-testcase:///foo_lib.dart";
+
+static const field core::Set<foo::Foo> foo = #C2;
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as foo;
+import "dart:core" as core;
+import "bar_lib.dart" as bar;
+additionalExports = (bar::Bar)
+
+import "org-dartlang-testcase:///bar_lib.dart";
+export "org-dartlang-testcase:///bar_lib.dart";
+
+abstract class Foo extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
+  const constructor •() → foo::Foo
+    : super core::Object::•()
+    ;
+  static factory bar() → foo::Foo
+    return new bar::Bar::•<dynamic>();
+}
+
+library /*isNonNullableByDefault*/;
+import self as bar;
+import "dart:core" as core;
+import "foo_lib.dart" as foo;
+
+import "org-dartlang-testcase:///foo_lib.dart";
+
+class Bar<T extends core::Object? = dynamic> extends foo::Foo /*hasConstConstructor*/  {
+  const constructor •() → bar::Bar<bar::Bar::T%>
+    : super foo::Foo::•()
+    ;
+}
+
+constants  {
+  #C1 = bar::Bar<dynamic> {}
+  #C2 = <foo::Foo*>{#C1}
+  #C3 = constructor-tearoff foo::Foo::bar
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main.dart:
+- Bar. (from org-dartlang-testcase:///bar_lib.dart:8:9)
+- Foo. (from org-dartlang-testcase:///foo_lib.dart:10:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/issue45003_2.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue45003_2.dart.weak.modular.expect
new file mode 100644
index 0000000..9e86d1c
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45003_2.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object /*hasConstConstructor*/  {
+  const constructor •({dynamic x = #C1}) → self::C
+    : super core::Object::•()
+    ;
+}
+class B<X extends core::Object? = dynamic> extends self::A /*hasConstConstructor*/  {
+  const constructor •() → self::B<self::B::X%>
+    : super self::A::•()
+    ;
+}
+abstract class A extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  const constructor •() → self::A
+    : super core::Object::•()
+    ;
+  static factory foo() → self::A
+    return new self::B::•<dynamic>();
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::B<dynamic> {}
+  #C2 = constructor-tearoff self::A::foo
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue45003_2.dart:
+- B. (from org-dartlang-testcase:///issue45003_2.dart:10:9)
+- A. (from org-dartlang-testcase:///issue45003_2.dart:14:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.modular.expect
new file mode 100644
index 0000000..d517647
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library;
+import self as self;
+
+import "dart:test";
+
+static method main() → dynamic {}
+
+library;
+import self as self2;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+import "dart:_internal";
+
+class _ArraySize<T extends core::Object* = dynamic> extends core::Object implements self2::Array<self2::_ArraySize::T*> /*hasConstConstructor*/  { // from org-dartlang-testcase:///patch_lib.dart
+  final field core::int* foo;
+  const constructor •(core::int* foo) → self2::_ArraySize<self2::_ArraySize::T*>*
+    : self2::_ArraySize::foo = foo, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+@#C1
+@#C4
+class Array<T extends core::Object* = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C5];
+  @#C1
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
+    return new self2::_ArraySize::•<self2::Array::•::T*>(foo);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+constants  {
+  #C1 = _in::_Patch {}
+  #C2 = "vm:entry-point"
+  #C3 = null
+  #C4 = core::pragma {name:#C2, options:#C3}
+  #C5 = constructor-tearoff self2::Array::•
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///origin_lib.dart:
+- pragma._ (from org-dartlang-sdk:///sdk/lib/core/annotations.dart:188:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/issue45204.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue45204.dart.weak.modular.expect
new file mode 100644
index 0000000..29d551e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45204.dart.weak.modular.expect
@@ -0,0 +1,213 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue45204.dart:29:8: Error: Too few positional arguments: 1 required, 0 given.
+//   S(3).test();
+//        ^
+// pkg/front_end/testcases/general/issue45204.dart:6:8: Context: Found this candidate, but the arguments don't match.
+//   void test(int x) {}
+//        ^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:30:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   S(4).test(5, 6);
+//        ^
+// pkg/front_end/testcases/general/issue45204.dart:6:8: Context: Found this candidate, but the arguments don't match.
+//   void test(int x) {}
+//        ^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:31:8: Error: Expected 0 type arguments.
+//   S(5).test<int>(6);
+//        ^
+// pkg/front_end/testcases/general/issue45204.dart:6:8: Context: Found this candidate, but the arguments don't match.
+//   void test(int x) {}
+//        ^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:33:9: Error: Too few positional arguments: 1 required, 0 given.
+//   S2(3).test2();
+//         ^
+// pkg/front_end/testcases/general/issue45204.dart:10:8: Context: Found this candidate, but the arguments don't match.
+//   void test2(int x) {}
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:34:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   S2(4).test2(5, 6);
+//         ^
+// pkg/front_end/testcases/general/issue45204.dart:10:8: Context: Found this candidate, but the arguments don't match.
+//   void test2(int x) {}
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:35:9: Error: Expected 1 type arguments.
+//   S2(5).test2<int>(6);
+//         ^
+// pkg/front_end/testcases/general/issue45204.dart:10:8: Context: Found this candidate, but the arguments don't match.
+//   void test2(int x) {}
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:37:9: Error: Too few positional arguments: 1 required, 0 given.
+//   S2(3).test3();
+//         ^
+// pkg/front_end/testcases/general/issue45204.dart:11:8: Context: Found this candidate, but the arguments don't match.
+//   void test3<Y>(Y y) {}
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:38:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   S2(4).test3(5, 6);
+//         ^
+// pkg/front_end/testcases/general/issue45204.dart:11:8: Context: Found this candidate, but the arguments don't match.
+//   void test3<Y>(Y y) {}
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:40:9: Error: Expected 2 type arguments.
+//   S2(6).test3<int, int>(7);
+//         ^
+// pkg/front_end/testcases/general/issue45204.dart:11:8: Context: Found this candidate, but the arguments don't match.
+//   void test3<Y>(Y y) {}
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:41:9: Error: Expected 2 type arguments.
+//   S2(7).test3<int, int, int>(8);
+//         ^
+// pkg/front_end/testcases/general/issue45204.dart:11:8: Context: Found this candidate, but the arguments don't match.
+//   void test3<Y>(Y y) {}
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue45204.dart:15:9: Error: Too few positional arguments: 1 required, 0 given.
+//   3.test();
+//         ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:16:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   4.test(5, 6);
+//         ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:17:5: Error: Expected 0 type arguments.
+//   5.test<int>(6);
+//     ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:19:10: Error: Too few positional arguments: 1 required, 0 given.
+//   3.test2();
+//          ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:20:10: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   4.test2(5, 6);
+//          ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:21:5: Error: Expected 0 type arguments.
+//   5.test2<int>(6);
+//     ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:23:10: Error: Too few positional arguments: 1 required, 0 given.
+//   3.test3();
+//          ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:24:10: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   4.test3(5, 6);
+//          ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:26:5: Error: Expected 1 type arguments.
+//   6.test3<int, int>(7);
+//     ^
+//
+// pkg/front_end/testcases/general/issue45204.dart:27:5: Error: Expected 1 type arguments.
+//   7.test3<int, int, int>(8);
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension S on core::int {
+  method test = self::S|test;
+  tearoff test = self::S|get#test;
+}
+extension S2<X extends core::Object? = dynamic> on core::int {
+  method test2 = self::S2|test2;
+  tearoff test2 = self::S2|get#test2;
+  method test3 = self::S2|test3;
+  tearoff test3 = self::S2|get#test3;
+}
+static method S|test(lowered final core::int #this, core::int x) → void {}
+static method S|get#test(lowered final core::int #this) → (core::int) → void
+  return (core::int x) → void => self::S|test(#this, x);
+static method S2|test2<X extends core::Object? = dynamic>(lowered final core::int #this, core::int x) → void {}
+static method S2|get#test2<X extends core::Object? = dynamic>(lowered final core::int #this) → (core::int) → void
+  return (core::int x) → void => self::S2|test2<self::S2|get#test2::X%>(#this, x);
+static method S2|test3<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(lowered final core::int #this, self::S2|test3::Y% y) → void {}
+static method S2|get#test3<X extends core::Object? = dynamic>(lowered final core::int #this) → <Y extends core::Object? = dynamic>(Y%) → void
+  return <Y extends core::Object? = dynamic>(Y% y) → void => self::S2|test3<self::S2|get#test3::X%, Y%>(#this, y);
+static method foo() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:15:9: Error: Too few positional arguments: 1 required, 0 given.
+  3.test();
+        ^" in self::S|test(3);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:16:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+  4.test(5, 6);
+        ^" in self::S|test(4, 5, 6);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:17:5: Error: Expected 0 type arguments.
+  5.test<int>(6);
+    ^" in self::S|test<core::int>(5, 6);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:19:10: Error: Too few positional arguments: 1 required, 0 given.
+  3.test2();
+         ^" in self::S2|test2<dynamic>(3);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:20:10: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+  4.test2(5, 6);
+         ^" in self::S2|test2<dynamic>(4, 5, 6);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:21:5: Error: Expected 0 type arguments.
+  5.test2<int>(6);
+    ^" in self::S2|test2<dynamic, core::int>(5, 6);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:23:10: Error: Too few positional arguments: 1 required, 0 given.
+  3.test3();
+         ^" in self::S2|test3<dynamic, dynamic>(3);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:24:10: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+  4.test3(5, 6);
+         ^" in self::S2|test3<dynamic, core::int>(4, 5, 6);
+  self::S2|test3<dynamic, core::int>(5, 6);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:26:5: Error: Expected 1 type arguments.
+  6.test3<int, int>(7);
+    ^" in self::S2|test3<dynamic, core::int, core::int>(6, 7);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:27:5: Error: Expected 1 type arguments.
+  7.test3<int, int, int>(8);
+    ^" in self::S2|test3<dynamic, core::int, core::int, core::int>(7, 8);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:29:8: Error: Too few positional arguments: 1 required, 0 given.
+  S(3).test();
+       ^";
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:30:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+  S(4).test(5, 6);
+       ^";
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:31:8: Error: Expected 0 type arguments.
+  S(5).test<int>(6);
+       ^";
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:33:9: Error: Too few positional arguments: 1 required, 0 given.
+  S2(3).test2();
+        ^";
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:34:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+  S2(4).test2(5, 6);
+        ^";
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:35:9: Error: Expected 1 type arguments.
+  S2(5).test2<int>(6);
+        ^";
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:37:9: Error: Too few positional arguments: 1 required, 0 given.
+  S2(3).test3();
+        ^";
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:38:9: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+  S2(4).test3(5, 6);
+        ^";
+  self::S2|test3<dynamic, core::int>(5, 6);
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:40:9: Error: Expected 2 type arguments.
+  S2(6).test3<int, int>(7);
+        ^";
+  invalid-expression "pkg/front_end/testcases/general/issue45204.dart:41:9: Error: Expected 2 type arguments.
+  S2(7).test3<int, int, int>(8);
+        ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue45330.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue45330.dart.weak.modular.expect
new file mode 100644
index 0000000..56fe32f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45330.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue45330.dart:12:31: Error: Type 'T' is a bound of itself via 'T'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//   genericMethod<void Function<T extends T>()>();
+//                               ^
+//
+// pkg/front_end/testcases/general/issue45330.dart:12:3: Error: A generic function type can't be used as a type argument.
+// Try using a non-generic function type.
+//   genericMethod<void Function<T extends T>()>();
+//   ^
+//
+// pkg/front_end/testcases/general/issue45330_lib.dart:37:31: Error: Type 'T' is a bound of itself via 'T'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//   genericMethod<void Function<T extends T>()>();
+//                               ^
+//
+// pkg/front_end/testcases/general/issue45330_lib.dart:37:3: Error: A generic function type can't be used as a type argument.
+// Try using a non-generic function type.
+//   genericMethod<void Function<T extends T>()>();
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+part issue45330_lib.dart;
+static method genericMethod<T extends core::Object? = dynamic>() → void {}
+static method testInMain() → dynamic {
+  self::genericMethod<<T extends invalid-type>() → void>();
+}
+static method main() → dynamic {}
+static method /* from org-dartlang-testcase:///issue45330_lib.dart */ testInPart() → dynamic {
+  self::genericMethod<<T extends invalid-type>() → void>();
+}
diff --git a/pkg/front_end/testcases/general/issue45490.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue45490.dart.weak.modular.expect
new file mode 100644
index 0000000..4ebc700
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45490.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue45490.dart:7:29: Error: Expected '>' after this.
+// class test<X extends A> = A<X extends A<X>>;
+//                             ^
+//
+// pkg/front_end/testcases/general/issue45490.dart:7:44: Error: Expected 'with' before this.
+// class test<X extends A> = A<X extends A<X>>;
+//                                            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue45598.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue45598.dart.weak.modular.expect
new file mode 100644
index 0000000..4463884
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45598.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method foo(<X extends Z* = dynamic, Y extends core::Object* = dynamic, Z extends core::Object* = dynamic>({m: core::Map<Y*, Z*>*}) →* dynamic bar, core::Map<core::String*, core::String*>* m) → dynamic {
+  bar<core::String*, core::String*, core::String*>(m: m){({m: core::Map<core::String*, core::String*>*}) →* dynamic};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue45598_2.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue45598_2.dart.weak.modular.expect
new file mode 100644
index 0000000..eff30fa
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45598_2.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method foo(core::Map<core::String*, core::String*>* m) → dynamic {
+  function bar<X extends Z* = dynamic, Y extends core::Object* = dynamic, Z extends core::Object* = dynamic>({core::Map<Y*, Z*>* m = #C1}) → void {}
+  bar<core::String*, core::String*, core::String*>(m: m){({m: core::Map<core::String*, core::String*>*}) →* void};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/issue45660.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue45660.dart.weak.modular.expect
new file mode 100644
index 0000000..5111de9
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45660.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue45660.dart:11:22: Error: Inferred type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   extendsNumReturnArg/*<String>*/("");
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field <T extends core::num* = dynamic>(T*) →* T* extendsNumReturnArg = <S extends core::num*>(S* s) → S* => s;
+static method functionInvocations() → dynamic {
+  self::extendsNumReturnArg<Null>(null){(Null) →* Null};
+  self::extendsNumReturnArg<core::String*>(""){(core::String*) →* core::String*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue45700.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/issue45700.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..a03c56f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45700.crash_dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue45700.crash_dart:5:7: Error: Can't use a function type as supertype.
+// mixin M on Function() {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/general/issue45834.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue45834.dart.weak.modular.expect
new file mode 100644
index 0000000..62ca870
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue45834.dart.weak.modular.expect
@@ -0,0 +1,211 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue45834.dart:7:10: Error: Type variables can't have generic function types in their bounds.
+// class A1<X extends Function<T>()> {
+//          ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:8:15: Error: Type variables can't have generic function types in their bounds.
+//   A1(Function<X extends Function<T>()>() f);
+//               ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:9:17: Error: Type variables can't have generic function types in their bounds.
+//   bar1(Function<X extends Function<T>()>() f) {}
+//                 ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:10:12: Error: Type variables can't have generic function types in their bounds.
+//   Function<X extends Function<T>()>() bar2() => throw 42;
+//            ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:11:12: Error: Type variables can't have generic function types in their bounds.
+//   Function<X extends Function<T>()>() get baz1 => throw 42;
+//            ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:13:12: Error: Type variables can't have generic function types in their bounds.
+//   Function<X extends Function<T>()>() quux1 = throw 42;
+//            ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:14:19: Error: Type variables can't have generic function types in their bounds.
+//   static Function<X extends Function<T>()>() quux2 = throw 42;
+//                   ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:12:26: Error: Type variables can't have generic function types in their bounds.
+//   void set qux1(Function<X extends Function<T>()>() value) {}
+//                          ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:17:10: Error: Type variables can't have generic function types in their bounds.
+// class A2<X extends void Function<Y extends Function<T>()>()> {}
+//          ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:17:34: Error: Type variables can't have generic function types in their bounds.
+// class A2<X extends void Function<Y extends Function<T>()>()> {}
+//                                  ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:22:15: Error: Type variables can't have generic function types in their bounds.
+// foo1(Function<X extends Function<T>()>() f) {}
+//               ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:24:10: Error: Type variables can't have generic function types in their bounds.
+// Function<X extends Function<T>()>() foo3() => throw 42;
+//          ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:26:10: Error: Type variables can't have generic function types in their bounds.
+// Function<X extends Function<T>()>() get corge1 => throw 42;
+//          ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:28:10: Error: Type variables can't have generic function types in their bounds.
+// Function<X extends Function<T>()>() quuz1 = throw 42;
+//          ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:30:28: Error: Type variables can't have generic function types in their bounds.
+// typedef F1 = void Function<X extends void Function<T>()>();
+//                            ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:32:12: Error: Type variables can't have generic function types in their bounds.
+// typedef F3<X extends Function<T>()> = Function();
+//            ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:33:12: Error: Type variables can't have generic function types in their bounds.
+// typedef F4<X extends Function<Y extends Function<T>()>()> = Function();
+//            ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:33:31: Error: Type variables can't have generic function types in their bounds.
+// typedef F4<X extends Function<Y extends Function<T>()>()> = Function();
+//                               ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:39:14: Error: Type variables can't have generic function types in their bounds.
+// extension E1<X extends Function<T>()> on B1 {
+//              ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:40:17: Error: Type variables can't have generic function types in their bounds.
+//   bar3(Function<X extends Function<T>()>() f) {}
+//                 ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:41:12: Error: Type variables can't have generic function types in their bounds.
+//   Function<X extends Function<T>()>() bar4() => throw 42;
+//            ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:42:12: Error: Type variables can't have generic function types in their bounds.
+//   Function<X extends Function<T>()>() get baz2 => throw 42;
+//            ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:44:19: Error: Type variables can't have generic function types in their bounds.
+//   static Function<X extends Function<T>()>() quux3 = throw 42;
+//                   ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:43:26: Error: Type variables can't have generic function types in their bounds.
+//   void set qux2(Function<X extends Function<T>()>() value) {}
+//                          ^
+//
+// pkg/front_end/testcases/general/issue45834.dart:27:27: Error: Type variables can't have generic function types in their bounds.
+// void set grault1(Function<X extends Function<T>()>() value) {}
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F1 = <X extends <T extends core::Object* = dynamic>() →* void = dynamic>() →* void;
+typedef F2 = <X extends (<T extends core::Object* = dynamic>() →* void) →* dynamic = dynamic>() →* void;
+typedef F3<unrelated X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic> = () →* dynamic;
+typedef F4<unrelated X extends <Y extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic = dynamic> = () →* dynamic;
+typedef F5<unrelated X extends (<Y extends (<T extends core::Object* = dynamic>() →* dynamic) →* dynamic = dynamic>() →* dynamic) →* dynamic> = () →* dynamic;
+class A1<X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic> extends core::Object {
+  field <X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic quux1 = throw 42;
+  static field <X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic quux2 = throw 42;
+  constructor •(<X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic f) → self::A1<self::A1::X*>*
+    : super core::Object::•()
+    ;
+  method bar1(<X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic f) → dynamic {}
+  method bar2() → <X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic
+    return throw 42;
+  get baz1() → <X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic
+    return throw 42;
+  set qux1(<X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A2<X extends <Y extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* void = dynamic> extends core::Object {
+  synthetic constructor •() → self::A2<self::A2::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A3<X extends (<Y extends (<T extends core::Object* = dynamic>() →* dynamic) →* dynamic = dynamic>() →* void) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::A3<self::A3::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B1 extends core::Object {
+  synthetic constructor •() → self::B1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension E1<X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic> on self::B1* {
+  method bar3 = self::E1|bar3;
+  tearoff bar3 = self::E1|get#bar3;
+  method bar4 = self::E1|bar4;
+  tearoff bar4 = self::E1|get#bar4;
+  get baz2 = self::E1|get#baz2;
+  static field quux3 = self::E1|quux3;
+  set qux2 = self::E1|set#qux2;
+}
+static field <X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic quuz1 = throw 42;
+static field <X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic E1|quux3 = throw 42;
+static method foo1(<X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic f) → dynamic {}
+static method foo2(<X extends (<T extends core::Object* = dynamic>() →* dynamic) →* dynamic = dynamic>() →* dynamic f) → dynamic {}
+static method foo3() → <X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic
+  return throw 42;
+static method foo4() → <X extends (<T extends core::Object* = dynamic>() →* dynamic) →* dynamic = dynamic>() →* dynamic
+  return throw 42;
+static get corge1() → <X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic
+  return throw 42;
+static set grault1(<X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic value) → void {}
+static method E1|bar3<X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>(lowered final self::B1* #this, <X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic f) → dynamic {}
+static method E1|get#bar3<X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>(lowered final self::B1* #this) → (<X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic) →* dynamic
+  return (<X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic f) → dynamic => self::E1|bar3<self::E1|get#bar3::X*>(#this, f);
+static method E1|bar4<X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>(lowered final self::B1* #this) → <X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic
+  return throw 42;
+static method E1|get#bar4<X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>(lowered final self::B1* #this) → () →* <X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic
+  return () → <X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic => self::E1|bar4<self::E1|get#bar4::X*>(#this);
+static method E1|get#baz2<X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>(lowered final self::B1* #this) → <X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic
+  return throw 42;
+static method E1|set#qux2<X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>(lowered final self::B1* #this, <X extends <T extends core::Object* = dynamic>() →* dynamic = dynamic>() →* dynamic value) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue46334.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue46334.dart.weak.modular.expect
new file mode 100644
index 0000000..e0ea5d7
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46334.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue46334.dart:6:11: Error: Cyclic definition of factory 'C'.
+//   factory C() = C;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •() → self::C
+    return invalid-expression "pkg/front_end/testcases/general/issue46334.dart:6:11: Error: Cyclic definition of factory 'C'.
+  factory C() = C;
+          ^";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/general/issue46389.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue46389.dart.weak.modular.expect
new file mode 100644
index 0000000..55be1b7
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46389.dart.weak.modular.expect
@@ -0,0 +1,73 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int boz = 0;
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo(core::int n) → core::num {
+    core::print(n.{core::Object::runtimeType}{core::Type});
+    return 1.1;
+  }
+  method bar({required core::int x = #C1}) → core::num {
+    core::print(x.{core::Object::runtimeType}{core::Type});
+    return 1.1;
+  }
+  set baz(core::int x) → void {
+    core::print(x.{core::Object::runtimeType}{core::Type});
+  }
+}
+abstract class B<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant-by-class self::B::X% x) → self::B::X%;
+  abstract method bar({required covariant-by-class self::B::X% x = #C1}) → self::B::X%;
+  abstract set baz(covariant-by-class self::B::X% x) → void;
+  abstract set boz(covariant-by-class self::B::X% x) → void;
+}
+abstract class _C&A&B = self::A with self::B<core::num> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C&A&B
+    : super self::A::•()
+    ;
+  forwarding-stub set boz(covariant-by-class core::num x) → void
+    return super.{self::A::boz} = x as core::int;
+  forwarding-stub method foo(covariant-by-class core::num x) → core::num
+    return super.{self::A::foo}(x as core::int);
+  forwarding-stub method bar({required covariant-by-class core::num x = #C1}) → core::num
+    return super.{self::A::bar}(x: x as core::int);
+  forwarding-stub set baz(covariant-by-class core::num x) → void
+    return super.{self::A::baz} = x as core::int;
+}
+class C extends self::_C&A&B {
+  synthetic constructor •() → self::C
+    : super self::_C&A&B::•()
+    ;
+}
+static method main() → void {
+  self::C a = new self::C::•();
+  a.{self::_C&A&B::foo}(1){(core::num) → core::num};
+  self::throws(() → void => a.{self::_C&A&B::foo}(1.2){(core::num) → core::num});
+  a.{self::_C&A&B::bar}(x: 1){({required x: core::num}) → core::num};
+  self::throws(() → void => a.{self::_C&A&B::bar}(x: 1.2){({required x: core::num}) → core::num});
+  a.{self::_C&A&B::baz} = 1;
+  self::throws(() → void => a.{self::_C&A&B::baz} = 1.2);
+  a.{self::_C&A&B::boz} = 1;
+  self::throws(() → void => a.{self::_C&A&B::boz} = 1.2);
+}
+static method throws(() → void f) → dynamic {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print(e);
+    return;
+  }
+  throw "Exception expected";
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/issue46390.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue46390.dart.weak.modular.expect
new file mode 100644
index 0000000..8c31872
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46390.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo(core::num n) → core::num {
+    core::print(n.{core::Object::runtimeType}{core::Type});
+    return 1.1;
+  }
+}
+abstract class B<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+  abstract method foo(covariant-by-class self::B::X% x) → self::B::X%;
+}
+abstract class _C&A&B = self::A with self::B<core::num> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C&A&B
+    : super self::A::•()
+    ;
+  forwarding-stub method foo(covariant-by-class core::num x) → core::num
+    return super.{self::A::foo}(x);
+}
+class C extends self::_C&A&B {
+  synthetic constructor •() → self::C
+    : super self::_C&A&B::•()
+    ;
+}
+static method main() → void {
+  self::B<core::Object> b = new self::C::•();
+  try {
+    b.{self::B::foo}(true){(core::Object) → core::Object};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print(e);
+    return;
+  }
+  throw "Missing type error";
+}
diff --git a/pkg/front_end/testcases/general/issue46581.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue46581.dart.weak.modular.expect
new file mode 100644
index 0000000..e6c9e95
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46581.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "issue46581_lib.dart" as iss;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue46581_lib.dart";
+
+abstract class _TestClass&MyClass&MyMixin = iss::MyClass with self::MyMixin /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor _() → self::_TestClass&MyClass&MyMixin
+    : super iss::MyClass::_()
+    ;
+  const synthetic constructor named() → self::_TestClass&MyClass&MyMixin
+    : super iss::MyClass::named()
+    ;
+}
+class TestClass extends self::_TestClass&MyClass&MyMixin {
+  constructor •() → self::TestClass
+    : super self::_TestClass&MyClass&MyMixin::named()
+    ;
+}
+abstract class MyMixin extends core::Object /*isMixinDeclaration*/  {
+}
+static method main() → void {}
+
+library /*isNonNullableByDefault*/;
+import self as iss;
+import "dart:core" as core;
+
+class MyClass extends core::Object /*hasConstConstructor*/  {
+  const constructor _() → iss::MyClass
+    : super core::Object::•()
+    ;
+  const constructor named() → iss::MyClass
+    : this iss::MyClass::_()
+    ;
+}
diff --git a/pkg/front_end/testcases/general/issue46581/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue46581/main.dart.weak.modular.expect
new file mode 100644
index 0000000..b46584b
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46581/main.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _TestClass&MyClass&MyMixin = mai::MyClass with self::MyMixin /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor _() → self::_TestClass&MyClass&MyMixin
+    : super mai::MyClass::_()
+    ;
+  const synthetic constructor named() → self::_TestClass&MyClass&MyMixin
+    : super mai::MyClass::named()
+    ;
+}
+class TestClass extends self::_TestClass&MyClass&MyMixin {
+  constructor •() → self::TestClass
+    : super self::_TestClass&MyClass&MyMixin::named()
+    ;
+}
+abstract class MyMixin extends core::Object /*isMixinDeclaration*/  {
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/general/issue46719.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue46719.dart.weak.modular.expect
new file mode 100644
index 0000000..449b259
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46719.dart.weak.modular.expect
@@ -0,0 +1,120 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue46719.dart:27:12: Error: Couldn't find constructor 'm.applyAndPrint'.
+//   a.m<int>.applyAndPrint([2]);
+//            ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:28:15: Error: Couldn't find constructor 'm.applyAndPrint'.
+//   a.m<String>.applyAndPrint(['three']);
+//               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:29:12: Error: Couldn't find constructor 'n.applyAndPrint'.
+//   A.n<int>.applyAndPrint([2]);
+//            ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:30:15: Error: Couldn't find constructor 'n.applyAndPrint'.
+//   A.n<String>.applyAndPrint(['three']);
+//               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:31:15: Error: Couldn't find constructor 'm.applyAndPrint'.
+//   self.m<int>.applyAndPrint([2]);
+//               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:32:18: Error: Couldn't find constructor 'm.applyAndPrint'.
+//   self.m<String>.applyAndPrint(['three']);
+//                  ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:33:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   self.A.n<int>.applyAndPrint([2]);
+//           ^
+//
+// pkg/front_end/testcases/general/issue46719.dart:34:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   self.A.n<String>.applyAndPrint(['three']);
+//           ^
+//
+// pkg/front_end/testcases/general/issue46719.dart:35:5: Error: Member not found: 'named'.
+//   A.named.toString();
+//     ^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:36:4: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   A<int>.named.toString();
+//    ^
+//
+// pkg/front_end/testcases/general/issue46719.dart:36:10: Error: Member not found: 'named'.
+//   A<int>.named.toString();
+//          ^^^^^
+//
+// pkg/front_end/testcases/general/issue46719.dart:37:5: Error: Couldn't find constructor 'named'.
+//   A.named<int>.toString();
+//     ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue46719.dart" as self;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  constructor named() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  method m<X extends core::Object? = dynamic>(self::A::m::X% x) → core::List<self::A::m::X%>
+    return <self::A::m::X%>[x];
+  static method n<X extends core::Object? = dynamic>(self::A::n::X% x) → core::List<self::A::n::X%>
+    return <self::A::n::X%>[x];
+}
+extension FunctionApplier on core::Function {
+  method applyAndPrint = self::FunctionApplier|applyAndPrint;
+  tearoff applyAndPrint = self::FunctionApplier|get#applyAndPrint;
+}
+static method m<X extends core::Object? = dynamic>(self::m::X% x) → core::List<self::m::X%>
+  return <self::m::X%>[x];
+static method FunctionApplier|applyAndPrint(lowered final core::Function #this, core::List<core::Object?> positionalArguments) → void
+  return core::print(core::Function::apply(#this, positionalArguments, #C1));
+static method FunctionApplier|get#applyAndPrint(lowered final core::Function #this) → (core::List<core::Object?>) → void
+  return (core::List<core::Object?> positionalArguments) → void => self::FunctionApplier|applyAndPrint(#this, positionalArguments);
+static method test() → dynamic {
+  self::A<dynamic> a = new self::A::•<dynamic>();
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:27:12: Error: Couldn't find constructor 'm.applyAndPrint'.
+  a.m<int>.applyAndPrint([2]);
+           ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:28:15: Error: Couldn't find constructor 'm.applyAndPrint'.
+  a.m<String>.applyAndPrint(['three']);
+              ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:29:12: Error: Couldn't find constructor 'n.applyAndPrint'.
+  A.n<int>.applyAndPrint([2]);
+           ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:30:15: Error: Couldn't find constructor 'n.applyAndPrint'.
+  A.n<String>.applyAndPrint(['three']);
+              ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:31:15: Error: Couldn't find constructor 'm.applyAndPrint'.
+  self.m<int>.applyAndPrint([2]);
+              ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:32:18: Error: Couldn't find constructor 'm.applyAndPrint'.
+  self.m<String>.applyAndPrint(['three']);
+                 ^^^^^^^^^^^^^";
+  self::FunctionApplier|applyAndPrint(#C2, <core::Object?>[2]);
+  self::FunctionApplier|applyAndPrint(#C2, <core::Object?>["three"]);
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:35:5: Error: Member not found: 'named'.
+  A.named.toString();
+    ^^^^^".{core::Object::toString}(){() → core::String};
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:36:10: Error: Member not found: 'named'.
+  A<int>.named.toString();
+         ^^^^^".{core::Object::toString}(){() → core::String};
+  invalid-expression "pkg/front_end/testcases/general/issue46719.dart:37:5: Error: Couldn't find constructor 'named'.
+  A.named<int>.toString();
+    ^^^^^";
+}
+static method main() → void {}
+
+constants  {
+  #C1 = <core::Symbol*, dynamic>{)
+  #C2 = static-tearoff self::A::n
+}
diff --git a/pkg/front_end/testcases/general/issue46745.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue46745.dart.weak.modular.expect
new file mode 100644
index 0000000..a375575
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46745.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue46745.dart:8:3: Error: 'A.foo' is already declared in this scope.
+//   A.foo();
+//   ^^^^^
+// pkg/front_end/testcases/general/issue46745.dart:7:11: Context: Previous declaration of 'A.foo'.
+//   factory A.foo() => A._();
+//           ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor _() → self::A
+    : super core::Object::•()
+    ;
+  static factory foo() → self::A
+    return new self::A::_();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue46863.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue46863.dart.weak.modular.expect
new file mode 100644
index 0000000..20ac68c
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46863.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue46863.dart:5:36: Error: Method not found: 'bar'.
+// final foo = [() => const [], () => bar()];
+//                                    ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:7:41: Error: 'Bar' isn't a type.
+// final foo2 = [(dynamic x) => const [], (Bar x) => const []];
+//                                         ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:9:52: Error: 'Bar' isn't a type.
+// final foo3 = [(List<dynamic> x) => const [], (List<Bar> x) => const []];
+//                                                    ^^^
+//
+// pkg/front_end/testcases/general/issue46863.dart:11:60: Error: 'Bar' isn't a type.
+// final foo4 = [(Function(dynamic) x) => const [], (Function(Bar) x) => const []];
+//                                                            ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static final field core::List<() → invalid-type> foo = <() → invalid-type>[() → core::List<dynamic> => #C1, () → invalid-type => invalid-expression "pkg/front_end/testcases/general/issue46863.dart:5:36: Error: Method not found: 'bar'.
+final foo = [() => const [], () => bar()];
+                                   ^^^"];
+static final field core::List<(invalid-type) → core::List<dynamic>> foo2 = <(invalid-type) → core::List<dynamic>>[(dynamic x) → core::List<dynamic> => #C1, (invalid-type x) → core::List<dynamic> => #C1];
+static final field core::List<(core::List<dynamic>) → core::List<dynamic>> foo3 = <(core::List<dynamic>) → core::List<dynamic>>[(core::List<dynamic> x) → core::List<dynamic> => #C1, (core::List<invalid-type> x) → core::List<dynamic> => #C1];
+static final field core::List<((invalid-type) → dynamic) → core::List<dynamic>> foo4 = <((invalid-type) → dynamic) → core::List<dynamic>>[((dynamic) → dynamic x) → core::List<dynamic> => #C1, ((invalid-type) → dynamic x) → core::List<dynamic> => #C1];
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/general/issue46956.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue46956.dart.weak.modular.expect
new file mode 100644
index 0000000..eb4a9a3
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue46956.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+static method foo<X extends core::Object?>(self::A<self::foo::X%> x) → asy::Future<self::foo::X?>
+  return throw 42;
+static method bar(core::String? y) → dynamic {}
+static method test(self::A<core::String> a) → dynamic async {
+  final core::String? x = await(() → asy::Future<core::String?> async {
+    return self::foo<core::String>(a);
+  })(){() → asy::Future<core::String?>};
+  self::bar(x);
+}
+static method test2(self::A<core::String> a) → dynamic async {
+  return self::foo<core::String>(a);
+}
+static method test3(self::A<core::String> a) → dynamic {
+  return self::foo<core::String>(a);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47013.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47013.dart.weak.modular.expect
new file mode 100644
index 0000000..f555ae6
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47013.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method m(core::int n) → void {}
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+  abstract method m(covariant-by-declaration core::num n) → void;
+}
+class C extends self::A implements self::I {
+  synthetic constructor •() → self::C
+    : super self::A::•()
+    ;
+  forwarding-stub method m(covariant-by-declaration core::num n) → void
+    return super.{self::A::m}(n as core::int);
+}
+static method main() → void {
+  self::throws(() → void => (new self::C::•() as{ForNonNullableByDefault} dynamic){dynamic}.m(1.1));
+}
+static method throws(() → void f) → dynamic {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print(e);
+    return;
+  }
+  throw "Exception expected";
+}
diff --git a/pkg/front_end/testcases/general/issue47013b.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47013b.dart.weak.modular.expect
new file mode 100644
index 0000000..7ab0301
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47013b.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method m(core::num n) → void {}
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ m(covariant-by-declaration core::num i) → void
+    return super.{self::A::m}(i);
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+  method m(covariant-by-declaration core::int i) → void {}
+}
+static method main() → dynamic {
+  self::A a = new self::C::•();
+  self::throws(() → void => a.{self::A::m}(1.5){(core::num) → void});
+  a = new self::B::•();
+  a.{self::A::m}(1.5){(core::num) → void};
+}
+static method throws(() → void f) → dynamic {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print(e);
+    return;
+  }
+  throw "Exception expected";
+}
diff --git a/pkg/front_end/testcases/general/issue47013c.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47013c.dart.weak.modular.expect
new file mode 100644
index 0000000..e4ef550
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47013c.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class D1 extends core::Object {
+  synthetic constructor •() → self::D1
+    : super core::Object::•()
+    ;
+}
+class D2 extends core::Object {
+  synthetic constructor •() → self::D2
+    : super core::Object::•()
+    ;
+}
+class D extends core::Object implements self::D1, self::D2 {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method m(covariant-by-declaration self::D d) → void {}
+}
+abstract class B1 extends core::Object {
+  synthetic constructor •() → self::B1
+    : super core::Object::•()
+    ;
+  abstract method m(self::D1 d1) → void;
+}
+abstract class B2 extends core::Object {
+  synthetic constructor •() → self::B2
+    : super core::Object::•()
+    ;
+  abstract method m(self::D2 d2) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47013d.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47013d.dart.weak.modular.expect
new file mode 100644
index 0000000..20bde3e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47013d.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47013d.dart:15:20: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+//   throws(() => b.m(1.5, 0));
+//                    ^
+//
+// pkg/front_end/testcases/general/issue47013d.dart:17:23: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+//   throws(() => a.m(1, 1.5));
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method m(core::num n, core::int i) → void {}
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int, core::num) → void */ m(covariant-by-declaration core::num i, covariant-by-declaration core::int n) → void
+    return super.{self::A::m}(i, n);
+}
+static method main() → dynamic {
+  self::B b = new self::B::•();
+  self::throws(() → void => b.{self::B::m}(invalid-expression "pkg/front_end/testcases/general/issue47013d.dart:15:20: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+  throws(() => b.m(1.5, 0));
+                   ^" in 1.5 as{TypeError,ForNonNullableByDefault} core::int, 0){(core::int, core::num) → void});
+  self::A a = b;
+  self::throws(() → void => a.{self::A::m}(1, invalid-expression "pkg/front_end/testcases/general/issue47013d.dart:17:23: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+  throws(() => a.m(1, 1.5));
+                      ^" in 1.5 as{TypeError,ForNonNullableByDefault} core::int){(core::num, core::int) → void});
+}
+static method throws(() → void f) → dynamic {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print(e);
+    return;
+  }
+  throw "Exception expected";
+}
diff --git a/pkg/front_end/testcases/general/issue47036.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47036.dart.weak.modular.expect
new file mode 100644
index 0000000..706562c
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47036.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Default extends core::Object /*hasConstConstructor*/  {
+  final field core::Object? defaultValue;
+  const constructor •(core::Object? defaultValue) → self::Default
+    : self::Default::defaultValue = defaultValue, super core::Object::•()
+    ;
+}
+class Settings extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •({@#C3 self::Sidebar sidebar = #C4}) → self::Settings
+    return self::_SSettings::•(sidebar: sidebar);
+}
+class Sidebar extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C5]/*isLegacy*/;
+  static factory •() → self::Sidebar
+    return self::_SSidebar::•();
+}
+abstract class _SSettings extends core::Object implements self::Settings {
+  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
+  static factory •({self::Sidebar sidebar = #C4}) → self::_SSettings
+    return new self::_$_SSettings::•(sidebar: sidebar);
+}
+class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
+  final field self::Sidebar sidebar;
+  const constructor •({self::Sidebar sidebar = #C2}) → self::_$_SSettings
+    : self::_$_SSettings::sidebar = sidebar, super core::Object::•()
+    ;
+}
+abstract class _SSidebar extends core::Object implements self::Sidebar {
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  static factory •() → self::_SSidebar
+    return new self::_$_SSidebar::•();
+}
+class _$_SSidebar extends core::Object implements self::_SSidebar /*hasConstConstructor*/  {
+  const constructor •() → self::_$_SSidebar
+    : super core::Object::•()
+    ;
+}
+static method main() → void {}
+
+constants  {
+  #C1 = constructor-tearoff self::Settings::•
+  #C2 = self::_$_SSidebar {}
+  #C3 = self::Default {defaultValue:#C2}
+  #C4 = null
+  #C5 = constructor-tearoff self::Sidebar::•
+  #C6 = constructor-tearoff self::_SSettings::•
+  #C7 = constructor-tearoff self::_SSidebar::•
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue47036.dart:
+- _$_SSidebar. (from org-dartlang-testcase:///issue47036.dart:36:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Default. (from org-dartlang-testcase:///issue47036.dart:6:9)
diff --git a/pkg/front_end/testcases/general/issue47057.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47057.dart.weak.modular.expect
new file mode 100644
index 0000000..abd22ad
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47057.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static method foo<X extends core::Object?>(self::foo::X% x) → asy::Future<core::int> async {
+  if(x is{ForNonNullableByDefault} asy::Future<core::int>) {
+    return x{self::foo::X% & asy::Future<core::int> /* '%' & '!' = '!' */};
+  }
+  else {
+    throw 42;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47072.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47072.dart.weak.modular.expect
new file mode 100644
index 0000000..54bf6d2
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47072.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method f(self::B b) → void {}
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+  abstract method f(covariant-by-declaration self::A a) → void;
+}
+class D extends self::C implements self::I {
+  synthetic constructor •() → self::D
+    : super self::C::•()
+    ;
+  forwarding-stub method f(covariant-by-declaration self::A a) → void
+    return super.{self::C::f}(a as self::B);
+}
+static method main() → void {
+  self::I i = new self::D::•();
+  try {
+    i.{self::I::f}(new self::A::•()){(self::A) → void};
+  }
+  on core::Object catch(final core::Object _) {
+    return;
+  }
+  throw "Missing type error";
+}
diff --git a/pkg/front_end/testcases/general/issue47223a.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47223a.dart.weak.modular.expect
new file mode 100644
index 0000000..1640c03
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223a.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47223a.dart:6:4: Warning: Operand of null-aware operation '??' has type 'Never' which excludes null.
+//   (throw "some value") ?? "some other value";
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  let final Never #t1 = throw "some value" in #t1 == null ?{core::String} "some other value" : #t1;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47223b.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47223b.dart.weak.modular.expect
new file mode 100644
index 0000000..13e925e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47223b.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47223b.dart:6:24: Warning: Operand of null-aware operation '??=' has type 'Never' which excludes null.
+//   (throw "some value").foo ??= "foo";
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  let final Never #t1 = throw "some value" in #t1{Never}.foo == null ?{core::String} #t1{Never}.foo = "foo" : null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47339.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47339.dart.weak.modular.expect
new file mode 100644
index 0000000..02f1b57
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47339.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef Bar = self::Foo;
+typedef BarGeneric<X extends core::Object? = dynamic> = self::FooGeneric<X%>;
+class Foo extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  const constructor named() → self::Foo
+    : super core::Object::•()
+    ;
+  static factory namedFactory() → self::Foo
+    return new self::Foo::named();
+}
+class FooGeneric<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  const constructor named() → self::FooGeneric<self::FooGeneric::X%>
+    : super core::Object::•()
+    ;
+  static factory namedFactory<X extends core::Object? = dynamic>() → self::FooGeneric<self::FooGeneric::namedFactory::X%>
+    return new self::FooGeneric::named<self::FooGeneric::namedFactory::X%>();
+}
+static const field self::Foo bar = #C3;
+static const field self::Foo bar2 = #C3;
+static const field self::FooGeneric<core::int> barGeneric = #C4;
+static const field self::FooGeneric<core::int> barGeneric2 = #C4;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Foo::namedFactory
+  #C2 = constructor-tearoff self::FooGeneric::namedFactory
+  #C3 = self::Foo {}
+  #C4 = self::FooGeneric<core::int*> {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue47339.dart:
+- Foo.named (from org-dartlang-testcase:///issue47339.dart:6:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- FooGeneric.named (from org-dartlang-testcase:///issue47339.dart:17:9)
diff --git a/pkg/front_end/testcases/general/issue47462.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47462.dart.weak.modular.expect
new file mode 100644
index 0000000..2a6bd0b
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47462.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef MyList<T extends core::num> = core::List<T>;
+static method main() → dynamic {
+  self::expect(true, #C1);
+  self::expect(false, #C2);
+  self::expect(true, core::identical(#C4, #C4));
+  self::expect(false, core::identical(#C4, #C6));
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v1 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v2 = #C4;
+  (core::int, core::num, {growable: core::bool}) → core::List<core::num> v3 = #C6;
+  core::bool v4 = core::identical(v1, v2);
+  core::bool v5 = core::identical(v1, v3);
+  self::expect(true, v4);
+  self::expect(false, v5);
+  self::expect(true, core::identical(v1, v2));
+  self::expect(false, core::identical(v1, v3));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#new#tearOff<T extends core::num>([core::int? length = #C7]) → core::List<self::_#MyList#new#tearOff::T>
+  return core::List::•<self::_#MyList#new#tearOff::T>(length);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#filled#tearOff<T extends core::num>(core::int length, self::_#MyList#filled#tearOff::T fill, {core::bool growable = #C2}) → core::List<self::_#MyList#filled#tearOff::T>
+  return core::List::filled<self::_#MyList#filled#tearOff::T>(length, fill, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#empty#tearOff<T extends core::num>({core::bool growable = #C2}) → core::List<self::_#MyList#empty#tearOff::T>
+  return core::List::empty<self::_#MyList#empty#tearOff::T>(growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#from#tearOff<T extends core::num>(core::Iterable<dynamic> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#from#tearOff::T>
+  return core::List::from<self::_#MyList#from#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#of#tearOff<T extends core::num>(core::Iterable<self::_#MyList#of#tearOff::T> elements, {core::bool growable = #C1}) → core::List<self::_#MyList#of#tearOff::T>
+  return core::List::of<self::_#MyList#of#tearOff::T>(elements, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#generate#tearOff<T extends core::num>(core::int length, (core::int) → self::_#MyList#generate#tearOff::T generator, {core::bool growable = #C1}) → core::List<self::_#MyList#generate#tearOff::T>
+  return core::List::generate<self::_#MyList#generate#tearOff::T>(length, generator, growable: growable);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#MyList#unmodifiable#tearOff<T extends core::num>(core::Iterable<dynamic> elements) → core::List<self::_#MyList#unmodifiable#tearOff::T>
+  return core::List::unmodifiable<self::_#MyList#unmodifiable#tearOff::T>(elements);
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = constructor-tearoff core::List::filled
+  #C4 = instantiation #C3 <core::num*>
+  #C5 = static-tearoff self::_#MyList#filled#tearOff
+  #C6 = instantiation #C5 <core::num*>
+  #C7 = null
+}
diff --git a/pkg/front_end/testcases/general/issue47495.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47495.dart.weak.modular.expect
new file mode 100644
index 0000000..aeebd16
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47495.dart.weak.modular.expect
@@ -0,0 +1,70 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47495.dart:10:16: Error: Can't create typedef from non-function type.
+// typedef SAlias = S;
+//                ^
+//
+// pkg/front_end/testcases/general/issue47495.dart:11:16: Error: Can't create typedef from non-function type.
+// typedef MAlias = M;
+//                ^
+//
+// pkg/front_end/testcases/general/issue47495.dart:13:7: Error: The type 'MAlias' can't be mixed in.
+// class C = SAlias with MAlias;
+//       ^
+// pkg/front_end/testcases/general/issue47495.dart:11:9: Context: The issue arises via this type alias.
+// typedef MAlias = M;
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef SAlias = invalid-type;
+typedef MAlias = invalid-type;
+class S extends core::Object {
+  synthetic constructor •() → self::S*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47728_1.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47728_1.dart.weak.modular.expect
new file mode 100644
index 0000000..a0401b1
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47728_1.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47728_1.dart:7:11: Error: Can't create typedef from nullable type.
+// typedef A = Function()?;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef A = invalid-type;
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class C = core::Object with self::B {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47728_2.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47728_2.dart.weak.modular.expect
new file mode 100644
index 0000000..82e50f8
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47728_2.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47728_2.dart:5:13: Error: Expected a type, but got ';'.
+// typedef A = ;
+//             ^
+//
+// pkg/front_end/testcases/general/issue47728_2.dart:5:11: Error: Can't create typedef from non-type.
+// typedef A = ;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef A = invalid-type;
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class C = core::Object with self::B {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47728_3.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47728_3.dart.weak.modular.expect
new file mode 100644
index 0000000..7f3c778
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47728_3.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47728_3.dart:7:13: Error: Expected a type, but got ';'.
+// typedef A = ;
+//             ^
+//
+// pkg/front_end/testcases/general/issue47728_3.dart:7:11: Error: Can't create typedef from non-type.
+// typedef A = ;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef A = invalid-type;
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class C = core::Object with self::B {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47728_4.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47728_4.dart.weak.modular.expect
new file mode 100644
index 0000000..b242e08
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47728_4.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47728_4.dart:9:7: Error: The type 'A' which is an alias of 'dynamic Function()?' can't be used as supertype because it is nullable.
+// class C = A with B;
+//       ^
+// pkg/front_end/testcases/general/issue47728_4.dart:5:9: Context: The issue arises via this type alias.
+// typedef A = Function()?;
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef A = () →? dynamic;
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class C = core::Object with self::B {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue_46886.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue_46886.dart.weak.modular.expect
new file mode 100644
index 0000000..e64cce5
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_46886.dart.weak.modular.expect
@@ -0,0 +1,84 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue_46886.dart:8:16: Error: This requires the 'triple-shift' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   Foo operator >>>(_) => this;
+//                ^^^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:20:7: Error: This requires the 'triple-shift' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   foo >>> 42;
+//       ^^^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:21:13: Error: This requires the 'triple-shift' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   print(foo >>> 42);
+//             ^^^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:22:13: Error: This requires the 'triple-shift' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   print(foo >>>= 42);
+//             ^^^^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:23:12: Error: This requires the 'triple-shift' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   if ((foo >>>= 42) == foo) {
+//            ^^^^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:28:13: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+//   print(#>>>);
+//             ^
+//
+// pkg/front_end/testcases/general/issue_46886.dart:30:14: Error: This requires the 'triple-shift' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+//   var x = 10 >>> 2;
+//              ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic _) → self::Foo
+    return this;
+}
+abstract class Bar extends core::Object implements core::List<core::List<core::List<core::String>>> {
+  synthetic constructor •() → self::Bar
+    : super core::Object::•()
+    ;
+}
+extension _extension#0 on core::Symbol {
+  operator > = self::_extension#0|>;
+  method call = self::_extension#0|call;
+  tearoff call = self::_extension#0|get#call;
+}
+static method _extension#0|>(lowered final core::Symbol #this, dynamic _) → core::String
+  return "Greater Than used";
+static method _extension#0|call(lowered final core::Symbol #this, dynamic _) → core::String
+  return "Called";
+static method _extension#0|get#call(lowered final core::Symbol #this) → (dynamic) → core::String
+  return (dynamic _) → core::String => self::_extension#0|call(#this, _);
+static method main() → dynamic {
+  self::Foo foo = new self::Foo::•();
+  foo.{self::Foo::>>>}(42){(dynamic) → self::Foo};
+  core::print(foo.{self::Foo::>>>}(42){(dynamic) → self::Foo});
+  core::print(foo = foo.{self::Foo::>>>}(42){(dynamic) → self::Foo});
+  if((foo = foo.{self::Foo::>>>}(42){(dynamic) → self::Foo}) =={core::Object::==}{(core::Object) → core::bool} foo) {
+    core::print("same");
+  }
+  core::print(self::_extension#0|>(#C1, 2));
+  core::print(self::_extension#0|>(#C1, invalid-expression "pkg/front_end/testcases/general/issue_46886.dart:28:13: Error: This couldn't be parsed.
+  print(#>>>);
+            ^"));
+  core::int x = 10.{core::int::>>>}(2){(core::int) → core::int};
+  core::print("x: ${x}");
+}
+
+constants  {
+  #C1 = #>>
+}
diff --git a/pkg/front_end/testcases/general/issue_47008_01.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue_47008_01.dart.weak.modular.expect
new file mode 100644
index 0000000..383dfab
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47008_01.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int b = 1;
+  core::int c = 2;
+  core::int d = 3;
+  core::int e = 4;
+  self::a(b.{core::num::<}(c){(core::num) → core::bool}, d.{core::num::<}(e){(core::num) → core::bool}, 1.{core::int::>>}(2){(core::int) → core::int});
+}
+static method a(core::bool x, core::bool y, core::int z) → void {
+  core::print("${x} ${y} ${z}");
+}
diff --git a/pkg/front_end/testcases/general/issue_47008_02.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue_47008_02.dart.weak.modular.expect
new file mode 100644
index 0000000..d448313
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47008_02.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int b = 1;
+  core::int c = 2;
+  core::int d = 3;
+  core::int e = 4;
+  core::int f = 5;
+  core::int g = 6;
+  self::a(b.{core::num::<}(c){(core::num) → core::bool}, d.{core::num::<}(e){(core::num) → core::bool}, f.{core::num::<}(g){(core::num) → core::bool}, 1.{core::int::>>>}(2){(core::int) → core::int});
+}
+static method a(core::bool x, core::bool y, core::bool z1, core::int z2) → void {
+  core::print("${x} ${y} ${z1} ${z2}");
+}
diff --git a/pkg/front_end/testcases/general/issue_47009_01.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue_47009_01.dart.weak.modular.expect
new file mode 100644
index 0000000..a9de674
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_01.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int b = 1;
+  core::int c = 2;
+  core::int as = 3;
+  self::a(b.{core::num::<}(c){(core::num) → core::bool}, as.{core::num::>}(1){(core::num) → core::bool});
+}
+static method a(core::bool x, core::bool y) → void {
+  core::print("${x} ${y}");
+}
diff --git a/pkg/front_end/testcases/general/issue_47009_02.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue_47009_02.dart.weak.modular.expect
new file mode 100644
index 0000000..c5218bb
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_02.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int b = 1;
+  core::int c = 2;
+  core::int d = 3;
+  core::int e = 4;
+  core::int as = 5;
+  self::a(b.{core::num::<}(c){(core::num) → core::bool}, d.{core::num::<}(e){(core::num) → core::bool}, as.{core::int::>>}(1){(core::int) → core::int});
+}
+static method a(core::bool x, core::bool y, core::int z) → void {
+  core::print("${x} ${y} ${z}");
+}
diff --git a/pkg/front_end/testcases/general/issue_47009_03.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue_47009_03.dart.weak.modular.expect
new file mode 100644
index 0000000..1d366c4
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_03.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int b = 1;
+  core::int c = 2;
+  core::int d = 3;
+  core::int e = 4;
+  core::int f = 5;
+  core::int g = 6;
+  core::int as = 7;
+  self::a(b.{core::num::<}(c){(core::num) → core::bool}, d.{core::num::<}(e){(core::num) → core::bool}, f.{core::num::<}(g){(core::num) → core::bool}, as.{core::int::>>>}(1){(core::int) → core::int});
+}
+static method a(core::bool x, core::bool y, core::bool z1, core::int z2) → void {
+  core::print("${x} ${y} ${z1} ${z2}");
+}
diff --git a/pkg/front_end/testcases/general/literals.dart.weak.modular.expect b/pkg/front_end/testcases/general/literals.dart.weak.modular.expect
new file mode 100644
index 0000000..8ef3e48
--- /dev/null
+++ b/pkg/front_end/testcases/general/literals.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method testString() → dynamic {
+  core::print("a");
+}
+static method testInt() → dynamic {
+  core::print(1);
+}
+static method testBool() → dynamic {
+  core::print(true);
+  core::print(false);
+}
+static method testDouble() → dynamic {
+  core::print(1.0);
+}
+static method testNull() → dynamic {
+  core::print(null);
+}
+static method testList() → dynamic {
+  core::print(<dynamic>[]);
+  core::print(<core::String*>["a", "b"]);
+}
+static method testMap() → dynamic {
+  core::print(<dynamic, dynamic>{});
+  core::print(<core::String*, core::String*>{"a": "b"});
+}
+static method testSymbol() → dynamic {
+  core::print(#C1);
+  core::print(#C2);
+  core::print(#C3);
+}
+static method main() → dynamic {
+  self::testString();
+  self::testInt();
+  self::testBool();
+  self::testDouble();
+  self::testNull();
+  self::testList();
+  self::testMap();
+  self::testSymbol();
+}
+
+constants  {
+  #C1 = #fisk
+  #C2 = #org-dartlang-testcase:///literals.dart::_fisk
+  #C3 = #fisk.hest.ko
+}
diff --git a/pkg/front_end/testcases/general/local_generic_function.dart.weak.modular.expect b/pkg/front_end/testcases/general/local_generic_function.dart.weak.modular.expect
new file mode 100644
index 0000000..b22d5a7
--- /dev/null
+++ b/pkg/front_end/testcases/general/local_generic_function.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  function f<T extends core::Object* = dynamic>(core::List<T*>* l) → T*
+    return l.{core::List::[]}(0){(core::int*) →* T*};
+  core::int* x = f<core::int*>(<core::int*>[0]){(core::List<core::int*>*) →* core::int*};
+}
diff --git a/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.modular.expect b/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.modular.expect
new file mode 100644
index 0000000..10636b1
--- /dev/null
+++ b/pkg/front_end/testcases/general/long_chain_of_typedefs.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Foo01<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (Null) →* void;
+typedef Foo02<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((Null) →* void) →* void;
+typedef Foo03<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((Null) →* void) →* void) →* void;
+typedef Foo04<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((Null) →* void) →* void) →* void) →* void;
+typedef Foo05<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((Null) →* void) →* void) →* void) →* void) →* void;
+typedef Foo06<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((Null) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo07<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo08<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo09<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo10<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo11<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo12<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo13<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo14<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo15<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo16<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo17<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo18<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo19<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = (((((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+typedef Foo20<unrelated X extends core::Object* = dynamic, unrelated Y extends core::Object* = dynamic, unrelated Z extends core::Object* = dynamic> = ((((((((((((((((((((Null) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void) →* void;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/magic_const.dart.weak.modular.expect b/pkg/front_end/testcases/general/magic_const.dart.weak.modular.expect
new file mode 100644
index 0000000..60dcd8b
--- /dev/null
+++ b/pkg/front_end/testcases/general/magic_const.dart.weak.modular.expect
@@ -0,0 +1,81 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/magic_const.dart:15:9: Error: Constant expression expected.
+// Try inserting 'const'.
+// foo({a: Constant(), b: Constant(), c: []}) {}
+//         ^^^^^^^^
+//
+// pkg/front_end/testcases/general/magic_const.dart:15:24: Error: Constant expression expected.
+// Try inserting 'const'.
+// foo({a: Constant(), b: Constant(), c: []}) {}
+//                        ^^^^^^^^
+//
+// pkg/front_end/testcases/general/magic_const.dart:15:39: Error: Constant expression expected.
+// Try inserting 'const'.
+// foo({a: Constant(), b: Constant(), c: []}) {}
+//                                       ^
+//
+// pkg/front_end/testcases/general/magic_const.dart:18:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const NotConstant();
+//         ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/magic_const.dart:15:39: Error: Non-constant list literal is not a constant expression.
+// foo({a: Constant(), b: Constant(), c: []}) {}
+//                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Constant extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::Constant*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class NotConstant extends core::Object {
+  synthetic constructor •() → self::NotConstant*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo({dynamic a = #C1, dynamic b = #C1, dynamic c = invalid-expression "Non-constant list literal is not a constant expression."}) → dynamic {}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/magic_const.dart:18:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const NotConstant();
+        ^^^^^^^^^^^";
+  new self::Constant::•();
+  core::bool::fromEnvironment("fisk");
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Constant {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///magic_const.dart:
+- Constant. (from org-dartlang-testcase:///magic_const.dart:10:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/main_declaration.dart.weak.modular.expect b/pkg/front_end/testcases/general/main_declaration.dart.weak.modular.expect
new file mode 100644
index 0000000..58118e1
--- /dev/null
+++ b/pkg/front_end/testcases/general/main_declaration.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+
+import "org-dartlang-testcase:///main_declaration_lib.dart";
+
+static method main() → dynamic {}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+static method main(core::String* args) → dynamic {}
diff --git a/pkg/front_end/testcases/general/many_errors.dart.weak.modular.expect b/pkg/front_end/testcases/general/many_errors.dart.weak.modular.expect
new file mode 100644
index 0000000..48ce15f
--- /dev/null
+++ b/pkg/front_end/testcases/general/many_errors.dart.weak.modular.expect
@@ -0,0 +1,144 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/many_errors.dart:8:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const A.named1() sync* {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/many_errors.dart:13:1: Error: An external or native method can't have a body.
+// external foo(String x) {
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/general/many_errors.dart:10:26: Error: New expression is not a constant expression.
+//   const A.named2() : x = new Object();
+//                          ^^^
+//
+// pkg/front_end/testcases/general/many_errors.dart:10:24: Error: 'x' is a final instance variable that was initialized at the declaration.
+//   const A.named2() : x = new Object();
+//                        ^
+// pkg/front_end/testcases/general/many_errors.dart:6:9: Context: 'x' was initialized here.
+//   final x = null;
+//         ^
+//
+// pkg/front_end/testcases/general/many_errors.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const A.named2() : x = new Object();
+//                        ^
+//
+// pkg/front_end/testcases/general/many_errors.dart:8:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
+//   const A.named1() sync* {}
+//                          ^
+//
+// pkg/front_end/testcases/general/many_errors.dart:13:24: Error: An external or native method can't have a body.
+// external foo(String x) {
+//                        ^
+//
+// pkg/front_end/testcases/general/many_errors.dart:28:9: Error: The class 'AbstractClass' is abstract and can't be instantiated.
+//   const AbstractClass.id();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/many_errors.dart:28:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const AbstractClass.id();
+//         ^
+//
+// pkg/front_end/testcases/general/many_errors.dart:29:28: Error: The getter 'b' isn't defined for the class 'B'.
+//  - 'B' is from 'pkg/front_end/testcases/general/many_errors.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//   (new C()?.b ??= new B()).b;
+//                            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  final field dynamic x = null;
+  constructor named1() → self::A*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/many_errors.dart:8:26: Error: Constructor bodies can't use 'async', 'async*', or 'sync*'.
+  const A.named1() sync* {}
+                         ^" {}
+  const constructor named2() → self::A*
+    : final dynamic #t2 = throw invalid-expression "pkg/front_end/testcases/general/many_errors.dart:10:24: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const A.named2() : x = new Object();
+                       ^", super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  field self::B* b = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class AbstractClass extends core::Object /*hasConstConstructor*/  {
+  const constructor id() → self::AbstractClass*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+external static method foo(core::String* x) → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/many_errors.dart:13:24: Error: An external or native method can't have a body.
+external foo(String x) {
+                       ^";
+  {
+    return x.{core::String::length}{core::int*};
+  }
+}
+static method m() → dynamic {
+  throw invalid-expression "pkg/front_end/testcases/general/many_errors.dart:28:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const AbstractClass.id();
+        ^";
+  invalid-expression "pkg/front_end/testcases/general/many_errors.dart:29:28: Error: The getter 'b' isn't defined for the class 'B'.
+ - 'B' is from 'pkg/front_end/testcases/general/many_errors.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+  (new C()?.b ??= new B()).b;
+                           ^" in (let final self::C* #t3 = new self::C::•() in #t3 == null ?{self::B*} null : let final self::B* #t4 = #t3.{self::C::b}{self::B*} in #t4 == null ?{self::B*} #t3.{self::C::b} = new self::B::•() : #t4){<unresolved>}.b;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/map.dart.weak.modular.expect b/pkg/front_end/testcases/general/map.dart.weak.modular.expect
new file mode 100644
index 0000000..c82d4a6
--- /dev/null
+++ b/pkg/front_end/testcases/general/map.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::print(core::Map::•<dynamic, dynamic>());
+}
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.modular.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.modular.expect
new file mode 100644
index 0000000..a1967bf
--- /dev/null
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+@#C1
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E*>* values = #C11;
+  static const field self::E* E1 = #C4;
+  static const field self::E* E2 = #C7;
+  static const field self::E* E3 = #C10;
+  const constructor •(core::int* index, core::String* name) → self::E*
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String*
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field dynamic a = #C1;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = 0
+  #C3 = "E1"
+  #C4 = self::E {index:#C2, _name:#C3}
+  #C5 = 1
+  #C6 = "E2"
+  #C7 = self::E {index:#C5, _name:#C6}
+  #C8 = 2
+  #C9 = "E3"
+  #C10 = self::E {index:#C8, _name:#C9}
+  #C11 = <self::E*>[#C4, #C7, #C10]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///metadata_enum.dart:
+- E. (from org-dartlang-testcase:///metadata_enum.dart:8:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.modular.expect b/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.modular.expect
new file mode 100644
index 0000000..02845a0
--- /dev/null
+++ b/pkg/front_end/testcases/general/metadata_named_mixin_application.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+@#C1
+class C = self::D with self::E {
+  synthetic constructor •() → self::C*
+    : super self::D::•()
+    ;
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E extends core::Object {
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field dynamic a = #C1;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.modular.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.modular.expect
new file mode 100644
index 0000000..a99c84b
--- /dev/null
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+  method f<covariant-by-class Y extends self::A::X>(self::A::f::Y y) → void {}
+}
+static method expectThrows(() → void f) → dynamic {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object e) {
+    return;
+  }
+  throw "Expected an exception to be thrown!";
+}
+static method main() → dynamic {
+  self::A<core::num> a = new self::A::•<core::int>();
+  self::expectThrows(() → void {
+    <Y extends core::num>(Y) → void f = a.{self::A::f}{<covariant-by-class Y extends core::num>(Y) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <covariant-by-class Y extends core::num>(Y) → void;
+  });
+}
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..090dbcd
--- /dev/null
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::num*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  method f<covariant-by-class Y extends self::A::X*>(self::A::f::Y* y) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method expectThrows(() →* void f) → dynamic {
+  try {
+    f(){() →* void};
+  }
+  on dynamic catch(final dynamic e) {
+    return;
+  }
+  throw "Expected an exception to be thrown!";
+}
+static method main() → dynamic {
+  self::A<core::num*>* a = new self::A::•<core::int*>();
+  <Y extends core::num*>(Y*) →* void f = a.{self::A::f}{<covariant-by-class Y extends core::num*>(Y*) →* void};
+  self::expectThrows(() → Null {
+    f<core::double*>(3.14){(core::double*) →* void};
+  });
+}
diff --git a/pkg/front_end/testcases/general/micro.dart.weak.modular.expect b/pkg/front_end/testcases/general/micro.dart.weak.modular.expect
new file mode 100644
index 0000000..8bd8f18
--- /dev/null
+++ b/pkg/front_end/testcases/general/micro.dart.weak.modular.expect
@@ -0,0 +1,151 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  method instanceMethod() → dynamic {
+    return 123;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class ExternalValue extends core::Object {
+  synthetic constructor •() → self::ExternalValue*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Bar extends core::Object {
+  synthetic constructor •() → self::Bar*
+    : super core::Object::•()
+    ;
+  abstract method externalInstanceMethod() → self::ExternalValue*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Box extends core::Object {
+  field dynamic field = null;
+  synthetic constructor •() → self::Box*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class FinalBox extends core::Object {
+  final field dynamic finalField;
+  constructor •(dynamic finalField) → self::FinalBox*
+    : self::FinalBox::finalField = finalField, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SubFinalBox extends self::FinalBox {
+  constructor •(dynamic value) → self::SubFinalBox*
+    : super self::FinalBox::•(value)
+    ;
+}
+class DynamicReceiver1 extends core::Object {
+  synthetic constructor •() → self::DynamicReceiver1*
+    : super core::Object::•()
+    ;
+  method dynamicallyCalled(dynamic x) → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class DynamicReceiver2 extends core::Object {
+  synthetic constructor •() → self::DynamicReceiver2*
+    : super core::Object::•()
+    ;
+  method dynamicallyCalled(dynamic x) → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method staticMethod() → dynamic {
+  return "sdfg";
+}
+external static method externalStatic() → core::bool*;
+external static method createBar() → self::Bar*;
+static method stringArgument(dynamic x) → dynamic {}
+static method intArgument(dynamic x) → dynamic {}
+static method makeDynamicCall(dynamic receiver) → void {
+  receiver{dynamic}.dynamicallyCalled("sdfg");
+}
+static method main() → dynamic {
+  dynamic x = self::staticMethod();
+  dynamic y = new self::Foo::•().{self::Foo::instanceMethod}(){() →* dynamic};
+  core::bool* z = self::externalStatic();
+  self::ExternalValue* w = self::createBar().{self::Bar::externalInstanceMethod}(){() →* self::ExternalValue*};
+  self::stringArgument("sdfg");
+  self::intArgument(42);
+  self::Box* box = new self::Box::•();
+  box.{self::Box::field} = "sdfg";
+  dynamic a = box.{self::Box::field}{dynamic};
+  self::FinalBox* finalBox = new self::FinalBox::•("dfg");
+  dynamic b = finalBox.{self::FinalBox::finalField}{dynamic};
+  self::SubFinalBox* subBox = new self::SubFinalBox::•("dfg");
+  dynamic c = subBox.{self::FinalBox::finalField}{dynamic};
+  self::makeDynamicCall(new self::DynamicReceiver1::•());
+  self::makeDynamicCall(new self::DynamicReceiver2::•());
+  core::List<core::String*>* list = <core::String*>["string"];
+  core::String* d = list.{core::List::[]}(0){(core::int*) →* core::String*};
+}
diff --git a/pkg/front_end/testcases/general/minimum_int.dart.weak.modular.expect b/pkg/front_end/testcases/general/minimum_int.dart.weak.modular.expect
new file mode 100644
index 0000000..65f7c38
--- /dev/null
+++ b/pkg/front_end/testcases/general/minimum_int.dart.weak.modular.expect
@@ -0,0 +1,6 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic
+  return core::print(-9223372036854775808.{core::int::unary-}(){() →* core::int*});
diff --git a/pkg/front_end/testcases/general/missing_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/general/missing_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..12e92e5
--- /dev/null
+++ b/pkg/front_end/testcases/general/missing_constructor.dart.weak.modular.expect
@@ -0,0 +1,113 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/missing_constructor.dart:10:11: Error: Superclass has no constructor named 'Super'.
+//   Sub() : super();
+//           ^^^^^
+//
+// pkg/front_end/testcases/general/missing_constructor.dart:11:15: Error: Superclass has no constructor named 'Super.foo'.
+//   Sub.foo() : super.foo();
+//               ^^^^^
+//
+// pkg/front_end/testcases/general/missing_constructor.dart:15:15: Error: Couldn't find constructor 'Bad'.
+//   Bad.foo() : this();
+//               ^^^^
+//
+// pkg/front_end/testcases/general/missing_constructor.dart:16:15: Error: Couldn't find constructor 'Bad.baz'.
+//   Bad.bar() : this.baz();
+//               ^^^^
+//
+// pkg/front_end/testcases/general/missing_constructor.dart:22:24: Error: Superclass has no constructor named 'Super'.
+//   MixinApplication() : super();
+//                        ^^^^^
+//
+// pkg/front_end/testcases/general/missing_constructor.dart:23:28: Error: Superclass has no constructor named 'Super.foo'.
+//   MixinApplication.foo() : super.foo();
+//                            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  constructor _() → self::Super*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Sub extends self::Super {
+  constructor •() → self::Sub*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:10:11: Error: Superclass has no constructor named 'Super'.
+  Sub() : super();
+          ^^^^^"
+    ;
+  constructor foo() → self::Sub*
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:11:15: Error: Superclass has no constructor named 'Super.foo'.
+  Sub.foo() : super.foo();
+              ^^^^^"
+    ;
+}
+class Bad extends core::Object {
+  constructor foo() → self::Bad*
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:15:15: Error: Couldn't find constructor 'Bad'.
+  Bad.foo() : this();
+              ^^^^"
+    ;
+  constructor bar() → self::Bad*
+    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:16:15: Error: Couldn't find constructor 'Bad.baz'.
+  Bad.bar() : this.baz();
+              ^^^^"
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _MixinApplication&Super&M = self::Super with self::M /*isAnonymousMixin*/  {
+  synthetic constructor _() → self::_MixinApplication&Super&M*
+    : super self::Super::_()
+    ;
+}
+class MixinApplication extends self::_MixinApplication&Super&M {
+  constructor •() → self::MixinApplication*
+    : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:22:24: Error: Superclass has no constructor named 'Super'.
+  MixinApplication() : super();
+                       ^^^^^"
+    ;
+  constructor foo() → self::MixinApplication*
+    : final dynamic #t6 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:23:28: Error: Superclass has no constructor named 'Super.foo'.
+  MixinApplication.foo() : super.foo();
+                           ^^^^^"
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/missing_prefix_name.dart.weak.modular.expect b/pkg/front_end/testcases/general/missing_prefix_name.dart.weak.modular.expect
new file mode 100644
index 0000000..fc75ee08
--- /dev/null
+++ b/pkg/front_end/testcases/general/missing_prefix_name.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/missing_prefix_name.dart:5:37: Error: Expected an identifier, but got ';'.
+// Try inserting an identifier before ';'.
+// import "missing_prefix_name.dart" as;
+//                                     ^
+//
+import self as self;
+
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.weak.modular.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.modular.expect
new file mode 100644
index 0000000..e4cac82
--- /dev/null
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.weak.modular.expect
@@ -0,0 +1,131 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/missing_toplevel.dart:27:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
+//  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+// var missingBinary = classWithProperty.property += 2;
+//                                                ^
+//
+// pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
+//  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
+// var missingIndexGet = classWithIndexSet[0] ??= 2;
+//                                        ^
+//
+// pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
+//  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
+// var missingIndexSet = classWithIndexGet[0] ??= 2;
+//                                        ^
+//
+// pkg/front_end/testcases/general/missing_toplevel.dart:30:37: Error: The getter 'property' isn't defined for the class 'EmptyClass'.
+//  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+// var missingPropertyGet = emptyClass.property;
+//                                     ^^^^^^^^
+//
+// pkg/front_end/testcases/general/missing_toplevel.dart:31:37: Error: The setter 'property' isn't defined for the class 'EmptyClass'.
+//  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+// var missingPropertySet = emptyClass.property = 42;
+//                                     ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class EmptyClass extends core::Object {
+  synthetic constructor •() → self::EmptyClass*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class ClassWithProperty extends core::Object {
+  field self::EmptyClass* property = null;
+  synthetic constructor •() → self::ClassWithProperty*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class ClassWithIndexSet extends core::Object {
+  synthetic constructor •() → self::ClassWithIndexSet*
+    : super core::Object::•()
+    ;
+  operator []=(core::int* index, core::int* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class ClassWithIndexGet extends core::Object {
+  synthetic constructor •() → self::ClassWithIndexGet*
+    : super core::Object::•()
+    ;
+  operator [](core::int* index) → core::int*
+    return 42;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::EmptyClass* emptyClass = new self::EmptyClass::•();
+static field self::ClassWithProperty* classWithProperty = new self::ClassWithProperty::•();
+static field self::ClassWithIndexSet* classWithIndexSet = new self::ClassWithIndexSet::•();
+static field self::ClassWithIndexGet* classWithIndexGet = new self::ClassWithIndexGet::•();
+static field dynamic missingBinary = let final self::ClassWithProperty* #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:27:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
+ - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+var missingBinary = classWithProperty.property += 2;
+                                               ^" in #t1.{self::ClassWithProperty::property}{self::EmptyClass*}{<unresolved>}.+(2) as{TypeError,ForDynamic} self::EmptyClass*;
+static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
+ - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
+var missingIndexGet = classWithIndexSet[0] ??= 2;
+                                       ^" in #t2{<unresolved>}.[](#t3) in #t4 == null ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5){(core::int*, core::int*) →* void} in #t5 : #t4;
+static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8){(core::int*) →* core::int*} in #t9 == null ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
+ - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
+var missingIndexSet = classWithIndexGet[0] ??= 2;
+                                       ^" in #t7{<unresolved>}.[]=(#t8, #t10) in #t10 : #t9;
+static field dynamic missingPropertyGet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:30:37: Error: The getter 'property' isn't defined for the class 'EmptyClass'.
+ - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+var missingPropertyGet = emptyClass.property;
+                                    ^^^^^^^^" in self::emptyClass{<unresolved>}.property;
+static field core::int* missingPropertySet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:31:37: Error: The setter 'property' isn't defined for the class 'EmptyClass'.
+ - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+var missingPropertySet = emptyClass.property = 42;
+                                    ^^^^^^^^" in self::emptyClass{<unresolved>}.property = 42;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/mixin.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin.dart.weak.modular.expect
new file mode 100644
index 0000000..9ec9ad2d
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin.dart.weak.modular.expect
@@ -0,0 +1,142 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class _B&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_B&Object&M1*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M1::m}();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _B&Object&M1&M2 = self::_B&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_B&Object&M1&M2*
+    : super self::_B&Object&M1::•()
+    ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M2::m}();
+}
+class B extends self::_B&Object&M1&M2 {
+  constructor •(dynamic value) → self::B*
+    : super self::_B&Object&M1&M2::•()
+    ;
+}
+abstract class M1 extends core::Object {
+  synthetic constructor •() → self::M1*
+    : super core::Object::•()
+    ;
+  method m() → dynamic
+    return core::print("M1");
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M2 extends core::Object {
+  synthetic constructor •() → self::M2*
+    : super core::Object::•()
+    ;
+  method m() → dynamic
+    return core::print("M2");
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&M1*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M1::m}();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&M1&M2*
+    : super self::_C&Object&M1::•()
+    ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M2::m}();
+}
+class C extends self::_C&Object&M1&M2 {
+  constructor •(dynamic value) → self::C*
+    : super self::_C&Object&M1&M2::•()
+    ;
+}
+abstract class G1<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::G1<self::G1::T*>*
+    : super core::Object::•()
+    ;
+  method m() → dynamic
+    return core::print(self::G1::T*);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _D&Object&G1<S extends core::Object* = dynamic> = core::Object with self::G1<self::_D&Object&G1::S*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_D&Object&G1<self::_D&Object&G1::S*>*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::G1::m}();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<S extends core::Object* = dynamic> extends self::_D&Object&G1<self::D::S*> {
+  synthetic constructor •() → self::D<self::D::S*>*
+    : super self::_D&Object&G1::•()
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(null).{self::_B&Object&M1&M2::m}(){() →* dynamic};
+  new self::C::•(null).{self::_C&Object&M1&M2::m}(){() →* dynamic};
+  new self::D::•<dynamic>().{self::_D&Object&G1::m}(){() →* dynamic};
+  new self::D::•<core::int*>().{self::_D&Object&G1::m}(){() →* dynamic};
+  new self::D::•<core::List<core::int*>*>().{self::_D&Object&G1::m}(){() →* dynamic};
+}
diff --git a/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.modular.expect
new file mode 100644
index 0000000..c6579d8
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart:20:13: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//   new Class('');
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Super extends core::Object {
+  field core::int* field = 42;
+  constructor •(core::int* field) → self::Super*
+    : self::Super::field = field, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class = self::Super with self::Mixin {
+  synthetic constructor •(core::int* field) → self::Class*
+    : super self::Super::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::Class::•(0);
+}
+static method error() → dynamic {
+  new self::Class::•(invalid-expression "pkg/front_end/testcases/general/mixin_application_inferred_parameter_type.dart:20:13: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  new Class('');
+            ^" in "" as{TypeError} core::int*);
+}
diff --git a/pkg/front_end/testcases/general/mixin_application_lub.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_application_lub.dart.weak.modular.expect
new file mode 100644
index 0000000..8972ec3
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_application_lub.dart.weak.modular.expect
@@ -0,0 +1,78 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Diagnosticable extends core::Object {
+  synthetic constructor •() → self::Diagnosticable*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _SomeClass&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_SomeClass&Object&Diagnosticable*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SomeClass extends self::_SomeClass&Object&Diagnosticable {
+  synthetic constructor •() → self::SomeClass*
+    : super self::_SomeClass&Object&Diagnosticable::•()
+    ;
+}
+abstract class _State&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_State&Object&Diagnosticable*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class State<T extends core::Object* = dynamic> extends self::_State&Object&Diagnosticable {
+  synthetic constructor •() → self::State<self::State::T*>*
+    : super self::_State&Object&Diagnosticable::•()
+    ;
+}
+class StateA extends self::State<dynamic> {
+  synthetic constructor •() → self::StateA*
+    : super self::State::•()
+    ;
+}
+class StateB extends self::State<core::int*> {
+  synthetic constructor •() → self::StateB*
+    : super self::State::•()
+    ;
+}
+static field self::StateA* a = new self::StateA::•();
+static field self::StateB* b = new self::StateB::•();
+static method foo<T extends core::Object* = dynamic>(self::foo::T* x) → dynamic {
+  core::print(self::foo::T*);
+}
+static method main() → dynamic {
+  self::Diagnosticable* x = let final self::StateA* #t1 = self::a in #t1 == null ?{self::Diagnosticable*} self::b : #t1;
+  self::foo<self::Diagnosticable*>(x);
+}
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_application_override.dart.weak.modular.expect
new file mode 100644
index 0000000..56cdffa
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart.weak.modular.expect
@@ -0,0 +1,413 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/mixin_application_override.dart:21:7: Error: The mixin application class 'A0' introduces an erroneous override of 'foo'.
+// class A0 = S with M;
+//       ^^
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+//
+// pkg/front_end/testcases/general/mixin_application_override.dart:22:7: Error: The mixin application class 'A1' introduces an erroneous override of 'foo'.
+// class A1 = S with M1, M;
+//       ^^
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+//
+// pkg/front_end/testcases/general/mixin_application_override.dart:23:7: Error: The mixin application class 'A2' introduces an erroneous override of 'foo'.
+// class A2 = S with M1, M2, M;
+//       ^^
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+//
+// pkg/front_end/testcases/general/mixin_application_override.dart:25:7: Error: Applying the mixin 'M' to 'S' introduces an erroneous override of 'foo'.
+// class A0X = S with M, MX;
+//       ^^^
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+//
+// pkg/front_end/testcases/general/mixin_application_override.dart:26:7: Error: Applying the mixin 'M' to 'S with M1' introduces an erroneous override of 'foo'.
+// class A1X = S with M1, M, MX;
+//       ^^^
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+//
+// pkg/front_end/testcases/general/mixin_application_override.dart:27:7: Error: Applying the mixin 'M' to 'S with M1, M2' introduces an erroneous override of 'foo'.
+// class A2X = S with M1, M2, M, MX;
+//       ^^^
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+//
+// pkg/front_end/testcases/general/mixin_application_override.dart:29:7: Error: Applying the mixin 'M' to 'S' introduces an erroneous override of 'foo'.
+// class B0 extends S with M {}
+//       ^^
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+//
+// pkg/front_end/testcases/general/mixin_application_override.dart:31:7: Error: Applying the mixin 'M' to 'S with M1' introduces an erroneous override of 'foo'.
+// class B1 extends S with M1, M {}
+//       ^^
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+//
+// pkg/front_end/testcases/general/mixin_application_override.dart:33:7: Error: Applying the mixin 'M' to 'S with M1, M2' introduces an erroneous override of 'foo'.
+// class B2 extends S with M1, M2, M {}
+//       ^^
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+//
+// pkg/front_end/testcases/general/mixin_application_override.dart:35:7: Error: Applying the mixin 'M' to 'S' introduces an erroneous override of 'foo'.
+// class B0X extends S with M, MX {}
+//       ^^^
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+//
+// pkg/front_end/testcases/general/mixin_application_override.dart:37:7: Error: Applying the mixin 'M' to 'S with M1' introduces an erroneous override of 'foo'.
+// class B1X extends S with M1, M, MX {}
+//       ^^^
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+//
+// pkg/front_end/testcases/general/mixin_application_override.dart:39:7: Error: Applying the mixin 'M' to 'S with M1, M2' introduces an erroneous override of 'foo'.
+// class B2X extends S with M1, M2, M, MX {}
+//       ^^^
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Context: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+//   foo() {}
+//   ^
+// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
+//   foo([x]) {}
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class S extends core::Object {
+  synthetic constructor •() → self::S*
+    : super core::Object::•()
+    ;
+  method foo([dynamic x = #C1]) → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M1 extends core::Object {
+  synthetic constructor •() → self::M1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M2 extends core::Object {
+  synthetic constructor •() → self::M2*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class MX extends core::Object {
+  synthetic constructor •() → self::MX*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A0 = self::S with self::M {
+  synthetic constructor •() → self::A0*
+    : super self::S::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::foo}();
+}
+abstract class _A1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A1&S&M1*
+    : super self::S::•()
+    ;
+}
+class A1 = self::_A1&S&M1 with self::M {
+  synthetic constructor •() → self::A1*
+    : super self::_A1&S&M1::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::foo}();
+}
+abstract class _A2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A2&S&M1*
+    : super self::S::•()
+    ;
+}
+abstract class _A2&S&M1&M2 = self::_A2&S&M1 with self::M2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A2&S&M1&M2*
+    : super self::_A2&S&M1::•()
+    ;
+}
+class A2 = self::_A2&S&M1&M2 with self::M {
+  synthetic constructor •() → self::A2*
+    : super self::_A2&S&M1&M2::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::foo}();
+}
+abstract class _A0X&S&M = self::S with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A0X&S&M*
+    : super self::S::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::foo}();
+}
+class A0X = self::_A0X&S&M with self::MX {
+  synthetic constructor •() → self::A0X*
+    : super self::_A0X&S&M::•()
+    ;
+}
+abstract class _A1X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A1X&S&M1*
+    : super self::S::•()
+    ;
+}
+abstract class _A1X&S&M1&M = self::_A1X&S&M1 with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A1X&S&M1&M*
+    : super self::_A1X&S&M1::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::foo}();
+}
+class A1X = self::_A1X&S&M1&M with self::MX {
+  synthetic constructor •() → self::A1X*
+    : super self::_A1X&S&M1&M::•()
+    ;
+}
+abstract class _A2X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A2X&S&M1*
+    : super self::S::•()
+    ;
+}
+abstract class _A2X&S&M1&M2 = self::_A2X&S&M1 with self::M2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A2X&S&M1&M2*
+    : super self::_A2X&S&M1::•()
+    ;
+}
+abstract class _A2X&S&M1&M2&M = self::_A2X&S&M1&M2 with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A2X&S&M1&M2&M*
+    : super self::_A2X&S&M1&M2::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::foo}();
+}
+class A2X = self::_A2X&S&M1&M2&M with self::MX {
+  synthetic constructor •() → self::A2X*
+    : super self::_A2X&S&M1&M2&M::•()
+    ;
+}
+abstract class _B0&S&M = self::S with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B0&S&M*
+    : super self::S::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::foo}();
+}
+class B0 extends self::_B0&S&M {
+  synthetic constructor •() → self::B0*
+    : super self::_B0&S&M::•()
+    ;
+}
+abstract class _B1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B1&S&M1*
+    : super self::S::•()
+    ;
+}
+abstract class _B1&S&M1&M = self::_B1&S&M1 with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B1&S&M1&M*
+    : super self::_B1&S&M1::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::foo}();
+}
+class B1 extends self::_B1&S&M1&M {
+  synthetic constructor •() → self::B1*
+    : super self::_B1&S&M1&M::•()
+    ;
+}
+abstract class _B2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B2&S&M1*
+    : super self::S::•()
+    ;
+}
+abstract class _B2&S&M1&M2 = self::_B2&S&M1 with self::M2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B2&S&M1&M2*
+    : super self::_B2&S&M1::•()
+    ;
+}
+abstract class _B2&S&M1&M2&M = self::_B2&S&M1&M2 with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B2&S&M1&M2&M*
+    : super self::_B2&S&M1&M2::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::foo}();
+}
+class B2 extends self::_B2&S&M1&M2&M {
+  synthetic constructor •() → self::B2*
+    : super self::_B2&S&M1&M2&M::•()
+    ;
+}
+abstract class _B0X&S&M = self::S with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B0X&S&M*
+    : super self::S::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::foo}();
+}
+abstract class _B0X&S&M&MX = self::_B0X&S&M with self::MX /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B0X&S&M&MX*
+    : super self::_B0X&S&M::•()
+    ;
+}
+class B0X extends self::_B0X&S&M&MX {
+  synthetic constructor •() → self::B0X*
+    : super self::_B0X&S&M&MX::•()
+    ;
+}
+abstract class _B1X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B1X&S&M1*
+    : super self::S::•()
+    ;
+}
+abstract class _B1X&S&M1&M = self::_B1X&S&M1 with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B1X&S&M1&M*
+    : super self::_B1X&S&M1::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::foo}();
+}
+abstract class _B1X&S&M1&M&MX = self::_B1X&S&M1&M with self::MX /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B1X&S&M1&M&MX*
+    : super self::_B1X&S&M1&M::•()
+    ;
+}
+class B1X extends self::_B1X&S&M1&M&MX {
+  synthetic constructor •() → self::B1X*
+    : super self::_B1X&S&M1&M&MX::•()
+    ;
+}
+abstract class _B2X&S&M1 = self::S with self::M1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B2X&S&M1*
+    : super self::S::•()
+    ;
+}
+abstract class _B2X&S&M1&M2 = self::_B2X&S&M1 with self::M2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B2X&S&M1&M2*
+    : super self::_B2X&S&M1::•()
+    ;
+}
+abstract class _B2X&S&M1&M2&M = self::_B2X&S&M1&M2 with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B2X&S&M1&M2&M*
+    : super self::_B2X&S&M1&M2::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::foo}();
+}
+abstract class _B2X&S&M1&M2&M&MX = self::_B2X&S&M1&M2&M with self::MX /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B2X&S&M1&M2&M&MX*
+    : super self::_B2X&S&M1&M2&M::•()
+    ;
+}
+class B2X extends self::_B2X&S&M1&M2&M&MX {
+  synthetic constructor •() → self::B2X*
+    : super self::_B2X&S&M1&M2&M&MX::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.modular.expect
new file mode 100644
index 0000000..94fa4c4
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_conflicts.dart.weak.modular.expect
@@ -0,0 +1,185 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/mixin_conflicts.dart:22:7: Error: The non-abstract class 'N2' is missing implementations for these members:
+//  - M.foo
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class N2 = Object with M2;
+//       ^^
+// pkg/front_end/testcases/general/mixin_conflicts.dart:7:3: Context: 'M.foo' is defined here.
+//   foo() {}
+//   ^^^
+//
+// pkg/front_end/testcases/general/mixin_conflicts.dart:29:7: Error: The non-abstract class 'C2' is missing implementations for these members:
+//  - M.foo
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class C2 extends Object with M2 {}
+//       ^^
+// pkg/front_end/testcases/general/mixin_conflicts.dart:7:3: Context: 'M.foo' is defined here.
+//   foo() {}
+//   ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class N = core::Object with self::M /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::N*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::foo}();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&N = core::Object with self::N /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&N*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::M::foo}();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::_C&Object&N {
+  synthetic constructor •() → self::C*
+    : super self::_C&Object&N::•()
+    ;
+}
+abstract class M2 extends core::Object implements self::M {
+  synthetic constructor •() → self::M2*
+    : super core::Object::•()
+    ;
+  method bar() → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class N2 = core::Object with self::M2 /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::N2*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method bar() → dynamic
+    return super.{self::M2::bar}();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class N3 = core::Object with self::M2 /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::N3*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method bar() → dynamic
+    return super.{self::M2::bar}();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C2&Object&M2 = core::Object with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C2&Object&M2*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method bar() → dynamic
+    return super.{self::M2::bar}();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C2 extends self::_C2&Object&M2 {
+  synthetic constructor •() → self::C2*
+    : super self::_C2&Object&M2::•()
+    ;
+}
+abstract class _C3&Object&M2 = core::Object with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C3&Object&M2*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method bar() → dynamic
+    return super.{self::M2::bar}();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C3 extends self::_C3&Object&M2 {
+  synthetic constructor •() → self::C3*
+    : super self::_C3&Object&M2::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.modular.expect
new file mode 100644
index 0000000..eba1d44
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.weak.modular.expect
@@ -0,0 +1,78 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart:9:15: Error: Type variables can't be used as constants.
+//   C({a: 0, b: T}) : trace = "a: $a, b: $b";
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  field core::String* trace;
+  constructor •({dynamic a = #C1, dynamic b = invalid-expression "Type variables can't be used as constants."}) → self::C<self::C::T*>*
+    : self::C::trace = "a: ${a}, b: ${b}", super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D = self::C<core::String*> with self::M {
+  synthetic constructor •({dynamic a = #C1, dynamic b = #C2}) → self::D*
+    : super self::C::•(a: a, b: b)
+    ;
+}
+class E extends self::D {
+  synthetic constructor •() → self::E*
+    : super self::D::•()
+    ;
+}
+abstract class _F&C&M = self::C<core::int*> with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •({dynamic a = #C1, dynamic b = #C3}) → self::_F&C&M*
+    : super self::C::•(a: a, b: b)
+    ;
+}
+class F extends self::_F&C&M {
+  synthetic constructor •() → self::F*
+    : super self::_F&C&M::•()
+    ;
+}
+static method main() → dynamic {
+  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<core::Object*>().{self::C::trace}{core::String*});
+  exp::Expect::stringEquals("a: 0, b: T", new self::C::•<dynamic>().{self::C::trace}{core::String*});
+  exp::Expect::stringEquals("a: 0, b: String", new self::D::•().{self::C::trace}{core::String*});
+  exp::Expect::stringEquals("a: 0, b: String", new self::E::•().{self::C::trace}{core::String*});
+  exp::Expect::stringEquals("a: 0, b: int", new self::F::•().{self::C::trace}{core::String*});
+}
+
+constants  {
+  #C1 = 0
+  #C2 = TypeLiteralConstant(core::String*)
+  #C3 = TypeLiteralConstant(core::int*)
+}
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.modular.expect
new file mode 100644
index 0000000..503a71e
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.modular.expect
@@ -0,0 +1,359 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef TakeInts = (core::int*, core::int*, core::int*, core::int*, core::int*) →* void;
+typedef TakeObjectsAndInts = (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void;
+typedef TakeObjects = (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void;
+typedef TakeOptionalInts = ([core::int*, core::int*, core::int*, core::int*]) →* void;
+typedef TakeOptionalObjectsAndInts = ([core::Object*, core::int*, core::Object*, core::int*]) →* void;
+typedef TakeNamedInts = ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void;
+typedef TakeNamedObjectsAndInts = ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void;
+class M1 extends core::Object {
+  synthetic constructor •() → self::M1*
+    : super core::Object::•()
+    ;
+  method method(covariant-by-declaration core::int* a, core::int* b) → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M2 extends core::Object {
+  synthetic constructor •() → self::M2*
+    : super core::Object::•()
+    ;
+  method method(core::int* a, covariant-by-declaration core::int* b) → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&M1*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(covariant-by-declaration core::int* a, core::int* b) → dynamic
+    return super.{self::M1::method}(a, b);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&M1&M2*
+    : super self::_C&Object&M1::•()
+    ;
+  forwarding-stub method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b) → dynamic
+    return super.{self::M2::method}(a, b);
+}
+class C extends self::_C&Object&M1&M2 {
+  synthetic constructor •() → self::C*
+    : super self::_C&Object&M1&M2::•()
+    ;
+}
+class Direct extends core::Object {
+  synthetic constructor •() → self::Direct*
+    : super core::Object::•()
+    ;
+  method positional(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
+  method optional([covariant-by-declaration core::int* a = #C1, core::int* b = #C1, covariant-by-declaration core::int* c = #C1, core::int* d = #C1]) → void {}
+  method named({covariant-by-declaration core::int* a = #C1, core::int* b = #C1, covariant-by-declaration core::int* c = #C1, core::int* d = #C1}) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Inherited extends self::Direct {
+  synthetic constructor •() → self::Inherited*
+    : super self::Direct::•()
+    ;
+}
+class Override1 extends core::Object {
+  synthetic constructor •() → self::Override1*
+    : super core::Object::•()
+    ;
+  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Override2 extends self::Override1 {
+  synthetic constructor •() → self::Override2*
+    : super self::Override1::•()
+    ;
+  method method(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
+}
+class Override3 extends self::Override2 {
+  synthetic constructor •() → self::Override3*
+    : super self::Override2::•()
+    ;
+  method method(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
+}
+abstract class Implement1 extends core::Object {
+  synthetic constructor •() → self::Implement1*
+    : super core::Object::•()
+    ;
+  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Implement2 extends core::Object {
+  synthetic constructor •() → self::Implement2*
+    : super core::Object::•()
+    ;
+  method method(core::int* a, covariant-by-declaration core::int* b, core::int* c, core::int* d, core::int* e) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Implement3 extends core::Object {
+  synthetic constructor •() → self::Implement3*
+    : super core::Object::•()
+    ;
+  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Implement4 extends core::Object implements self::Implement3 {
+  synthetic constructor •() → self::Implement4*
+    : super core::Object::•()
+    ;
+  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, core::int* e) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Implement5 extends core::Object implements self::Implement1, self::Implement2, self::Implement4 {
+  synthetic constructor •() → self::Implement5*
+    : super core::Object::•()
+    ;
+  method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1*
+    : super core::Object::•()
+    ;
+  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2*
+    : super core::Object::•()
+    ;
+  method method(core::int* a, covariant-by-declaration core::int* b, core::int* c, core::int* d, core::int* e) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Mixin1 extends core::Object {
+  synthetic constructor •() → self::Mixin1*
+    : super core::Object::•()
+    ;
+  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Mixin2 extends core::Object {
+  synthetic constructor •() → self::Mixin2*
+    : super core::Object::•()
+    ;
+  method method(core::int* a, core::int* b, core::int* c, covariant-by-declaration core::int* d, core::int* e) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Superclass extends core::Object {
+  synthetic constructor •() → self::Superclass*
+    : super core::Object::•()
+    ;
+  method method(core::int* a, core::int* b, core::int* c, core::int* d, covariant-by-declaration core::int* e) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Mixed&Superclass&Mixin1 = self::Superclass with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixed&Superclass&Mixin1*
+    : super self::Superclass::•()
+    ;
+  forwarding-stub method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, covariant-by-declaration core::int* e) → void
+    return super.{self::Mixin1::method}(a, b, c, d, e);
+}
+abstract class _Mixed&Superclass&Mixin1&Mixin2 = self::_Mixed&Superclass&Mixin1 with self::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2*
+    : super self::_Mixed&Superclass&Mixin1::•()
+    ;
+  forwarding-stub method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void
+    return super.{self::Mixin2::method}(a, b, c, d, e);
+}
+class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::Mixed*
+    : super self::_Mixed&Superclass&Mixin1&Mixin2::•()
+    ;
+  forwarding-stub method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void
+    return super.{self::Mixin2::method}(a, b, c, d, e);
+}
+static method main() → void {
+  self::testDirect();
+  self::testInherited();
+  self::testOverridden();
+  self::testImplemented();
+  self::testMixed();
+}
+static method testDirect() → void {
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void positional = new self::Direct::•().{self::Direct::positional}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
+  self::isTrue(positional is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
+  self::isTrue(positional is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
+  ([core::int*, core::int*, core::int*, core::int*]) →* void optional = new self::Direct::•().{self::Direct::optional}{([core::int*, core::int*, core::int*, core::int*]) →* void};
+  self::isTrue(optional is ([core::int*, core::int*, core::int*, core::int*]) →* void);
+  self::isTrue(optional is ([core::Object*, core::int*, core::Object*, core::int*]) →* void);
+  ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void named = new self::Direct::•().{self::Direct::named}{({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void};
+  self::isTrue(named is ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void);
+  self::isTrue(named is ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void);
+}
+static method testInherited() → void {
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void positional = new self::Inherited::•().{self::Direct::positional}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
+  self::isTrue(positional is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
+  self::isTrue(positional is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
+  ([core::int*, core::int*, core::int*, core::int*]) →* void optional = new self::Inherited::•().{self::Direct::optional}{([core::int*, core::int*, core::int*, core::int*]) →* void};
+  self::isTrue(optional is ([core::int*, core::int*, core::int*, core::int*]) →* void);
+  self::isTrue(optional is ([core::Object*, core::int*, core::Object*, core::int*]) →* void);
+  ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void named = new self::Inherited::•().{self::Direct::named}{({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void};
+  self::isTrue(named is ({a: core::int*, b: core::int*, c: core::int*, d: core::int*}) →* void);
+  self::isTrue(named is ({a: core::Object*, b: core::int*, c: core::Object*, d: core::int*}) →* void);
+}
+static method testOverridden() → void {
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method2 = new self::Override2::•().{self::Override2::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
+  self::isTrue(method2 is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
+  self::isTrue(method2 is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method3 = new self::Override3::•().{self::Override3::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
+  self::isTrue(method3 is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
+  self::isTrue(method3 is (core::Object*, core::int*, core::Object*, core::int*, core::int*) →* void);
+}
+static method testImplemented() → void {
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method = new self::Implement5::•().{self::Implement5::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
+  self::isTrue(method is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
+  self::isTrue(method is (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void);
+}
+static method testMixed() → void {
+  (core::int*, core::int*, core::int*, core::int*, core::int*) →* void method = new self::Mixed::•().{self::Mixed::method}{(core::int*, core::int*, core::int*, core::int*, core::int*) →* void};
+  self::isTrue(method is (core::int*, core::int*, core::int*, core::int*, core::int*) →* void);
+  self::isTrue(method is (core::Object*, core::Object*, core::Object*, core::Object*, core::Object*) →* void);
+}
+static method isTrue(core::bool* value) → void {
+  if(!value)
+    throw "Expected true";
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.modular.expect
new file mode 100644
index 0000000..8a65e36
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.modular.expect
@@ -0,0 +1,99 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Superclass extends core::Object {
+  synthetic constructor •() → self::Superclass*
+    : super core::Object::•()
+    ;
+  method method1(core::num* argument1, core::num* argument2) → core::String*
+    return "Superclass";
+  method method2(core::num* argument1, core::num* argument2) → core::String*
+    return "Superclass";
+  method method3(core::num* argument1, covariant-by-declaration core::int* argument2) → core::String*
+    return "Superclass";
+  method method4(core::num* argument1, covariant-by-declaration core::num* argument2) → core::String*
+    return "Superclass";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin*
+    : super core::Object::•()
+    ;
+  method method1(core::num* argument1, core::num* argument2) → core::String*
+    return "Mixin";
+  method method2(covariant-by-declaration core::int* argument1, core::num* argument2) → core::String*
+    return "Mixin";
+  method method3(core::num* argument1, core::num* argument2) → core::String*
+    return "Mixin";
+  method method4(covariant-by-declaration core::int* argument1, core::int* argument2) → core::String*
+    return "Mixin";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Class&Superclass&Mixin = self::Superclass with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Superclass&Mixin*
+    : super self::Superclass::•()
+    ;
+  mixin-super-stub method method1(core::num* argument1, core::num* argument2) → core::String*
+    return super.{self::Mixin::method1}(argument1, argument2);
+  mixin-super-stub method method2(covariant-by-declaration core::int* argument1, core::num* argument2) → core::String*
+    return super.{self::Mixin::method2}(argument1, argument2);
+  forwarding-stub method method3(core::num* argument1, covariant-by-declaration core::num* argument2) → core::String*
+    return super.{self::Mixin::method3}(argument1, argument2);
+  forwarding-stub method method4(covariant-by-declaration core::int* argument1, covariant-by-declaration core::int* argument2) → core::String*
+    return super.{self::Mixin::method4}(argument1, argument2);
+}
+class Class extends self::_Class&Superclass&Mixin {
+  synthetic constructor •() → self::Class*
+    : super self::_Class&Superclass&Mixin::•()
+    ;
+}
+static method main() → dynamic {
+  self::Class* c = new self::Class::•();
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::int*, core::num*) →* core::String*});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::int*, core::int*) →* core::String*});
+  self::Superclass* s = c;
+  self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5){(core::num*, core::num*) →* core::String*});
+  self::throws(() → core::String* => s.{self::Superclass::method2}(0.5, 1.5){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", s.{self::Superclass::method3}(0.5, 1){(core::num*, core::int*) →* core::String*});
+  self::throws(() → core::String* => s.{self::Superclass::method4}(0.5, 1){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", s.{self::Superclass::method4}(1, 0.5){(core::num*, core::num*) →* core::String*});
+  self::Mixin* m = c;
+  self::expect("Mixin", m.{self::Mixin::method1}(0, 1){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", m.{self::Mixin::method2}(0, 1){(core::int*, core::num*) →* core::String*});
+  self::expect("Mixin", m.{self::Mixin::method3}(0, 1){(core::num*, core::num*) →* core::String*});
+  self::expect("Mixin", m.{self::Mixin::method4}(0, 1){(core::int*, core::int*) →* core::String*});
+}
+static method expect(dynamic expected, dynamic actual) → void {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() →* void f) → void {
+  try {
+    f(){() →* void};
+  }
+  on dynamic catch(final dynamic _) {
+    return;
+  }
+  throw "Expected exception";
+}
diff --git a/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.modular.expect
new file mode 100644
index 0000000..964cf88
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_from_patch/main.dart.weak.modular.expect
@@ -0,0 +1,91 @@
+library;
+import self as self;
+import "dart:test" as test;
+
+import "dart:test";
+
+static method main() → dynamic {
+  new test::Class::patched();
+  new test::Class::unpatched();
+  new test::SubClass::patched();
+  new test::SubClass::unpatched();
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/mixin_from_patch/origin_lib.dart:14:12: Error: The superclass, 'Class with Mixin', has no unnamed constructor that takes no arguments.
+//   external SubClass.patched();
+//            ^^^^^^^
+//
+import self as test;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+
+@#C1
+class Class extends core::Object {
+  constructor _internal({core::bool* value = #C2}) → test::Class*
+    : super core::Object::•()
+    ;
+  @#C1
+  constructor patched() → test::Class*
+    : this test::Class::_internal()
+    ;
+  constructor unpatched() → test::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _SubClass&Class&Mixin = test::Class with test::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor patched() → test::_SubClass&Class&Mixin*
+    : super test::Class::patched()
+    ;
+  synthetic constructor unpatched() → test::_SubClass&Class&Mixin*
+    : super test::Class::unpatched()
+    ;
+  synthetic constructor _internal({core::bool* value = #C2}) → test::_SubClass&Class&Mixin*
+    : super test::Class::_internal(value: value)
+    ;
+}
+@#C1
+class SubClass extends test::_SubClass&Class&Mixin {
+  constructor _internal() → test::SubClass*
+    : super test::_SubClass&Class&Mixin::_internal(value: true)
+    ;
+  @#C1
+  constructor patched() → test::SubClass*
+    : this test::SubClass::_internal()
+    ;
+  constructor unpatched() → test::SubClass*
+    : super test::_SubClass&Class&Mixin::unpatched()
+    ;
+}
+
+constants  {
+  #C1 = _in::_Patch {}
+  #C2 = false
+}
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.modular.expect
new file mode 100644
index 0000000..df2967e
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.modular.expect
@@ -0,0 +1,78 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<T extends self::A*> extends core::Object {
+  covariant-by-class field self::C::T* _field = null;
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method foo(covariant-by-class self::C::T* x) → dynamic {
+    this.{self::C::_field} = x;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C<self::B*> {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+}
+abstract class _Foo&Object&C = core::Object with self::C<self::B*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Foo&Object&C*
+    : super core::Object::•()
+    ;
+  mixin-super-stub get _field() → self::B*
+    return super.{self::C::_field};
+  mixin-super-stub set _field(covariant-by-class self::B* value) → void
+    return super.{self::C::_field} = value;
+  mixin-super-stub method foo(covariant-by-class self::B* x) → dynamic
+    return super.{self::C::foo}(x);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Foo extends self::_Foo&Object&C {
+  synthetic constructor •() → self::Foo*
+    : super self::_Foo&Object&C::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {
+  self::Foo* foo = new self::Foo::•();
+  foo.{self::_Foo&Object&C::foo}(new self::B::•()){(self::B*) →* dynamic};
+}
diff --git a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.modular.expect
new file mode 100644
index 0000000..194538f
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.weak.modular.expect
@@ -0,0 +1,70 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/mixin_interface_conflict.dart:13:7: Error: Class 'B with C' inherits multiple members named 'n' with incompatible signatures.
+// Try adding a declaration of 'n' to 'B with C'.
+// mixin M on B, C {}
+//       ^^^^^^
+// pkg/front_end/testcases/general/mixin_interface_conflict.dart:6:11: Context: This is one of the overridden members.
+//   int get n => 1;
+//           ^
+// pkg/front_end/testcases/general/mixin_interface_conflict.dart:10:14: Context: This is one of the overridden members.
+//   double get n => 2.0;
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get n() → core::int*
+    return 1;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  get n() → core::double*
+    return 2.0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _M&B&C extends core::Object implements self::B, self::C /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_M&B&C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M extends self::_M&B&C /*isMixinDeclaration*/  {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.weak.modular.expect
new file mode 100644
index 0000000..32aae43
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.weak.modular.expect
@@ -0,0 +1,197 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super*
+    : super core::Object::•()
+    ;
+  method concreteExtendsConcreteMixin() → void {}
+  method concreteExtendsAbstractMixin() → void {}
+  abstract method abstractExtendsConcreteMixin() → void;
+  abstract method abstractExtendsAbstractMixin() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class MixinClass extends core::Object {
+  synthetic constructor •() → self::MixinClass*
+    : super core::Object::•()
+    ;
+  method concreteExtendsConcreteMixin() → void {}
+  abstract method concreteExtendsAbstractMixin() → void;
+  method concreteMixin() → void {}
+  method abstractExtendsConcreteMixin() → void {}
+  abstract method abstractExtendsAbstractMixin() → void;
+  abstract method abstractMixin() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  method concreteExtendsConcreteMixin() → void {}
+  abstract method concreteExtendsAbstractMixin() → void;
+  method concreteMixin() → void {}
+  method abstractExtendsConcreteMixin() → void {}
+  abstract method abstractExtendsAbstractMixin() → void;
+  abstract method abstractMixin() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class ClassEqMixinClass = self::Super with self::MixinClass {
+  synthetic constructor •() → self::ClassEqMixinClass*
+    : super self::Super::•()
+    ;
+  mixin-super-stub method concreteExtendsConcreteMixin() → void
+    return super.{self::MixinClass::concreteExtendsConcreteMixin}();
+  abstract mixin-stub method concreteExtendsAbstractMixin() → void; -> self::MixinClass::concreteExtendsAbstractMixin
+  mixin-super-stub method concreteMixin() → void
+    return super.{self::MixinClass::concreteMixin}();
+  mixin-super-stub method abstractExtendsConcreteMixin() → void
+    return super.{self::MixinClass::abstractExtendsConcreteMixin}();
+  abstract mixin-stub method abstractExtendsAbstractMixin() → void; -> self::MixinClass::abstractExtendsAbstractMixin
+  abstract mixin-stub method abstractMixin() → void; -> self::MixinClass::abstractMixin
+}
+abstract class _ClassExtendsMixinClass&Super&MixinClass = self::Super with self::MixinClass /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassExtendsMixinClass&Super&MixinClass*
+    : super self::Super::•()
+    ;
+  mixin-super-stub method concreteExtendsConcreteMixin() → void
+    return super.{self::MixinClass::concreteExtendsConcreteMixin}();
+  abstract mixin-stub method concreteExtendsAbstractMixin() → void; -> self::MixinClass::concreteExtendsAbstractMixin
+  mixin-super-stub method concreteMixin() → void
+    return super.{self::MixinClass::concreteMixin}();
+  mixin-super-stub method abstractExtendsConcreteMixin() → void
+    return super.{self::MixinClass::abstractExtendsConcreteMixin}();
+  abstract mixin-stub method abstractExtendsAbstractMixin() → void; -> self::MixinClass::abstractExtendsAbstractMixin
+  abstract mixin-stub method abstractMixin() → void; -> self::MixinClass::abstractMixin
+}
+abstract class ClassExtendsMixinClass extends self::_ClassExtendsMixinClass&Super&MixinClass {
+  synthetic constructor •() → self::ClassExtendsMixinClass*
+    : super self::_ClassExtendsMixinClass&Super&MixinClass::•()
+    ;
+}
+abstract class ClassEqMixin = self::Super with self::Mixin {
+  synthetic constructor •() → self::ClassEqMixin*
+    : super self::Super::•()
+    ;
+  mixin-super-stub method concreteExtendsConcreteMixin() → void
+    return super.{self::Mixin::concreteExtendsConcreteMixin}();
+  abstract mixin-stub method concreteExtendsAbstractMixin() → void; -> self::Mixin::concreteExtendsAbstractMixin
+  mixin-super-stub method concreteMixin() → void
+    return super.{self::Mixin::concreteMixin}();
+  mixin-super-stub method abstractExtendsConcreteMixin() → void
+    return super.{self::Mixin::abstractExtendsConcreteMixin}();
+  abstract mixin-stub method abstractExtendsAbstractMixin() → void; -> self::Mixin::abstractExtendsAbstractMixin
+  abstract mixin-stub method abstractMixin() → void; -> self::Mixin::abstractMixin
+}
+abstract class _ClassExtendsMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassExtendsMixin&Super&Mixin*
+    : super self::Super::•()
+    ;
+  mixin-super-stub method concreteExtendsConcreteMixin() → void
+    return super.{self::Mixin::concreteExtendsConcreteMixin}();
+  abstract mixin-stub method concreteExtendsAbstractMixin() → void; -> self::Mixin::concreteExtendsAbstractMixin
+  mixin-super-stub method concreteMixin() → void
+    return super.{self::Mixin::concreteMixin}();
+  mixin-super-stub method abstractExtendsConcreteMixin() → void
+    return super.{self::Mixin::abstractExtendsConcreteMixin}();
+  abstract mixin-stub method abstractExtendsAbstractMixin() → void; -> self::Mixin::abstractExtendsAbstractMixin
+  abstract mixin-stub method abstractMixin() → void; -> self::Mixin::abstractMixin
+}
+abstract class ClassExtendsMixin extends self::_ClassExtendsMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassExtendsMixin*
+    : super self::_ClassExtendsMixin&Super&Mixin::•()
+    ;
+}
+abstract class SubclassEqMixinClass extends self::ClassEqMixinClass {
+  synthetic constructor •() → self::SubclassEqMixinClass*
+    : super self::ClassEqMixinClass::•()
+    ;
+  method method() → dynamic {
+    this.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::concreteExtendsAbstractMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::concreteMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::abstractExtendsAbstractMixin}(){() →* void};
+    this.{self::ClassEqMixinClass::abstractMixin}(){() →* void};
+    super.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}();
+    super.{self::Super::concreteExtendsAbstractMixin}();
+    super.{self::ClassEqMixinClass::concreteMixin}();
+    super.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}();
+  }
+}
+abstract class SubclassExtendsMixinClass extends self::ClassExtendsMixinClass {
+  synthetic constructor •() → self::SubclassExtendsMixinClass*
+    : super self::ClassExtendsMixinClass::•()
+    ;
+  method method() → dynamic {
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsAbstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsAbstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractMixin}(){() →* void};
+    super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}();
+    super.{self::Super::concreteExtendsAbstractMixin}();
+    super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}();
+    super.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}();
+  }
+}
+abstract class SubclassEqMixin extends self::ClassEqMixin {
+  synthetic constructor •() → self::SubclassEqMixin*
+    : super self::ClassEqMixin::•()
+    ;
+  method method() → dynamic {
+    this.{self::ClassEqMixin::concreteExtendsConcreteMixin}(){() →* void};
+    this.{self::ClassEqMixin::concreteExtendsAbstractMixin}(){() →* void};
+    this.{self::ClassEqMixin::concreteMixin}(){() →* void};
+    this.{self::ClassEqMixin::abstractExtendsConcreteMixin}(){() →* void};
+    this.{self::ClassEqMixin::abstractExtendsAbstractMixin}(){() →* void};
+    this.{self::ClassEqMixin::abstractMixin}(){() →* void};
+    super.{self::ClassEqMixin::concreteExtendsConcreteMixin}();
+    super.{self::Super::concreteExtendsAbstractMixin}();
+    super.{self::ClassEqMixin::concreteMixin}();
+    super.{self::ClassEqMixin::abstractExtendsConcreteMixin}();
+  }
+}
+abstract class SubclassExtendsMixin extends self::ClassExtendsMixin {
+  synthetic constructor •() → self::SubclassExtendsMixin*
+    : super self::ClassExtendsMixin::•()
+    ;
+  method method() → dynamic {
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsAbstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsAbstractMixin}(){() →* void};
+    this.{self::_ClassExtendsMixin&Super&Mixin::abstractMixin}(){() →* void};
+    super.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}();
+    super.{self::Super::concreteExtendsAbstractMixin}();
+    super.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}();
+    super.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}();
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.modular.expect
new file mode 100644
index 0000000..526ec74
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_super_repeated.dart.weak.modular.expect
@@ -0,0 +1,83 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class M extends core::Object {
+  field dynamic m = null;
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class N extends self::M {
+  synthetic constructor •() → self::N*
+    : super self::M::•()
+    ;
+  set superM(dynamic value) → void {
+    super.{self::M::m} = value;
+  }
+  get superM() → dynamic
+    return super.{self::M::m};
+}
+class S extends core::Object {
+  synthetic constructor •() → self::S*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Named&S&M = self::S with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Named&S&M*
+    : super self::S::•()
+    ;
+  mixin-super-stub get m() → dynamic
+    return super.{self::M::m};
+  mixin-super-stub set m(dynamic value) → void
+    return super.{self::M::m} = value;
+}
+abstract class _Named&S&M&N = self::_Named&S&M with self::N /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Named&S&M&N*
+    : super self::_Named&S&M::•()
+    ;
+  mixin-super-stub get superM() → dynamic
+    return super.{self::N::superM};
+  mixin-super-stub set superM(dynamic value) → void
+    return super.{self::N::superM} = value;
+}
+class Named = self::_Named&S&M&N with self::M {
+  synthetic constructor •() → self::Named*
+    : super self::_Named&S&M&N::•()
+    ;
+  mixin-super-stub get m() → dynamic
+    return super.{self::M::m};
+  mixin-super-stub set m(dynamic value) → void
+    return super.{self::M::m} = value;
+}
+static method main() → dynamic {
+  self::Named* named = new self::Named::•();
+  named.{self::Named::m} = 42;
+  named.{self::_Named&S&M&N::superM} = 87;
+  if(!(named.{self::Named::m}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 42)) {
+    throw "Bad mixin translation of set:superM";
+  }
+  if(!(named.{self::_Named&S&M&N::superM}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 87)) {
+    throw "Bad mixin translation of get:superM";
+  }
+}
diff --git a/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.modular.expect
new file mode 100644
index 0000000..e89e537
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_with_static_member.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class _A&B&M = self::B with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&B&M*
+    : super self::B::•()
+    ;
+}
+class A extends self::_A&B&M {
+  synthetic constructor •() → self::A*
+    : super self::_A&B&M::•()
+    ;
+}
+class B extends core::Object {
+  final field core::Object* m = null;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  static method m() → core::Object*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::A::•();
+}
diff --git a/pkg/front_end/testcases/general/named_function_scope.dart.weak.modular.expect b/pkg/front_end/testcases/general/named_function_scope.dart.weak.modular.expect
new file mode 100644
index 0000000..8ae3c40
--- /dev/null
+++ b/pkg/front_end/testcases/general/named_function_scope.dart.weak.modular.expect
@@ -0,0 +1,195 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/named_function_scope.dart:26:13: Error: A function expression can't have a name.
+//     var x = T() {};
+//             ^
+//
+// pkg/front_end/testcases/general/named_function_scope.dart:31:9: Error: Can't declare 'V' because it was already used in this scope.
+//     var V;
+//         ^
+// pkg/front_end/testcases/general/named_function_scope.dart:29:5: Context: Previous use of 'V'.
+//     V v;
+//     ^
+//
+// pkg/front_end/testcases/general/named_function_scope.dart:36:9: Error: Can't declare 'V' because it was already used in this scope.
+//     var V = null;
+//         ^
+// pkg/front_end/testcases/general/named_function_scope.dart:34:5: Context: Previous use of 'V'.
+//     V v;
+//     ^
+//
+// pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: A function expression can't have a name.
+//     var x = T T() {};
+//               ^
+//
+// pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
+//     var x = T T() {};
+//               ^
+// pkg/front_end/testcases/general/named_function_scope.dart:41:13: Context: Previous use of 'T'.
+//     var x = T T() {};
+//             ^
+//
+// pkg/front_end/testcases/general/named_function_scope.dart:47:7: Error: Can't declare 'V' because it was already used in this scope.
+//     V V;
+//       ^
+// pkg/front_end/testcases/general/named_function_scope.dart:47:5: Context: Previous use of 'V'.
+//     V V;
+//     ^
+//
+// pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: A function expression can't have a name.
+//     var x = T<T>() {};
+//             ^
+//
+// pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
+//     var x = T<T>() {};
+//             ^
+// pkg/front_end/testcases/general/named_function_scope.dart:52:15: Context: Previous declaration of 'T'.
+//     var x = T<T>() {};
+//               ^
+//
+// pkg/front_end/testcases/general/named_function_scope.dart:56:7: Error: Can't declare 'T' because it was already used in this scope.
+//     T T() {}
+//       ^
+// pkg/front_end/testcases/general/named_function_scope.dart:55:5: Context: Previous use of 'T'.
+//     T t;
+//     ^
+//
+// pkg/front_end/testcases/general/named_function_scope.dart:59:7: Error: Can't declare 'T' because it was already used in this scope.
+//     T T() {}
+//       ^
+// pkg/front_end/testcases/general/named_function_scope.dart:59:5: Context: Previous use of 'T'.
+//     T T() {}
+//     ^
+//
+// pkg/front_end/testcases/general/named_function_scope.dart:63:7: Error: Can't declare 'T' because it was already used in this scope.
+//     T T(T t) {}
+//       ^
+// pkg/front_end/testcases/general/named_function_scope.dart:62:5: Context: Previous use of 'T'.
+//     T t;
+//     ^
+//
+// pkg/front_end/testcases/general/named_function_scope.dart:66:7: Error: Can't declare 'T' because it was already used in this scope.
+//     T T(T t) {}
+//       ^
+// pkg/front_end/testcases/general/named_function_scope.dart:66:5: Context: Previous use of 'T'.
+//     T T(T t) {}
+//     ^
+//
+// pkg/front_end/testcases/general/named_function_scope.dart:69:12: Error: 'T' isn't a type.
+//     void T(T t) {}
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class T extends core::Object {
+  synthetic constructor •() → self::T*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class V extends core::Object {
+  synthetic constructor •() → self::V*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  self::T* t;
+  self::V* v;
+  {
+    function T() → Null {}
+  }
+  {
+    dynamic v;
+  }
+  {
+    self::T* t;
+    () →* Null x = let final () →* Null T = () → Null {} in T;
+  }
+  {
+    self::V* v;
+    invalid-type V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:31:9: Error: Can't declare 'V' because it was already used in this scope.
+    var V;
+        ^";
+  }
+  {
+    self::V* v;
+    invalid-type V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:36:9: Error: Can't declare 'V' because it was already used in this scope.
+    var V = null;
+        ^" in null;
+  }
+  {
+    () →* Null x = let final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:41:15: Error: Can't declare 'T' because it was already used in this scope.
+    var x = T T() {};
+              ^" in let final () →* Null T = () → Null {} in T;
+  }
+  {
+    self::V* V = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:47:7: Error: Can't declare 'V' because it was already used in this scope.
+    V V;
+      ^";
+  }
+  {
+    <T extends core::Object* = dynamic>() →* Null x = let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:52:13: Error: 'T' is already declared in this scope.
+    var x = T<T>() {};
+            ^" in let final <T extends core::Object* = dynamic>() →* Null T = <T extends core::Object* = dynamic>() → Null {} in T;
+  }
+  {
+    self::T* t;
+    {
+      invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:56:7: Error: Can't declare 'T' because it was already used in this scope.
+    T T() {}
+      ^";
+      function T() → self::T* {}
+    }
+  }
+  {
+    {
+      invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:59:7: Error: Can't declare 'T' because it was already used in this scope.
+    T T() {}
+      ^";
+      function T() → self::T* {}
+    }
+  }
+  {
+    self::T* t;
+    {
+      invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:63:7: Error: Can't declare 'T' because it was already used in this scope.
+    T T(T t) {}
+      ^";
+      function T(self::T* t) → self::T* {}
+    }
+  }
+  {
+    {
+      invalid-expression "pkg/front_end/testcases/general/named_function_scope.dart:66:7: Error: Can't declare 'T' because it was already used in this scope.
+    T T(T t) {}
+      ^";
+      function T(self::T* t) → self::T* {}
+    }
+  }
+  {
+    function T(invalid-type t) → void {}
+  }
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/general/named_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/general/named_parameters.dart.weak.modular.expect
new file mode 100644
index 0000000..ad0b537
--- /dev/null
+++ b/pkg/front_end/testcases/general/named_parameters.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Superclass extends core::Object {
+  synthetic constructor •() → self::Superclass
+    : super core::Object::•()
+    ;
+  method foo({dynamic alpha = #C1, dynamic beta = #C1}) → dynamic {}
+  method bar({dynamic beta = #C1, dynamic alpha = #C1}) → dynamic {}
+  method namedCallback(({alpha: core::String, beta: core::int}) → dynamic callback) → dynamic {
+    callback(alpha: "one", beta: 2){({alpha: core::String, beta: core::int}) → dynamic};
+    callback(beta: 1, alpha: "two"){({alpha: core::String, beta: core::int}) → dynamic};
+  }
+}
+class Subclass extends self::Superclass {
+  synthetic constructor •() → self::Subclass
+    : super self::Superclass::•()
+    ;
+  method foo({dynamic beta = #C1, dynamic alpha = #C1}) → dynamic {}
+  method bar({dynamic alpha = #C1, dynamic beta = #C1}) → dynamic {}
+  method namedCallback(({alpha: core::String, beta: core::int}) → dynamic callback) → dynamic {}
+}
+static method topLevelNamed(dynamic beta, dynamic alpha, {dynamic gamma = #C1, dynamic delta = #C1}) → dynamic {}
+static method topLevelOptional(dynamic beta, dynamic alpha, [dynamic gamma = #C1, dynamic delta = #C1]) → dynamic {}
+static method main() → dynamic {
+  new self::Subclass::•().{self::Subclass::foo}(beta: 1, alpha: 2){({alpha: dynamic, beta: dynamic}) → dynamic};
+  new self::Subclass::•().{self::Subclass::foo}(alpha: 1, beta: 2){({alpha: dynamic, beta: dynamic}) → dynamic};
+  self::topLevelNamed(1, 2, gamma: 3, delta: 4);
+  self::topLevelNamed(1, 2, delta: 3, gamma: 4);
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/native_as_name.dart.weak.modular.expect b/pkg/front_end/testcases/general/native_as_name.dart.weak.modular.expect
new file mode 100644
index 0000000..f85423d
--- /dev/null
+++ b/pkg/front_end/testcases/general/native_as_name.dart.weak.modular.expect
@@ -0,0 +1,91 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class W extends core::Object {
+  field core::String* native;
+  constructor •() → self::W*
+    : self::W::native = "field", super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class X extends core::Object {
+  synthetic constructor •() → self::X*
+    : super core::Object::•()
+    ;
+  method native() → core::String*
+    return "method";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Y1 extends core::Object {
+  synthetic constructor •() → self::Y1*
+    : super core::Object::•()
+    ;
+  abstract get native() → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Y2 extends self::Y1 {
+  synthetic constructor •() → self::Y2*
+    : super self::Y1::•()
+    ;
+  @#C1
+  get native() → core::String*
+    return "getter";
+}
+class Z extends core::Object {
+  field core::String* f = null;
+  synthetic constructor •() → self::Z*
+    : super core::Object::•()
+    ;
+  set native(core::String* s) → void
+    return this.{self::Z::f} = s;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::print(new self::W::•().{self::W::native}{core::String*});
+  core::print(new self::X::•().{self::X::native}(){() →* core::String*});
+  core::print(new self::Y2::•().{self::Y2::native}{core::String*});
+  core::print((let final self::Z* #t1 = new self::Z::•() in block {
+    #t1.{self::Z::native} = "setter";
+  } =>#t1).{self::Z::f}{core::String*});
+}
+
+constants  {
+  #C1 = core::_Override {}
+}
diff --git a/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.modular.expect b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.modular.expect
new file mode 100644
index 0000000..ddcf830
--- /dev/null
+++ b/pkg/front_end/testcases/general/nested_implicit_const_with_env_var.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  final field core::int* bar;
+  const constructor •(core::int* bar) → self::A*
+    : self::A::bar = bar, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object /*hasConstConstructor*/  {
+  final field self::A* baz;
+  const constructor •(self::A* baz) → self::B*
+    : self::B::baz = baz, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method fun() → dynamic {
+    new self::B::•(new self::A::•(#C1));
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field core::int* foo = #C1;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+}
diff --git a/pkg/front_end/testcases/general/nested_property_set.dart.weak.modular.expect b/pkg/front_end/testcases/general/nested_property_set.dart.weak.modular.expect
new file mode 100644
index 0000000..692bedb
--- /dev/null
+++ b/pkg/front_end/testcases/general/nested_property_set.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class NumField extends core::Object {
+  field core::num* field = null;
+  synthetic constructor •() → self::NumField*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class IntField extends core::Object {
+  field core::int* field = null;
+  synthetic constructor •() → self::IntField*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class DoubleField extends core::Object {
+  field core::double* field = null;
+  synthetic constructor •() → self::DoubleField*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::IntField* intField1 = new self::IntField::•();
+  self::IntField* intField2 = new self::IntField::•();
+  self::NumField* numField = new self::NumField::•();
+  self::DoubleField* doubleField = new self::DoubleField::•();
+  intField1.{self::IntField::field} = (intField2.{self::IntField::field} = numField.{self::NumField::field}{core::num*} as{TypeError} core::int*) as{TypeError} core::int*;
+  intField1.{self::IntField::field} = numField.{self::NumField::field} = intField2.{self::IntField::field}{core::int*};
+  try {
+    numField.{self::NumField::field} = 0.5;
+    intField1.{self::IntField::field} = (doubleField.{self::DoubleField::field} = numField.{self::NumField::field}{core::num*} as{TypeError} core::double*) as{TypeError} core::int*;
+    throw "Should fail";
+  }
+  on dynamic catch(final dynamic _) {
+  }
+}
diff --git a/pkg/front_end/testcases/general/nested_variable_set.dart.weak.modular.expect b/pkg/front_end/testcases/general/nested_variable_set.dart.weak.modular.expect
new file mode 100644
index 0000000..7e193c1
--- /dev/null
+++ b/pkg/front_end/testcases/general/nested_variable_set.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int* intLocal1;
+  core::int* intLocal2;
+  core::num* numLocal;
+  core::double* doubleLocal;
+  intLocal1 = (intLocal2 = numLocal as{TypeError} core::int*) as{TypeError} core::int*;
+  intLocal1 = numLocal = intLocal2;
+  numLocal = 0.5;
+  try {
+    intLocal1 = (doubleLocal = numLocal as{TypeError} core::double*) as{TypeError} core::int*;
+    throw "Should fail";
+  }
+  on dynamic catch(final dynamic _) {
+  }
+}
diff --git a/pkg/front_end/testcases/general/nested_variance.dart.weak.modular.expect b/pkg/front_end/testcases/general/nested_variance.dart.weak.modular.expect
new file mode 100644
index 0000000..ab01f23
--- /dev/null
+++ b/pkg/front_end/testcases/general/nested_variance.dart.weak.modular.expect
@@ -0,0 +1,301 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant X extends core::Object* = dynamic> = <Y extends X* = dynamic>() →* void;
+typedef Fcov<X extends core::Object* = dynamic> = () →* X*;
+typedef Fcon<contravariant X extends core::Object* = dynamic> = (X*) →* dynamic;
+typedef Finv<invariant X extends core::Object* = dynamic> = (X*) →* X*;
+typedef FcovBound<X extends core::num*> = () →* X*;
+typedef FconBound<contravariant X extends core::num*> = (X*) →* dynamic;
+typedef FinvBound<invariant X extends core::num*> = (X*) →* X*;
+typedef FcovCyclicBound<X extends self::A<X*>* = self::A<dynamic>*> = () →* X*;
+typedef FconCyclicBound<contravariant X extends self::A<X*>* = self::A<Null>*> = (X*) →* dynamic;
+typedef FinvCyclicBound<invariant X extends self::A<X*>* = self::A<dynamic>*> = (X*) →* X*;
+typedef FcovCyclicCoBound<X extends (X*) →* dynamic = (Null) →* dynamic> = () →* X*;
+typedef FconCyclicCoBound<contravariant X extends (X*) →* dynamic = (dynamic) →* dynamic> = (X*) →* dynamic;
+typedef FinvCyclicCoBound<invariant X extends (X*) →* dynamic = (dynamic) →* dynamic> = (X*) →* X*;
+class Acov<X extends () →* self::Acov::Y* = () →* dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Acov<self::Acov::X*, self::Acov::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Acon<X extends (self::Acon::Y*) →* dynamic = (Null) →* dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Acon<self::Acon::X*, self::Acon::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Ainv<X extends (self::Ainv::Y*) →* self::Ainv::Y* = (dynamic) →* dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Ainv<self::Ainv::X*, self::Ainv::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class AcovBound<X extends () →* self::AcovBound::Y* = () →* core::num*, Y extends core::num*> extends core::Object {
+  synthetic constructor •() → self::AcovBound<self::AcovBound::X*, self::AcovBound::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class AconBound<X extends (self::AconBound::Y*) →* dynamic = (Null) →* dynamic, Y extends core::num*> extends core::Object {
+  synthetic constructor •() → self::AconBound<self::AconBound::X*, self::AconBound::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class AinvBound<X extends (self::AinvBound::Y*) →* self::AinvBound::Y* = (core::num*) →* core::num*, Y extends core::num*> extends core::Object {
+  synthetic constructor •() → self::AinvBound<self::AinvBound::X*, self::AinvBound::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class AcovCyclicBound<X extends () →* self::AcovCyclicBound::Y* = () →* self::A<dynamic>*, Y extends self::A<self::AcovCyclicBound::Y*>* = self::A<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::AcovCyclicBound<self::AcovCyclicBound::X*, self::AcovCyclicBound::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class AconCyclicBound<X extends (self::AconCyclicBound::Y*) →* dynamic = (Null) →* dynamic, Y extends self::A<self::AconCyclicBound::Y*>* = self::A<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::AconCyclicBound<self::AconCyclicBound::X*, self::AconCyclicBound::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class AinvCyclicBound<X extends (self::AinvCyclicBound::Y*) →* self::AinvCyclicBound::Y* = (self::A<dynamic>*) →* self::A<dynamic>*, Y extends self::A<self::AinvCyclicBound::Y*>* = self::A<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::AinvCyclicBound<self::AinvCyclicBound::X*, self::AinvCyclicBound::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class AcovCyclicCoBound<X extends () →* self::AcovCyclicCoBound::Y* = () →* (Null) →* dynamic, Y extends (self::AcovCyclicCoBound::Y*) →* dynamic = (Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::AcovCyclicCoBound<self::AcovCyclicCoBound::X*, self::AcovCyclicCoBound::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class AconCyclicCoBound<X extends (self::AconCyclicCoBound::Y*) →* dynamic = (Null) →* dynamic, Y extends (self::AconCyclicCoBound::Y*) →* dynamic = (Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::AconCyclicCoBound<self::AconCyclicCoBound::X*, self::AconCyclicCoBound::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class AinvCyclicCoBound<X extends (self::AinvCyclicCoBound::Y*) →* self::AinvCyclicCoBound::Y* = ((Null) →* dynamic) →* (Null) →* dynamic, Y extends (self::AinvCyclicCoBound::Y*) →* dynamic = (Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::AinvCyclicCoBound<self::AinvCyclicCoBound::X*, self::AinvCyclicCoBound::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method toF<X extends core::Object* = dynamic>(self::toF::X* x) → <Y extends self::toF::X* = dynamic>() →* void
+  return null;
+static method testTypeAliasAsTypeArgument() → void {
+  self::Acov<() →* dynamic, dynamic>* source1;
+  <Y extends self::Acov<() →* dynamic, dynamic>* = dynamic>() →* void fsource1 = self::toF<self::Acov<() →* dynamic, dynamic>*>(source1);
+  <Y extends self::Acov<() →* dynamic, dynamic>* = dynamic>() →* void target1 = fsource1;
+  self::Acon<(Null) →* dynamic, dynamic>* source2;
+  <Y extends self::Acon<(Null) →* dynamic, dynamic>* = dynamic>() →* void fsource2 = self::toF<self::Acon<(Null) →* dynamic, dynamic>*>(source2);
+  <Y extends self::Acon<(Null) →* dynamic, dynamic>* = dynamic>() →* void target2 = fsource2;
+  self::Ainv<(dynamic) →* dynamic, dynamic>* source3;
+  <Y extends self::Ainv<(dynamic) →* dynamic, dynamic>* = dynamic>() →* void fsource3 = self::toF<self::Ainv<(dynamic) →* dynamic, dynamic>*>(source3);
+  <Y extends self::Ainv<(dynamic) →* dynamic, dynamic>* = dynamic>() →* void target3 = fsource3;
+  self::AcovBound<() →* core::num*, core::num*>* source4;
+  <Y extends self::AcovBound<() →* core::num*, core::num*>* = dynamic>() →* void fsource4 = self::toF<self::AcovBound<() →* core::num*, core::num*>*>(source4);
+  <Y extends self::AcovBound<() →* core::num*, core::num*>* = dynamic>() →* void target4 = fsource4;
+  self::AconBound<(Null) →* dynamic, core::num*>* source5;
+  <Y extends self::AconBound<(Null) →* dynamic, core::num*>* = dynamic>() →* void fsource5 = self::toF<self::AconBound<(Null) →* dynamic, core::num*>*>(source5);
+  <Y extends self::AconBound<(Null) →* dynamic, core::num*>* = dynamic>() →* void target5 = fsource5;
+  self::AinvBound<(core::num*) →* core::num*, core::num*>* source6;
+  <Y extends self::AinvBound<(core::num*) →* core::num*, core::num*>* = dynamic>() →* void fsource6 = self::toF<self::AinvBound<(core::num*) →* core::num*, core::num*>*>(source6);
+  <Y extends self::AinvBound<(core::num*) →* core::num*, core::num*>* = dynamic>() →* void target6 = fsource6;
+  self::AcovCyclicBound<() →* self::A<dynamic>*, self::A<dynamic>*>* source7;
+  <Y extends self::AcovCyclicBound<() →* self::A<dynamic>*, self::A<dynamic>*>* = dynamic>() →* void fsource7 = self::toF<self::AcovCyclicBound<() →* self::A<dynamic>*, self::A<dynamic>*>*>(source7);
+  <Y extends self::AcovCyclicBound<() →* self::A<dynamic>*, self::A<dynamic>*>* = dynamic>() →* void target7 = fsource7;
+  self::AconCyclicBound<(Null) →* dynamic, self::A<dynamic>*>* source8;
+  <Y extends self::AconCyclicBound<(Null) →* dynamic, self::A<dynamic>*>* = dynamic>() →* void fsource8 = self::toF<self::AconCyclicBound<(Null) →* dynamic, self::A<dynamic>*>*>(source8);
+  <Y extends self::AconCyclicBound<(Null) →* dynamic, self::A<dynamic>*>* = dynamic>() →* void target8 = fsource8;
+  self::AinvCyclicBound<(self::A<dynamic>*) →* self::A<dynamic>*, self::A<dynamic>*>* source9;
+  self::AcovCyclicCoBound<() →* (Null) →* dynamic, (Null) →* dynamic>* source10;
+  <Y extends self::AcovCyclicCoBound<() →* (Null) →* dynamic, (Null) →* dynamic>* = dynamic>() →* void fsource10 = self::toF<self::AcovCyclicCoBound<() →* (Null) →* dynamic, (Null) →* dynamic>*>(source10);
+  <Y extends self::AcovCyclicCoBound<() →* (Null) →* dynamic, (Null) →* dynamic>* = dynamic>() →* void target10 = fsource10;
+  self::AconCyclicCoBound<(Null) →* dynamic, (Null) →* dynamic>* source11;
+  <Y extends self::AconCyclicCoBound<(Null) →* dynamic, (Null) →* dynamic>* = dynamic>() →* void fsource11 = self::toF<self::AconCyclicCoBound<(Null) →* dynamic, (Null) →* dynamic>*>(source11);
+  <Y extends self::AconCyclicCoBound<(Null) →* dynamic, (Null) →* dynamic>* = dynamic>() →* void target11 = fsource11;
+  self::AinvCyclicCoBound<((Null) →* dynamic) →* (Null) →* dynamic, (Null) →* dynamic>* source12;
+}
+static method testNested() → void {
+  self::B<self::Acov<() →* dynamic, dynamic>*>* source1;
+  <Y extends self::B<self::Acov<() →* dynamic, dynamic>*>* = dynamic>() →* void fsource1 = self::toF<self::B<self::Acov<() →* dynamic, dynamic>*>*>(source1);
+  <Y extends self::B<self::Acov<() →* dynamic, dynamic>*>* = dynamic>() →* void target1 = fsource1;
+  self::B<self::Acon<(Null) →* dynamic, dynamic>*>* source2;
+  <Y extends self::B<self::Acon<(Null) →* dynamic, dynamic>*>* = dynamic>() →* void fsource2 = self::toF<self::B<self::Acon<(Null) →* dynamic, dynamic>*>*>(source2);
+  <Y extends self::B<self::Acon<(Null) →* dynamic, dynamic>*>* = dynamic>() →* void target2 = fsource2;
+  self::B<self::Ainv<(dynamic) →* dynamic, dynamic>*>* source3;
+  <Y extends self::B<self::Ainv<(dynamic) →* dynamic, dynamic>*>* = dynamic>() →* void fsource3 = self::toF<self::B<self::Ainv<(dynamic) →* dynamic, dynamic>*>*>(source3);
+  <Y extends self::B<self::Ainv<(dynamic) →* dynamic, dynamic>*>* = dynamic>() →* void target3 = fsource3;
+  self::B<self::AcovBound<() →* core::num*, core::num*>*>* source4;
+  <Y extends self::B<self::AcovBound<() →* core::num*, core::num*>*>* = dynamic>() →* void fsource4 = self::toF<self::B<self::AcovBound<() →* core::num*, core::num*>*>*>(source4);
+  <Y extends self::B<self::AcovBound<() →* core::num*, core::num*>*>* = dynamic>() →* void target4 = fsource4;
+  self::B<self::AconBound<(Null) →* dynamic, core::num*>*>* source5;
+  <Y extends self::B<self::AconBound<(Null) →* dynamic, core::num*>*>* = dynamic>() →* void fsource5 = self::toF<self::B<self::AconBound<(Null) →* dynamic, core::num*>*>*>(source5);
+  <Y extends self::B<self::AconBound<(Null) →* dynamic, core::num*>*>* = dynamic>() →* void target5 = fsource5;
+  self::B<self::AinvBound<(core::num*) →* core::num*, core::num*>*>* source6;
+  <Y extends self::B<self::AinvBound<(core::num*) →* core::num*, core::num*>*>* = dynamic>() →* void fsource6 = self::toF<self::B<self::AinvBound<(core::num*) →* core::num*, core::num*>*>*>(source6);
+  <Y extends self::B<self::AinvBound<(core::num*) →* core::num*, core::num*>*>* = dynamic>() →* void target6 = fsource6;
+  self::B<self::AcovCyclicBound<() →* self::A<dynamic>*, self::A<dynamic>*>*>* source7;
+  <Y extends self::B<self::AcovCyclicBound<() →* self::A<dynamic>*, self::A<dynamic>*>*>* = dynamic>() →* void fsource7 = self::toF<self::B<self::AcovCyclicBound<() →* self::A<dynamic>*, self::A<dynamic>*>*>*>(source7);
+  <Y extends self::B<self::AcovCyclicBound<() →* self::A<dynamic>*, self::A<dynamic>*>*>* = dynamic>() →* void target7 = fsource7;
+  self::B<self::AconCyclicBound<(Null) →* dynamic, self::A<dynamic>*>*>* source8;
+  <Y extends self::B<self::AconCyclicBound<(Null) →* dynamic, self::A<dynamic>*>*>* = dynamic>() →* void fsource8 = self::toF<self::B<self::AconCyclicBound<(Null) →* dynamic, self::A<dynamic>*>*>*>(source8);
+  <Y extends self::B<self::AconCyclicBound<(Null) →* dynamic, self::A<dynamic>*>*>* = dynamic>() →* void target8 = fsource8;
+  self::B<self::AinvCyclicBound<(self::A<dynamic>*) →* self::A<dynamic>*, self::A<dynamic>*>*>* source9;
+  self::B<self::AcovCyclicCoBound<() →* (Null) →* dynamic, (Null) →* dynamic>*>* source10;
+  <Y extends self::B<self::AcovCyclicCoBound<() →* (Null) →* dynamic, (Null) →* dynamic>*>* = dynamic>() →* void fsource10 = self::toF<self::B<self::AcovCyclicCoBound<() →* (Null) →* dynamic, (Null) →* dynamic>*>*>(source10);
+  <Y extends self::B<self::AcovCyclicCoBound<() →* (Null) →* dynamic, (Null) →* dynamic>*>* = dynamic>() →* void target10 = fsource10;
+  self::B<self::AconCyclicCoBound<(Null) →* dynamic, (Null) →* dynamic>*>* source11;
+  <Y extends self::B<self::AconCyclicCoBound<(Null) →* dynamic, (Null) →* dynamic>*>* = dynamic>() →* void fsource11 = self::toF<self::B<self::AconCyclicCoBound<(Null) →* dynamic, (Null) →* dynamic>*>*>(source11);
+  <Y extends self::B<self::AconCyclicCoBound<(Null) →* dynamic, (Null) →* dynamic>*>* = dynamic>() →* void target11 = fsource11;
+  self::B<self::AinvCyclicCoBound<((Null) →* dynamic) →* (Null) →* dynamic, (Null) →* dynamic>*>* source12;
+}
+static method main() → dynamic {
+  self::testTypeAliasAsTypeArgument();
+  self::testNested();
+}
diff --git a/pkg/front_end/testcases/general/new_as_selector.dart.weak.modular.expect b/pkg/front_end/testcases/general/new_as_selector.dart.weak.modular.expect
new file mode 100644
index 0000000..01083e9
--- /dev/null
+++ b/pkg/front_end/testcases/general/new_as_selector.dart.weak.modular.expect
@@ -0,0 +1,311 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:10:5: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// int new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:17:7: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   int new = 42; // error
+//       ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:19:15: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   C() : super.new(); // error
+//               ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   C.named() : this.new(); // error
+//                    ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:31:16: Error: 'new' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   external int new; // error
+//                ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:23:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//     this.new; // error
+//          ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:24:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//     this.new(); // error
+//          ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:25:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//     this.new<int>(); // error
+//          ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:26:10: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//     this.new = 87; // error
+//          ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:39:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   new C().new; // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:40:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   new C().new(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:41:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   new C().new = 87; // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:43:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   c.new; // error
+//     ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:44:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   c.new = 87; // error
+//     ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:46:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo.new; // error
+//       ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:47:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo.new(); // error
+//       ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:48:7: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo.new<int>(); // error
+//       ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:49:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo?.new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:50:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo?.new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:51:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo?.new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:52:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo..new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:53:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo..new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:54:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   foo..new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:55:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   (foo).new; // error
+//         ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:56:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   (foo).new(); // error
+//         ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:57:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   (foo).new<int>(); // error
+//         ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:58:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix1.new; // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:59:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix1.new(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:60:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix1.new<int>(); // error
+//           ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:61:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix2.c.new; // error
+//             ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:62:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix2.c.new(); // error
+//             ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:63:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   prefix2.c.new<int>(); // error
+//             ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:64:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   E(0).new; // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:65:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   E(0).new(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:66:8: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   E(0).new<int>(); // error
+//        ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:67:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   unresolved.new; // error
+//              ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
+//   unresolved.new; // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:68:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   unresolved.new(); // error
+//              ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:68:3: Error: Undefined name 'unresolved'.
+//   unresolved.new(); // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:69:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   unresolved.new<int>(); // error
+//              ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:69:3: Error: Undefined name 'unresolved'.
+//   unresolved.new<int>(); // error
+//   ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   C.new; // error
+//     ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: Member not found: 'new'.
+//   C.new; // error
+//     ^^^
+//
+// pkg/front_end/testcases/general/new_as_selector.dart:71:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   C.new(); // error
+//     ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///new_as_selector.dart" as prefix1;
+import "org-dartlang-testcase:///new_as_selector.dart" deferred as prefix2 hide E;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+class C extends self::Super {
+  field core::int new = 42;
+  constructor •() → self::C
+    : super self::Super::•()
+    ;
+  constructor named() → self::C
+    : this self::C::•()
+    ;
+  method method() → dynamic {
+    this.{self::C::new}{core::int};
+    self::E|call<dynamic>(this.{self::C::new}{core::int});
+    self::E|call<core::int>(this.{self::C::new}{core::int});
+    this.{self::C::new} = 87;
+  }
+}
+extension E on core::int {
+  get new = self::E|get#new;
+  set new = self::E|set#new;
+  method call = self::E|call;
+  tearoff call = self::E|get#call;
+}
+static field core::int new = 87;
+static field self::C c = new self::C::•();
+external static method E|get#new(core::int #this) → core::int;
+external static method E|set#new(core::int #this, core::int #externalFieldValue) → void;
+static method E|call<T extends core::Object? = dynamic>(lowered final core::int #this) → dynamic {}
+static method E|get#call(lowered final core::int #this) → <T extends core::Object? = dynamic>() → dynamic
+  return <T extends core::Object? = dynamic>() → dynamic => self::E|call<T%>(#this);
+static method method(dynamic d) → dynamic
+  return d{dynamic}.new;
+static method test() → dynamic {
+  new self::C::•().{self::C::new}{core::int};
+  self::E|call<dynamic>(new self::C::•().{self::C::new}{core::int});
+  new self::C::•().{self::C::new} = 87;
+  self::C c = new self::C::•();
+  c.{self::C::new}{core::int};
+  c.{self::C::new} = 87;
+  dynamic foo;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+  foo{dynamic}.new<core::int>();
+  let final dynamic #t1 = foo in #t1 == null ?{dynamic} null : #t1{dynamic}.new;
+  let final dynamic #t2 = foo in #t2 == null ?{dynamic} null : #t2{dynamic}.new();
+  let final dynamic #t3 = foo in #t3 == null ?{dynamic} null : #t3{dynamic}.new<core::int>();
+  let final dynamic #t4 = foo in block {
+    #t4{dynamic}.new;
+  } =>#t4;
+  let final dynamic #t5 = foo in block {
+    #t5{dynamic}.new();
+  } =>#t5;
+  let final dynamic #t6 = foo in block {
+    #t6{dynamic}.new<core::int>();
+  } =>#t6;
+  foo{dynamic}.new;
+  foo{dynamic}.new();
+  foo{dynamic}.new<core::int>();
+  self::new;
+  self::E|call<dynamic>(self::new);
+  self::E|call<core::int>(self::new);
+  let final dynamic #t7 = CheckLibraryIsLoaded(prefix2) in self::c.{self::C::new}{core::int};
+  let final dynamic #t8 = CheckLibraryIsLoaded(prefix2) in self::E|call<dynamic>(self::c.{self::C::new}{core::int});
+  let final dynamic #t9 = CheckLibraryIsLoaded(prefix2) in self::E|call<core::int>(self::c.{self::C::new}{core::int});
+  self::E|get#new(0);
+  self::E|call<dynamic>(self::E|get#new(0));
+  self::E|call<core::int>(self::E|get#new(0));
+  invalid-expression "pkg/front_end/testcases/general/new_as_selector.dart:67:3: Error: Undefined name 'unresolved'.
+  unresolved.new; // error
+  ^^^^^^^^^^"{<invalid>}.new;
+  invalid-expression "pkg/front_end/testcases/general/new_as_selector.dart:68:3: Error: Undefined name 'unresolved'.
+  unresolved.new(); // error
+  ^^^^^^^^^^"{dynamic}.new();
+  invalid-expression "pkg/front_end/testcases/general/new_as_selector.dart:69:3: Error: Undefined name 'unresolved'.
+  unresolved.new<int>(); // error
+  ^^^^^^^^^^"{dynamic}.new<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/new_as_selector.dart:70:5: Error: Member not found: 'new'.
+  C.new; // error
+    ^^^";
+  new self::C::•();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.modular.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.modular.expect
new file mode 100644
index 0000000..2fd6b9d
--- /dev/null
+++ b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class X extends core::Object {
+  synthetic constructor •() → self::X*
+    : super core::Object::•()
+    ;
+  method _foo() → void async {
+    await null;
+    core::print("hello");
+  }
+  method foo() → void
+    return this.{self::X::_foo}(){() →* void};
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Y extends core::Object implements self::X {
+  synthetic constructor •() → self::Y*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* _) → void {
+    core::print("Hello from noSuchMethod");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method _foo() → void
+    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* void};
+  no-such-method-forwarder method foo() → void
+    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* void};
+}
+static method main() → dynamic {
+  self::Y* y = new self::Y::•();
+  y.{self::X::foo}(){() →* void};
+}
+
+constants  {
+  #C1 = #org-dartlang-testcase:///no_such_method_forwarder.dart::_foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+  #C5 = #foo
+}
diff --git a/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.modular.expect b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..180ea5a
--- /dev/null
+++ b/pkg/front_end/testcases/general/no_such_method_private_setter.dart.weak.modular.expect
@@ -0,0 +1,61 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "no_such_method_private_setter_lib.dart" as no_;
+
+import "org-dartlang-testcase:///no_such_method_private_setter_lib.dart";
+
+class Foo extends core::Object implements no_::Bar {
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder get /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x() → core::int*
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
+  no-such-method-forwarder set /* from org-dartlang-testcase:///no_such_method_private_setter_lib.dart */ _x(core::int* value) → void
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+static method main() → dynamic {
+  no_::baz(new self::Foo::•());
+}
+
+library;
+import self as no_;
+import "dart:core" as core;
+
+class Bar extends core::Object {
+  field core::int* _x = null;
+  synthetic constructor •() → no_::Bar*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method baz(no_::Bar* bar) → void {
+  return;
+}
+
+constants  {
+  #C1 = #org-dartlang-testcase:///no_such_method_private_setter.dart::_x
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+  #C5 = #org-dartlang-testcase:///no_such_method_private_setter.dart::_x=
+}
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.modular.expect b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.modular.expect
new file mode 100644
index 0000000..5f06498
--- /dev/null
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.modular.expect
@@ -0,0 +1,493 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::C::T* field1;
+  covariant-by-class field () →* self::C::T* field2;
+  field (self::C::T*) →* void field3;
+  covariant-by-class field (self::C::T*) →* self::C::T* field4;
+  covariant-by-class field () →* () →* self::C::T* field5;
+  field (() →* self::C::T*) →* void field6;
+  covariant-by-class field (() →* self::C::T*) →* self::C::T* field7;
+  covariant-by-class field ((self::C::T*) →* void) →* void field8;
+  covariant-by-class field ((self::C::T*) →* void) →* self::C::T* field9;
+  covariant-by-class field ((self::C::T*) →* self::C::T*) →* void field10;
+  covariant-by-class field ((self::C::T*) →* self::C::T*) →* self::C::T* field11;
+  covariant-by-class field <S extends self::C::T* = dynamic>() →* S* field12;
+  covariant-by-class field <S extends self::C::T* = dynamic>(S*) →* void field13;
+  covariant-by-class field <S extends self::C::T* = dynamic>(S*) →* S* field14;
+  covariant-by-class field (<S extends self::C::T* = dynamic>() →* S*) →* void field15;
+  constructor •(self::C::T* field1) → self::C<self::C::T*>*
+    : self::C::field1 = field1, self::C::field2 = () → self::C::T* => field1, self::C::field3 = (self::C::T* t) → Null {}, self::C::field4 = (self::C::T* t) → self::C::T* => t, self::C::field5 = () → () →* self::C::T* => () → self::C::T* => field1, self::C::field6 = (() →* self::C::T* f) → Null {}, self::C::field7 = (() →* self::C::T* f) → self::C::T* => field1, self::C::field8 = ((self::C::T*) →* void f) → Null {}, self::C::field9 = ((self::C::T*) →* void f) → self::C::T* => field1, self::C::field10 = ((self::C::T*) →* self::C::T* f) → Null {}, self::C::field11 = ((self::C::T*) →* self::C::T* f) → self::C::T* => field1, self::C::field12 = <S extends self::C::T*>() → Null => null, self::C::field13 = <S extends self::C::T*>(S* s) → Null {}, self::C::field14 = <S extends self::C::T*>(S* s) → S* => s, self::C::field15 = (<S extends self::C::T*>() →* S* f) → Null {}, super core::Object::•()
+    ;
+  get getter1() → self::C::T*
+    return this.{self::C::field1}{self::C::T*};
+  get getter2() → () →* self::C::T*
+    return this.{self::C::field2}{() →* self::C::T*};
+  get getter3() → (self::C::T*) →* void
+    return this.{self::C::field3}{(self::C::T*) →* void};
+  get getter4() → (self::C::T*) →* self::C::T*
+    return this.{self::C::field4}{(self::C::T*) →* self::C::T*};
+  get getter5() → () →* () →* self::C::T*
+    return this.{self::C::field5}{() →* () →* self::C::T*};
+  get getter6() → (() →* self::C::T*) →* void
+    return this.{self::C::field6}{(() →* self::C::T*) →* void};
+  get getter7() → (() →* self::C::T*) →* self::C::T*
+    return this.{self::C::field7}{(() →* self::C::T*) →* self::C::T*};
+  get getter8() → ((self::C::T*) →* void) →* void
+    return this.{self::C::field8}{((self::C::T*) →* void) →* void};
+  get getter9() → ((self::C::T*) →* void) →* self::C::T*
+    return this.{self::C::field9}{((self::C::T*) →* void) →* self::C::T*};
+  get getter10() → ((self::C::T*) →* self::C::T*) →* void
+    return this.{self::C::field10}{((self::C::T*) →* self::C::T*) →* void};
+  get getter11() → ((self::C::T*) →* self::C::T*) →* self::C::T*
+    return this.{self::C::field11}{((self::C::T*) →* self::C::T*) →* self::C::T*};
+  get getter12() → <S extends self::C::T* = dynamic>() →* S*
+    return this.{self::C::field12}{<S extends self::C::T* = dynamic>() →* S*};
+  get getter13() → <S extends self::C::T* = dynamic>(S*) →* void
+    return this.{self::C::field13}{<S extends self::C::T* = dynamic>(S*) →* void};
+  get getter14() → <S extends self::C::T* = dynamic>(S*) →* S*
+    return this.{self::C::field14}{<S extends self::C::T* = dynamic>(S*) →* S*};
+  get getter15() → (<S extends self::C::T* = dynamic>() →* S*) →* void
+    return this.{self::C::field15}{(<S extends self::C::T* = dynamic>() →* S*) →* void};
+  set setter1(covariant-by-class self::C::T* value) → void {
+    this.{self::C::field1} = value;
+  }
+  set setter2(covariant-by-class () →* self::C::T* value) → void {
+    this.{self::C::field2} = value;
+  }
+  set setter3((self::C::T*) →* void value) → void {
+    this.{self::C::field3} = value;
+  }
+  set setter4(covariant-by-class (self::C::T*) →* self::C::T* value) → void {
+    this.{self::C::field4} = value;
+  }
+  set setter5(covariant-by-class () →* () →* self::C::T* value) → void {
+    this.{self::C::field5} = value;
+  }
+  set setter6((() →* self::C::T*) →* void value) → void {
+    this.{self::C::field6} = value;
+  }
+  set setter7(covariant-by-class (() →* self::C::T*) →* self::C::T* value) → void {
+    this.{self::C::field7} = value;
+  }
+  set setter8(covariant-by-class ((self::C::T*) →* void) →* void value) → void {
+    this.{self::C::field8} = value;
+  }
+  set setter9(covariant-by-class ((self::C::T*) →* void) →* self::C::T* value) → void {
+    this.{self::C::field9} = value;
+  }
+  set setter10(covariant-by-class ((self::C::T*) →* self::C::T*) →* void value) → void {
+    this.{self::C::field10} = value;
+  }
+  set setter11(covariant-by-class ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
+    this.{self::C::field11} = value;
+  }
+  set setter12(covariant-by-class <S extends self::C::T* = dynamic>() →* S* value) → void {
+    this.{self::C::field12} = value;
+  }
+  set setter13(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* void value) → void {
+    this.{self::C::field13} = value;
+  }
+  set setter14(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
+    this.{self::C::field14} = value;
+  }
+  set setter15(covariant-by-class (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
+    this.{self::C::field15} = value;
+  }
+  method method1(covariant-by-class self::C::T* value) → void {
+    this.{self::C::field1} = value;
+  }
+  method method2(covariant-by-class () →* self::C::T* value) → void {
+    this.{self::C::field2} = value;
+  }
+  method method3((self::C::T*) →* void value) → void {
+    this.{self::C::field3} = value;
+  }
+  method method4(covariant-by-class (self::C::T*) →* self::C::T* value) → void {
+    this.{self::C::field4} = value;
+  }
+  method method5(covariant-by-class () →* () →* self::C::T* value) → void {
+    this.{self::C::field5} = value;
+  }
+  method method6((() →* self::C::T*) →* void value) → void {
+    this.{self::C::field6} = value;
+  }
+  method method7(covariant-by-class (() →* self::C::T*) →* self::C::T* value) → void {
+    this.{self::C::field7} = value;
+  }
+  method method8(covariant-by-class ((self::C::T*) →* void) →* void value) → void {
+    this.{self::C::field8} = value;
+  }
+  method method9(covariant-by-class ((self::C::T*) →* void) →* self::C::T* value) → void {
+    this.{self::C::field9} = value;
+  }
+  method method10(covariant-by-class ((self::C::T*) →* self::C::T*) →* void value) → void {
+    this.{self::C::field10} = value;
+  }
+  method method11(covariant-by-class ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
+    this.{self::C::field11} = value;
+  }
+  method method12(covariant-by-class <S extends self::C::T* = dynamic>() →* S* value) → void {
+    this.{self::C::field12} = value;
+  }
+  method method13(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* void value) → void {
+    this.{self::C::field13} = value;
+  }
+  method method14(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
+    this.{self::C::field14} = value;
+  }
+  method method15(covariant-by-class (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
+    this.{self::C::field15} = value;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C<core::num*>* c = new self::C::•<core::int*>(0);
+  c.{self::C::field1}{core::num*};
+  c.{self::C::field2}{() →* core::num*};
+  try {
+    c.{self::C::field3}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::field4}{(core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  c.{self::C::field5}{() →* () →* core::num*};
+  try {
+    c.{self::C::field6}{(() →* core::num*) →* void} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::field7}{(() →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  c.{self::C::field8}{((core::num*) →* void) →* void};
+  c.{self::C::field9}{((core::num*) →* void) →* core::num*};
+  try {
+    c.{self::C::field10}{((core::num*) →* core::num*) →* void} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::field11}{((core::num*) →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::field12}{<S extends core::num* = dynamic>() →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::field13}{<S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::field14}{<S extends core::num* = dynamic>(S*) →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::field15}{(<S extends core::num* = dynamic>() →* S*) →* void} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  c.{self::C::getter1}{core::num*};
+  c.{self::C::getter2}{() →* core::num*};
+  try {
+    c.{self::C::getter3}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::getter4}{(core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  c.{self::C::getter5}{() →* () →* core::num*};
+  try {
+    c.{self::C::getter6}{(() →* core::num*) →* void} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::getter7}{(() →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  c.{self::C::getter8}{((core::num*) →* void) →* void};
+  c.{self::C::getter9}{((core::num*) →* void) →* core::num*};
+  try {
+    c.{self::C::getter10}{((core::num*) →* core::num*) →* void} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::getter11}{((core::num*) →* core::num*) →* core::num*} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::getter12}{<S extends core::num* = dynamic>() →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::getter13}{<S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::getter14}{<S extends core::num* = dynamic>(S*) →* S*} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::getter15}{(<S extends core::num* = dynamic>() →* S*) →* void} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::setter1} = 0.5;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::setter2} = () → core::double* => 0.5;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  c.{self::C::setter3} = (core::num* n) → Null {};
+  try {
+    c.{self::C::setter4} = (core::num* n) → core::double* => 0.5;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::setter5} = () → () →* core::double* => () → core::double* => 0.5;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  c.{self::C::setter6} = (() →* core::num* f) → Null {};
+  try {
+    c.{self::C::setter7} = (() →* core::num* f) → core::double* => 0.5;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::setter8} = ((core::double*) →* void f) → Null {};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::setter9} = ((core::double*) →* void f) → core::double* => 0.5;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::setter10} = ((core::double*) →* core::num* f) → Null {};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::setter11} = ((core::double*) →* core::num* f) → core::double* => 0.5;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::setter12} = <S extends core::num*>() → Null => null;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::setter13} = <S extends core::num*>(S* s) → Null {};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::setter14} = <S extends core::num*>(S* s) → S* => s;
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::setter15} = (<S extends core::num*>() →* S* f) → Null {};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::method1}(0.5){(core::num*) →* void};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::method2}(() → core::double* => 0.5){(() →* core::num*) →* void};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  c.{self::C::method3}((core::num* n) → Null {}){((core::num*) →* void) →* void};
+  try {
+    c.{self::C::method4}((core::num* n) → core::double* => 0.5){((core::num*) →* core::num*) →* void};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::method5}(() → () →* core::double* => () → core::double* => 0.5){(() →* () →* core::num*) →* void};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  c.{self::C::method6}((() →* core::num* f) → Null {}){((() →* core::num*) →* void) →* void};
+  try {
+    c.{self::C::method7}((() →* core::num* f) → core::double* => 0.5){((() →* core::num*) →* core::num*) →* void};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::method8}(((core::double*) →* void f) → Null {}){(((core::num*) →* void) →* void) →* void};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::method9}(((core::double*) →* void f) → core::double* => 0.5){(((core::num*) →* void) →* core::num*) →* void};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::method10}(((core::double*) →* core::num* f) → Null {}){(((core::num*) →* core::num*) →* void) →* void};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::method11}(((core::double*) →* core::num* f) → core::double* => 0.5){(((core::num*) →* core::num*) →* core::num*) →* void};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::method12}(<S extends core::num*>() → Null => null){(<S extends core::num* = dynamic>() →* S*) →* void};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::method13}(<S extends core::num*>(S* s) → Null {}){(<S extends core::num* = dynamic>(S*) →* void) →* void};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::method14}(<S extends core::num*>(S* s) → S* => s){(<S extends core::num* = dynamic>(S*) →* S*) →* void};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+  try {
+    c.{self::C::method15}((<S extends core::num*>() →* S* f) → Null {}){((<S extends core::num* = dynamic>() →* S*) →* void) →* void};
+    throw "TypeError expected";
+  }
+  on core::TypeError* catch(final core::TypeError* e) {
+    core::print(e);
+  }
+}
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.modular.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.modular.expect
new file mode 100644
index 0000000..ac4c6e4
--- /dev/null
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.modular.expect
@@ -0,0 +1,247 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "nsm_covariance_lib.dart" as nsm;
+
+import "org-dartlang-testcase:///nsm_covariance_lib.dart";
+
+abstract class D1 extends core::Object implements nsm::A<core::int*>, nsm::B {
+  synthetic constructor •() → self::D1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void;
+  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
+}
+abstract class D2 extends core::Object implements nsm::B, nsm::A<core::int*> {
+  synthetic constructor •() → self::D2*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void;
+  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
+}
+class D3 extends core::Object implements nsm::A<core::int*>, nsm::B {
+  synthetic constructor •() → self::D3*
+    : super core::Object::•()
+    ;
+  @#C2
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
+    return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+}
+class D4 extends core::Object implements nsm::B, nsm::A<core::int*> {
+  synthetic constructor •() → self::D4*
+    : super core::Object::•()
+    ;
+  @#C2
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
+    return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+}
+static method main() → dynamic {}
+
+library;
+import self as nsm;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → nsm::A<nsm::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract method _method1(core::int* a, core::int* b, covariant-by-class nsm::A::T* c, covariant-by-class nsm::A::T* d) → void;
+  abstract method _method2({core::int* a = #C1, core::int* b = #C1, covariant-by-class nsm::A::T* c = #C1, covariant-by-class nsm::A::T* d = #C1}) → void;
+  abstract method _method3(core::int* a, covariant-by-class nsm::A::T* b) → void;
+  abstract method _method4({core::int* a = #C1, covariant-by-class nsm::A::T* b = #C1}) → void;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → nsm::B*
+    : super core::Object::•()
+    ;
+  abstract method _method1(core::int* x, covariant-by-declaration core::int* y, core::int* z, covariant-by-declaration core::int* w) → void;
+  abstract method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, core::int* c = #C1, covariant-by-declaration core::int* d = #C1}) → void;
+  abstract method _method3(covariant-by-declaration core::int* x, core::int* y) → void;
+  abstract method _method4({covariant-by-declaration core::int* a = #C1, core::int* b = #C1}) → void;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C1 extends core::Object implements nsm::A<core::int*>, nsm::B {
+  synthetic constructor •() → nsm::C1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void;
+  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
+}
+abstract class C2 extends core::Object implements nsm::B, nsm::A<core::int*> {
+  synthetic constructor •() → nsm::C2*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void;
+  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
+}
+class C3 extends core::Object implements nsm::A<core::int*>, nsm::B {
+  synthetic constructor •() → nsm::C3*
+    : super core::Object::•()
+    ;
+  @#C2
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
+    return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+}
+class C4 extends core::Object implements nsm::B, nsm::A<core::int*> {
+  synthetic constructor •() → nsm::C4*
+    : super core::Object::•()
+    ;
+  @#C2
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
+    return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
+}
+
+constants  {
+  #C1 = null
+  #C2 = core::_Override {}
+  #C3 = #org-dartlang-testcase:///nsm_covariance.dart::_method1
+  #C4 = <core::Type*>[]
+  #C5 = <core::Symbol*, dynamic>{)
+  #C6 = #org-dartlang-testcase:///nsm_covariance.dart::_method2
+  #C7 = <dynamic>[]
+  #C8 = #a
+  #C9 = #b
+  #C10 = #c
+  #C11 = #d
+  #C12 = #org-dartlang-testcase:///nsm_covariance.dart::_method3
+  #C13 = #org-dartlang-testcase:///nsm_covariance.dart::_method4
+  #C14 = #org-dartlang-testcase:///nsm_covariance_lib.dart::_method1
+  #C15 = #org-dartlang-testcase:///nsm_covariance_lib.dart::_method2
+  #C16 = #org-dartlang-testcase:///nsm_covariance_lib.dart::_method3
+  #C17 = #org-dartlang-testcase:///nsm_covariance_lib.dart::_method4
+}
diff --git a/pkg/front_end/testcases/general/null_aware.dart.weak.modular.expect b/pkg/front_end/testcases/general/null_aware.dart.weak.modular.expect
new file mode 100644
index 0000000..6e39869
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  field core::int* field = null;
+  static field core::int* staticField = null;
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::Foo* foo = new self::Foo::•();
+  let final self::Foo* #t1 = foo in #t1 == null ?{core::int*} null : #t1.{self::Foo::field} = 5;
+  self::Foo::staticField = 5;
+  let final self::Foo* #t2 = foo in #t2.{self::Foo::field}{core::int*} == null ?{core::int*} #t2.{self::Foo::field} = 5 : null;
+  self::Foo::staticField == null ?{core::int*} self::Foo::staticField = 5 : null;
+  let final self::Foo* #t3 = foo in #t3 == null ?{core::int*} null : #t3.{self::Foo::field}{core::int*} == null ?{core::int*} #t3.{self::Foo::field} = 5 : null;
+  self::Foo::staticField == null ?{core::int*} self::Foo::staticField = 5 : null;
+  core::int* intValue = let final core::int* #t4 = foo.{self::Foo::field}{core::int*} in #t4 == null ?{core::int*} 6 : #t4;
+  core::num* numValue = let final core::int* #t5 = foo.{self::Foo::field}{core::int*} in #t5 == null ?{core::num*} 4.5 : #t5;
+}
diff --git a/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.modular.expect b/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.modular.expect
new file mode 100644
index 0000000..46f5652
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_for_in.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  dynamic o;
+  if(false) {
+    for (final dynamic #t1 in (let final dynamic #t2 = o in #t2 == null ?{dynamic} null : #t2{dynamic}.iterable) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      self::Class* c = #t1 as{TypeError,ForDynamic} self::Class*;
+    }
+  }
+}
diff --git a/pkg/front_end/testcases/general/null_aware_postfix.dart.weak.modular.expect b/pkg/front_end/testcases/general/null_aware_postfix.dart.weak.modular.expect
new file mode 100644
index 0000000..b31646a
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_postfix.dart.weak.modular.expect
@@ -0,0 +1,47 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field self::B* b = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  operator +(core::int* i) → self::C*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+static method main() → dynamic {
+  self::A* a;
+  let final self::A* #t1 = a in #t1 == null ?{self::B*} null : #t1.{self::A::b} = #t1.{self::A::b}{self::B*}.{self::B::+}(1){(core::int*) →* self::C*};
+  self::C* c = (let final self::A* #t2 = a in #t2 == null ?{self::B*} null : let final self::B* #t3 = #t2.{self::A::b}{self::B*} in let final void #t4 = #t2.{self::A::b} = #t3.{self::B::+}(1){(core::int*) →* self::C*} in #t3) as{TypeError} self::C*;
+}
diff --git a/pkg/front_end/testcases/general/null_aware_spread.dart.weak.modular.expect b/pkg/front_end/testcases/general/null_aware_spread.dart.weak.modular.expect
new file mode 100644
index 0000000..01b31a0
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_spread.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method nullAwareListSpread(core::List<core::String*>* list) → dynamic {
+  list = block {
+    final core::List<core::String*>* #t1 = <core::String*>["foo"];
+    final core::Iterable<core::String*>* #t2 = list;
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}{Invariant}(#t2){(core::Iterable<core::String*>*) →* void};
+  } =>#t1;
+}
+static method nullAwareSetSpread(core::Set<core::String*>* set) → dynamic {
+  set = block {
+    final core::Set<core::String*>* #t3 = col::LinkedHashSet::•<core::String*>();
+    #t3.{core::Set::add}{Invariant}("foo"){(core::String*) →* core::bool*};
+    final core::Iterable<core::String*>* #t4 = set;
+    if(!(#t4 == null))
+      #t3.{core::Set::addAll}{Invariant}(#t4){(core::Iterable<core::String*>*) →* void};
+  } =>#t3;
+}
+static method nullAwareMapSpread(core::Map<core::int*, core::String*>* map) → dynamic {
+  map = block {
+    final core::Map<core::int*, core::String*>* #t5 = <core::int*, core::String*>{};
+    #t5.{core::Map::[]=}{Invariant}(0, "foo"){(core::int*, core::String*) →* void};
+    final core::Map<core::int*, core::String*>* #t6 = map;
+    if(!(#t6 == null))
+      for (final core::MapEntry<core::int*, core::String*>* #t7 in #t6.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>})
+        #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{core::int*}, #t7.{core::MapEntry::value}{core::String*}){(core::int*, core::String*) →* void};
+  } =>#t5;
+}
+static method main() → dynamic {
+  self::nullAwareListSpread(null);
+  self::nullAwareSetSpread(null);
+  self::nullAwareMapSpread(null);
+}
diff --git a/pkg/front_end/testcases/general/null_aware_super.dart.weak.modular.expect b/pkg/front_end/testcases/general/null_aware_super.dart.weak.modular.expect
new file mode 100644
index 0000000..2e47743
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_aware_super.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/null_aware_super.dart:10:18: Error: The operator '?.' cannot be used with 'super' because 'super' cannot be null.
+// Try replacing '?.' with '.'
+//   Class() : super?.named();
+//                  ^^
+//
+// pkg/front_end/testcases/general/null_aware_super.dart:10:18: Error: Cannot use '?.' here.
+// Try using '.'.
+//   Class() : super?.named();
+//                  ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Class extends self::Super {
+  constructor •() → self::Class
+    : super self::Super::named()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.modular.expect
new file mode 100644
index 0000000..7426716
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+class Element extends core::Object {
+  synthetic constructor •() → self::Element
+    : super core::Object::•()
+    ;
+}
+class Class<E extends self::Element?> extends core::Object {
+  covariant-by-class field self::Class::E? element;
+  constructor •(self::Class::E? element) → self::Class<self::Class::E%>
+    : self::Class::element = element, super core::Object::•()
+    ;
+  method setElement(covariant-by-class self::Class::E? element) → void {
+    if(!(this.{self::Class::element}{self::Class::E?} =={core::Object::==}{(core::Object) → core::bool} element)) {
+      this.{self::Class::element} = element;
+      core::Set<self::Element> elements = col::LinkedHashSet::•<self::Element>();
+      if(!(element == null)) {
+        elements.{core::Set::add}(element{self::Class::E% & self::Element /* '%' & '!' = '!' */}){(self::Element) → core::bool};
+      }
+      if(!(this.{self::Class::element}{self::Class::E?} == null)) {
+        elements.{core::Set::add}(this.{self::Class::element}{self::Class::E?}!){(self::Element) → core::bool};
+      }
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.modular.expect b/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.modular.expect
new file mode 100644
index 0000000..9f0d253
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_safety_invalid_experiment.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:5:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
+// int? i;
+//    ^
+// pkg/front_end/testcases/general/null_safety_invalid_experiment.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::int? i;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/null_safety_invalid_experiment_and_language_version.dart.weak.modular.expect b/pkg/front_end/testcases/general/null_safety_invalid_experiment_and_language_version.dart.weak.modular.expect
new file mode 100644
index 0000000..14c6cd9
--- /dev/null
+++ b/pkg/front_end/testcases/general/null_safety_invalid_experiment_and_language_version.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/null_safety_invalid_experiment_and_language_version.dart:7:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
+// int? i;
+//    ^
+// pkg/front_end/testcases/general/null_safety_invalid_experiment_and_language_version.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::int? i;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.modular.expect b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.modular.expect
new file mode 100644
index 0000000..eb609ae
--- /dev/null
+++ b/pkg/front_end/testcases/general/operator_method_not_found.dart.weak.modular.expect
@@ -0,0 +1,367 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:36:10: Error: 'foo' isn't a type.
+//   print(<foo);
+//          ^^^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:36:10: Error: Expected '>' after this.
+//   print(<foo);
+//          ^^^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:36:13: Error: Expected '[' before this.
+//   print(<foo);
+//             ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:37:9: Error: Expected an identifier, but got '>'.
+// Try inserting an identifier before '>'.
+//   print(>foo);
+//         ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:38:9: Error: Expected an identifier, but got '<='.
+// Try inserting an identifier before '<='.
+//   print(<=foo);
+//         ^^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:39:9: Error: Expected an identifier, but got '>='.
+// Try inserting an identifier before '>='.
+//   print(>=foo);
+//         ^^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:40:9: Error: Expected an identifier, but got '=='.
+// Try inserting an identifier before '=='.
+//   print(==foo);
+//         ^^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:41:9: Error: '+' is not a prefix operator.
+// Try removing '+'.
+//   print(+foo);
+//         ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:42:9: Error: Expected an identifier, but got '/'.
+// Try inserting an identifier before '/'.
+//   print(/foo);
+//         ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:43:9: Error: Expected an identifier, but got '~/'.
+// Try inserting an identifier before '~/'.
+//   print(~/foo);
+//         ^^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:44:9: Error: Expected an identifier, but got '*'.
+// Try inserting an identifier before '*'.
+//   print(*foo);
+//         ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:45:9: Error: Expected an identifier, but got '%'.
+// Try inserting an identifier before '%'.
+//   print(%foo);
+//         ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:46:9: Error: Expected an identifier, but got '|'.
+// Try inserting an identifier before '|'.
+//   print(|foo);
+//         ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:47:9: Error: Expected an identifier, but got '^'.
+// Try inserting an identifier before '^'.
+//   print(^foo);
+//         ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:48:9: Error: Expected an identifier, but got '&'.
+// Try inserting an identifier before '&'.
+//   print(&foo);
+//         ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:49:9: Error: Expected an identifier, but got '<<'.
+// Try inserting an identifier before '<<'.
+//   print(<<foo);
+//         ^^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:50:9: Error: Expected an identifier, but got '>>'.
+// Try inserting an identifier before '>>'.
+//   print(>>foo);
+//         ^^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:54:13: Error: '~' isn't a binary operator.
+//   print(foo ~ 2);
+//             ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:12:13: Error: The operator '<' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   print(foo < 2);
+//             ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:13:13: Error: The operator '>' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '>' operator.
+//   print(foo > 2);
+//             ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:14:13: Error: The operator '<=' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '<=' operator.
+//   print(foo <= 2);
+//             ^^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:15:13: Error: The operator '>=' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '>=' operator.
+//   print(foo >= 2);
+//             ^^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The operator '-' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
+//   print(foo - 2);
+//             ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:18:13: Error: The operator '+' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//   print(foo + 2);
+//             ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:19:13: Error: The operator '/' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '/' operator.
+//   print(foo / 2);
+//             ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:20:13: Error: The operator '~/' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '~/' operator.
+//   print(foo ~/ 2);
+//             ^^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:21:13: Error: The operator '*' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '*' operator.
+//   print(foo * 2);
+//             ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:22:13: Error: The operator '%' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '%' operator.
+//   print(foo % 2);
+//             ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:23:13: Error: The operator '|' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '|' operator.
+//   print(foo | 2);
+//             ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:24:13: Error: The operator '^' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '^' operator.
+//   print(foo ^ 2);
+//             ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:25:13: Error: The operator '&' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '&' operator.
+//   print(foo & 2);
+//             ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:26:13: Error: The operator '<<' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '<<' operator.
+//   print(foo << 2);
+//             ^^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:27:13: Error: The operator '>>' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '>>' operator.
+//   print(foo >> 2);
+//             ^^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
+//   print(foo[2] = 2);
+//            ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:30:12: Error: The operator '[]' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
+//   print(foo[2]);
+//            ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:31:9: Error: The operator '~' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a '~' operator.
+//   print(~foo);
+//         ^
+//
+// pkg/front_end/testcases/general/operator_method_not_found.dart:32:9: Error: The operator 'unary-' isn't defined for the class 'Foo'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+// Try correcting the operator to an existing operator, or defining a 'unary-' operator.
+//   print(-foo);
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::Foo* foo = new self::Foo::•();
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:12:13: Error: The operator '<' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  print(foo < 2);
+            ^" in foo{<unresolved>}.<(2));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:13:13: Error: The operator '>' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '>' operator.
+  print(foo > 2);
+            ^" in foo{<unresolved>}.>(2));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:14:13: Error: The operator '<=' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '<=' operator.
+  print(foo <= 2);
+            ^^" in foo{<unresolved>}.<=(2));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:15:13: Error: The operator '>=' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '>=' operator.
+  print(foo >= 2);
+            ^^" in foo{<unresolved>}.>=(2));
+  core::print(foo =={self::Foo::==}{(dynamic) →* core::bool*} 2);
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The operator '-' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
+  print(foo - 2);
+            ^" in foo{<unresolved>}.-(2));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:18:13: Error: The operator '+' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+  print(foo + 2);
+            ^" in foo{<unresolved>}.+(2));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:19:13: Error: The operator '/' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '/' operator.
+  print(foo / 2);
+            ^" in foo{<unresolved>}./(2));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:20:13: Error: The operator '~/' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '~/' operator.
+  print(foo ~/ 2);
+            ^^" in foo{<unresolved>}.~/(2));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:21:13: Error: The operator '*' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '*' operator.
+  print(foo * 2);
+            ^" in foo{<unresolved>}.*(2));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:22:13: Error: The operator '%' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '%' operator.
+  print(foo % 2);
+            ^" in foo{<unresolved>}.%(2));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:23:13: Error: The operator '|' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '|' operator.
+  print(foo | 2);
+            ^" in foo{<unresolved>}.|(2));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:24:13: Error: The operator '^' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '^' operator.
+  print(foo ^ 2);
+            ^" in foo{<unresolved>}.^(2));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:25:13: Error: The operator '&' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '&' operator.
+  print(foo & 2);
+            ^" in foo{<unresolved>}.&(2));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:26:13: Error: The operator '<<' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '<<' operator.
+  print(foo << 2);
+            ^^" in foo{<unresolved>}.<<(2));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:27:13: Error: The operator '>>' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '>>' operator.
+  print(foo >> 2);
+            ^^" in foo{<unresolved>}.>>(2));
+  core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
+  print(foo[2] = 2);
+           ^" in #t1{<unresolved>}.[]=(#t2, #t3) in #t3);
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:30:12: Error: The operator '[]' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
+  print(foo[2]);
+           ^" in foo{<unresolved>}.[](2));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:31:9: Error: The operator '~' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a '~' operator.
+  print(~foo);
+        ^" in foo{<unresolved>}.~());
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:32:9: Error: The operator 'unary-' isn't defined for the class 'Foo'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
+Try correcting the operator to an existing operator, or defining a 'unary-' operator.
+  print(-foo);
+        ^" in foo{<unresolved>}.unary-());
+  core::print(<invalid-type>[]);
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:37:9: Error: This couldn't be parsed.
+  print(>foo);
+        ^"{<invalid>}.>(foo));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:38:9: Error: This couldn't be parsed.
+  print(<=foo);
+        ^"{<invalid>}.<=(foo));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:39:9: Error: This couldn't be parsed.
+  print(>=foo);
+        ^"{<invalid>}.>=(foo));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:40:9: Error: This couldn't be parsed.
+  print(==foo);
+        ^" =={core::Object::==}{(core::Object*) →* core::bool*} foo);
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:41:9: Error: This couldn't be parsed.
+  print(+foo);
+        ^"{<invalid>}.+(foo));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:42:9: Error: This couldn't be parsed.
+  print(/foo);
+        ^"{<invalid>}./(foo));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:43:9: Error: This couldn't be parsed.
+  print(~/foo);
+        ^"{<invalid>}.~/(foo));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:44:9: Error: This couldn't be parsed.
+  print(*foo);
+        ^"{<invalid>}.*(foo));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:45:9: Error: This couldn't be parsed.
+  print(%foo);
+        ^"{<invalid>}.%(foo));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:46:9: Error: This couldn't be parsed.
+  print(|foo);
+        ^"{<invalid>}.|(foo));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:47:9: Error: This couldn't be parsed.
+  print(^foo);
+        ^"{<invalid>}.^(foo));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:48:9: Error: This couldn't be parsed.
+  print(&foo);
+        ^"{<invalid>}.&(foo));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:49:9: Error: This couldn't be parsed.
+  print(<<foo);
+        ^"{<invalid>}.<<(foo));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:50:9: Error: This couldn't be parsed.
+  print(>>foo);
+        ^"{<invalid>}.>>(foo));
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:54:13: Error: '~' isn't a binary operator.
+  print(foo ~ 2);
+            ^");
+}
diff --git a/pkg/front_end/testcases/general/operators.dart.weak.modular.expect b/pkg/front_end/testcases/general/operators.dart.weak.modular.expect
new file mode 100644
index 0000000..8796e3d4
--- /dev/null
+++ b/pkg/front_end/testcases/general/operators.dart.weak.modular.expect
@@ -0,0 +1,81 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Operators extends core::Object {
+  synthetic constructor •() → self::Operators*
+    : super core::Object::•()
+    ;
+  operator +(dynamic other) → dynamic
+    return null;
+  operator &(dynamic other) → dynamic
+    return null;
+  operator ~() → dynamic
+    return null;
+  operator |(dynamic other) → dynamic
+    return null;
+  operator ^(dynamic other) → dynamic
+    return null;
+  operator /(dynamic other) → dynamic
+    return null;
+  operator ==(dynamic other) → core::bool*
+    return null;
+  operator >(dynamic other) → dynamic
+    return null;
+  operator >=(dynamic other) → dynamic
+    return null;
+  operator [](dynamic index) → dynamic
+    return null;
+  operator []=(dynamic index, dynamic value) → void {}
+  operator <<(dynamic other) → dynamic
+    return null;
+  operator <(dynamic other) → dynamic
+    return null;
+  operator <=(dynamic other) → dynamic
+    return null;
+  operator *(dynamic other) → dynamic
+    return null;
+  operator %(dynamic other) → dynamic
+    return null;
+  operator >>(dynamic other) → dynamic
+    return null;
+  operator -(dynamic other) → dynamic
+    return null;
+  operator ~/(dynamic other) → dynamic
+    return null;
+  operator unary-() → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main(dynamic arguments) → dynamic {
+  self::Operators* a = new self::Operators::•();
+  self::Operators* b = new self::Operators::•();
+  a.{self::Operators::+}(b){(dynamic) →* dynamic};
+  a.{self::Operators::&}(b){(dynamic) →* dynamic};
+  a.{self::Operators::~}(){() →* dynamic};
+  a.{self::Operators::|}(b){(dynamic) →* dynamic};
+  a.{self::Operators::^}(b){(dynamic) →* dynamic};
+  a.{self::Operators::/}(b){(dynamic) →* dynamic};
+  a =={self::Operators::==}{(dynamic) →* core::bool*} b;
+  a.{self::Operators::>}(b){(dynamic) →* dynamic};
+  a.{self::Operators::>=}(b){(dynamic) →* dynamic};
+  a.{self::Operators::[]}(0){(dynamic) →* dynamic};
+  a.{self::Operators::[]=}(0, b){(dynamic, dynamic) →* void};
+  a.{self::Operators::<<}(b){(dynamic) →* dynamic};
+  a.{self::Operators::<}(b){(dynamic) →* dynamic};
+  a.{self::Operators::<=}(b){(dynamic) →* dynamic};
+  a.{self::Operators::*}(b){(dynamic) →* dynamic};
+  a.{self::Operators::%}(b){(dynamic) →* dynamic};
+  a.{self::Operators::>>}(b){(dynamic) →* dynamic};
+  a.{self::Operators::-}(b){(dynamic) →* dynamic};
+  a.{self::Operators::~/}(b){(dynamic) →* dynamic};
+  a.{self::Operators::unary-}(){() →* dynamic};
+}
diff --git a/pkg/front_end/testcases/general/optional.dart.weak.modular.expect b/pkg/front_end/testcases/general/optional.dart.weak.modular.expect
new file mode 100644
index 0000000..6ca451d
--- /dev/null
+++ b/pkg/front_end/testcases/general/optional.dart.weak.modular.expect
@@ -0,0 +1,146 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/optional.dart:47:21: Error: The argument type 'InvalidListener' can't be assigned to the parameter type 'Listener'.
+//  - 'InvalidListener' is from 'pkg/front_end/testcases/general/optional.dart'.
+//  - 'Listener' is from 'pkg/front_end/testcases/general/optional.dart'.
+//   extern.listen(new InvalidListener());
+//                     ^
+//
+// pkg/front_end/testcases/general/optional.dart:49:28: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing1 = foo.method();
+//                            ^
+//
+// pkg/front_end/testcases/general/optional.dart:50:28: Error: Too many positional arguments: 3 allowed, but 4 found.
+// Try removing the extra positional arguments.
+//   var nothing2 = foo.method(1, 2, 3, 4);
+//                            ^
+//
+// pkg/front_end/testcases/general/optional.dart:51:39: Error: Too few positional arguments: 1 required, 0 given.
+//   var nothing3 = extern.externalMethod();
+//                                       ^
+//
+// pkg/front_end/testcases/general/optional.dart:52:39: Error: Too many positional arguments: 3 allowed, but 4 found.
+// Try removing the extra positional arguments.
+//   var nothing4 = extern.externalMethod(1, 2, 3, 4);
+//                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  method method(dynamic x, [dynamic y = #C1, dynamic z = #C1]) → dynamic {
+    return "string";
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class External extends core::Object {
+  synthetic constructor •() → self::External*
+    : super core::Object::•()
+    ;
+  abstract method externalMethod(core::int* x, [core::int* y = #C1, core::int* z = #C1]) → core::String*;
+  abstract method listen(self::Listener* listener) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Listener extends core::Object {
+  synthetic constructor •() → self::Listener*
+    : super core::Object::•()
+    ;
+  abstract method event(core::String* input, [core::int* x = #C1, core::int* y = #C1]) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class TestListener extends self::Listener {
+  synthetic constructor •() → self::TestListener*
+    : super self::Listener::•()
+    ;
+  method event(core::String* input, [core::int* x = #C1, core::int* y = #C1]) → void {}
+}
+class ExtendedListener extends self::Listener {
+  synthetic constructor •() → self::ExtendedListener*
+    : super self::Listener::•()
+    ;
+  method event(core::String* input, [core::int* x = #C1, core::int* y = #C1, dynamic z = #C1]) → void {}
+}
+class InvalidListener extends core::Object {
+  synthetic constructor •() → self::InvalidListener*
+    : super core::Object::•()
+    ;
+  method event(dynamic input, [dynamic x = #C1]) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+external static method createExternal() → self::External*;
+static method main() → dynamic {
+  self::Foo* foo = new self::Foo::•();
+  dynamic string1 = foo.{self::Foo::method}(1){(dynamic, [dynamic, dynamic]) →* dynamic};
+  dynamic string2 = foo.{self::Foo::method}(1, 2){(dynamic, [dynamic, dynamic]) →* dynamic};
+  dynamic string3 = foo.{self::Foo::method}(1, 2, 3){(dynamic, [dynamic, dynamic]) →* dynamic};
+  self::External* extern = self::createExternal();
+  core::String* string4 = extern.{self::External::externalMethod}(1){(core::int*, [core::int*, core::int*]) →* core::String*};
+  core::String* string5 = extern.{self::External::externalMethod}(1, 2){(core::int*, [core::int*, core::int*]) →* core::String*};
+  core::String* string6 = extern.{self::External::externalMethod}(1, 2, 3){(core::int*, [core::int*, core::int*]) →* core::String*};
+  extern.{self::External::listen}(new self::TestListener::•()){(self::Listener*) →* void};
+  extern.{self::External::listen}(new self::ExtendedListener::•()){(self::Listener*) →* void};
+  extern.{self::External::listen}(invalid-expression "pkg/front_end/testcases/general/optional.dart:47:21: Error: The argument type 'InvalidListener' can't be assigned to the parameter type 'Listener'.
+ - 'InvalidListener' is from 'pkg/front_end/testcases/general/optional.dart'.
+ - 'Listener' is from 'pkg/front_end/testcases/general/optional.dart'.
+  extern.listen(new InvalidListener());
+                    ^" in new self::InvalidListener::•() as{TypeError} self::Listener*){(self::Listener*) →* void};
+  invalid-type nothing1 = invalid-expression "pkg/front_end/testcases/general/optional.dart:49:28: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing1 = foo.method();
+                           ^" in foo.{self::Foo::method}{<inapplicable>}.(){() →* invalid-type};
+  invalid-type nothing2 = invalid-expression "pkg/front_end/testcases/general/optional.dart:50:28: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  var nothing2 = foo.method(1, 2, 3, 4);
+                           ^" in foo.{self::Foo::method}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) →* invalid-type};
+  invalid-type nothing3 = invalid-expression "pkg/front_end/testcases/general/optional.dart:51:39: Error: Too few positional arguments: 1 required, 0 given.
+  var nothing3 = extern.externalMethod();
+                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(){() →* invalid-type};
+  invalid-type nothing4 = invalid-expression "pkg/front_end/testcases/general/optional.dart:52:39: Error: Too many positional arguments: 3 allowed, but 4 found.
+Try removing the extra positional arguments.
+  var nothing4 = extern.externalMethod(1, 2, 3, 4);
+                                      ^" in extern.{self::External::externalMethod}{<inapplicable>}.(1, 2, 3, 4){(invalid-type, invalid-type, invalid-type, invalid-type) →* invalid-type};
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/override.dart.weak.modular.expect b/pkg/front_end/testcases/general/override.dart.weak.modular.expect
new file mode 100644
index 0000000..2ce1243
--- /dev/null
+++ b/pkg/front_end/testcases/general/override.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar extends self::Foo {
+  synthetic constructor •() → self::Bar*
+    : super self::Foo::•()
+    ;
+}
+class Base extends core::Object {
+  synthetic constructor •() → self::Base*
+    : super core::Object::•()
+    ;
+  method method() → self::Foo* {
+    return new self::Foo::•();
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Sub extends self::Base {
+  synthetic constructor •() → self::Sub*
+    : super self::Base::•()
+    ;
+  method method() → self::Foo* {
+    return new self::Bar::•();
+  }
+}
+static method main(core::List<core::String*>* args) → dynamic {
+  self::Base* object = args.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{self::Base*} new self::Base::•() : new self::Sub::•();
+  self::Foo* a = object.{self::Base::method}(){() →* self::Foo*};
+  core::print(a);
+}
diff --git a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..181c1db
--- /dev/null
+++ b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.weak.modular.expect
@@ -0,0 +1,90 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:26:9: Error: The return type of the method 'F.y' is 'A', which does not match the return type, 'B', of the overridden method, 'D.y'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
+// Change to a subtype of 'B'.
+//   A get y => null;
+//         ^
+// pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:16:7: Context: This is the overridden method ('y').
+//   get y => null; // Inferred type: B
+//       ^
+//
+// pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:25:16: Error: The parameter 'value' of the method 'F.x' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'D.x'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void set x(B value) {}
+//                ^
+// pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:15:12: Context: This is the overridden method ('x').
+//   void set x(value) {} // Inferred type: A
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  set x(self::A* value) → void {}
+  get y() → self::B*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  set x(self::A* value) → void {}
+  get y() → self::B*
+    return null;
+}
+class E extends self::D {
+  synthetic constructor •() → self::E*
+    : super self::D::•()
+    ;
+  set x(self::A* value) → void {}
+  get y() → self::B*
+    return null;
+}
+class F extends self::D {
+  synthetic constructor •() → self::F*
+    : super self::D::•()
+    ;
+  set x(self::B* value) → void {}
+  get y() → self::A*
+    return null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_accessor_basic.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_check_accessor_basic.dart.weak.modular.expect
new file mode 100644
index 0000000..d576b70
--- /dev/null
+++ b/pkg/front_end/testcases/general/override_check_accessor_basic.dart.weak.modular.expect
@@ -0,0 +1,82 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_accessor_basic.dart:21:14: Error: The return type of the method 'E.y' is 'Object', which does not match the return type, 'A', of the overridden method, 'C.y'.
+//  - 'Object' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_basic.dart'.
+// Change to a subtype of 'A'.
+//   Object get y => null;
+//              ^
+// pkg/front_end/testcases/general/override_check_accessor_basic.dart:11:9: Context: This is the overridden method ('y').
+//   A get y => null;
+//         ^
+//
+// pkg/front_end/testcases/general/override_check_accessor_basic.dart:20:16: Error: The parameter 'value' of the method 'E.x' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.x'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_basic.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_basic.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void set x(B value) {}
+//                ^
+// pkg/front_end/testcases/general/override_check_accessor_basic.dart:10:12: Context: This is the overridden method ('x').
+//   void set x(A value) {}
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  set x(self::A* value) → void {}
+  get y() → self::A*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  set x(core::Object* value) → void {}
+  get y() → self::B*
+    return null;
+}
+class E extends self::C {
+  synthetic constructor •() → self::E*
+    : super self::C::•()
+    ;
+  set x(self::B* value) → void {}
+  get y() → core::Object*
+    return null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.weak.modular.expect
new file mode 100644
index 0000000..14fa421
--- /dev/null
+++ b/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.weak.modular.expect
@@ -0,0 +1,79 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart:22:17: Error: The parameter 'value' of the method 'D.x4' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.x4'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void set x4(B value) {} // Not covariant
+//                 ^
+// pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart:13:12: Context: This is the overridden method ('x4').
+//   void set x4(A value) {}
+//            ^
+//
+// pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart:23:32: Error: The parameter 'value' of the method 'D.x5' has type 'String', which does not match the corresponding type, 'A', in the overridden method, 'C.x5'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void set x5(covariant String value) {}
+//                                ^
+// pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart:14:12: Context: This is the overridden method ('x5').
+//   void set x5(covariant A value) {}
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  set x1(covariant-by-declaration self::A* value) → void {}
+  set x2(self::A* value) → void {}
+  set x3(covariant-by-declaration self::A* value) → void {}
+  set x4(self::A* value) → void {}
+  set x5(covariant-by-declaration self::A* value) → void {}
+  set x6(covariant-by-declaration self::B* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  set x1(covariant-by-declaration self::B* value) → void {}
+  set x2(covariant-by-declaration self::B* value) → void {}
+  set x3(covariant-by-declaration self::B* value) → void {}
+  set x4(self::B* value) → void {}
+  set x5(covariant-by-declaration core::String* value) → void {}
+  set x6(covariant-by-declaration self::A* value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_after_inference.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_check_after_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..f6a987f
--- /dev/null
+++ b/pkg/front_end/testcases/general/override_check_after_inference.dart.weak.modular.expect
@@ -0,0 +1,72 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_after_inference.dart:22:12: Error: The parameter 'x' of the method 'F.f' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'D.f'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_after_inference.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_after_inference.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void f(B x) {}
+//            ^
+// pkg/front_end/testcases/general/override_check_after_inference.dart:14:8: Context: This is the overridden method ('f').
+//   void f(x) {} // Inferred type: (A) -> void
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f(self::A* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method f(self::A* x) → void {}
+}
+class E extends self::D {
+  synthetic constructor •() → self::E*
+    : super self::D::•()
+    ;
+  method f(self::A* x) → void {}
+}
+class F extends self::D {
+  synthetic constructor •() → self::F*
+    : super self::D::•()
+    ;
+  method f(self::B* x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_basic.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_check_basic.dart.weak.modular.expect
new file mode 100644
index 0000000..e19c0a4
--- /dev/null
+++ b/pkg/front_end/testcases/general/override_check_basic.dart.weak.modular.expect
@@ -0,0 +1,109 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_basic.dart:24:13: Error: The parameter 'x' of the method 'E.f1' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f1'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void f1(B x) {}
+//             ^
+// pkg/front_end/testcases/general/override_check_basic.dart:10:8: Context: This is the overridden method ('f1').
+//   void f1(A x) {}
+//        ^
+//
+// pkg/front_end/testcases/general/override_check_basic.dart:25:14: Error: The parameter 'x' of the method 'E.f2' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f2'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void f2([B x]) {}
+//              ^
+// pkg/front_end/testcases/general/override_check_basic.dart:11:8: Context: This is the overridden method ('f2').
+//   void f2([A x]) {}
+//        ^
+//
+// pkg/front_end/testcases/general/override_check_basic.dart:26:14: Error: The parameter 'x' of the method 'E.f3' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f3'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void f3({B x}) {}
+//              ^
+// pkg/front_end/testcases/general/override_check_basic.dart:12:8: Context: This is the overridden method ('f3').
+//   void f3({A x}) {}
+//        ^
+//
+// pkg/front_end/testcases/general/override_check_basic.dart:27:10: Error: The return type of the method 'E.f4' is 'Object', which does not match the return type, 'A', of the overridden method, 'C.f4'.
+//  - 'Object' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+// Change to a subtype of 'A'.
+//   Object f4() {}
+//          ^
+// pkg/front_end/testcases/general/override_check_basic.dart:13:5: Context: This is the overridden method ('f4').
+//   A f4() {}
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f1(self::A* x) → void {}
+  method f2([self::A* x = #C1]) → void {}
+  method f3({self::A* x = #C1}) → void {}
+  method f4() → self::A* {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method f1(core::Object* x) → void {}
+  method f2([core::Object* x = #C1]) → void {}
+  method f3({core::Object* x = #C1}) → void {}
+  method f4() → self::B* {}
+}
+class E extends self::C {
+  synthetic constructor •() → self::E*
+    : super self::C::•()
+    ;
+  method f1(self::B* x) → void {}
+  method f2([self::B* x = #C1]) → void {}
+  method f3({self::B* x = #C1}) → void {}
+  method f4() → core::Object* {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.modular.expect
new file mode 100644
index 0000000..ed9f7b4
--- /dev/null
+++ b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo<T extends self::Foo<self::Foo::T*>* = self::Foo<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Bar extends core::Object {
+  synthetic constructor •() → self::Bar*
+    : super core::Object::•()
+    ;
+  abstract method fisk<S extends self::Foo<self::Bar::fisk::S*>* = self::Foo<dynamic>*>() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Hest extends core::Object implements self::Bar {
+  synthetic constructor •() → self::Hest*
+    : super core::Object::•()
+    ;
+  @#C1
+  method fisk<U extends self::Foo<self::Hest::fisk::U*>* = self::Foo<dynamic>*>() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {}
+
+constants  {
+  #C1 = core::_Override {}
+}
diff --git a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.modular.expect
new file mode 100644
index 0000000..54a4764
--- /dev/null
+++ b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  method f<U extends core::Object* = dynamic>(covariant-by-class core::Map<self::A::T*, self::A::f::U*>* m) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A<core::String*> {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  method f<V extends core::Object* = dynamic>(covariant-by-class core::Map<core::String*, self::B::f::V*>* m) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.modular.expect
new file mode 100644
index 0000000..ceabd22
--- /dev/null
+++ b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.modular.expect
@@ -0,0 +1,79 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart:22:13: Error: The parameter 'x' of the method 'D.f4' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f4'.
+//  - 'B' is from 'pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void f4(B x) {} // Not covariant
+//             ^
+// pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart:13:8: Context: This is the overridden method ('f4').
+//   void f4(A x) {}
+//        ^
+//
+// pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart:23:28: Error: The parameter 'x' of the method 'D.f5' has type 'String', which does not match the corresponding type, 'A', in the overridden method, 'C.f5'.
+//  - 'A' is from 'pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+//   void f5(covariant String x) {}
+//                            ^
+// pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart:14:8: Context: This is the overridden method ('f5').
+//   void f5(covariant A x) {}
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f1(covariant-by-declaration self::A* x) → void {}
+  method f2(self::A* x) → void {}
+  method f3(covariant-by-declaration self::A* x) → void {}
+  method f4(self::A* x) → void {}
+  method f5(covariant-by-declaration self::A* x) → void {}
+  method f6(covariant-by-declaration self::B* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method f1(covariant-by-declaration self::B* x) → void {}
+  method f2(covariant-by-declaration self::B* x) → void {}
+  method f3(covariant-by-declaration self::B* x) → void {}
+  method f4(self::B* x) → void {}
+  method f5(covariant-by-declaration core::String* x) → void {}
+  method f6(covariant-by-declaration self::A* x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.modular.expect
new file mode 100644
index 0000000..a188410
--- /dev/null
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.weak.modular.expect
@@ -0,0 +1,117 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract get getterFromGetter() → core::num*;
+  abstract set setterFromSetter(core::num* value) → void;
+  abstract set getterFromSetter(core::num* value) → void;
+  abstract get setterFromGetter() → core::num*;
+  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract set getterFromGetterWithSetterConflict(dynamic num) → void;
+  abstract get setterFromSetterWithGetterConflict() → core::num*;
+  abstract set setterFromSetterWithGetterConflict(dynamic num) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract get getterFromGetter() → core::int*;
+  abstract set setterFromSetter(core::int* value) → void;
+  abstract get setterFromGetter() → core::int*;
+  abstract get setterFromSetterWithGetterConflict() → core::int*;
+  abstract set getterFromGetterWithSetterConflict(core::int* value) → void;
+  abstract set getterFromSetter(core::int* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends self::A {
+  synthetic constructor •() → self::C*
+    : super self::A::•()
+    ;
+  abstract get getterFromGetter() → core::num*;
+  abstract set setterFromSetter(core::num* value) → void;
+  abstract get getterFromSetter() → core::num*;
+  abstract set setterFromGetter(core::num* value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
+}
+abstract class D extends self::A implements self::B {
+  synthetic constructor •() → self::D*
+    : super self::A::•()
+    ;
+  abstract get getterFromGetter() → core::int*;
+  abstract set setterFromSetter(core::num* value) → void;
+  abstract get getterFromSetter() → core::num*;
+  abstract set setterFromGetter(core::int* value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
+  abstract member-signature get setterFromGetter() → core::int*; -> self::B::setterFromGetter
+  abstract member-signature get setterFromSetterWithGetterConflict() → core::int*; -> self::B::setterFromSetterWithGetterConflict
+}
+abstract class E extends core::Object implements self::A {
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  abstract get getterFromGetter() → core::num*;
+  abstract set setterFromSetter(core::num* value) → void;
+  abstract get getterFromSetter() → core::num*;
+  abstract set setterFromGetter(core::num* value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class F extends core::Object implements self::A, self::B {
+  synthetic constructor •() → self::F*
+    : super core::Object::•()
+    ;
+  abstract get getterFromGetter() → core::int*;
+  abstract set setterFromSetter(core::num* value) → void;
+  abstract get getterFromSetter() → core::num*;
+  abstract set setterFromGetter(core::int* value) → void;
+  abstract get getterFromGetterWithSetterConflict() → core::num*;
+  abstract set setterFromSetterWithGetterConflict(dynamic value) → void;
+  abstract member-signature get setterFromGetter() → core::int*; -> self::B::setterFromGetter
+  abstract member-signature get setterFromSetterWithGetterConflict() → core::int*; -> self::B::setterFromSetterWithGetterConflict
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.modular.expect
new file mode 100644
index 0000000..845e3fb
--- /dev/null
+++ b/pkg/front_end/testcases/general/override_inference_for_setters.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get foo() → core::num*
+    return null;
+  set foo(dynamic newFoo) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends self::B {
+  synthetic constructor •() → self::A*
+    : super self::B::•()
+    ;
+  set foo(dynamic newFoo) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.modular.expect
new file mode 100644
index 0000000..6e67b60
--- /dev/null
+++ b/pkg/front_end/testcases/general/override_inference_named_parameters_ordering.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method foo({core::bool* c = #C1, core::bool* a = #C2}) → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  method foo({core::bool* c = #C1, core::bool* a = #C2}) → dynamic {}
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  method foo({core::bool* c = #C1, core::bool* a = #C2}) → dynamic {}
+}
+class A1 extends core::Object {
+  synthetic constructor •() → self::A1*
+    : super core::Object::•()
+    ;
+  method foo({core::bool* a = #C1, core::bool* c = #C2}) → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B1 extends self::A1 {
+  synthetic constructor •() → self::B1*
+    : super self::A1::•()
+    ;
+  method foo({core::bool* a = #C1, core::bool* c = #C2}) → dynamic {}
+}
+class C1 extends self::B1 {
+  synthetic constructor •() → self::C1*
+    : super self::B1::•()
+    ;
+  method foo({core::bool* a = #C1, core::bool* c = #C2}) → dynamic {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = true
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.modular.expect b/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.modular.expect
new file mode 100644
index 0000000..765d23f
--- /dev/null
+++ b/pkg/front_end/testcases/general/override_setter_with_field.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_setter_with_field.dart:12:7: Error: The field 'B.x' has type 'int', which does not match the corresponding type, 'Object', in the overridden setter, 'A.x'.
+//  - 'Object' is from 'dart:core'.
+//   int x;
+//       ^
+// pkg/front_end/testcases/general/override_setter_with_field.dart:8:12: Context: This is the overridden method ('x').
+//   void set x(Object y);
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract set x(core::Object* y) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object implements self::A {
+  field core::int* x = null;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::B::•().{self::B::x} = 5;
+}
diff --git a/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.modular.expect b/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.modular.expect
new file mode 100644
index 0000000..b77b0c2
--- /dev/null
+++ b/pkg/front_end/testcases/general/part_as_entry_point.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+part part_as_entry_point.dart;
+static method main() → dynamic {
+  core::print("Hello, World!");
+}
diff --git a/pkg/front_end/testcases/general/part_not_part_of.dart.weak.modular.expect b/pkg/front_end/testcases/general/part_not_part_of.dart.weak.modular.expect
new file mode 100644
index 0000000..f22e87e
--- /dev/null
+++ b/pkg/front_end/testcases/general/part_not_part_of.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/part_not_part_of.dart:8:6: Error: Can't use 'pkg/front_end/testcases/general/part_not_part_of_lib1.dart' as a part, because it has no 'part of' declaration.
+// part 'part_not_part_of_lib1.dart';
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///part_not_part_of_lib2.dart";
+
+@#C1
+part part_not_part_of_lib1.dart;
+static method main() → dynamic {}
+
+library;
+import self as self2;
+import "part_not_part_of_lib1.dart" as par;
+
+import "org-dartlang-testcase:///part_not_part_of_lib1.dart";
+
+static method methodFromLib2() → dynamic {
+  par::methodFromLib1();
+}
+
+library;
+import self as par;
+
+static method methodFromLib1() → dynamic {}
+
+constants  {
+  #C1 = core::_Override {}
+}
diff --git a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.modular.expect b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.modular.expect
new file mode 100644
index 0000000..2048308
--- /dev/null
+++ b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart:8:6: Error: Using 'pkg/front_end/testcases/general/part_not_part_of_same_named_library_lib1.dart' as part of 'pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart' but its 'part of' declaration says 'foo'.
+// Try changing the 'part of' declaration to use a relative file name.
+// part 'part_not_part_of_same_named_library_lib1.dart';
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///part_not_part_of_same_named_library_lib2.dart";
+
+@#C1
+part part_not_part_of_same_named_library_lib1.dart;
+static method main() → dynamic {}
+
+library foo;
+import self as self2;
+
+part part_not_part_of_same_named_library_lib1.dart;
+static method /* from org-dartlang-testcase:///part_not_part_of_same_named_library_lib1.dart */ methodFromLib1() → dynamic {}
+static method methodFromLib2() → dynamic {
+  self2::methodFromLib1();
+}
+
+constants  {
+  #C1 = core::_Override {}
+}
diff --git a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.modular.expect b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.modular.expect
new file mode 100644
index 0000000..693c671
--- /dev/null
+++ b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart:8:6: Error: Using 'pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib1.dart' as part of 'pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart' but its 'part of' declaration says 'pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib2.dart'.
+// part 'part_part_of_different_unnamed_library_lib1.dart';
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///part_part_of_different_unnamed_library_lib2.dart";
+
+@#C1
+part part_part_of_different_unnamed_library_lib1.dart;
+static method main() → dynamic {}
+
+library;
+import self as self2;
+
+part part_part_of_different_unnamed_library_lib1.dart;
+static method /* from org-dartlang-testcase:///part_part_of_different_unnamed_library_lib1.dart */ methodFromLib1() → dynamic {}
+static method methodFromLib2() → dynamic {
+  self2::methodFromLib1();
+}
+
+constants  {
+  #C1 = core::_Override {}
+}
diff --git a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.modular.expect b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.modular.expect
new file mode 100644
index 0000000..0ec56bd
--- /dev/null
+++ b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library foo;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/part_part_of_differently_named_library.dart:10:6: Error: Using 'pkg/front_end/testcases/general/part_part_of_differently_named_library_lib1.dart' as part of 'foo' but its 'part of' declaration says 'bar'.
+// part 'part_part_of_differently_named_library_lib1.dart';
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///part_part_of_differently_named_library_lib2.dart";
+
+@#C1
+part part_part_of_differently_named_library_lib1.dart;
+static method main() → dynamic {}
+
+library bar;
+import self as self2;
+
+part part_part_of_differently_named_library_lib1.dart;
+static method /* from org-dartlang-testcase:///part_part_of_differently_named_library_lib1.dart */ methodFromLib1() → dynamic {}
+static method methodFromLib2() → dynamic {
+  self2::methodFromLib1();
+}
+
+constants  {
+  #C1 = core::_Override {}
+}
diff --git a/pkg/front_end/testcases/general/platform.dart.weak.modular.expect b/pkg/front_end/testcases/general/platform.dart.weak.modular.expect
new file mode 100644
index 0000000..bef6d48
--- /dev/null
+++ b/pkg/front_end/testcases/general/platform.dart.weak.modular.expect
@@ -0,0 +1,4 @@
+library;
+import self as self;
+
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.modular.expect
new file mode 100644
index 0000000..fa5d4ba
--- /dev/null
+++ b/pkg/front_end/testcases/general/platform_invalid_uris/main.dart.weak.modular.expect
@@ -0,0 +1,108 @@
+library;
+import self as self;
+import "dart:test" as test;
+
+import "dart:test";
+
+static method main() → dynamic {
+  new test::Class::•();
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart:8:9: Error: Couldn't parse URI ':c':
+//   Invalid empty scheme.
+// import ':c';
+//         ^
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart:9:9: Error: Couldn't parse URI ':d':
+//   Invalid empty scheme.
+// export ':d';
+//         ^
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart:5:9: Error: Couldn't parse URI ':a':
+//   Invalid empty scheme.
+// import ':a';
+//         ^
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart:6:9: Error: Couldn't parse URI ':b':
+//   Invalid empty scheme.
+// export ':b';
+//         ^
+//
+import self as test;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+import "org-dartlang-malformed-uri:?%3Ac";
+export "org-dartlang-malformed-uri:?%3Ad";
+import "org-dartlang-malformed-uri:?%3Aa";
+export "org-dartlang-malformed-uri:?%3Ab";
+
+@#C1
+class Class extends core::Object {
+  synthetic constructor •() → test::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart:8:8: Error: Expected a URI.
+// import ':c';
+//        ^
+//
+import self as self2;
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/patch_lib.dart:9:1: Error: Expected a URI.
+// export ':d';
+// ^
+//
+import self as self3;
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart:5:8: Error: Expected a URI.
+// import ':a';
+//        ^
+//
+import self as self4;
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/platform_invalid_uris/origin_lib.dart:6:1: Error: Expected a URI.
+// export ':b';
+// ^
+//
+import self as self5;
+
+
+constants  {
+  #C1 = _in::_Patch {}
+}
diff --git a/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.modular.expect b/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.modular.expect
new file mode 100644
index 0000000..8785424
--- /dev/null
+++ b/pkg/front_end/testcases/general/prefer_baseclass.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class AB1 extends self::A implements self::B {
+  synthetic constructor •() → self::AB1*
+    : super self::A::•()
+    ;
+}
+class AB2 extends self::A implements self::B {
+  synthetic constructor •() → self::AB2*
+    : super self::A::•()
+    ;
+}
+class BA1 extends self::B implements self::A {
+  synthetic constructor •() → self::BA1*
+    : super self::B::•()
+    ;
+}
+class BA2 extends self::B implements self::A {
+  synthetic constructor •() → self::BA2*
+    : super self::B::•()
+    ;
+}
+static method takeSubclassOfA(dynamic obj) → dynamic {}
+static method takeSubclassOfB(dynamic obj) → dynamic {}
+static method main() → dynamic {
+  self::takeSubclassOfA(new self::AB1::•());
+  self::takeSubclassOfA(new self::AB2::•());
+  self::takeSubclassOfB(new self::BA1::•());
+  self::takeSubclassOfB(new self::BA2::•());
+}
diff --git a/pkg/front_end/testcases/general/private_members.dart.weak.modular.expect b/pkg/front_end/testcases/general/private_members.dart.weak.modular.expect
new file mode 100644
index 0000000..7d67ee2
--- /dev/null
+++ b/pkg/front_end/testcases/general/private_members.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+part private_members_part.dart;
+abstract class _AbstractClass extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
+  synthetic constructor •() → self::_AbstractClass
+    : super core::Object::•()
+    ;
+  abstract get _privateAbstractField() → core::int;
+  abstract set _privateAbstractField(core::int #externalFieldValue) → void;
+}
+class _Class extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
+  field core::int _privateField = 1;
+  field core::int _privateFinalField = 1;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor _privateConstructor() → self::_Class
+    : super core::Object::•()
+    ;
+  static factory _privateRedirectingFactory() → self::_Class
+    return new self::_Class::_privateConstructor();
+  method _privateMethod() → void {}
+  get _privateGetter() → core::int
+    return 42;
+  set _privateSetter(core::int value) → void {}
+}
+extension _Extension on core::int { // from org-dartlang-testcase:///private_members_part.dart
+  method _privateMethod = self::_Extension|_privateMethod;
+  tearoff _privateMethod = self::_Extension|get#_privateMethod;
+  get _privateGetter = self::_Extension|get#_privateGetter;
+  static field _privateField = self::_Extension|_privateField;
+  static field _privateFinalField = self::_Extension|_privateFinalField;
+  set _privateSetter = self::_Extension|set#_privateSetter;
+}
+static field core::int _Extension|_privateField = 1 /* from org-dartlang-testcase:///private_members_part.dart */;
+static field core::int _Extension|_privateFinalField = 1 /* from org-dartlang-testcase:///private_members_part.dart */;
+static method test(self::_AbstractClass c) → dynamic {
+  c.{self::_AbstractClass::_privateAbstractField} = c.{self::_AbstractClass::_privateAbstractField}{core::int};
+}
+static method main() → dynamic {
+  self::_Class c = new self::_Class::_privateConstructor();
+  c = new self::_Class::_privateConstructor();
+  c.{self::_Class::_privateMethod}(){() → void};
+  c.{self::_Class::_privateSetter} = c.{self::_Class::_privateGetter}{core::int};
+  c.{self::_Class::_privateField} = c.{self::_Class::_privateField}{core::int};
+  c.{self::_Class::_privateFinalField}{core::int};
+  self::_Extension|_privateMethod(0);
+  self::_Extension|get#_privateMethod(0)(){() → void};
+  self::_Extension|set#_privateSetter(0, self::_Extension|get#_privateGetter(0));
+  self::_Extension|_privateField = self::_Extension|_privateField;
+  self::_Extension|_privateFinalField;
+}
+static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateMethod(lowered final core::int #this) → void {}
+static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|get#_privateMethod(lowered final core::int #this) → () → void
+  return () → void => self::_Extension|_privateMethod(#this);
+static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|get#_privateGetter(lowered final core::int #this) → core::int
+  return 42;
+static method /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|set#_privateSetter(lowered final core::int #this, core::int value) → void {}
+
+constants  {
+  #C1 = constructor-tearoff self::_Class::_privateRedirectingFactory
+}
diff --git a/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.modular.expect b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.modular.expect
new file mode 100644
index 0000000..ca1fea0
--- /dev/null
+++ b/pkg/front_end/testcases/general/private_method_tearoff.dart.weak.modular.expect
@@ -0,0 +1,63 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "private_method_tearoff_lib.dart" as pri;
+
+import "org-dartlang-testcase:///private_method_tearoff_lib.dart";
+
+class Foo extends core::Object implements pri::Bar {
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method /* from org-dartlang-testcase:///private_method_tearoff_lib.dart */ _f() → void
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+class Baz extends self::Foo {
+  synthetic constructor •() → self::Baz*
+    : super self::Foo::•()
+    ;
+}
+static method main() → dynamic {
+  pri::baz(new self::Foo::•());
+}
+
+library;
+import self as pri;
+import "dart:core" as core;
+
+class Bar extends core::Object {
+  synthetic constructor •() → pri::Bar*
+    : super core::Object::•()
+    ;
+  method _f() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method baz(pri::Bar* bar) → void {
+  core::print("${bar.{pri::Bar::_f}{() →* void}.{core::Object::runtimeType}{core::Type*}}");
+}
+
+constants  {
+  #C1 = #org-dartlang-testcase:///private_method_tearoff.dart::_f
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/general/promoted_access.dart.weak.modular.expect b/pkg/front_end/testcases/general/promoted_access.dart.weak.modular.expect
new file mode 100644
index 0000000..7439751
--- /dev/null
+++ b/pkg/front_end/testcases/general/promoted_access.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T*>*
+    : super core::Object::•()
+    ;
+  method method(covariant-by-class self::Class::T* o) → dynamic {
+    if(o is self::Class<dynamic>*) {
+      o{self::Class::T* & self::Class<dynamic>* /* '*' & '*' = '*' */}.{self::Class::method}(null){(dynamic) →* dynamic};
+    }
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method method<T extends core::Object* = dynamic>(self::method::T* o) → dynamic {
+  if(o is self::Class<dynamic>*) {
+    o{self::method::T* & self::Class<dynamic>* /* '*' & '*' = '*' */}.{self::Class::method}(null){(dynamic) →* dynamic};
+  }
+}
+static method main() → dynamic {
+  new self::Class::•<dynamic>().{self::Class::method}(new self::Class::•<dynamic>()){(dynamic) →* dynamic};
+  self::method<self::Class<dynamic>*>(new self::Class::•<dynamic>());
+}
diff --git a/pkg/front_end/testcases/general/promoted_null_aware_access.dart.weak.modular.expect b/pkg/front_end/testcases/general/promoted_null_aware_access.dart.weak.modular.expect
new file mode 100644
index 0000000..09affa3
--- /dev/null
+++ b/pkg/front_end/testcases/general/promoted_null_aware_access.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method method<T extends core::Object* = dynamic>(self::method::T* o) → dynamic {
+  if(o is core::String*) {
+    let final self::method::T* & core::String* /* '*' & '*' = '*' */ #t1 = o{self::method::T* & core::String* /* '*' & '*' = '*' */} in #t1 == null ?{core::int*} null : #t1.{core::String::length}{core::int*};
+  }
+}
+static method main() → dynamic {
+  self::method<core::String*>("");
+}
diff --git a/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.modular.expect b/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.modular.expect
new file mode 100644
index 0000000..6fc1a72
--- /dev/null
+++ b/pkg/front_end/testcases/general/public_method_tearoff.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library;
+import self as self;
+import "public_method_tearoff_lib.dart" as pub;
+
+import "org-dartlang-testcase:///public_method_tearoff_lib.dart";
+
+class Foo extends pub::Bar {
+  synthetic constructor •() → self::Foo*
+    : super pub::Bar::•()
+    ;
+}
+static method main() → void {
+  pub::baz(new self::Foo::•());
+}
+
+library;
+import self as pub;
+import "dart:core" as core;
+
+class Bar extends core::Object {
+  synthetic constructor •() → pub::Bar*
+    : super core::Object::•()
+    ;
+  method f() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method baz(pub::Bar* bar) → void {
+  core::print("${bar.{pub::Bar::f}{() →* void}.{core::Object::runtimeType}{core::Type*}}");
+}
diff --git a/pkg/front_end/testcases/general/pure_index_expressions.dart.weak.modular.expect b/pkg/front_end/testcases/general/pure_index_expressions.dart.weak.modular.expect
new file mode 100644
index 0000000..e1a3cd8
--- /dev/null
+++ b/pkg/front_end/testcases/general/pure_index_expressions.dart.weak.modular.expect
@@ -0,0 +1,199 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  operator [](self::Class* cls) → self::Class*
+    return new self::Class::•();
+  operator []=(self::Class* cls, self::Class* value) → void {}
+  operator +(self::Class* cls) → self::Class*
+    return cls;
+  method indexGetSetForEffect(core::Map<self::Class*, self::Class*>* map) → void {
+    final self::Class* self = this;
+    let final core::Map<self::Class*, self::Class*>* #t1 = map in #t1.{core::Map::[]}(this){(core::Object*) →* self::Class*} == null ?{self::Class*} #t1.{core::Map::[]=}(this, this){(self::Class*, self::Class*) →* void} : null;
+    let final core::Map<self::Class*, self::Class*>* #t2 = map in #t2.{core::Map::[]}(self){(core::Object*) →* self::Class*} == null ?{self::Class*} #t2.{core::Map::[]=}(self, self){(self::Class*, self::Class*) →* void} : null;
+    map.{core::Map::[]=}(this, this){(self::Class*, self::Class*) →* void};
+    map.{core::Map::[]=}(self, self){(self::Class*, self::Class*) →* void};
+    map.{core::Map::[]}(this){(core::Object*) →* self::Class*};
+    map.{core::Map::[]}(self){(core::Object*) →* self::Class*};
+    let final core::Map<self::Class*, self::Class*>* #t3 = map in #t3.{core::Map::[]=}(this, #t3.{core::Map::[]}(this){(core::Object*) →* self::Class*}.{self::Class::+}(this){(self::Class*) →* self::Class*}){(self::Class*, self::Class*) →* void};
+    let final core::Map<self::Class*, self::Class*>* #t4 = map in #t4.{core::Map::[]=}(self, #t4.{core::Map::[]}(self){(core::Object*) →* self::Class*}.{self::Class::+}(self){(self::Class*) →* self::Class*}){(self::Class*, self::Class*) →* void};
+  }
+  method indexGetSetForValue(core::Map<self::Class*, self::Class*>* map) → void {
+    final self::Class* self = this;
+    dynamic v;
+    v = let final core::Map<self::Class*, self::Class*>* #t5 = map in let final self::Class* #t6 = #t5.{core::Map::[]}(this){(core::Object*) →* self::Class*} in #t6 == null ?{self::Class*} let final void #t7 = #t5.{core::Map::[]=}(this, this){(self::Class*, self::Class*) →* void} in this : #t6;
+    v = let final core::Map<self::Class*, self::Class*>* #t8 = map in let final self::Class* #t9 = #t8.{core::Map::[]}(self){(core::Object*) →* self::Class*} in #t9 == null ?{self::Class*} let final void #t10 = #t8.{core::Map::[]=}(self, self){(self::Class*, self::Class*) →* void} in self : #t9;
+    v = let final core::Map<self::Class*, self::Class*>* #t11 = map in let final void #t12 = #t11.{core::Map::[]=}(this, this){(self::Class*, self::Class*) →* void} in this;
+    v = let final core::Map<self::Class*, self::Class*>* #t13 = map in let final void #t14 = #t13.{core::Map::[]=}(self, self){(self::Class*, self::Class*) →* void} in self;
+    v = map.{core::Map::[]}(this){(core::Object*) →* self::Class*};
+    v = map.{core::Map::[]}(self){(core::Object*) →* self::Class*};
+    v = let final core::Map<self::Class*, self::Class*>* #t15 = map in let final self::Class* #t16 = #t15.{core::Map::[]}(this){(core::Object*) →* self::Class*}.{self::Class::+}(this){(self::Class*) →* self::Class*} in let final void #t17 = #t15.{core::Map::[]=}(this, #t16){(self::Class*, self::Class*) →* void} in #t16;
+    v = let final core::Map<self::Class*, self::Class*>* #t18 = map in let final self::Class* #t19 = #t18.{core::Map::[]}(self){(core::Object*) →* self::Class*}.{self::Class::+}(self){(self::Class*) →* self::Class*} in let final void #t20 = #t18.{core::Map::[]=}(self, #t19){(self::Class*, self::Class*) →* void} in #t19;
+  }
+  method implicitExtensionGetSetForEffect(core::int* i) → void {
+    final self::Class* self = this;
+    let final core::int* #t21 = i in self::Extension|[](#t21, this) == null ?{self::Class*} self::Extension|[]=(#t21, this, this) : null;
+    let final core::int* #t22 = i in self::Extension|[](#t22, self) == null ?{self::Class*} self::Extension|[]=(#t22, self, self) : null;
+    self::Extension|[]=(i, this, this);
+    self::Extension|[]=(i, self, self);
+    self::Extension|[](i, this);
+    self::Extension|[](i, self);
+    let final core::int* #t23 = i in self::Extension|[]=(#t23, this, self::Extension|[](#t23, this).{self::Class::+}(this){(self::Class*) →* self::Class*});
+    let final core::int* #t24 = i in self::Extension|[]=(#t24, self, self::Extension|[](#t24, self).{self::Class::+}(self){(self::Class*) →* self::Class*});
+  }
+  method implicitExtensionGetSetForValue(core::int* i) → void {
+    final self::Class* self = this;
+    dynamic v;
+    v = let final core::int* #t25 = i in let final self::Class* #t26 = self::Extension|[](#t25, this) in #t26 == null ?{self::Class*} let final void #t27 = self::Extension|[]=(#t25, this, this) in this : #t26;
+    v = let final core::int* #t28 = i in let final self::Class* #t29 = self::Extension|[](#t28, self) in #t29 == null ?{self::Class*} let final void #t30 = self::Extension|[]=(#t28, self, self) in self : #t29;
+    v = let final core::int* #t31 = i in let final void #t32 = self::Extension|[]=(#t31, this, this) in this;
+    v = let final core::int* #t33 = i in let final void #t34 = self::Extension|[]=(#t33, self, self) in self;
+    v = self::Extension|[](i, this);
+    v = self::Extension|[](i, self);
+    v = let final core::int* #t35 = i in let final self::Class* #t36 = self::Extension|[](#t35, this).{self::Class::+}(this){(self::Class*) →* self::Class*} in let final void #t37 = self::Extension|[]=(#t35, this, #t36) in #t36;
+    v = let final core::int* #t38 = i in let final self::Class* #t39 = self::Extension|[](#t38, self).{self::Class::+}(self){(self::Class*) →* self::Class*} in let final void #t40 = self::Extension|[]=(#t38, self, #t39) in #t39;
+  }
+  method explicitExtensionGetSetForEffect(core::int* i) → void {
+    final self::Class* self = this;
+    let final core::int* #t41 = i in self::Extension|[](#t41, this) == null ?{self::Class*} self::Extension|[]=(#t41, this, this) : null;
+    let final core::int* #t42 = i in self::Extension|[](#t42, self) == null ?{self::Class*} self::Extension|[]=(#t42, self, self) : null;
+    self::Extension|[]=(i, this, this);
+    self::Extension|[]=(i, self, self);
+    self::Extension|[](i, this);
+    self::Extension|[](i, self);
+    let final core::int* #t43 = i in self::Extension|[]=(#t43, this, self::Extension|[](#t43, this).{self::Class::+}(this){(self::Class*) →* self::Class*});
+    let final core::int* #t44 = i in self::Extension|[]=(#t44, self, self::Extension|[](#t44, self).{self::Class::+}(self){(self::Class*) →* self::Class*});
+  }
+  method explicitExtensionGetSetForValue(core::int* i) → void {
+    final self::Class* self = this;
+    dynamic v;
+    v = let final core::int* #t45 = i in let final self::Class* #t46 = self::Extension|[](#t45, this) in #t46 == null ?{self::Class*} let final void #t47 = self::Extension|[]=(#t45, this, this) in this : #t46;
+    v = let final core::int* #t48 = i in let final self::Class* #t49 = self::Extension|[](#t48, self) in #t49 == null ?{self::Class*} let final void #t50 = self::Extension|[]=(#t48, self, self) in self : #t49;
+    v = let final core::int* #t51 = i in let final void #t52 = self::Extension|[]=(#t51, this, this) in this;
+    v = let final core::int* #t53 = i in let final void #t54 = self::Extension|[]=(#t53, self, self) in self;
+    v = self::Extension|[](i, this);
+    v = self::Extension|[](i, self);
+    v = let final core::int* #t55 = i in let final self::Class* #t56 = self::Extension|[](#t55, this).{self::Class::+}(this){(self::Class*) →* self::Class*} in let final void #t57 = self::Extension|[]=(#t55, this, #t56) in #t56;
+    v = let final core::int* #t58 = i in let final self::Class* #t59 = self::Extension|[](#t58, self).{self::Class::+}(self){(self::Class*) →* self::Class*} in let final void #t60 = self::Extension|[]=(#t58, self, #t59) in #t59;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Subclass extends self::Class {
+  synthetic constructor •() → self::Subclass*
+    : super self::Class::•()
+    ;
+  method superIndexGetSetForEffect() → void {
+    final self::Class* self = this;
+    super.{self::Class::[]}(this) == null ?{self::Class*} super.{self::Class::[]=}(this, this) : null;
+    super.{self::Class::[]}(self) == null ?{self::Class*} super.{self::Class::[]=}(self, self) : null;
+    super.{self::Class::[]=}(this, this);
+    super.{self::Class::[]=}(self, self);
+    super.{self::Class::[]}(this);
+    super.{self::Class::[]}(self);
+    super.{self::Class::[]=}(this, super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class*) →* self::Class*});
+    super.{self::Class::[]=}(self, super.{self::Class::[]}(self).{self::Class::+}(self){(self::Class*) →* self::Class*});
+  }
+  method superIndexGetSetForValue() → void {
+    final self::Class* self = this;
+    dynamic v;
+    v = let final self::Class* #t61 = super.{self::Class::[]}(this) in #t61 == null ?{self::Class*} let final void #t62 = super.{self::Class::[]=}(this, this) in this : #t61;
+    v = let final self::Class* #t63 = super.{self::Class::[]}(self) in #t63 == null ?{self::Class*} let final void #t64 = super.{self::Class::[]=}(self, self) in self : #t63;
+    v = let final void #t65 = super.{self::Class::[]=}(this, this) in this;
+    v = let final void #t66 = super.{self::Class::[]=}(self, self) in self;
+    v = super.{self::Class::[]}(this);
+    v = super.{self::Class::[]}(self);
+    v = let final self::Class* #t67 = super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class*) →* self::Class*} in let final void #t68 = super.{self::Class::[]=}(this, #t67) in #t67;
+    v = let final self::Class* #t69 = super.{self::Class::[]}(self).{self::Class::+}(self){(self::Class*) →* self::Class*} in let final void #t70 = super.{self::Class::[]=}(self, #t69) in #t69;
+  }
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2*
+    : super core::Object::•()
+    ;
+  operator +(self::Class2* cls) → self::Class2*
+    return cls;
+  method implicitExtensionGetSetForEffect() → void {
+    final self::Class2* self = this;
+    self::Extension2|[](this, this) == null ?{self::Class2*} self::Extension2|[]=(this, this, this) : null;
+    self::Extension2|[](self, self) == null ?{self::Class2*} self::Extension2|[]=(self, self, self) : null;
+    self::Extension2|[]=(this, this, this);
+    self::Extension2|[]=(self, self, self);
+    self::Extension2|[](this, this);
+    self::Extension2|[](self, self);
+    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2*) →* self::Class2*});
+    self::Extension2|[]=(self, self, self::Extension2|[](self, self).{self::Class2::+}(self){(self::Class2*) →* self::Class2*});
+  }
+  method implicitExtensionGetSetForValue() → void {
+    final self::Class2* self = this;
+    dynamic v;
+    v = let final self::Class2* #t71 = self::Extension2|[](this, this) in #t71 == null ?{self::Class2*} let final void #t72 = self::Extension2|[]=(this, this, this) in this : #t71;
+    v = let final self::Class2* #t73 = self::Extension2|[](self, self) in #t73 == null ?{self::Class2*} let final void #t74 = self::Extension2|[]=(self, self, self) in self : #t73;
+    v = let final void #t75 = self::Extension2|[]=(this, this, this) in this;
+    v = let final void #t76 = self::Extension2|[]=(self, self, self) in self;
+    v = self::Extension2|[](this, this);
+    v = self::Extension2|[](self, self);
+    v = let final self::Class2* #t77 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2*) →* self::Class2*} in let final void #t78 = self::Extension2|[]=(this, this, #t77) in #t77;
+    v = let final self::Class2* #t79 = self::Extension2|[](self, self).{self::Class2::+}(self){(self::Class2*) →* self::Class2*} in let final void #t80 = self::Extension2|[]=(self, self, #t79) in #t79;
+  }
+  method explicitExtensionGetSetForEffect() → void {
+    final self::Class2* self = this;
+    self::Extension2|[](this, this) == null ?{self::Class2*} self::Extension2|[]=(this, this, this) : null;
+    self::Extension2|[](self, self) == null ?{self::Class2*} self::Extension2|[]=(self, self, self) : null;
+    self::Extension2|[]=(this, this, this);
+    self::Extension2|[]=(self, self, self);
+    self::Extension2|[](this, this);
+    self::Extension2|[](self, self);
+    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2*) →* self::Class2*});
+    self::Extension2|[]=(self, self, self::Extension2|[](self, self).{self::Class2::+}(self){(self::Class2*) →* self::Class2*});
+  }
+  method explicitExtensionGetSetForValue() → void {
+    final self::Class2* self = this;
+    dynamic v;
+    v = let final self::Class2* #t81 = self::Extension2|[](this, this) in #t81 == null ?{self::Class2*} let final void #t82 = self::Extension2|[]=(this, this, this) in this : #t81;
+    v = let final self::Class2* #t83 = self::Extension2|[](self, self) in #t83 == null ?{self::Class2*} let final void #t84 = self::Extension2|[]=(self, self, self) in self : #t83;
+    v = let final void #t85 = self::Extension2|[]=(this, this, this) in this;
+    v = let final void #t86 = self::Extension2|[]=(self, self, self) in self;
+    v = self::Extension2|[](this, this);
+    v = self::Extension2|[](self, self);
+    v = let final self::Class2* #t87 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2*) →* self::Class2*} in let final void #t88 = self::Extension2|[]=(this, this, #t87) in #t87;
+    v = let final self::Class2* #t89 = self::Extension2|[](self, self).{self::Class2::+}(self){(self::Class2*) →* self::Class2*} in let final void #t90 = self::Extension2|[]=(self, self, #t89) in #t89;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on core::int* {
+  operator [] = self::Extension|[];
+  operator []= = self::Extension|[]=;
+}
+extension Extension2 on self::Class2* {
+  operator [] = self::Extension2|[];
+  operator []= = self::Extension2|[]=;
+}
+static method Extension|[](lowered final core::int* #this, self::Class* cls) → self::Class*
+  return new self::Class::•();
+static method Extension|[]=(lowered final core::int* #this, self::Class* cls, self::Class* value) → void {}
+static method Extension2|[](lowered final self::Class2* #this, self::Class2* cls) → self::Class2*
+  return new self::Class2::•();
+static method Extension2|[]=(lowered final self::Class2* #this, self::Class2* cls, self::Class2* value) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.modular.expect b/pkg/front_end/testcases/general/qualified.dart.weak.modular.expect
new file mode 100644
index 0000000..59d3ddb
--- /dev/null
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.modular.expect
@@ -0,0 +1,167 @@
+library test.qualified.main;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/qualified.dart:13:11: Error: The name of a constructor must match the name of the enclosing class.
+//   factory WrongName() {}
+//           ^^^^^^^^^
+// pkg/front_end/testcases/general/qualified.dart:11:7: Context: The name of the enclosing class is 'Bad'.
+// class Bad extends lib.Missing {
+//       ^^^
+//
+// pkg/front_end/testcases/general/qualified.dart:11:19: Error: Type 'lib.Missing' not found.
+// class Bad extends lib.Missing {
+//                   ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/qualified.dart:12:3: Error: Type 'lib.Missing' not found.
+//   lib.Missing method() {}
+//   ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/qualified.dart:18:7: Error: The type 'lib.VoidFunction' which is an alias of 'void Function()' can't be used as supertype.
+// class IllegalSupertype extends lib.VoidFunction {}
+//       ^
+// pkg/front_end/testcases/general/qualified_lib.dart:27:9: Context: The issue arises via this type alias.
+// typedef VoidFunction = void Function();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+import "qualified_lib.dart" as lib;
+
+import "org-dartlang-testcase:///qualified_lib.dart" as lib;
+
+part qualified_part.dart;
+class Bad extends core::Object {
+  method method() → invalid-type {}
+  static factory WrongName() → self::Bad* {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _WithMixin&Supertype&Mixin = lib::Supertype with lib::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_WithMixin&Supertype&Mixin*
+    : super lib::Supertype::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{lib::Mixin::foo}();
+}
+class WithMixin extends self::_WithMixin&Supertype&Mixin {
+  synthetic constructor •() → self::WithMixin*
+    : super self::_WithMixin&Supertype&Mixin::•()
+    ;
+}
+class IllegalSupertype extends core::Object {
+  synthetic constructor •() → self::IllegalSupertype*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<T extends core::Object* = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  constructor a() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  static factory b<T extends core::Object* = dynamic>() → self::C<self::C::b::T*>*
+    return lib::C::b<self::C::b::T*>();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::C::•<core::String*>();
+  new self::C::a<core::String*>();
+  new lib::C::a<core::String*>();
+  new lib::C::•<core::String*>();
+  new lib::C::a<core::String*>();
+  new lib::C::a<core::String*>();
+  new self::WithMixin::•().{lib::Supertype::supertypeMethod}(){() →* dynamic};
+  new self::WithMixin::•().{self::_WithMixin&Supertype&Mixin::foo}(){() →* dynamic};
+  new self::IllegalSupertype::•();
+}
+
+library test.qualified.lib;
+import self as lib;
+import "dart:core" as core;
+import "qualified.dart" as self;
+
+import "org-dartlang-testcase:///qualified.dart" as main;
+
+typedef VoidFunction = () →* void;
+class C<T extends core::Object* = dynamic> extends self::C<lib::C::T*> {
+  static final field dynamic _redirecting# = <dynamic>[#C2];
+  constructor •() → lib::C<lib::C::T*>*
+    : super self::C::•()
+    ;
+  constructor a() → lib::C<lib::C::T*>*
+    : super self::C::•()
+    ;
+  static factory b<T extends core::Object* = dynamic>() → lib::C<lib::C::b::T*>*
+    return new lib::C::a<lib::C::b::T*>();
+}
+class Supertype extends core::Object {
+  synthetic constructor •() → lib::Supertype*
+    : super core::Object::•()
+    ;
+  method supertypeMethod() → dynamic {
+    core::print("I'm supertypeMethod form lib.Supertype");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Mixin extends core::Object {
+  synthetic constructor •() → lib::Mixin*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    core::print("I'm Mixin.foo");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+constants  {
+  #C1 = constructor-tearoff self::C::b
+  #C2 = constructor-tearoff lib::C::b
+}
diff --git a/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..293f8a2
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_constructor.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  static factory fisk() → self::A*
+    return new self::B::•();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {
+  new self::B::•();
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::fisk
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.modular.expect
new file mode 100644
index 0000000..ba2466c
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.weak.modular.expect
@@ -0,0 +1,183 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
+//  - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+//  - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+//   factory FooBase(int x) = Foo<Tf>;
+//                            ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class FooBase<Tf extends core::Object* = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  abstract get x() → core::int*;
+  static factory •<Tf extends core::Object* = dynamic>(core::int* x) → self::FooBase<self::FooBase::•::Tf*>*
+    return invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Foo<T extends core::Object* = dynamic> extends core::Object implements self::FooBase<dynamic> {
+  static final field dynamic _redirecting# = <dynamic>[#C2];
+  static factory •<T extends core::Object* = dynamic>(core::int* x) → self::Foo<self::Foo::•::T*>*
+    return new self::Bar::•<core::String*, self::Foo::•::T*>(x);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar<Sb extends core::Object* = dynamic, Tb extends core::Object* = dynamic> extends core::Object implements self::Foo<self::Bar::Tb*> {
+  field core::int* x;
+  constructor •(core::int* x) → self::Bar<self::Bar::Sb*, self::Bar::Tb*>*
+    : self::Bar::x = x, super core::Object::•() {
+    core::print("Bar<${self::Bar::Sb*},${self::Bar::Tb*}>");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Builder<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Builder<self::Builder::X*>*
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    return invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^";
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SimpleCase<A extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C3];
+  static factory •<A extends core::Object* = dynamic, B extends core::Object* = dynamic>() → self::SimpleCase<self::SimpleCase::•::A*, self::SimpleCase::•::B*>*
+    return self::SimpleCaseImpl::•<self::SimpleCase::•::A*, self::SimpleCase::•::B*>();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SimpleCaseImpl<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai*, self::SimpleCaseImpl::Bi*> {
+  static final field dynamic _redirecting# = <dynamic>[#C4];
+  static factory •<Ai extends core::Object* = dynamic, Bi extends core::Object* = dynamic>() → self::SimpleCaseImpl<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>*
+    return new self::SimpleCaseImpl2::•<self::SimpleCaseImpl::•::Ai*, self::SimpleCaseImpl::•::Bi*>();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SimpleCaseImpl2<Ai2 extends core::Object* = dynamic, Bi2 extends core::Object* = dynamic> extends core::Object implements self::SimpleCaseImpl<self::SimpleCaseImpl2::Ai2*, self::SimpleCaseImpl2::Bi2*> {
+  synthetic constructor •() → self::SimpleCaseImpl2<self::SimpleCaseImpl2::Ai2*, self::SimpleCaseImpl2::Bi2*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Base<M extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Base<self::Base::M*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Mixin<M extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Mixin<self::Mixin::M*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Mix<M extends core::Object* = dynamic> = self::Base<self::Mix::M*> with self::Mixin<self::Mix::M*> {
+  synthetic constructor •() → self::Mix<self::Mix::M*>*
+    : super self::Base::•()
+    ;
+}
+static method main() → dynamic {
+  core::print(invalid-expression "pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
+ - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+ - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+  factory FooBase(int x) = Foo<Tf>;
+                           ^".{self::FooBase::x}{core::int*});
+  new self::SimpleCaseImpl2::•<core::int*, core::double*>();
+  new self::Mix::•<core::double*>();
+}
+
+constants  {
+  #C1 = constructor-tearoff self::FooBase::•
+  #C2 = constructor-tearoff self::Foo::•
+  #C3 = constructor-tearoff self::SimpleCase::•
+  #C4 = constructor-tearoff self::SimpleCaseImpl::•
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.modular.expect
new file mode 100644
index 0000000..e86259e
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library redirecting_factory_constructors.chain_test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2];
+  constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  static factory first() → self::A*
+    return new self::A::•();
+  static factory second() → self::A*
+    return self::A::first();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::A::•();
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::first
+  #C2 = constructor-tearoff self::A::second
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..3dc0b99
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.modular.expect
@@ -0,0 +1,72 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class _X<T extends core::Object* = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
+    return new self::_Y::•<self::_X::•::T*>();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class _Y<T extends core::Object* = dynamic> extends core::Object implements self::_X<self::_Y::T*> /*hasConstConstructor*/  {
+  const constructor •() → self::_Y<self::_Y::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::_X<self::A::T*>* x;
+  constructor •(self::_X<self::A::T*>* x) → self::A<self::A::T*>*
+    : self::A::x = x, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
+  constructor •() → self::B<self::B::T*>*
+    : super self::A::•(#C2)
+    ;
+}
+static method main() → dynamic {
+  dynamic x = new self::B::•<dynamic>().{self::A::x}{self::_X<dynamic>*};
+  if(!(x is self::_Y<Null>*)) {
+    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}{core::Type*}}, but `_Y<Null>` expected";
+  }
+}
+
+constants  {
+  #C1 = constructor-tearoff self::_X::•
+  #C2 = self::_Y<Null> {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirecting_factory_const_inference.dart:
+- _Y. (from org-dartlang-testcase:///redirecting_factory_const_inference.dart:14:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.modular.expect
new file mode 100644
index 0000000..4a74b87
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_default_value.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_factory_default_value.dart:10:35: Error: Can't have a default value here because any default values of 'A' would be used instead.
+// Try removing the default value.
+//   factory A.redirect([int field = 87]) = A;
+//                                   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::int field;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •([core::int field = #C2]) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+  static factory redirect([core::int field]) → self::A
+    return new self::A::•(field);
+}
+static method main() → dynamic {
+  self::expect(42, new self::A::•().{self::A::field}{core::int});
+  self::expect(123, new self::A::•(123).{self::A::field}{core::int});
+  self::expect(42, new self::A::•().{self::A::field}{core::int});
+  self::expect(123, new self::A::•(123).{self::A::field}{core::int});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::redirect
+  #C2 = 42
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.modular.expect
new file mode 100644
index 0000000..f674d71
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart.weak.modular.expect
@@ -0,0 +1,196 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:47:10: Error: Superclass has no method named '[]'.
+//     super[new Class1()];
+//          ^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:49:10: Error: Superclass has no method named '[]='.
+//     super[0] = new Class1();
+//          ^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:51:11: Error: Superclass has no setter named 'foo'.
+//     super.foo = new Class1();
+//           ^^^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:53:11: Error: Superclass has no method named 'foo'.
+//     super.foo(new Class1());
+//           ^^^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:55:11: Error: Superclass has no method named '+'.
+//     super + new Class1();
+//           ^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:20:5: Error: The operator 'unary-' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart'.
+// Try correcting the operator to an existing operator, or defining a 'unary-' operator.
+//     -new Class1();
+//     ^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:22:15: Error: The operator '-' isn't defined for the class 'String'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
+//     ('' + '') - new Class1();
+//               ^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:24:12: Error: The operator '[]=' isn't defined for the class 'int'.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
+//     (0 + 1)[0] = new Class1();
+//            ^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:25:8: Error: The operator '[]=' isn't defined for the class 'Class2'.
+//  - 'Class2' is from 'pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart'.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
+//     _c2[0] = new Class1();
+//        ^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:27:12: Error: The operator '[]' isn't defined for the class 'int'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
+//     (0 + 1)[new Class1()];
+//            ^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:29:18: Error: The getter 'foo' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'foo'.
+//     new Class1().foo;
+//                  ^^^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:31:13: Error: The setter 'foo' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'foo'.
+//     (0 + 1).foo = new Class1();
+//             ^^^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:33:18: Error: The method 'foo' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'foo'.
+//     new Class1().foo();
+//                  ^^^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:35:17: Error: The method 'call' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     new Class1()();
+//                 ^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:37:23: Error: 'field' isn't a function or method and can't be invoked.
+//     new Class1().field();
+//                       ^^^^...
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:39:24: Error: 'getter' isn't a function or method and can't be invoked.
+//     new Class1().getter();
+//                        ^^^^...
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:41:8: Error: 'call' isn't a function or method and can't be invoked.
+//     _c2(new Class1());
+//        ^^^^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:43:18: Error: Duplicated named argument 'a'.
+//     method(a: 0, a: new Class1());
+//                  ^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:45:18: Error: Duplicated named argument 'a'.
+//     method(a: 0, a: 1, a: new Class1());
+//                  ^
+//
+// pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:45:24: Error: Duplicated named argument 'a'.
+//     method(a: 0, a: 1, a: new Class1());
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  field core::int field = 0;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor _() → self::Class1
+    : super core::Object::•()
+    ;
+  static factory •() → self::Class1
+    return new self::Class1::_();
+  get getter() → core::int
+    return 0;
+}
+class Class2 extends self::Class1 {
+  final field self::Class2 _c2;
+  constructor •(self::Class2 _c2) → self::Class2
+    : self::Class2::_c2 = _c2, super self::Class1::_() {
+    invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:20:5: Error: The operator 'unary-' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart'.
+Try correcting the operator to an existing operator, or defining a 'unary-' operator.
+    -new Class1();
+    ^" in new self::Class1::_(){<unresolved>}.unary-();
+    invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:22:15: Error: The operator '-' isn't defined for the class 'String'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
+    ('' + '') - new Class1();
+              ^" in "".{core::String::+}(""){(core::String) → core::String}{<unresolved>}.-(new self::Class1::_());
+    invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:24:12: Error: The operator '[]=' isn't defined for the class 'int'.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
+    (0 + 1)[0] = new Class1();
+           ^" in 0.{core::num::+}(1){(core::num) → core::int}{<unresolved>}.[]=(0, new self::Class1::_());
+    invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:25:8: Error: The operator '[]=' isn't defined for the class 'Class2'.
+ - 'Class2' is from 'pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart'.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
+    _c2[0] = new Class1();
+       ^" in this.{self::Class2::_c2}{self::Class2}{<unresolved>}.[]=(0, new self::Class1::_());
+    invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:27:12: Error: The operator '[]' isn't defined for the class 'int'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
+    (0 + 1)[new Class1()];
+           ^" in 0.{core::num::+}(1){(core::num) → core::int}{<unresolved>}.[](new self::Class1::_());
+    invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:29:18: Error: The getter 'foo' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'foo'.
+    new Class1().foo;
+                 ^^^" in new self::Class1::_(){<unresolved>}.foo;
+    invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:31:13: Error: The setter 'foo' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'foo'.
+    (0 + 1).foo = new Class1();
+            ^^^" in 0.{core::num::+}(1){(core::num) → core::int}{<unresolved>}.foo = new self::Class1::_();
+    invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:33:18: Error: The method 'foo' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'foo'.
+    new Class1().foo();
+                 ^^^" in new self::Class1::_(){<unresolved>}.foo();
+    invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:35:17: Error: The method 'call' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    new Class1()();
+                ^" in new self::Class1::_(){<unresolved>}.call();
+    invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:37:23: Error: 'field' isn't a function or method and can't be invoked.
+    new Class1().field();
+                      ^^^^..." in new self::Class1::_().{self::Class1::field}{core::int}{<unresolved>}.call();
+    invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:39:24: Error: 'getter' isn't a function or method and can't be invoked.
+    new Class1().getter();
+                       ^^^^..." in new self::Class1::_().{self::Class1::getter}{core::int}{<unresolved>}.call();
+    let final self::Class2 #t1 = this.{self::Class2::_c2}{self::Class2} in let final self::Class1 #t2 = new self::Class1::_() in invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:41:8: Error: 'call' isn't a function or method and can't be invoked.
+    _c2(new Class1());
+       ^^^^" in #t1.{self::Class2::call}{core::int}{<unresolved>}.call(#t2);
+    this.{self::Class2::method}(a: invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:43:18: Error: Duplicated named argument 'a'.
+    method(a: 0, a: new Class1());
+                 ^" in block {
+      0;
+    } =>new self::Class1::_()){({a: dynamic}) → dynamic};
+    this.{self::Class2::method}(a: invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:45:24: Error: Duplicated named argument 'a'.
+    method(a: 0, a: 1, a: new Class1());
+                       ^" in block {
+      invalid-expression "pkg/front_end/testcases/general/redirecting_factory_invocation_in_invalid.dart:45:18: Error: Duplicated named argument 'a'.
+    method(a: 0, a: 1, a: new Class1());
+                 ^" in block {
+        0;
+      } =>1;
+    } =>new self::Class1::_()){({a: dynamic}) → dynamic};
+    super.[](new self::Class1::_());
+    super.[]=(0, new self::Class1::_());
+    super.foo = new self::Class1::_();
+    super.foo(new self::Class1::_());
+    super.+(new self::Class1::_());
+  }
+  method method({dynamic a = #C2}) → dynamic {}
+  get call() → core::int
+    return 0;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class1::•
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.modular.expect
new file mode 100644
index 0000000..4f4319e
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.weak.modular.expect
@@ -0,0 +1,106 @@
+@#C1
+library name /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart" as self;
+export "org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart";
+
+@#C1
+part redirecting_factory_invocation_metadata_lib.dart;
+@#C1
+typedef Typedef1<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(@#C1 self::Class<dynamic> #t1, [@#C1 self::Class<dynamic> #t2]) → dynamic;
+@#C1
+typedef Typedef2<@#C1 unrelated T extends core::Object? = dynamic> = <T extends core::Object? = dynamic>(@#C1 self::Class<dynamic> #t3, {@#C1 self::Class<dynamic> o2}) → dynamic;
+@#C1
+typedef Typedef3<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, [@#C1 dynamic o2]) → void;
+@#C1
+typedef Typedef4<@#C1 unrelated T extends core::Object? = dynamic> = (@#C1 dynamic o1, {@#C1 dynamic o2}) → void;
+@#C1
+class Const extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  const constructor internal() → self::Const
+    : super core::Object::•()
+    ;
+  static factory •() → self::Const
+    return new self::Const::internal();
+}
+class Class<@#C1 T extends core::Object? = dynamic> extends core::Object {
+  @#C1
+  field <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {
+    @#C1 dynamic l1;
+    @#C1
+    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {}
+  };
+  @#C1
+  constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  @#C1
+  method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → dynamic {
+    @#C1 dynamic l1;
+    @#C1
+    function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
+  }
+  @#C1
+  method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → dynamic {
+    <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {};
+  }
+}
+@#C1
+extension Extension<@#C1 T extends core::Object? = dynamic> on self::Class<T%> {
+  static field field = self::Extension|field;
+  method method1 = self::Extension|method1;
+  tearoff method1 = self::Extension|get#method1;
+  method method2 = self::Extension|method2;
+  tearoff method2 = self::Extension|get#method2;
+}
+@#C1
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {
+  @#C1 dynamic l1;
+  @#C1
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
+};
+@#C1
+static field <T extends core::Object? = dynamic>(dynamic, [dynamic]) → Null Extension|field = <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {
+  @#C1 dynamic l1;
+  @#C1
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
+};
+@#C1
+static method method1<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → dynamic {
+  @#C1 dynamic l1;
+  @#C1
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
+}
+@#C1
+static method method2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → dynamic {
+  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {};
+}
+@#C1
+static method Extension|method1<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method1::#T%> #this, @#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → dynamic {
+  @#C1 dynamic l1;
+  @#C1
+  function l2<@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, [@#C1 dynamic o2 = #C3]) → Null {}
+}
+static method Extension|get#method1<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method1::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, [dynamic]) → dynamic
+  return <T extends core::Object? = dynamic>(dynamic o1, [dynamic o2 = #C3]) → dynamic => self::Extension|method1<self::Extension|get#method1::#T%, T%>(#this, o1, o2);
+@#C1
+static method Extension|method2<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|method2::#T%> #this, @#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → dynamic {
+  <@#C1 T extends core::Object? = dynamic>(@#C1 dynamic o1, {@#C1 dynamic o2 = #C3}) → Null {};
+}
+static method Extension|get#method2<#T extends core::Object? = dynamic>(lowered final self::Class<self::Extension|get#method2::#T%> #this) → <T extends core::Object? = dynamic>(dynamic, {o2: dynamic}) → dynamic
+  return <T extends core::Object? = dynamic>(dynamic o1, {dynamic o2 = #C3}) → dynamic => self::Extension|method2<self::Extension|get#method2::#T%, T%>(#this, o1, o2: o2);
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Const {}
+  #C2 = constructor-tearoff self::Const::•
+  #C3 = null
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:
+- Const.internal (from org-dartlang-testcase:///redirecting_factory_invocation_metadata.dart:19:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.modular.expect
new file mode 100644
index 0000000..9b12539
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  constructor named(dynamic p) → self::Foo*
+    : super core::Object::•()
+    ;
+  @#C2
+  static factory •(@#C3 @#C4 dynamic p) → self::Foo*
+    return new self::Foo::named(p);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field core::int* forParameter = #C3;
+static const field core::int* forFactoryItself = #C2;
+static const field core::int* anotherForParameter = #C4;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Foo::•
+  #C2 = 2
+  #C3 = 1
+  #C4 = 3
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.modular.expect
new file mode 100644
index 0000000..f2a4360
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library redirecting_factory_constructors.simple_test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  static factory redir() → self::A*
+    return new self::A::•();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::A::•();
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.modular.expect
new file mode 100644
index 0000000..16c46e9
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.weak.modular.expect
@@ -0,0 +1,54 @@
+library redirecting_factory_constructors.typeargs_test;
+import self as self;
+import "dart:core" as core;
+
+class X extends core::Object {
+  synthetic constructor •() → self::X*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Y extends self::X {
+  synthetic constructor •() → self::Y*
+    : super self::X::•()
+    ;
+}
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  static factory redir() → self::A*
+    return new self::B::•<self::Y*>();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends self::X*> extends self::A {
+  constructor •() → self::B<self::B::T*>*
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {
+  new self::B::•<self::Y*>();
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.modular.expect
new file mode 100644
index 0000000..469f2af
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library redirecting_factory_constructors.typeparam_test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
+    : super core::Object::•()
+    ;
+  static factory redir<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
+    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::A::•<core::int*, core::String*>(42, "foobar");
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.modular.expect
new file mode 100644
index 0000000..98d4e12
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library redirecting_factory_constructors.typeparambounds_test;
+import self as self;
+import "dart:core" as core;
+
+class X extends core::Object {
+  synthetic constructor •() → self::X*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Y extends self::X {
+  synthetic constructor •() → self::Y*
+    : super self::X::•()
+    ;
+}
+class A<T extends core::Object* = dynamic, S extends self::A::T* = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
+    : super core::Object::•()
+    ;
+  static factory redir<T extends core::Object* = dynamic, S extends self::A::redir::T* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
+    return new self::A::•<self::A::redir::T*, self::A::redir::S*>(t, s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::A::•<self::X*, self::Y*>(new self::X::•(), new self::Y::•());
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::redir
+}
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.modular.expect
new file mode 100644
index 0000000..a539f39
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class X extends core::Object {
+  synthetic constructor •() → self::X*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Foo<T extends self::X*> extends core::Object {
+  covariant-by-class field self::Foo::T* x;
+  constructor fromX(self::X* _init) → self::Foo<self::Foo::T*>*
+    : this self::Foo::_internal(x: _init as{TypeError} self::Foo::T*)
+    ;
+  constructor fromT(self::Foo::T* _init) → self::Foo<self::Foo::T*>*
+    : this self::Foo::_internal(x: _init)
+    ;
+  constructor _internal({self::Foo::T* x = #C1}) → self::Foo<self::Foo::T*>*
+    : self::Foo::x = x, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.modular.expect
new file mode 100644
index 0000000..6c401a6
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart:12:46: Error: The argument type 'String' can't be assigned to the parameter type 'T'.
+//   Foo.from(String _init) : this._internal(x: _init);
+//                                              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::Foo::T* x;
+  constructor from(core::String* _init) → self::Foo<self::Foo::T*>*
+    : this self::Foo::_internal(x: invalid-expression "pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart:12:46: Error: The argument type 'String' can't be assigned to the parameter type 'T'.
+  Foo.from(String _init) : this._internal(x: _init);
+                                             ^" in _init as{TypeError} Never)
+    ;
+  constructor _internal({self::Foo::T* x = #C1}) → self::Foo<self::Foo::T*>*
+    : self::Foo::x = x, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.modular.expect
new file mode 100644
index 0000000..273bd861
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  constructor empty() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
+    return self::B::•<self::A::•::T*, core::num*>();
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
+  static final field dynamic _redirecting# = <dynamic>[#C2];
+  constructor empty() → self::B<self::B::U*, self::B::W*>*
+    : super self::A::empty()
+    ;
+  static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
+    return new self::C::•<self::B::•::U*, self::B::•::W*, core::String*>();
+}
+class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
+  constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
+    : super self::B::empty()
+    ;
+  method toString() → core::String*
+    return "${self::C::V*},${self::C::S*},${self::C::R*}";
+}
+static method main() → dynamic {
+  exp::Expect::equals("${new self::C::•<core::int*, core::num*, core::String*>()}", "int,num,String");
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.modular.expect
new file mode 100644
index 0000000..516d00c
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirection_chain_type_arguments_subst.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+abstract class A<T extends core::Object* = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  constructor empty() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  static factory •<T extends core::Object* = dynamic>() → self::A<self::A::•::T*>*
+    return self::B::•<self::A::•::T*, core::List<self::A::•::T*>*>();
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B<U extends core::Object* = dynamic, W extends core::Object* = dynamic> extends self::A<self::B::U*> {
+  static final field dynamic _redirecting# = <dynamic>[#C2];
+  constructor empty() → self::B<self::B::U*, self::B::W*>*
+    : super self::A::empty()
+    ;
+  static factory •<U extends core::Object* = dynamic, W extends core::Object* = dynamic>() → self::B<self::B::•::U*, self::B::•::W*>*
+    return new self::C::•<self::B::•::U*, self::B::•::W*, core::Map<self::B::•::U*, self::B::•::W*>*>();
+}
+class C<V extends core::Object* = dynamic, S extends core::Object* = dynamic, R extends core::Object* = dynamic> extends self::B<self::C::V*, self::C::S*> {
+  constructor •() → self::C<self::C::V*, self::C::S*, self::C::R*>*
+    : super self::B::empty()
+    ;
+  method toString() → core::String*
+    return "${self::C::V*},${self::C::S*},${self::C::R*}";
+}
+static method main() → dynamic {
+  exp::Expect::equals("${new self::C::•<core::int*, core::List<core::int*>*, core::Map<core::int*, core::List<core::int*>*>*>()}", "int,List<int>,Map<int, List<int>>");
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.modular.expect
new file mode 100644
index 0000000..be27ced
--- /dev/null
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.weak.modular.expect
@@ -0,0 +1,47 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+class A extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  const constructor empty() → self::A*
+    : super core::Object::•()
+    ;
+  static factory •() → self::A*
+    return new self::B::•<core::String*>();
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends core::Object* = dynamic> extends self::A /*hasConstConstructor*/  {
+  const constructor •() → self::B<self::B::T*>*
+    : super self::A::empty()
+    ;
+  method toString() → core::String*
+    return "${self::B::T*}";
+}
+static method main() → void {
+  exp::Expect::equals("${#C2}", "String");
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = self::B<core::String*> {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirection_type_arguments.dart:
+- B. (from org-dartlang-testcase:///redirection_type_arguments.dart:16:9)
+- A.empty (from org-dartlang-testcase:///redirection_type_arguments.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.modular.expect b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.modular.expect
new file mode 100644
index 0000000..7cc953e
--- /dev/null
+++ b/pkg/front_end/testcases/general/regression_flutter51828.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method foo(dynamic x) → asy::Future<void>* async {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method bar(dynamic x) → asy::Future<void>* async {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic async 
+  return <asy::Future<void>*>[new self::A::•().{self::A::foo}(await null){(dynamic) →* asy::Future<void>*}, new self::B::•().{self::B::bar}(await null){(dynamic) →* asy::Future<void>*}];
diff --git a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.modular.expect b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.modular.expect
new file mode 100644
index 0000000..dcd7a33
--- /dev/null
+++ b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart:8:12: Error: Type variables can't have generic function types in their bounds.
+// class Hest<TypeX extends TypeY Function<TypeY>(TypeY)> {}
+//            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends <TypeY extends core::Object* = dynamic>(TypeY*) →* TypeY* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.modular.expect b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.modular.expect
new file mode 100644
index 0000000..7704535
--- /dev/null
+++ b/pkg/front_end/testcases/general/return_with_unknown_type_in_context.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method f(core::List<dynamic>* x) → core::bool* {
+  return x.{core::Iterable::expand}<dynamic>((dynamic y) → core::Iterable<dynamic>* {
+    return y{dynamic}.split(",") as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+  }){((dynamic) →* core::Iterable<dynamic>*) →* core::Iterable<dynamic>*}.{core::Iterable::any}((dynamic y) → core::bool* => y =={core::Object::==}{(core::Object*) →* core::bool*} "z"){((dynamic) →* core::bool*) →* core::bool*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.modular.expect b/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.modular.expect
new file mode 100644
index 0000000..7131789
--- /dev/null
+++ b/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.modular.expect
@@ -0,0 +1,82 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/sdk_diagnostic.dart:5:7: Error: The non-abstract class 'C' is missing implementations for these members:
+//  - Iterable.iterator
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class C extends Iterable<Object> {
+//       ^
+// sdk/lib/core/iterable.dart:148:19: Context: 'Iterable.iterator' is defined here.
+//   Iterator<E> get iterator;
+//                   ^^^^^^^^
+//
+// pkg/front_end/testcases/general/sdk_diagnostic.dart:12:8: Error: Too few positional arguments: 1 required, 0 given.
+//   print(incorrectArgument: "fisk");
+//        ^
+// sdk/lib/core/print.dart:8:6: Context: Found this candidate, but the arguments don't match.
+// void print(Object? object) {
+//      ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Iterable<core::Object*> {
+  synthetic constructor •() → self::C*
+    : super core::Iterable::•()
+    ;
+  abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::C::cast::R*>*; -> core::Iterable::cast
+  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::Object*>* other) → core::Iterable<core::Object*>*; -> core::Iterable::followedBy
+  abstract member-signature method map<T extends core::Object* = dynamic>((core::Object*) →* self::C::map::T* toElement) → core::Iterable<self::C::map::T*>*; -> core::Iterable::map
+  abstract member-signature method where((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::where
+  abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::C::whereType::T*>*; -> core::Iterable::whereType
+  abstract member-signature method expand<T extends core::Object* = dynamic>((core::Object*) →* core::Iterable<self::C::expand::T*>* toElements) → core::Iterable<self::C::expand::T*>*; -> core::Iterable::expand
+  abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
+  abstract member-signature method forEach((core::Object*) →* void action) → void; -> core::Iterable::forEach
+  abstract member-signature method reduce(covariant-by-class (core::Object*, core::Object*) →* core::Object* combine) → core::Object*; -> core::Iterable::reduce
+  abstract member-signature method fold<T extends core::Object* = dynamic>(self::C::fold::T* initialValue, (self::C::fold::T*, core::Object*) →* self::C::fold::T* combine) → self::C::fold::T*; -> core::Iterable::fold
+  abstract member-signature method every((core::Object*) →* core::bool* test) → core::bool*; -> core::Iterable::every
+  abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
+  abstract member-signature method any((core::Object*) →* core::bool* test) → core::bool*; -> core::Iterable::any
+  abstract member-signature method toList({core::bool* growable = #C2}) → core::List<core::Object*>*; -> core::Iterable::toList
+  abstract member-signature method toSet() → core::Set<core::Object*>*; -> core::Iterable::toSet
+  abstract member-signature get length() → core::int*; -> core::Iterable::length
+  abstract member-signature get isEmpty() → core::bool*; -> core::Iterable::isEmpty
+  abstract member-signature get isNotEmpty() → core::bool*; -> core::Iterable::isNotEmpty
+  abstract member-signature method take(core::int* count) → core::Iterable<core::Object*>*; -> core::Iterable::take
+  abstract member-signature method takeWhile((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::takeWhile
+  abstract member-signature method skip(core::int* count) → core::Iterable<core::Object*>*; -> core::Iterable::skip
+  abstract member-signature method skipWhile((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::skipWhile
+  abstract member-signature method firstWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::firstWhere
+  abstract member-signature method lastWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::lastWhere
+  abstract member-signature method singleWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::singleWhere
+  abstract member-signature method elementAt(core::int* index) → core::Object*; -> core::Iterable::elementAt
+  abstract member-signature method toString() → core::String*; -> core::Iterable::toString
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature get iterator() → core::Iterator<core::Object*>*; -> core::Iterable::iterator
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/sdk_diagnostic.dart:12:8: Error: Too few positional arguments: 1 required, 0 given.
+  print(incorrectArgument: \"fisk\");
+       ^";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = ""
+  #C2 = true
+  #C3 = null
+}
diff --git a/pkg/front_end/testcases/general/spread_collection.dart.weak.modular.expect b/pkg/front_end/testcases/general/spread_collection.dart.weak.modular.expect
new file mode 100644
index 0000000..6948e05
--- /dev/null
+++ b/pkg/front_end/testcases/general/spread_collection.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/spread_collection.dart:21:21: Error: Not enough type information to disambiguate between literal set and literal map.
+// Try providing type arguments for the literal explicitly to disambiguate it.
+//   final aSetOrMap = {...foo()};
+//                     ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method main() → dynamic {
+  final core::List<core::int*>* aList = block {
+    final core::List<core::int*>* #t1 = <core::int*>[1];
+    #t1.{core::List::addAll}{Invariant}(<core::int*>[2]){(core::Iterable<core::int*>*) →* void};
+    final core::Iterable<core::int*>* #t2 = <core::int*>[3];
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}{Invariant}(#t2){(core::Iterable<core::int*>*) →* void};
+  } =>#t1;
+  final core::Map<core::int*, core::int*>* aMap = block {
+    final core::Map<core::int*, core::int*>* #t3 = <core::int*, core::int*>{};
+    #t3.{core::Map::[]=}{Invariant}(1, 1){(core::int*, core::int*) →* void};
+    for (final core::MapEntry<core::int*, core::int*>* #t4 in <core::int*, core::int*>{2: 2}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
+      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{core::int*}, #t4.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
+    final core::Map<core::int*, core::int*>* #t5 = <core::int*, core::int*>{3: 3};
+    if(!(#t5 == null))
+      for (final core::MapEntry<core::int*, core::int*>* #t6 in #t5.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
+        #t3.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{core::int*}, #t6.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
+  } =>#t3;
+  final core::Set<core::int*>* aSet = block {
+    final core::Set<core::int*>* #t7 = col::LinkedHashSet::•<core::int*>();
+    #t7.{core::Set::add}{Invariant}(1){(core::int*) →* core::bool*};
+    #t7.{core::Set::addAll}{Invariant}(<core::int*>[2]){(core::Iterable<core::int*>*) →* void};
+    final core::Iterable<core::int*>* #t8 = <core::int*>[3];
+    if(!(#t8 == null))
+      #t7.{core::Set::addAll}{Invariant}(#t8){(core::Iterable<core::int*>*) →* void};
+  } =>#t7;
+  final Never* aSetOrMap = invalid-expression "pkg/front_end/testcases/general/spread_collection.dart:21:21: Error: Not enough type information to disambiguate between literal set and literal map.
+Try providing type arguments for the literal explicitly to disambiguate it.
+  final aSetOrMap = {...foo()};
+                    ^";
+  core::print(aList);
+  core::print(aSet);
+  core::print(aMap);
+}
+static method foo() → dynamic
+  return null;
diff --git a/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.modular.expect b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..470fbda
--- /dev/null
+++ b/pkg/front_end/testcases/general/spread_collection_inference.dart.weak.modular.expect
@@ -0,0 +1,376 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:64:28: Error: Not enough type information to disambiguate between literal set and literal map.
+// Try providing type arguments for the literal explicitly to disambiguate it.
+//   dynamic map21ambiguous = {...(mapSpread as dynamic)};
+//                            ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:96:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+//   dynamic map24ambiguous = {...spread, ...mapSpread};
+//                            ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:98:36: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+//  - 'List' is from 'dart:core'.
+//   int lhs30 = /*@ typeArgs=int* */ [...spread];
+//                                    ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:100:36: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+//  - 'Set' is from 'dart:core'.
+//   int set30 = /*@ typeArgs=int* */ {...spread, 42};
+//                                    ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+//  - 'Set' is from 'dart:core'.
+//       {...spread};
+//       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:106:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+//  - 'Map' is from 'dart:core'.
+//       {...mapSpread, "baz": 42};
+//       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+//  - 'Map' is from 'dart:core'.
+//       {...mapSpread};
+//       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:111:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+//   List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
+//                                      ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+//   Set<dynamic> set40 = <dynamic>{...notSpreadInt};
+//                                     ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:115:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+//   Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
+//                                                       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:117:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+//   List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
+//                                      ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+//   Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
+//                                     ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:121:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
+//   Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
+//                                                       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:123:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+//   List<String> lhs60 = <String>[...spread];
+//                                    ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+//   Set<String> set60 = <String>{...spread};
+//                                   ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:127:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+//   Map<int, int> map60 = <int, int>{...mapSpread};
+//                                       ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:129:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+//   Map<String, String> map61 = <String, String>{...mapSpread};
+//                                                   ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:131:30: Error: Can't spread a value with static type 'Null'.
+//   List<int> lhs70 = <int>[...null];
+//                              ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
+//   Set<int> set70 = <int>{...null};
+//                             ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
+//     ...null,
+//        ^
+//
+// pkg/front_end/testcases/general/spread_collection_inference.dart:142:45: Error: Can't spread a value with static type 'Null'.
+//   Map<String, int> map70 = <String, int>{...null};
+//                                             ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method bar<K extends core::Object* = dynamic, V extends core::Object* = dynamic>() → core::Map<self::bar::K*, self::bar::V*>*
+  return null;
+static method foo(dynamic dynVar) → dynamic {
+  core::List<core::int*>* spread = <core::int*>[1, 2, 3];
+  core::Map<core::String*, core::int*>* mapSpread = <core::String*, core::int*>{"foo": 4, "bar": 2};
+  core::int* notSpreadInt = 42;
+  () →* core::int* notSpreadFunction = null;
+  core::Map<core::int*, core::num*>* mapIntNum = <core::int*, core::num*>{42: 42};
+  core::List<core::num*>* listNum = <core::num*>[42];
+  core::List<dynamic>* lhs10 = block {
+    final core::List<dynamic>* #t1 = core::List::of<dynamic>(<dynamic>[]);
+  } =>#t1;
+  core::Set<dynamic>* set10 = block {
+    final core::Set<dynamic>* #t2 = col::LinkedHashSet::of<dynamic>(<dynamic>[]);
+  } =>#t2;
+  core::Map<dynamic, dynamic>* map10 = block {
+    final core::Map<dynamic, dynamic>* #t3 = <dynamic, dynamic>{};
+    for (final core::MapEntry<dynamic, dynamic>* #t4 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+  } =>#t3;
+  core::Map<dynamic, dynamic>* map10ambiguous = block {
+    final core::Map<dynamic, dynamic>* #t5 = <dynamic, dynamic>{};
+    for (final core::MapEntry<dynamic, dynamic>* #t6 in <dynamic, dynamic>{}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+  } =>#t5;
+  core::List<core::int*>* lhs20 = block {
+    final core::List<core::int*>* #t7 = core::List::of<core::int*>(spread);
+  } =>#t7;
+  core::Set<core::int*>* set20 = block {
+    final core::Set<core::int*>* #t8 = col::LinkedHashSet::of<core::int*>(spread);
+    #t8.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+  } =>#t8;
+  core::Set<core::int*>* set20ambiguous = block {
+    final core::Set<core::int*>* #t9 = col::LinkedHashSet::•<core::int*>();
+    for (final dynamic #t10 in spread) {
+      final core::int* #t11 = #t10 as{TypeError} core::int*;
+      #t9.{core::Set::add}{Invariant}(#t11){(core::int*) →* core::bool*};
+    }
+  } =>#t9;
+  core::Map<core::String*, core::int*>* map20 = block {
+    final core::Map<core::String*, core::int*>* #t12 = <core::String*, core::int*>{};
+    for (final core::MapEntry<core::String*, core::int*>* #t13 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{core::String*}, #t13.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t12.{core::Map::[]=}{Invariant}("baz", 42){(core::String*, core::int*) →* void};
+  } =>#t12;
+  core::Map<core::String*, core::int*>* map20ambiguous = block {
+    final core::Map<core::String*, core::int*>* #t14 = <core::String*, core::int*>{};
+    for (final core::MapEntry<core::String*, core::int*>* #t15 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      #t14.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}{core::String*}, #t15.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+  } =>#t14;
+  core::List<dynamic>* lhs21 = block {
+    final core::List<dynamic>* #t16 = core::List::of<dynamic>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*);
+  } =>#t16;
+  core::Set<dynamic>* set21 = block {
+    final core::Set<dynamic>* #t17 = col::LinkedHashSet::of<dynamic>((spread as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*);
+    #t17.{core::Set::add}{Invariant}(42){(dynamic) →* core::bool*};
+  } =>#t17;
+  core::Map<dynamic, dynamic>* map21 = block {
+    final core::Map<dynamic, dynamic>* #t18 = <dynamic, dynamic>{};
+    for (final core::MapEntry<dynamic, dynamic>* #t19 in ((mapSpread as dynamic) as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+    #t18.{core::Map::[]=}{Invariant}("baz", 42){(dynamic, dynamic) →* void};
+  } =>#t18;
+  dynamic map21ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:64:28: Error: Not enough type information to disambiguate between literal set and literal map.
+Try providing type arguments for the literal explicitly to disambiguate it.
+  dynamic map21ambiguous = {...(mapSpread as dynamic)};
+                           ^";
+  core::List<core::int*>* lhs22 = block {
+    final core::List<core::int*>* #t20 = core::List::of<core::int*>(<core::int*>[]);
+  } =>#t20;
+  core::Set<core::int*>* set22 = block {
+    final core::Set<core::int*>* #t21 = col::LinkedHashSet::of<core::int*>(<core::int*>[]);
+    #t21.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+  } =>#t21;
+  core::Set<core::int*>* set22ambiguous = block {
+    final core::Set<core::int*>* #t22 = col::LinkedHashSet::•<core::int*>();
+    for (final dynamic #t23 in <core::int*>[]) {
+      final core::int* #t24 = #t23 as{TypeError} core::int*;
+      #t22.{core::Set::add}{Invariant}(#t24){(core::int*) →* core::bool*};
+    }
+  } =>#t22;
+  core::Map<core::String*, core::int*>* map22 = block {
+    final core::Map<core::String*, core::int*>* #t25 = <core::String*, core::int*>{};
+    for (final core::MapEntry<core::String*, core::int*>* #t26 in <core::String*, core::int*>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      #t25.{core::Map::[]=}{Invariant}(#t26.{core::MapEntry::key}{core::String*}, #t26.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+  } =>#t25;
+  core::List<core::List<core::int*>*>* lhs23 = block {
+    final core::List<core::List<core::int*>*>* #t27 = core::List::of<core::List<core::int*>*>(<core::List<core::int*>*>[<core::int*>[]]);
+  } =>#t27;
+  core::Set<core::List<core::int*>*>* set23 = block {
+    final core::Set<core::List<core::int*>*>* #t28 = col::LinkedHashSet::of<core::List<core::int*>*>(<core::List<core::int*>*>[<core::int*>[]]);
+    #t28.{core::Set::add}{Invariant}(<core::int*>[42]){(core::List<core::int*>*) →* core::bool*};
+  } =>#t28;
+  core::Set<core::List<core::int*>*>* set23ambiguous = block {
+    final core::Set<core::List<core::int*>*>* #t29 = col::LinkedHashSet::•<core::List<core::int*>*>();
+    for (final dynamic #t30 in <core::List<core::int*>*>[<core::int*>[]]) {
+      final core::List<core::int*>* #t31 = #t30 as{TypeError} core::List<core::int*>*;
+      #t29.{core::Set::add}{Invariant}(#t31){(core::List<core::int*>*) →* core::bool*};
+    }
+  } =>#t29;
+  core::Map<core::String*, core::List<core::int*>*>* map23 = block {
+    final core::Map<core::String*, core::List<core::int*>*>* #t32 = <core::String*, core::List<core::int*>*>{};
+    for (final core::MapEntry<core::String*, core::List<core::int*>*>* #t33 in <core::String*, core::List<core::int*>*>{"baz": <core::int*>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::List<core::int*>*>>})
+      #t32.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::String*}, #t33.{core::MapEntry::value}{core::List<core::int*>*}){(core::String*, core::List<core::int*>*) →* void};
+  } =>#t32;
+  dynamic map24ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:96:28: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  dynamic map24ambiguous = {...spread, ...mapSpread};
+                           ^";
+  core::int* lhs30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:98:36: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+ - 'List' is from 'dart:core'.
+  int lhs30 = /*@ typeArgs=int* */ [...spread];
+                                   ^" in ( block {
+    final core::List<core::int*>* #t34 = core::List::of<core::int*>(spread);
+  } =>#t34) as{TypeError} core::int*;
+  core::int* set30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:100:36: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+ - 'Set' is from 'dart:core'.
+  int set30 = /*@ typeArgs=int* */ {...spread, 42};
+                                   ^" in ( block {
+    final core::Set<core::int*>* #t35 = col::LinkedHashSet::of<core::int*>(spread);
+    #t35.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
+  } =>#t35) as{TypeError} core::int*;
+  core::int* set30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:103:7: Error: A value of type 'Set<int>' can't be assigned to a variable of type 'int'.
+ - 'Set' is from 'dart:core'.
+      {...spread};
+      ^" in ( block {
+    final core::Set<core::int*>* #t36 = col::LinkedHashSet::•<core::int*>();
+    for (final dynamic #t37 in spread) {
+      final core::int* #t38 = #t37 as{TypeError} core::int*;
+      #t36.{core::Set::add}{Invariant}(#t38){(core::int*) →* core::bool*};
+    }
+  } =>#t36) as{TypeError} core::int*;
+  core::int* map30 = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:106:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+ - 'Map' is from 'dart:core'.
+      {...mapSpread, \"baz\": 42};
+      ^" in ( block {
+    final core::Map<core::String*, core::int*>* #t39 = <core::String*, core::int*>{};
+    for (final core::MapEntry<core::String*, core::int*>* #t40 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      #t39.{core::Map::[]=}{Invariant}(#t40.{core::MapEntry::key}{core::String*}, #t40.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+    #t39.{core::Map::[]=}{Invariant}("baz", 42){(core::String*, core::int*) →* void};
+  } =>#t39) as{TypeError} core::int*;
+  core::int* map30ambiguous = invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:109:7: Error: A value of type 'Map<String, int>' can't be assigned to a variable of type 'int'.
+ - 'Map' is from 'dart:core'.
+      {...mapSpread};
+      ^" in ( block {
+    final core::Map<core::String*, core::int*>* #t41 = <core::String*, core::int*>{};
+    for (final core::MapEntry<core::String*, core::int*>* #t42 in mapSpread.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      #t41.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}{core::String*}, #t42.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+  } =>#t41) as{TypeError} core::int*;
+  core::List<dynamic>* lhs40 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:111:38: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+  List<dynamic> lhs40 = <dynamic>[...notSpreadInt];
+                                     ^"];
+  core::Set<dynamic>* set40 = block {
+    final core::Set<dynamic>* #t43 = col::LinkedHashSet::•<dynamic>();
+    #t43.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:113:37: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
+  Set<dynamic> set40 = <dynamic>{...notSpreadInt};
+                                    ^"){(dynamic) →* core::bool*};
+  } =>#t43;
+  core::Map<dynamic, dynamic>* map40 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:115:55: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
+  Map<dynamic, dynamic> map40 = <dynamic, dynamic>{...notSpreadInt};
+                                                      ^": null};
+  core::List<dynamic>* lhs50 = <dynamic>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:117:38: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+  List<dynamic> lhs50 = <dynamic>[...notSpreadFunction];
+                                     ^"];
+  core::Set<dynamic>* set50 = block {
+    final core::Set<dynamic>* #t44 = col::LinkedHashSet::•<dynamic>();
+    #t44.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:119:37: Error: Unexpected type 'int Function()' of a spread.  Expected 'dynamic' or an Iterable.
+  Set<dynamic> set50 = <dynamic>{...notSpreadFunction};
+                                    ^"){(dynamic) →* core::bool*};
+  } =>#t44;
+  core::Map<dynamic, dynamic>* map50 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:121:55: Error: Unexpected type 'int Function()' of a map spread entry.  Expected 'dynamic' or a Map.
+  Map<dynamic, dynamic> map50 = <dynamic, dynamic>{...notSpreadFunction};
+                                                      ^": null};
+  core::List<core::String*>* lhs60 = <core::String*>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:123:36: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+  List<String> lhs60 = <String>[...spread];
+                                   ^"];
+  core::Set<core::String*>* set60 = block {
+    final core::Set<core::String*>* #t45 = col::LinkedHashSet::•<core::String*>();
+    #t45.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:125:35: Error: Can't assign spread elements of type 'int' to collection elements of type 'String'.
+  Set<String> set60 = <String>{...spread};
+                                  ^"){(core::String*) →* core::bool*};
+  } =>#t45;
+  core::Map<core::int*, core::int*>* map60 = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:127:39: Error: Can't assign spread entry keys of type 'String' to map entry keys of type 'int'.
+  Map<int, int> map60 = <int, int>{...mapSpread};
+                                      ^": null};
+  core::Map<core::String*, core::String*>* map61 = <core::String*, core::String*>{null: invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:129:51: Error: Can't assign spread entry values of type 'int' to map entry values of type 'String'.
+  Map<String, String> map61 = <String, String>{...mapSpread};
+                                                  ^"};
+  core::List<core::int*>* lhs70 = <core::int*>[invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:131:30: Error: Can't spread a value with static type 'Null'.
+  List<int> lhs70 = <int>[...null];
+                             ^"];
+  core::Set<core::int*>* set70 = block {
+    final core::Set<core::int*>* #t46 = col::LinkedHashSet::•<core::int*>();
+    #t46.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:133:29: Error: Can't spread a value with static type 'Null'.
+  Set<int> set70 = <int>{...null};
+                            ^"){(core::int*) →* core::bool*};
+  } =>#t46;
+  core::Set<dynamic>* set71ambiguous = block {
+    final core::Set<dynamic>* #t47 = col::LinkedHashSet::•<dynamic>();
+    #t47.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:137:8: Error: Can't spread a value with static type 'Null'.
+    ...null,
+       ^"){(dynamic) →* core::bool*};
+    for (final dynamic #t48 in <dynamic>[]) {
+      final dynamic #t49 = #t48 as{TypeError} dynamic;
+      #t47.{core::Set::add}{Invariant}(#t49){(dynamic) →* core::bool*};
+    }
+  } =>#t47;
+  core::Map<core::String*, core::int*>* map70 = <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/spread_collection_inference.dart:142:45: Error: Can't spread a value with static type 'Null'.
+  Map<String, int> map70 = <String, int>{...null};
+                                            ^": null};
+  core::List<core::int*>* lhs80 = block {
+    final core::List<core::int*>* #t50 = <core::int*>[];
+    final core::Iterable<core::int*>* #t51 = null;
+    if(!(#t51 == null))
+      #t50.{core::List::addAll}{Invariant}(#t51){(core::Iterable<core::int*>*) →* void};
+  } =>#t50;
+  core::Set<core::int*>* set80 = block {
+    final core::Set<core::int*>* #t52 = col::LinkedHashSet::•<core::int*>();
+    final core::Iterable<core::int*>* #t53 = null;
+    if(!(#t53 == null))
+      #t52.{core::Set::addAll}{Invariant}(#t53){(core::Iterable<core::int*>*) →* void};
+  } =>#t52;
+  core::Set<dynamic>* set81ambiguous = block {
+    final core::Set<dynamic>* #t54 = col::LinkedHashSet::•<dynamic>();
+    final core::Iterable<dynamic>* #t55 = null;
+    if(!(#t55 == null))
+      for (final dynamic #t56 in #t55) {
+        final dynamic #t57 = #t56 as{TypeError} dynamic;
+        #t54.{core::Set::add}{Invariant}(#t57){(dynamic) →* core::bool*};
+      }
+    for (final dynamic #t58 in <dynamic>[]) {
+      final dynamic #t59 = #t58 as{TypeError} dynamic;
+      #t54.{core::Set::add}{Invariant}(#t59){(dynamic) →* core::bool*};
+    }
+  } =>#t54;
+  core::Map<core::String*, core::int*>* map80 = block {
+    final core::Map<core::String*, core::int*>* #t60 = <core::String*, core::int*>{};
+    final core::Map<core::String*, core::int*>* #t61 = null;
+    if(!(#t61 == null))
+      for (final core::MapEntry<core::String*, core::int*>* #t62 in #t61.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+        #t60.{core::Map::[]=}{Invariant}(#t62.{core::MapEntry::key}{core::String*}, #t62.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+  } =>#t60;
+  core::Map<core::String*, core::int*>* map90 = block {
+    final core::Map<core::String*, core::int*>* #t63 = <core::String*, core::int*>{};
+    for (final core::MapEntry<core::String*, core::int*>* #t64 in self::bar<core::String*, core::int*>().{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
+      #t63.{core::Map::[]=}{Invariant}(#t64.{core::MapEntry::key}{core::String*}, #t64.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
+  } =>#t63;
+  core::List<core::int*>* list100 = block {
+    final core::List<core::int*>* #t65 = <core::int*>[];
+    for (final dynamic #t66 in listNum) {
+      final core::int* #t67 = #t66 as{TypeError} core::int*;
+      #t65.{core::List::add}{Invariant}(#t67){(core::int*) →* void};
+    }
+  } =>#t65;
+  core::Map<core::num*, core::int*>* map100 = block {
+    final core::Map<core::num*, core::int*>* #t68 = <core::num*, core::int*>{};
+    for (final core::MapEntry<dynamic, dynamic>* #t69 in mapIntNum.{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}) {
+      final core::num* #t70 = #t69.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
+      final core::int* #t71 = #t69.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+      #t68.{core::Map::[]=}{Invariant}(#t70, #t71){(core::num*, core::int*) →* void};
+    }
+  } =>#t68;
+  core::List<core::int*>* list110 = block {
+    final core::List<core::int*>* #t72 = <core::int*>[];
+    for (final dynamic #t73 in dynVar as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      final core::int* #t74 = #t73 as{TypeError} core::int*;
+      #t72.{core::List::add}{Invariant}(#t74){(core::int*) →* void};
+    }
+  } =>#t72;
+  core::Map<core::num*, core::int*>* map110 = block {
+    final core::Map<core::num*, core::int*>* #t75 = <core::num*, core::int*>{};
+    for (final core::MapEntry<dynamic, dynamic>* #t76 in (dynVar as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::num*, core::int*>>}) {
+      final core::num* #t77 = #t76.{core::MapEntry::key}{dynamic} as{TypeError} core::num*;
+      final core::int* #t78 = #t76.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+      #t75.{core::Map::[]=}{Invariant}(#t77, #t78){(core::num*, core::int*) →* void};
+    }
+  } =>#t75;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/statements.dart.weak.modular.expect b/pkg/front_end/testcases/general/statements.dart.weak.modular.expect
new file mode 100644
index 0000000..8d3c256
--- /dev/null
+++ b/pkg/front_end/testcases/general/statements.dart.weak.modular.expect
@@ -0,0 +1,159 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static method foo() → dynamic {
+  try {
+    return;
+  }
+  finally {
+    core::print("Hello from finally block!");
+  }
+}
+static method bar(dynamic d) → dynamic async* {
+  await for (dynamic x in d as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
+    yield x;
+    yield* x as{TypeError,ForDynamic} asy::Stream<dynamic>*;
+  }
+}
+static method main() → dynamic {
+  do {
+    core::print("Hello from do-while!");
+  }
+  while (false)
+  do {
+    void x = core::print("Hello from do-while!");
+  }
+  while (false)
+  for (core::String* s in <core::String*>["Hello from for-in!"]) {
+    core::print(s);
+  }
+  for (core::String* s in <core::String*>["Hello from for-in without block!"])
+    core::print(s);
+  dynamic s;
+  for (final dynamic #t1 in <dynamic>["Hello from for-in without decl!"]) {
+    s = #t1;
+    core::print(s);
+  }
+  for (final dynamic #t2 in <dynamic>["Hello from for-in without decl and block!"]) {
+    s = #t2;
+    core::print(s);
+  }
+  core::print("Hello from labeled statement!");
+  try {
+    try {
+      throw "Hello from rethrow!";
+    }
+    on dynamic catch(final dynamic e) {
+      rethrow;
+    }
+  }
+  on dynamic catch(final dynamic e) {
+    core::print(e);
+  }
+  self::foo();
+  core::bool* done = false;
+  while (!done) {
+    done = true;
+    core::print("Hello from while!");
+  }
+  ;
+  assert(true);
+  assert(true, "Hello from assert!");
+  try {
+    assert(false, "Hello from assert!");
+  }
+  on dynamic catch(final dynamic e) {
+    core::print(e);
+  }
+  #L1:
+  switch(1) {
+    #L2:
+    case #C1:
+    case #C2:
+      {
+        core::print("Hello from switch case!");
+        break #L1;
+      }
+    #L3:
+    default:
+      {
+        break #L1;
+      }
+  }
+  #L4:
+  switch(4) {
+    #L5:
+    case #C2:
+      {
+        core::print("Hello from case 2!");
+        break #L4;
+      }
+    #L6:
+    case #C1:
+      {
+        core::print("Hello from case 1!");
+        continue #L5;
+      }
+    #L7:
+    case #C3:
+      {
+        core::print("Hello from case 0!");
+        continue #L6;
+      }
+    #L8:
+    case #C4:
+      {
+        core::print("Hello from case 4!");
+        continue #L9;
+      }
+    #L9:
+    default:
+      {
+        continue #L7;
+      }
+  }
+  #L10:
+  switch(4) {
+    #L11:
+    case #C1:
+      {
+        core::print("Hello from next case 1");
+        break #L10;
+      }
+    #L12:
+    default:
+      {
+        continue #L11;
+      }
+  }
+  core::int* i = 0;
+  #L13:
+  do
+    #L14:
+    {
+      core::print("Hello from do-while!");
+      if((i = i.{core::num::+}(1){(core::num*) →* core::int*}).{core::num::<}(3){(core::num*) →* core::bool*})
+        break #L14;
+      break #L13;
+    }
+  while (true)
+  i = 0;
+  #L15:
+  while (true)
+    #L16:
+    {
+      core::print("Hello from while!");
+      if((i = i.{core::num::+}(1){(core::num*) →* core::int*}).{core::num::<}(3){(core::num*) →* core::bool*})
+        break #L16;
+      break #L15;
+    }
+}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+  #C3 = 0
+  #C4 = 4
+}
diff --git a/pkg/front_end/testcases/general/static_setter.dart.weak.modular.expect b/pkg/front_end/testcases/general/static_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..33c8de3
--- /dev/null
+++ b/pkg/front_end/testcases/general/static_setter.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static set foo(dynamic x) → void {}
+static method main() → dynamic {
+  self::foo = new self::Foo::•();
+}
diff --git a/pkg/front_end/testcases/general/store_load.dart.weak.modular.expect b/pkg/front_end/testcases/general/store_load.dart.weak.modular.expect
new file mode 100644
index 0000000..b5b20a2
--- /dev/null
+++ b/pkg/front_end/testcases/general/store_load.dart.weak.modular.expect
@@ -0,0 +1,76 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  field dynamic _field = null;
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class FooValue extends core::Object {
+  synthetic constructor •() → self::FooValue*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar extends core::Object {
+  field dynamic _field = null;
+  synthetic constructor •() → self::Bar*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class BarValue extends core::Object {
+  synthetic constructor •() → self::BarValue*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::Foo* foo = new self::Foo::•();
+  foo.{self::Foo::_field} = new self::FooValue::•();
+  dynamic fooValue = foo.{self::Foo::_field}{dynamic};
+  core::print(fooValue);
+  self::Bar* bar = new self::Bar::•();
+  bar.{self::Bar::_field} = new self::BarValue::•();
+  dynamic barValue = bar.{self::Bar::_field}{dynamic};
+  core::print(barValue);
+}
diff --git a/pkg/front_end/testcases/general/stream_future.dart.weak.modular.expect b/pkg/front_end/testcases/general/stream_future.dart.weak.modular.expect
new file mode 100644
index 0000000..2914b7b
--- /dev/null
+++ b/pkg/front_end/testcases/general/stream_future.dart.weak.modular.expect
@@ -0,0 +1,56 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/stream_future.dart:18:9: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'FutureOr<Class>'.
+//  - 'Future' is from 'dart:async'.
+//  - 'Class' is from 'pkg/front_end/testcases/general/stream_future.dart'.
+//   yield returnFutureDynamic();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method returnDynamic() → dynamic
+  return new self::Class::•();
+static method returnClass() → self::Class*
+  return new self::Class::•();
+static method returnFutureDynamic() → asy::Future<dynamic>* async 
+  return new self::Class::•();
+static method returnFutureClass() → asy::Future<self::Class*>* async 
+  return new self::Class::•();
+static method error() → asy::Stream<FutureOr<self::Class*>*>* async* {
+  yield invalid-expression "pkg/front_end/testcases/general/stream_future.dart:18:9: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'FutureOr<Class>'.
+ - 'Future' is from 'dart:async'.
+ - 'Class' is from 'pkg/front_end/testcases/general/stream_future.dart'.
+  yield returnFutureDynamic();
+        ^" in self::returnFutureDynamic() as{TypeError} FutureOr<self::Class*>*;
+}
+static method stream() → asy::Stream<FutureOr<self::Class*>*>* async* {
+  yield self::returnDynamic() as{TypeError,ForDynamic} FutureOr<self::Class*>*;
+  yield self::returnClass();
+  yield self::returnFutureClass();
+}
+static method main() → dynamic async {
+  await for (FutureOr<self::Class*>* cls in self::stream()) {
+    core::print(cls);
+  }
+}
diff --git a/pkg/front_end/testcases/general/stringliteral.dart.weak.modular.expect b/pkg/front_end/testcases/general/stringliteral.dart.weak.modular.expect
new file mode 100644
index 0000000..2d193f7
--- /dev/null
+++ b/pkg/front_end/testcases/general/stringliteral.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static field core::String color = "brown";
+static field core::String thing = "lazy dog";
+static field core::String phrase = "The quick ${self::color} fox
+jumped over the ${self::thing}.
+";
+static field core::String adjacent = "${self::color}${self::color}${self::color}";
+static field core::String linebreaks = "${self::color}
+${self::color}
+${self::color}";
+static field core::String other = "${self::color}
+ is 
+${self::color}";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..651a9c4
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_access_in_initializer.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Undefined name 'property'.
+//       : assert(property),
+//                ^^^^^^^^
+//
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Undefined name 'property'.
+//         this.field = property,
+//                      ^^^^^^^^
+//
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:17:15: Error: Undefined name 'property'.
+//         super(property);
+//               ^^^^^^^^
+//
+// pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Undefined name 'property'.
+//   Class.redirect() : this(property);
+//                           ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  constructor •(core::bool* value) → self::Super*
+    : super core::Object::•()
+    ;
+  get property() → core::bool*
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class extends self::Super {
+  field core::bool* field;
+  constructor •(core::bool* value) → self::Class*
+    : assert(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:15:16: Error: Undefined name 'property'.
+      : assert(property),
+               ^^^^^^^^"), self::Class::field = invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:16:22: Error: Undefined name 'property'.
+        this.field = property,
+                     ^^^^^^^^", super self::Super::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:17:15: Error: Undefined name 'property'.
+        super(property);
+              ^^^^^^^^")
+    ;
+  constructor redirect() → self::Class*
+    : this self::Class::•(invalid-expression "pkg/front_end/testcases/general/super_access_in_initializer.dart:19:27: Error: Undefined name 'property'.
+  Class.redirect() : this(property);
+                          ^^^^^^^^")
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/super_call.dart.weak.modular.expect b/pkg/front_end/testcases/general/super_call.dart.weak.modular.expect
new file mode 100644
index 0000000..1e7e27c
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_call.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method call(core::int* x) → core::int*
+    return x.{core::num::*}(2){(core::num*) →* core::int*};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  method call(core::int* x) → core::int*
+    return x.{core::num::*}(3){(core::num*) →* core::int*};
+  method call_super() → core::int* {
+    return super.{self::A::call}(5);
+  }
+}
+static method main() → dynamic {
+  assert(new self::B::•().{self::B::call_super}(){() →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 10);
+}
diff --git a/pkg/front_end/testcases/general/super_nsm.dart.weak.modular.expect b/pkg/front_end/testcases/general/super_nsm.dart.weak.modular.expect
new file mode 100644
index 0000000..671d437
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_nsm.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  abstract method interfaceMethod() → dynamic;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object implements self::I {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* _) → dynamic
+    return "C";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method interfaceMethod() → dynamic
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method noSuchMethod(core::Invocation* _) → dynamic
+    return "D";
+  method dMethod() → dynamic
+    return super.{self::C::interfaceMethod}();
+}
+static method main() → dynamic {
+  dynamic result = new self::D::•().{self::D::dMethod}(){() →* dynamic};
+  if(!(result =={core::Object::==}{(core::Object*) →* core::bool*} "D"))
+    throw "Expected 'D' but got: '${result}'";
+}
+
+constants  {
+  #C1 = #interfaceMethod
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/general/super_semi_stub.dart.weak.modular.expect b/pkg/front_end/testcases/general/super_semi_stub.dart.weak.modular.expect
new file mode 100644
index 0000000..31c108e
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_semi_stub.dart.weak.modular.expect
@@ -0,0 +1,76 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/super_semi_stub.dart:17:37: Error: A value of type 'void Function(int)' can't be assigned to a variable of type 'void Function(num)'.
+//     void Function(num) sup1 = super.method; // ok
+//                                     ^
+//
+// pkg/front_end/testcases/general/super_semi_stub.dart:19:39: Error: A value of type 'void Function(int)' can't be assigned to a variable of type 'void Function(num)'.
+//     void Function(num) cls1 = Class().method; // error
+//                                       ^
+//
+// pkg/front_end/testcases/general/super_semi_stub.dart:34:14: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+//   sub.method(0.5); // error
+//              ^
+//
+// pkg/front_end/testcases/general/super_semi_stub.dart:38:14: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+//   cls.method(0.5); // error
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method method(core::num a) → void {}
+  set setter(core::num a) → void {}
+}
+class Class extends self::Super {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ method(covariant-by-declaration core::num a) → void
+    return super.{self::Super::method}(a);
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter(covariant-by-declaration core::num a) → void
+    return super.{self::Super::setter} = a;
+}
+class Subclass extends self::Class {
+  synthetic constructor •() → self::Subclass
+    : super self::Class::•()
+    ;
+  method method(covariant-by-declaration core::int a) → void {
+    (core::num) → void sup1 = invalid-expression "pkg/front_end/testcases/general/super_semi_stub.dart:17:37: Error: A value of type 'void Function(int)' can't be assigned to a variable of type 'void Function(num)'.
+    void Function(num) sup1 = super.method; // ok
+                                    ^" in super.{self::Class::method} as{TypeError,ForNonNullableByDefault} (core::num) → void;
+    (core::int) → void sup2 = super.{self::Class::method};
+    (core::num) → void cls1 = invalid-expression "pkg/front_end/testcases/general/super_semi_stub.dart:19:39: Error: A value of type 'void Function(int)' can't be assigned to a variable of type 'void Function(num)'.
+    void Function(num) cls1 = Class().method; // error
+                                      ^" in new self::Class::•().{self::Class::method}{(core::int) → void} as{TypeError,ForNonNullableByDefault} (core::num) → void;
+    (core::int) → void cls2 = new self::Class::•().{self::Class::method}{(core::int) → void};
+    (core::int) → void cls3 = new self::Class::•().{self::Class::method}{(core::int) → void};
+  }
+  set setter(covariant-by-declaration core::int a) → void {
+    super.{self::Class::setter} = 0;
+    super.{self::Class::setter} = 0.5;
+    new self::Class::•().{self::Class::setter} = 0;
+    new self::Class::•().{self::Class::setter} = 0.5;
+  }
+}
+static method test(self::Subclass sub) → dynamic {
+  sub.{self::Subclass::method}(0){(core::int) → void};
+  sub.{self::Subclass::method}(invalid-expression "pkg/front_end/testcases/general/super_semi_stub.dart:34:14: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+  sub.method(0.5); // error
+             ^" in 0.5 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+  self::Class cls = sub;
+  cls.{self::Class::method}(0){(core::int) → void};
+  cls.{self::Class::method}(invalid-expression "pkg/front_end/testcases/general/super_semi_stub.dart:38:14: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+  cls.method(0.5); // error
+             ^" in 0.5 as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+  self::Super sup = sub;
+  sup.{self::Super::method}(0){(core::num) → void};
+  sup.{self::Super::method}(0.5){(core::num) → void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/super_set_abstract.dart.weak.modular.expect b/pkg/front_end/testcases/general/super_set_abstract.dart.weak.modular.expect
new file mode 100644
index 0000000..096efc9
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_set_abstract.dart.weak.modular.expect
@@ -0,0 +1,47 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/super_set_abstract.dart:15:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     super.setter = '$o';
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class SuperClass extends core::Object {
+  synthetic constructor •() → self::SuperClass*
+    : super core::Object::•()
+    ;
+  set setter(core::int* o) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Class extends self::SuperClass {
+  synthetic constructor •() → self::Class*
+    : super self::SuperClass::•()
+    ;
+  abstract set setter(core::Object* o) → void;
+}
+class SubClass extends self::Class {
+  synthetic constructor •() → self::SubClass*
+    : super self::Class::•()
+    ;
+  set setter(core::Object* o) → void {
+    super.{self::SuperClass::setter} = invalid-expression "pkg/front_end/testcases/general/super_set_abstract.dart:15:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    super.setter = '\$o';
+                       ^" in "${o}" as{TypeError} core::int*;
+  }
+}
+static method test() → dynamic {
+  new self::SubClass::•().{self::SubClass::setter} = "0";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.modular.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.modular.expect
new file mode 100644
index 0000000..fede2f5
--- /dev/null
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class SuperClass extends core::Object {
+  synthetic constructor •() → self::SuperClass*
+    : super core::Object::•()
+    ;
+  set setter(core::Object* o) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Class extends self::SuperClass {
+  synthetic constructor •() → self::Class*
+    : super self::SuperClass::•()
+    ;
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int*) →* void */ setter(covariant-by-declaration core::Object* o) → void
+    return super.{self::SuperClass::setter} = o;
+}
+class SubClass extends self::Class {
+  synthetic constructor •() → self::SubClass*
+    : super self::Class::•()
+    ;
+  set setter(covariant-by-declaration core::int* o) → void {
+    super.{self::Class::setter} = "${o}";
+  }
+}
+static method test() → dynamic {
+  new self::SubClass::•().{self::SubClass::setter} = 0;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/tabs.dart.weak.modular.expect b/pkg/front_end/testcases/general/tabs.dart.weak.modular.expect
new file mode 100644
index 0000000..c69fb6b
--- /dev/null
+++ b/pkg/front_end/testcases/general/tabs.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/tabs.dart:9:9: Error: Undefined name 'one'.
+//   print(one);
+//         ^^^
+//
+// pkg/front_end/testcases/general/tabs.dart:10:9: Error: Undefined name 'two'.
+//   print(two);
+//         ^^^
+//
+// pkg/front_end/testcases/general/tabs.dart:11:9: Error: Undefined name 'three'.
+//   print(three);
+//         ^^^^^
+//
+// pkg/front_end/testcases/general/tabs.dart:12:9: Error: Undefined name 'four'.
+//   print(four);
+//         ^^^^
+//
+// pkg/front_end/testcases/general/tabs.dart:13:9: Error: Undefined name 'five'.
+//   print(five);
+//         ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → dynamic {
+  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:9:9: Error: Undefined name 'one'.
+  print(one);
+        ^^^");
+  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:10:9: Error: Undefined name 'two'.
+  print(two);
+        ^^^");
+  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:11:9: Error: Undefined name 'three'.
+  print(three);
+        ^^^^^");
+  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:12:9: Error: Undefined name 'four'.
+  print(four);
+        ^^^^");
+  core::print(invalid-expression "pkg/front_end/testcases/general/tabs.dart:13:9: Error: Undefined name 'five'.
+  print(five);
+        ^^^^");
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/this_field_call.dart.weak.modular.expect b/pkg/front_end/testcases/general/this_field_call.dart.weak.modular.expect
new file mode 100644
index 0000000..1156174
--- /dev/null
+++ b/pkg/front_end/testcases/general/this_field_call.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  field (self::A::T*) →* void f;
+  constructor •((self::A::T*) →* void f) → self::A<self::A::T*>*
+    : self::A::f = f, super core::Object::•()
+    ;
+  method foo(covariant-by-class self::A::T* x) → dynamic
+    return let final self::A::T* #t1 = x in this.{self::A::f}{(self::A::T*) →* void}(#t1){(self::A::T*) →* void};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::A::•<core::int*>((core::int* x) → Null {}).{self::A::foo}(3){(core::int*) →* dynamic};
+}
diff --git a/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.modular.expect b/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.modular.expect
new file mode 100644
index 0000000..bd2fff9
--- /dev/null
+++ b/pkg/front_end/testcases/general/three_typedefs_loop.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/three_typedefs_loop.dart:8:9: Error: The typedef 'Bar' has a reference to itself.
+// typedef Bar<T> = void Function(Baz<T>);
+//         ^^^
+//
+// pkg/front_end/testcases/general/three_typedefs_loop.dart:7:9: Error: The typedef 'Foo' has a reference to itself.
+// typedef Foo<T> = void Function(Bar<T>);
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Foo<unrelated T extends core::Object* = dynamic> = invalid-type;
+typedef Bar<unrelated T extends core::Object* = dynamic> = ((invalid-type) →* void) →* void;
+typedef Baz<unrelated T extends core::Object* = dynamic> = (invalid-type) →* void;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/top_level_accessors.dart.weak.modular.expect b/pkg/front_end/testcases/general/top_level_accessors.dart.weak.modular.expect
new file mode 100644
index 0000000..9898bf6
--- /dev/null
+++ b/pkg/front_end/testcases/general/top_level_accessors.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library top_level_accessors;
+import self as self;
+import "dart:core" as core;
+
+part top_level_accessors_part.dart;
+static set /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode(core::int* code) → void {
+  core::print(code);
+}
+static get /* from org-dartlang-testcase:///top_level_accessors_part.dart */ exitCode() → core::int*
+  return 0;
+static method /* from org-dartlang-testcase:///top_level_accessors_part.dart */ main() → dynamic {
+  self::exitCode = 42;
+  core::print(self::exitCode);
+}
diff --git a/pkg/front_end/testcases/general/top_level_library_method.dart.weak.modular.expect b/pkg/front_end/testcases/general/top_level_library_method.dart.weak.modular.expect
new file mode 100644
index 0000000..f23119a
--- /dev/null
+++ b/pkg/front_end/testcases/general/top_level_library_method.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method library() → dynamic {
+  core::print("Hello, World!");
+}
+static method main() → dynamic
+  return self::library();
diff --git a/pkg/front_end/testcases/general/top_level_map_literal_error.dart.weak.modular.expect b/pkg/front_end/testcases/general/top_level_map_literal_error.dart.weak.modular.expect
new file mode 100644
index 0000000..d52f9e6
--- /dev/null
+++ b/pkg/front_end/testcases/general/top_level_map_literal_error.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/top_level_map_literal_error.dart:7:9: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// var c = {...a, ...b};
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static field core::Set<core::int> a = block {
+  final core::Set<core::int> #t1 = col::LinkedHashSet::•<core::int>();
+  #t1.{core::Set::add}{Invariant}(0){(core::int) → core::bool};
+} =>#t1;
+static field core::Map<core::int, core::int> b = <core::int, core::int>{0: 1};
+static field Never c = invalid-expression "pkg/front_end/testcases/general/top_level_map_literal_error.dart:7:9: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+var c = {...a, ...b};
+        ^";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/top_level_variance_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/top_level_variance_test.dart.weak.modular.expect
new file mode 100644
index 0000000..c61d2e4
--- /dev/null
+++ b/pkg/front_end/testcases/general/top_level_variance_test.dart.weak.modular.expect
@@ -0,0 +1,125 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant X extends core::Object* = dynamic> = <Y extends X* = dynamic>() →* void;
+typedef Fcov<X extends core::Object* = dynamic> = () →* X*;
+typedef Fcon<contravariant X extends core::Object* = dynamic> = (X*) →* dynamic;
+typedef Finv<invariant X extends core::Object* = dynamic> = (X*) →* X*;
+typedef FcovBound<X extends core::num*> = () →* X*;
+typedef FconBound<contravariant X extends core::num*> = (X*) →* dynamic;
+typedef FinvBound<invariant X extends core::num*> = (X*) →* X*;
+typedef FcovCyclicBound<X extends self::A<X*>* = self::A<dynamic>*> = () →* X*;
+typedef FconCyclicBound<contravariant X extends self::A<X*>* = self::A<Null>*> = (X*) →* dynamic;
+typedef FinvCyclicBound<invariant X extends self::A<X*>* = self::A<dynamic>*> = (X*) →* X*;
+typedef FcovCyclicCoBound<X extends (X*) →* dynamic = (Null) →* dynamic> = () →* X*;
+typedef FconCyclicCoBound<contravariant X extends (X*) →* dynamic = (dynamic) →* dynamic> = (X*) →* dynamic;
+typedef FinvCyclicCoBound<invariant X extends (X*) →* dynamic = (dynamic) →* dynamic> = (X*) →* X*;
+class A<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method toF<X extends core::Object* = dynamic>(self::toF::X* x) → <Y extends self::toF::X* = dynamic>() →* void
+  return null;
+static method testTopLevel() → void {
+  () →* dynamic source1;
+  <Y extends () →* dynamic = dynamic>() →* void fsource1 = self::toF<() →* dynamic>(source1);
+  <Y extends () →* dynamic = dynamic>() →* void target1 = fsource1;
+  (dynamic) →* dynamic source2;
+  <Y extends (dynamic) →* dynamic = dynamic>() →* void fsource2 = self::toF<(dynamic) →* dynamic>(source2);
+  <Y extends (dynamic) →* dynamic = dynamic>() →* void target2 = fsource2;
+  (dynamic) →* dynamic source3;
+  <Y extends (dynamic) →* dynamic = dynamic>() →* void fsource3 = self::toF<(dynamic) →* dynamic>(source3);
+  <Y extends (dynamic) →* dynamic = dynamic>() →* void target3 = fsource3;
+  () →* core::num* source4;
+  <Y extends () →* core::num* = dynamic>() →* void fsource4 = self::toF<() →* core::num*>(source4);
+  <Y extends () →* core::num* = dynamic>() →* void target4 = fsource4;
+  (core::num*) →* dynamic source5;
+  <Y extends (core::num*) →* dynamic = dynamic>() →* void fsource5 = self::toF<(core::num*) →* dynamic>(source5);
+  <Y extends (core::num*) →* dynamic = dynamic>() →* void target5 = fsource5;
+  (core::num*) →* core::num* source6;
+  <Y extends (core::num*) →* core::num* = dynamic>() →* void fsource6 = self::toF<(core::num*) →* core::num*>(source6);
+  <Y extends (core::num*) →* core::num* = dynamic>() →* void target6 = fsource6;
+  () →* self::A<dynamic>* source7;
+  <Y extends () →* self::A<dynamic>* = dynamic>() →* void fsource7 = self::toF<() →* self::A<dynamic>*>(source7);
+  <Y extends () →* self::A<dynamic>* = dynamic>() →* void target7 = fsource7;
+  (self::A<Null>*) →* dynamic source8;
+  <Y extends (self::A<Null>*) →* dynamic = dynamic>() →* void fsource8 = self::toF<(self::A<Null>*) →* dynamic>(source8);
+  <Y extends (self::A<Null>*) →* dynamic = dynamic>() →* void target8 = fsource8;
+  (self::A<dynamic>*) →* self::A<dynamic>* source9;
+  () →* (Null) →* dynamic source10;
+  <Y extends () →* (Null) →* dynamic = dynamic>() →* void fsource10 = self::toF<() →* (Null) →* dynamic>(source10);
+  <Y extends () →* (Null) →* dynamic = dynamic>() →* void target10 = fsource10;
+  ((dynamic) →* dynamic) →* dynamic source11;
+  <Y extends ((dynamic) →* dynamic) →* dynamic = dynamic>() →* void fsource11 = self::toF<((dynamic) →* dynamic) →* dynamic>(source11);
+  <Y extends ((dynamic) →* dynamic) →* dynamic = dynamic>() →* void target11 = fsource11;
+  ((dynamic) →* dynamic) →* (dynamic) →* dynamic source12;
+  <Y extends ((dynamic) →* dynamic) →* (dynamic) →* dynamic = dynamic>() →* void fsource12 = self::toF<((dynamic) →* dynamic) →* (dynamic) →* dynamic>(source12);
+  <Y extends ((dynamic) →* dynamic) →* (dynamic) →* dynamic = dynamic>() →* void target12 = fsource12;
+}
+static method testNested() → void {
+  self::B<() →* dynamic>* source1;
+  <Y extends self::B<() →* dynamic>* = dynamic>() →* void fsource1 = self::toF<self::B<() →* dynamic>*>(source1);
+  <Y extends self::B<() →* dynamic>* = dynamic>() →* void target1 = fsource1;
+  self::B<(dynamic) →* dynamic>* source2;
+  <Y extends self::B<(dynamic) →* dynamic>* = dynamic>() →* void fsource2 = self::toF<self::B<(dynamic) →* dynamic>*>(source2);
+  <Y extends self::B<(dynamic) →* dynamic>* = dynamic>() →* void target2 = fsource2;
+  self::B<(dynamic) →* dynamic>* source3;
+  <Y extends self::B<(dynamic) →* dynamic>* = dynamic>() →* void fsource3 = self::toF<self::B<(dynamic) →* dynamic>*>(source3);
+  <Y extends self::B<(dynamic) →* dynamic>* = dynamic>() →* void target3 = fsource3;
+  self::B<() →* core::num*>* source4;
+  <Y extends self::B<() →* core::num*>* = dynamic>() →* void fsource4 = self::toF<self::B<() →* core::num*>*>(source4);
+  <Y extends self::B<() →* core::num*>* = dynamic>() →* void target4 = fsource4;
+  self::B<(core::num*) →* dynamic>* source5;
+  <Y extends self::B<(core::num*) →* dynamic>* = dynamic>() →* void fsource5 = self::toF<self::B<(core::num*) →* dynamic>*>(source5);
+  <Y extends self::B<(core::num*) →* dynamic>* = dynamic>() →* void target5 = fsource5;
+  self::B<(core::num*) →* core::num*>* source6;
+  <Y extends self::B<(core::num*) →* core::num*>* = dynamic>() →* void fsource6 = self::toF<self::B<(core::num*) →* core::num*>*>(source6);
+  <Y extends self::B<(core::num*) →* core::num*>* = dynamic>() →* void target6 = fsource6;
+  self::B<() →* self::A<dynamic>*>* source7;
+  <Y extends self::B<() →* self::A<dynamic>*>* = dynamic>() →* void fsource7 = self::toF<self::B<() →* self::A<dynamic>*>*>(source7);
+  <Y extends self::B<() →* self::A<dynamic>*>* = dynamic>() →* void target7 = fsource7;
+  self::B<(self::A<Null>*) →* dynamic>* source8;
+  <Y extends self::B<(self::A<Null>*) →* dynamic>* = dynamic>() →* void fsource8 = self::toF<self::B<(self::A<Null>*) →* dynamic>*>(source8);
+  <Y extends self::B<(self::A<Null>*) →* dynamic>* = dynamic>() →* void target8 = fsource8;
+  self::B<(self::A<dynamic>*) →* self::A<dynamic>*>* source9;
+  self::B<() →* (Null) →* dynamic>* source10;
+  <Y extends self::B<() →* (Null) →* dynamic>* = dynamic>() →* void fsource10 = self::toF<self::B<() →* (Null) →* dynamic>*>(source10);
+  <Y extends self::B<() →* (Null) →* dynamic>* = dynamic>() →* void target10 = fsource10;
+  self::B<((dynamic) →* dynamic) →* dynamic>* source11;
+  <Y extends self::B<((dynamic) →* dynamic) →* dynamic>* = dynamic>() →* void fsource11 = self::toF<self::B<((dynamic) →* dynamic) →* dynamic>*>(source11);
+  <Y extends self::B<((dynamic) →* dynamic) →* dynamic>* = dynamic>() →* void target11 = fsource11;
+  self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>* source12;
+  <Y extends self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>* = dynamic>() →* void fsource12 = self::toF<self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>*>(source12);
+  <Y extends self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>* = dynamic>() →* void target12 = fsource12;
+}
+static method main() → dynamic {
+  self::testTopLevel();
+  self::testNested();
+}
diff --git a/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.modular.expect
new file mode 100644
index 0000000..6039ee4
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_literal_as_metadata.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
+// @A
+//  ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+@invalid-expression "pkg/front_end/testcases/general/type_literal_as_metadata.dart:9:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
+@A
+ ^"
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/type_of_null.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_of_null.dart.weak.modular.expect
new file mode 100644
index 0000000..4f0b860
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_of_null.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method map<T extends core::Object* = dynamic>(() →* self::map::T* f1, () →* self::map::T* f2) → self::map::T* {}
+static method id<T extends core::Object* = dynamic>(self::id::T* t) → dynamic
+  return t;
+static method foo() → Null
+  return null;
+static method main() → dynamic {
+  self::map<Null>(() → Null {}, () → Null => throw "hello");
+  self::map<Null>(() → Null => throw "hello", () → Null {});
+  () →* Null f = () → Null {};
+  self::map<Null>(#C1, () → Null => throw "hello");
+  self::map<Null>(() → Null => throw "hello", #C1);
+  self::map<Null>(() → Null {
+    return null;
+  }, () → Null => throw "hello");
+  self::map<Null>(() → Null => throw "hello", () → Null {
+    return null;
+  });
+  self::id<() →* Null>(() → Null {});
+}
+
+constants  {
+  #C1 = static-tearoff self::foo
+}
diff --git a/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.modular.expect
new file mode 100644
index 0000000..ea169b3
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_parameter_type_named_int.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_parameter_type_named_int.dart:13:12: Error: A value of type 'List<int/*1*/>' can't be assigned to a variable of type 'List<int/*2*/>'.
+//  - 'List' is from 'dart:core'.
+//  - 'int/*1*/' is from 'pkg/front_end/testcases/general/type_parameter_type_named_int.dart'.
+//  - 'int/*2*/' is from 'dart:core'.
+//     list = value;
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Foo<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T*>*
+    : super core::Object::•()
+    ;
+  abstract get list() → core::List<self::Foo::T*>*;
+  abstract method setList<T extends core::Object* = dynamic>(core::List<self::Foo::setList::T*>* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar extends core::Object implements self::Foo<core::int*> {
+  field core::List<core::int*>* list = null;
+  synthetic constructor •() → self::Bar*
+    : super core::Object::•()
+    ;
+  method setList<int extends core::Object* = dynamic>(core::List<self::Bar::setList::int*>* value) → void {
+    this.{self::Bar::list} = invalid-expression "pkg/front_end/testcases/general/type_parameter_type_named_int.dart:13:12: Error: A value of type 'List<int/*1*/>' can't be assigned to a variable of type 'List<int/*2*/>'.
+ - 'List' is from 'dart:core'.
+ - 'int/*1*/' is from 'pkg/front_end/testcases/general/type_parameter_type_named_int.dart'.
+ - 'int/*2*/' is from 'dart:core'.
+    list = value;
+           ^" in value as{TypeError} core::List<core::int*>*;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.modular.expect
new file mode 100644
index 0000000..cb0d959
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart.weak.modular.expect
@@ -0,0 +1,206 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:6:10: Error: Type variables can't be used in static members.
+//   static U foo1() { return null; }
+//          ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:7:15: Error: Type variables can't be used in static members.
+//   static List<U> foo1Prime() { return null; }
+//               ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:8:20: Error: Type variables can't be used in static members.
+//   static void foo2(U x) { return null; }
+//                    ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:9:30: Error: Type variables can't be used in static members.
+//   static void foo2Prime(List<U> x) { return null; }
+//                              ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:20:10: Error: Type variables can't be used in static members.
+//   static U Function() foo8() { return null; }
+//          ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:21:15: Error: Type variables can't be used in static members.
+//   static List<U> Function() foo8Prime() { return null; }
+//               ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:22:24: Error: Type variables can't be used in static members.
+//   static void Function(U) foo9() { return null; }
+//                        ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:23:29: Error: Type variables can't be used in static members.
+//   static void Function(List<U>) foo9Prime() { return null; }
+//                             ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:24:21: Error: Type variables can't be used in static members.
+//   static void foo10(U Function()) { return null; }
+//                     ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:25:31: Error: Type variables can't be used in static members.
+//   static void foo10Prime(List<U> Function()) { return null; }
+//                               ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:28:35: Error: Type variables can't be used in static members.
+//   static void foo12(void Function(U) b) { return null; }
+//                                   ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:29:45: Error: Type variables can't be used in static members.
+//   static void foo12Prime(void Function(List<U>) b) { return null; }
+//                                             ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:31:35: Error: Type variables can't be used in static members.
+//   static void foo13(void Function(U b)) { return null; }
+//                                   ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:33:45: Error: Type variables can't be used in static members.
+//   static void foo13Prime(void Function(List<U> b)) { return null; }
+//                                             ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:34:10: Error: Type variables can't be used in static members.
+//   static U foo14 = null;
+//          ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:35:15: Error: Type variables can't be used in static members.
+//   static List<U> foo14Prime = null;
+//               ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:36:10: Error: Type variables can't be used in static members.
+//   static U Function(U) foo15 = null;
+//          ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:36:21: Error: Type variables can't be used in static members.
+//   static U Function(U) foo15 = null;
+//                     ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:37:15: Error: Type variables can't be used in static members.
+//   static List<U> Function(List<U>) foo15Prime = null;
+//               ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:37:32: Error: Type variables can't be used in static members.
+//   static List<U> Function(List<U>) foo15Prime = null;
+//                                ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:11:5: Error: Type variables can't be used in static members.
+//     U foo4;
+//     ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:12:10: Error: Type variables can't be used in static members.
+//     List<U> foo4Prime;
+//          ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:13:15: Error: Type variables can't be used in static members.
+//     void foo5(U y) => print(y);
+//               ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:14:25: Error: Type variables can't be used in static members.
+//     void foo5Prime(List<U> y) => print(y);
+//                         ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:15:5: Error: Type variables can't be used in static members.
+//     U foo6() => null;
+//     ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:16:10: Error: Type variables can't be used in static members.
+//     List<U> foo6Prime() => null;
+//          ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:17:20: Error: Type variables can't be used in static members.
+//     void Function (U y) foo7 = (U y) => y;
+//                    ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:17:33: Error: Type variables can't be used in static members.
+//     void Function (U y) foo7 = (U y) => y;
+//                                 ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:18:25: Error: Type variables can't be used in static members.
+//     void Function (List<U> y) foo7Prime = (List<U> y) => y;
+//                         ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_class.dart:18:49: Error: Type variables can't be used in static members.
+//     void Function (List<U> y) foo7Prime = (List<U> y) => y;
+//                                                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo<U extends core::Object* = dynamic> extends core::Object {
+  static field invalid-type foo14 = null;
+  static field core::List<invalid-type>* foo14Prime = null;
+  static field (invalid-type) →* invalid-type foo15 = null;
+  static field (core::List<invalid-type>*) →* core::List<invalid-type>* foo15Prime = null;
+  synthetic constructor •() → self::Foo<self::Foo::U*>*
+    : super core::Object::•()
+    ;
+  static method foo1() → invalid-type {
+    return null;
+  }
+  static method foo1Prime() → core::List<invalid-type>* {
+    return null;
+  }
+  static method foo2(invalid-type x) → void {
+    return null;
+  }
+  static method foo2Prime(core::List<invalid-type>* x) → void {
+    return null;
+  }
+  static method foo3() → void {
+    invalid-type foo4;
+    core::List<invalid-type>* foo4Prime;
+    function foo5(invalid-type y) → void
+      return core::print(y);
+    function foo5Prime(core::List<invalid-type>* y) → void
+      return core::print(y);
+    function foo6() → invalid-type
+      return null;
+    function foo6Prime() → core::List<invalid-type>*
+      return null;
+    (invalid-type) →* void foo7 = (invalid-type y) → invalid-type => y;
+    (core::List<invalid-type>*) →* void foo7Prime = (core::List<invalid-type>* y) → core::List<invalid-type>* => y;
+  }
+  static method foo8() → () →* invalid-type {
+    return null;
+  }
+  static method foo8Prime() → () →* core::List<invalid-type>* {
+    return null;
+  }
+  static method foo9() → (invalid-type) →* void {
+    return null;
+  }
+  static method foo9Prime() → (core::List<invalid-type>*) →* void {
+    return null;
+  }
+  static method foo10(() →* invalid-type Function) → void {
+    return null;
+  }
+  static method foo10Prime(() →* core::List<invalid-type>* Function) → void {
+    return null;
+  }
+  static method foo11((dynamic) →* void Function) → void {
+    return null;
+  }
+  static method foo12((invalid-type) →* void b) → void {
+    return null;
+  }
+  static method foo12Prime((core::List<invalid-type>*) →* void b) → void {
+    return null;
+  }
+  static method foo13((invalid-type) →* void Function) → void {
+    return null;
+  }
+  static method foo13Prime((core::List<invalid-type>*) →* void Function) → void {
+    return null;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.modular.expect
new file mode 100644
index 0000000..d4e95b2
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart.weak.modular.expect
@@ -0,0 +1,213 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:6:10: Error: Type variables can't be used in static members.
+//   static U foo1() { return null; }
+//          ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:7:15: Error: Type variables can't be used in static members.
+//   static List<U> foo1Prime() { return null; }
+//               ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:8:20: Error: Type variables can't be used in static members.
+//   static void foo2(U x) { return null; }
+//                    ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:9:30: Error: Type variables can't be used in static members.
+//   static void foo2Prime(List<U> x) { return null; }
+//                              ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:20:10: Error: Type variables can't be used in static members.
+//   static U Function() foo8() { return null; }
+//          ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:21:15: Error: Type variables can't be used in static members.
+//   static List<U> Function() foo8Prime() { return null; }
+//               ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:22:24: Error: Type variables can't be used in static members.
+//   static void Function(U) foo9() { return null; }
+//                        ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:23:29: Error: Type variables can't be used in static members.
+//   static void Function(List<U>) foo9Prime() { return null; }
+//                             ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:24:21: Error: Type variables can't be used in static members.
+//   static void foo10(U Function()) { return null; }
+//                     ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:25:31: Error: Type variables can't be used in static members.
+//   static void foo10Prime(List<U> Function()) { return null; }
+//                               ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:28:35: Error: Type variables can't be used in static members.
+//   static void foo12(void Function(U) b) { return null; }
+//                                   ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:29:45: Error: Type variables can't be used in static members.
+//   static void foo12Prime(void Function(List<U>) b) { return null; }
+//                                             ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:31:35: Error: Type variables can't be used in static members.
+//   static void foo13(void Function(U b)) { return null; }
+//                                   ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:33:45: Error: Type variables can't be used in static members.
+//   static void foo13Prime(void Function(List<U> b)) { return null; }
+//                                             ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:34:10: Error: Type variables can't be used in static members.
+//   static U foo14 = null;
+//          ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:35:15: Error: Type variables can't be used in static members.
+//   static List<U> foo14Prime = null;
+//               ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:36:10: Error: Type variables can't be used in static members.
+//   static U Function(U) foo15 = null;
+//          ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:36:21: Error: Type variables can't be used in static members.
+//   static U Function(U) foo15 = null;
+//                     ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:37:15: Error: Type variables can't be used in static members.
+//   static List<U> Function(List<U>) foo15Prime = null;
+//               ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:37:32: Error: Type variables can't be used in static members.
+//   static List<U> Function(List<U>) foo15Prime = null;
+//                                ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:11:5: Error: Type variables can't be used in static members.
+//     U foo4;
+//     ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:12:10: Error: Type variables can't be used in static members.
+//     List<U> foo4Prime;
+//          ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:13:15: Error: Type variables can't be used in static members.
+//     void foo5(U y) => print(y);
+//               ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:14:25: Error: Type variables can't be used in static members.
+//     void foo5Prime(List<U> y) => print(y);
+//                         ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:15:5: Error: Type variables can't be used in static members.
+//     U foo6() => null;
+//     ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:16:10: Error: Type variables can't be used in static members.
+//     List<U> foo6Prime() => null;
+//          ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:17:20: Error: Type variables can't be used in static members.
+//     void Function (U y) foo7 = (U y) => y;
+//                    ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:17:33: Error: Type variables can't be used in static members.
+//     void Function (U y) foo7 = (U y) => y;
+//                                 ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:18:25: Error: Type variables can't be used in static members.
+//     void Function (List<U> y) foo7Prime = (List<U> y) => y;
+//                         ^
+//
+// pkg/front_end/testcases/general/type_parameter_usage_in_static_method_in_extension.dart:18:49: Error: Type variables can't be used in static members.
+//     void Function (List<U> y) foo7Prime = (List<U> y) => y;
+//                                                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension Foo<U extends core::Object* = dynamic> on core::List<dynamic>* {
+  static method foo1 = self::Foo|foo1;
+  static method foo1Prime = self::Foo|foo1Prime;
+  static method foo2 = self::Foo|foo2;
+  static method foo2Prime = self::Foo|foo2Prime;
+  static method foo3 = self::Foo|foo3;
+  static method foo8 = self::Foo|foo8;
+  static method foo8Prime = self::Foo|foo8Prime;
+  static method foo9 = self::Foo|foo9;
+  static method foo9Prime = self::Foo|foo9Prime;
+  static method foo10 = self::Foo|foo10;
+  static method foo10Prime = self::Foo|foo10Prime;
+  static method foo11 = self::Foo|foo11;
+  static method foo12 = self::Foo|foo12;
+  static method foo12Prime = self::Foo|foo12Prime;
+  static method foo13 = self::Foo|foo13;
+  static method foo13Prime = self::Foo|foo13Prime;
+  static field foo14 = self::Foo|foo14;
+  static field foo14Prime = self::Foo|foo14Prime;
+  static field foo15 = self::Foo|foo15;
+  static field foo15Prime = self::Foo|foo15Prime;
+}
+static field invalid-type Foo|foo14 = null;
+static field core::List<invalid-type>* Foo|foo14Prime = null;
+static field (invalid-type) →* invalid-type Foo|foo15 = null;
+static field (core::List<invalid-type>*) →* core::List<invalid-type>* Foo|foo15Prime = null;
+static method Foo|foo1() → invalid-type {
+  return null;
+}
+static method Foo|foo1Prime() → core::List<invalid-type>* {
+  return null;
+}
+static method Foo|foo2(invalid-type x) → void {
+  return null;
+}
+static method Foo|foo2Prime(core::List<invalid-type>* x) → void {
+  return null;
+}
+static method Foo|foo3() → void {
+  invalid-type foo4;
+  core::List<invalid-type>* foo4Prime;
+  function foo5(invalid-type y) → void
+    return core::print(y);
+  function foo5Prime(core::List<invalid-type>* y) → void
+    return core::print(y);
+  function foo6() → invalid-type
+    return null;
+  function foo6Prime() → core::List<invalid-type>*
+    return null;
+  (invalid-type) →* void foo7 = (invalid-type y) → invalid-type => y;
+  (core::List<invalid-type>*) →* void foo7Prime = (core::List<invalid-type>* y) → core::List<invalid-type>* => y;
+}
+static method Foo|foo8() → () →* invalid-type {
+  return null;
+}
+static method Foo|foo8Prime() → () →* core::List<invalid-type>* {
+  return null;
+}
+static method Foo|foo9() → (invalid-type) →* void {
+  return null;
+}
+static method Foo|foo9Prime() → (core::List<invalid-type>*) →* void {
+  return null;
+}
+static method Foo|foo10(() →* invalid-type Function) → void {
+  return null;
+}
+static method Foo|foo10Prime(() →* core::List<invalid-type>* Function) → void {
+  return null;
+}
+static method Foo|foo11((dynamic) →* void Function) → void {
+  return null;
+}
+static method Foo|foo12((invalid-type) →* void b) → void {
+  return null;
+}
+static method Foo|foo12Prime((core::List<invalid-type>*) →* void b) → void {
+  return null;
+}
+static method Foo|foo13((invalid-type) →* void Function) → void {
+  return null;
+}
+static method Foo|foo13Prime((core::List<invalid-type>*) →* void Function) → void {
+  return null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.modular.expect
new file mode 100644
index 0000000..bdb4a9f
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_parameters_on_dynamic.dart:2:1: Error: Expected 0 type arguments.
+// dynamic<int> f() {}
+// ^
+//
+import self as self;
+
+static method f() → invalid-type {}
+static method main() → dynamic {
+  self::f();
+}
diff --git a/pkg/front_end/testcases/general/type_parameters_on_void.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_parameters_on_void.dart.weak.modular.expect
new file mode 100644
index 0000000..6e6a65f
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_parameters_on_void.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_parameters_on_void.dart:1:5: Error: Type 'void' can't have type arguments.
+// Try removing the type arguments.
+// void<int> f() {}
+//     ^
+//
+import self as self;
+
+static method f() → void {}
+static method main() → dynamic {
+  self::f();
+}
diff --git a/pkg/front_end/testcases/general/type_variable_annotations.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_variable_annotations.dart.weak.modular.expect
new file mode 100644
index 0000000..21c0f72
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_annotations.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<@#C1 contravariant T extends core::Object? = dynamic> = (T%) → void;
+class A extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class Class<@#C1 T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  method method<@#C1 T extends core::Object? = dynamic>() → void {
+    function local<@#C1 T extends core::Object? = dynamic>() → void {}
+  }
+}
+extension Extension<@#C1 T extends core::Object? = dynamic> on T% {
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+}
+static method method<@#C1 T extends core::Object? = dynamic>() → void {}
+static method Extension|method<#T extends core::Object? = dynamic, @#C1 T extends core::Object? = dynamic>(lowered final self::Extension|method::#T% #this) → void {}
+static method Extension|get#method<#T extends core::Object? = dynamic>(lowered final self::Extension|get#method::#T% #this) → <T extends core::Object? = dynamic>() → void
+  return <T extends core::Object? = dynamic>() → void => self::Extension|method<self::Extension|get#method::#T%, T%>(#this);
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::A {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///type_variable_annotations.dart:
+- A. (from org-dartlang-testcase:///type_variable_annotations.dart:6:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.modular.expect
new file mode 100644
index 0000000..aac4117
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.modular.expect
@@ -0,0 +1,77 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_variable_as_super.dart:5:16: Error: The type variable 'T' can't be used as supertype.
+// abstract class A<T> extends T {}
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_as_super.dart:7:16: Error: The type variable 'T' can't be used as supertype.
+// abstract class B<T> extends T {
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_as_super.dart:11:7: Error: The type variable 'T' can't be used as supertype.
+// class C<T> extends T {}
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_as_super.dart:14:7: Error: The class 'A' is abstract and can't be instantiated.
+//   new A();
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_as_super.dart:15:7: Error: The class 'B' is abstract and can't be instantiated.
+//   new B();
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B<T extends core::Object* = dynamic> extends core::Object {
+  constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  throw new core::AbstractClassInstantiationError::•("A");
+  throw new core::AbstractClassInstantiationError::•("B");
+  new self::C::•<dynamic>();
+}
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.modular.expect
new file mode 100644
index 0000000..c281ff0
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.modular.expect
@@ -0,0 +1,88 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
+//   num method2() => field1 + field2.length;
+//                                    ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class DynamicClass<T extends dynamic, S extends self::DynamicClass::T* = dynamic> extends core::Object {
+  covariant-by-class field self::DynamicClass::T* field1;
+  covariant-by-class field self::DynamicClass::T* field2;
+  constructor •(self::DynamicClass::T* field1, self::DynamicClass::T* field2) → self::DynamicClass<self::DynamicClass::T*, self::DynamicClass::S*>*
+    : self::DynamicClass::field1 = field1, self::DynamicClass::field2 = field2, super core::Object::•()
+    ;
+  method method() → dynamic
+    return this.{self::DynamicClass::field1}{self::DynamicClass::T*}{dynamic}.*(this.{self::DynamicClass::field2}{self::DynamicClass::T*});
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class NumClass<T extends core::num*, S extends self::NumClass::T* = core::num*> extends core::Object {
+  covariant-by-class field self::NumClass::T* field1;
+  covariant-by-class field self::NumClass::S* field2;
+  constructor •(self::NumClass::T* field1, self::NumClass::S* field2) → self::NumClass<self::NumClass::T*, self::NumClass::S*>*
+    : self::NumClass::field1 = field1, self::NumClass::field2 = field2, super core::Object::•()
+    ;
+  method method1() → core::num*
+    return this.{self::NumClass::field1}{self::NumClass::T*}.{core::num::*}(this.{self::NumClass::field2}{self::NumClass::S*}){(core::num*) →* core::num*};
+  method method2() → core::num*
+    return this.{self::NumClass::field1}{self::NumClass::T*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
+  num method2() => field1 + field2.length;
+                                   ^^^^^^" in this.{self::NumClass::field2}{self::NumClass::S*}{<unresolved>}.length as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class<X5 extends self::Class::X4* = core::int*, X4 extends self::Class::X3* = core::int*, X3 extends self::Class::X2* = core::int*, X2 extends self::Class::X1* = core::int*, X1 extends self::Class::X0* = core::int*, X0 extends core::int*> extends core::Object {
+  covariant-by-class field self::Class::X0* field0 = null;
+  covariant-by-class field self::Class::X1* field1 = null;
+  covariant-by-class field self::Class::X2* field2 = null;
+  covariant-by-class field self::Class::X3* field3 = null;
+  covariant-by-class field self::Class::X4* field4 = null;
+  covariant-by-class field self::Class::X5* field5 = null;
+  synthetic constructor •() → self::Class<self::Class::X5*, self::Class::X4*, self::Class::X3*, self::Class::X2*, self::Class::X1*, self::Class::X0*>*
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    this.{self::Class::field0}{self::Class::X0*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field1}{self::Class::X1*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field2}{self::Class::X2*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field3}{self::Class::X3*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field4}{self::Class::X4*}.{core::int::isEven}{core::bool*};
+    this.{self::Class::field5}{self::Class::X5*}.{core::int::isEven}{core::bool*};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::DynamicClass::•<core::num*, core::int*>(0.5, 2).{self::DynamicClass::method}(){() →* dynamic};
+  new self::NumClass::•<core::num*, core::double*>(2, 0.5).{self::NumClass::method1}(){() →* core::num*};
+}
diff --git a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.modular.expect
new file mode 100644
index 0000000..31bd8fe
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.modular.expect
@@ -0,0 +1,630 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:105:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   Extension(T t);
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   factory Extension.fact(T t) => null;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:113:5: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   T field1;
+//     ^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:130:3: Error: Mixins can't declare constructors.
+//   Mixin(T t);
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:3: Error: Mixins can't declare constructors.
+//   factory Mixin.fact(T t) => null;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:11: Error: Expected 0 type arguments.
+//   factory Extension.fact(T t) => null;
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:31: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//                               ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:44: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                                            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:57: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                                                         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:36: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:41: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//                                         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:36: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:41: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//                                         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:73:34: Error: Type variables can't be used in static members.
+//   @Class<void Function<S extends T>()>()
+//                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:74:34: Error: Type variables can't be used in static members.
+//   static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
+//                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:74:82: Error: Type variables can't be used in static members.
+//   static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
+//                                                                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:74:112: Error: Type variables can't be used in static members.
+//   static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
+//                                                                                                                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:36: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:36: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:34: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:10: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:54: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                                                      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:16: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:74: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                                                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:22: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:42: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:12: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:50: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//                                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:14: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:42: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:12: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:50: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//                                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:14: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:80:10: Error: Type variables can't be used in static members.
+//   static T field0;
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:83:16: Error: Type variables can't be used in static members.
+//   static Class<T>? field1;
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:110:10: Error: Type variables can't be used in static members.
+//   static T field0;
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:39: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:10: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:135:10: Error: Type variables can't be used in static members.
+//   static T field0;
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:39: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:10: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:92:24: Error: Type variables can't be used in static members.
+//   static var field4 = (T t) => T;
+//                        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:92:32: Error: Type variables can't be used in static members.
+//   static var field4 = (T t) => T;
+//                                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:12:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:19:10: Error: Type variables can't be used in static members.
+//   @Class<T>()
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:28:16: Error: Type variables can't be used in static members.
+//   @Class<Class<T>>()
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:37:6: Error: Type variables can't be used in static members.
+//   @A<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:46:8: Error: Type variables can't be used in static members.
+//   @A<A<T>>()
+//        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:55:6: Error: Type variables can't be used in static members.
+//   @B<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:64:8: Error: Type variables can't be used in static members.
+//   @A<B<T>>()
+//        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:79:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:82:10: Error: Type variables can't be used in static members.
+//   @Class<T>()
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:85:16: Error: Type variables can't be used in static members.
+//   @Class<Class<T>>()
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:88:6: Error: Type variables can't be used in static members.
+//   @A<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:91:6: Error: Type variables can't be used in static members.
+//   @B<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:94:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:97:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:109:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:112:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:115:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:122:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:134:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:137:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:144:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:147:4: Error: Couldn't find constructor 'T'.
+//   @T()
+//    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:14:5: Error: Type variables can't be used in static members.
+//     T? local;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:15:5: Error: Type variables can't be used in static members.
+//     T;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:16:24: Error: Type variables can't be used in static members.
+//     void fun<U extends T>() {}
+//                        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:21:11: Error: Type variables can't be used in static members.
+//     Class<T>? local;
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:22:15: Error: Type variables can't be used in static members.
+//     new Class<T>();
+//               ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:23:11: Error: Type variables can't be used in static members.
+//     Class<T>;
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:24:11: Error: Type variables can't be used in static members.
+//     Class<T>.new;
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:25:30: Error: Type variables can't be used in static members.
+//     void fun<U extends Class<T>>() {}
+//                              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:30:17: Error: Type variables can't be used in static members.
+//     Class<Class<T>>? local;
+//                 ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:31:21: Error: Type variables can't be used in static members.
+//     new Class<Class<T>>();
+//                     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:32:17: Error: Type variables can't be used in static members.
+//     Class<Class<T>>;
+//                 ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:33:17: Error: Type variables can't be used in static members.
+//     Class<Class<T>>.new;
+//                 ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:34:36: Error: Type variables can't be used in static members.
+//     void fun<U extends Class<Class<T>>>() {}
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:39:7: Error: Type variables can't be used in static members.
+//     A<T>? local;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:40:11: Error: Type variables can't be used in static members.
+//     new A<T>();
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:41:7: Error: Type variables can't be used in static members.
+//     A<T>;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:42:7: Error: Type variables can't be used in static members.
+//     A<T>.new;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:43:26: Error: Type variables can't be used in static members.
+//     void fun<U extends A<T>>() {}
+//                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:48:9: Error: Type variables can't be used in static members.
+//     A<A<T>>? local;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:49:13: Error: Type variables can't be used in static members.
+//     new A<A<T>>();
+//             ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:50:9: Error: Type variables can't be used in static members.
+//     A<A<T>>;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:51:9: Error: Type variables can't be used in static members.
+//     A<A<T>>.new;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:52:28: Error: Type variables can't be used in static members.
+//     void fun<U extends A<A<T>>>() {}
+//                            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:57:7: Error: Type variables can't be used in static members.
+//     B<T>? local;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:58:11: Error: Type variables can't be used in static members.
+//     new B<T>();
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:59:7: Error: Type variables can't be used in static members.
+//     B<T>;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:60:7: Error: Type variables can't be used in static members.
+//     B<T>.new;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:61:26: Error: Type variables can't be used in static members.
+//     void fun<U extends B<T>>() {}
+//                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:66:9: Error: Type variables can't be used in static members.
+//     A<B<T>>? local;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:67:13: Error: Type variables can't be used in static members.
+//     new A<B<T>>();
+//             ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:68:9: Error: Type variables can't be used in static members.
+//     A<B<T>>;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:69:9: Error: Type variables can't be used in static members.
+//     A<B<T>>.new;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:70:28: Error: Type variables can't be used in static members.
+//     void fun<U extends A<B<T>>>() {}
+//                            ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:75:29: Error: Type variables can't be used in static members.
+//     void Function<S extends T>()? local;
+//                             ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:76:48: Error: Type variables can't be used in static members.
+//     void fun<V extends void Function<S extends T>()>() {}
+//                                                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:86:24: Error: Type variables can't be used in static members.
+//   static Type field2 = T;
+//                        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:89:30: Error: Type variables can't be used in static members.
+//   static Type field3 = Class<T>;
+//                              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:117:5: Error: Type variables can't be used in static members.
+//     T? local;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:118:5: Error: Type variables can't be used in static members.
+//     T;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:119:24: Error: Type variables can't be used in static members.
+//     void fun<U extends T>() {}
+//                        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:30: Error: The value 'null' can't be returned from a function with return type 'Mixin<T>' because 'Mixin<T>' is not nullable.
+//  - 'Mixin' is from 'pkg/front_end/testcases/general/type_variable_in_static_context.dart'.
+//   factory Mixin.fact(T t) => null;
+//                              ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:139:5: Error: Type variables can't be used in static members.
+//     T? local;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:140:5: Error: Type variables can't be used in static members.
+//     T;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:141:24: Error: Type variables can't be used in static members.
+//     void fun<U extends T>() {}
+//                        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:95:12: Error: Final field 'instanceField' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final T? instanceField;
+//            ^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object? = dynamic> = self::Class<T%>;
+typedef B<T extends core::num> = self::Class<T>;
+class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:79:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  static field invalid-type field0 = null;
+  @#C2
+  static field self::Class<invalid-type>? field1 = null;
+  @#C3
+  static field core::Type field2 = #C4;
+  @#C2
+  static field core::Type field3 = #C5;
+  @#C2
+  static field (invalid-type) → core::Type field4 = (invalid-type t) → core::Type => #C4;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:94:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  final field self::Class::T? instanceField = null;
+  const constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:12:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  static method method0<S extends invalid-type>(invalid-type arg) → invalid-type {
+    invalid-type local;
+    #C4;
+    function fun<U extends invalid-type>() → void {}
+  }
+  @#C2
+  static method method1<S extends self::Class<invalid-type>>(self::Class<invalid-type> arg) → self::Class<invalid-type>? {
+    self::Class<invalid-type>? local;
+    new self::Class::•<invalid-type>();
+    #C5;
+    #C7;
+    function fun<U extends self::Class<invalid-type>>() → void {}
+  }
+  @#C3
+  static method method2<S extends self::Class<self::Class<invalid-type>>>(self::Class<self::Class<invalid-type>> arg) → self::Class<self::Class<invalid-type>>? {
+    self::Class<self::Class<invalid-type>>? local;
+    new self::Class::•<self::Class<invalid-type>>();
+    #C8;
+    #C9;
+    function fun<U extends self::Class<self::Class<invalid-type>>>() → void {}
+  }
+  @#C2
+  static method method3<S extends self::Class<invalid-type>>(self::Class<invalid-type> arg) → self::Class<invalid-type>? {
+    self::Class<invalid-type>? local;
+    new self::Class::•<invalid-type>();
+    #C5;
+    #C7;
+    function fun<U extends self::Class<invalid-type>>() → void {}
+  }
+  @#C3
+  static method method4<S extends self::Class<self::Class<invalid-type>>>(self::Class<self::Class<invalid-type>> arg) → self::Class<self::Class<invalid-type>>? {
+    self::Class<self::Class<invalid-type>>? local;
+    new self::Class::•<self::Class<invalid-type>>();
+    #C8;
+    #C9;
+    function fun<U extends self::Class<self::Class<invalid-type>>>() → void {}
+  }
+  @#C2
+  static method method5<S extends self::Class<invalid-type>>(self::Class<invalid-type> arg) → self::Class<invalid-type>? {
+    self::Class<invalid-type>? local;
+    new self::Class::•<invalid-type>();
+    #C5;
+    #C7;
+    function fun<U extends self::Class<invalid-type>>() → void {}
+  }
+  @#C3
+  static method method6<S extends self::Class<self::Class<invalid-type>>>(self::Class<self::Class<invalid-type>> arg) → self::Class<self::Class<invalid-type>>? {
+    self::Class<self::Class<invalid-type>>? local;
+    new self::Class::•<self::Class<invalid-type>>();
+    #C8;
+    #C9;
+    function fun<U extends self::Class<self::Class<invalid-type>>>() → void {}
+  }
+  @#C10
+  static method method7<U extends <S extends invalid-type = dynamic>() → void>(<S extends invalid-type = dynamic>() → void arg) → <S extends invalid-type = dynamic>() →? void {
+    <S extends invalid-type>() →? void local;
+    function fun<V extends <S extends invalid-type>() → void>() → void {}
+  }
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:97:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  method instanceMethod<covariant-by-class S extends self::Class::T%>(covariant-by-class self::Class::T% t) → self::Class::T% {
+    self::Class::T%;
+    return t;
+  }
+}
+abstract class Mixin<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:134:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  static field invalid-type field0 = null;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:144:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  covariant-by-class field self::Mixin::T? instanceField = null;
+  constructor •(invalid-type t) → self::Mixin<self::Mixin::T%>
+    : super core::Object::•()
+    ;
+  static factory fact<T extends core::Object? = dynamic>(self::Mixin::fact::T% t) → self::Mixin<self::Mixin::fact::T%>
+    return invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:30: Error: The value 'null' can't be returned from a function with return type 'Mixin<T>' because 'Mixin<T>' is not nullable.
+ - 'Mixin' is from 'pkg/front_end/testcases/general/type_variable_in_static_context.dart'.
+  factory Mixin.fact(T t) => null;
+                             ^" in null as{TypeError,ForNonNullableByDefault} Never;
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:137:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  static method staticMethod<S extends invalid-type>(invalid-type arg) → invalid-type {
+    invalid-type local;
+    #C4;
+    function fun<U extends invalid-type>() → void {}
+  }
+  @invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:147:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+  method instanceMethod<covariant-by-class S extends self::Mixin::T%>(covariant-by-class self::Mixin::T% t) → self::Mixin::T% {
+    self::Mixin::T%;
+    return t;
+  }
+}
+extension Extension<T extends core::Object? = dynamic> on T% {
+  static field field0 = self::Extension|field0;
+  field field1 = self::Extension|field1;
+  static method staticMethod = self::Extension|staticMethod;
+  method instanceMethod = self::Extension|instanceMethod;
+  tearoff instanceMethod = self::Extension|get#instanceMethod;
+}
+@invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:109:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+static field invalid-type Extension|field0;
+@invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:112:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+static field invalid-type Extension|field1;
+@invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:115:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+static method Extension|staticMethod<S extends invalid-type>(invalid-type arg) → invalid-type {
+  invalid-type local;
+  #C4;
+  function fun<U extends invalid-type>() → void {}
+}
+@invalid-expression "pkg/front_end/testcases/general/type_variable_in_static_context.dart:122:4: Error: Couldn't find constructor 'T'.
+  @T()
+   ^"
+static method Extension|instanceMethod<T extends core::Object? = dynamic, S extends self::Extension|instanceMethod::T% = dynamic>(lowered final self::Extension|instanceMethod::T% #this, self::Extension|instanceMethod::T% t) → self::Extension|instanceMethod::T% {
+  self::Extension|instanceMethod::T%;
+  return t;
+}
+static method Extension|get#instanceMethod<T extends core::Object? = dynamic>(lowered final self::Extension|get#instanceMethod::T% #this) → <S extends self::Extension|get#instanceMethod::T% = dynamic>(self::Extension|get#instanceMethod::T%) → self::Extension|get#instanceMethod::T%
+  return <S extends self::Extension|get#instanceMethod::T% = dynamic>(self::Extension|get#instanceMethod::T% t) → self::Extension|get#instanceMethod::T% => self::Extension|instanceMethod<self::Extension|get#instanceMethod::T%, S%>(#this, t);
+static method main() → dynamic {}
+static method _#B#new#tearOff<T extends core::num>() → self::Class<self::_#B#new#tearOff::T>
+  return new self::Class::•<self::_#B#new#tearOff::T>();
+
+constants  {
+  #C1 = null
+  #C2 = self::Class<invalid-type> {instanceField:#C1}
+  #C3 = self::Class<self::Class<invalid-type>*> {instanceField:#C1}
+  #C4 = TypeLiteralConstant(invalid-type)
+  #C5 = TypeLiteralConstant(self::Class<invalid-type>*)
+  #C6 = constructor-tearoff self::Class::•
+  #C7 = instantiation #C6 <invalid-type>
+  #C8 = TypeLiteralConstant(self::Class<self::Class<invalid-type>*>*)
+  #C9 = instantiation #C6 <self::Class<invalid-type>*>
+  #C10 = self::Class<<S extends invalid-type>() →* void> {instanceField:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///type_variable_in_static_context.dart:
+- Class. (from org-dartlang-testcase:///type_variable_in_static_context.dart:10:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.modular.expect
new file mode 100644
index 0000000..20eabce
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_prefix.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_variable_prefix.dart:10:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
+//   T.String method() => "Hello, World!";
+//   ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:core" as T;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method method() → invalid-type
+    return "Hello, World!";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::String* s = new self::C::•<dynamic>().{self::C::method}(){() →* invalid-type};
+  core::print(s);
+}
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.modular.expect
new file mode 100644
index 0000000..4fbbbaa
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.weak.modular.expect
@@ -0,0 +1,120 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:7:12: Error: Type variables can't be used in static members.
+//   static C<T> staticMethod() {
+//            ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:8:11: Error: Type variables can't be used in static members.
+//     print(T);
+//           ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:9:5: Error: Type variables can't be used in static members.
+//     T t;
+//     ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:10:7: Error: Type variables can't be used in static members.
+//     C<T> l;
+//       ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:11:9: Error: Type variables can't be used in static members.
+//     C<C<T>> ll;
+//         ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:12:13: Error: Type variables can't be used in static members.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:13:12: Error: Type variables can't be used in static members.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:14:14: Error: Type variables can't be used in static members.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:15:20: Error: Type variables can't be used in static members.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:16:28: Error: Type variables can't be used in static members.
+//     const <Object>[const C<T>()];
+//                            ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:24:13: Error: Type variables can't be used as constants.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:25:12: Error: Type variables can't be used as constants.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:26:14: Error: Type variables can't be used as constants.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:27:20: Error: Type variables can't be used as constants.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/general/type_variable_uses.dart:28:28: Error: Type variables can't be used as constants.
+//     const <Object>[const C<T>()];
+//                            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  static method staticMethod() → self::C<invalid-type>* {
+    core::print(#C1);
+    invalid-type t;
+    self::C<invalid-type>* l;
+    self::C<self::C<invalid-type>*>* ll;
+    #C2;
+    #C3;
+    #C4;
+    #C5;
+    #C6;
+  }
+  method instanceMethod() → self::C<self::C::T*>* {
+    core::print(self::C::T*);
+    self::C::T* t;
+    self::C<self::C::T*>* l;
+    self::C<self::C<self::C::T*>*>* ll;
+    #C2;
+    #C3;
+    #C4;
+    #C5;
+    #C6;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(invalid-type)
+  #C2 = self::C<invalid-type> {}
+  #C3 = <invalid-type>[]
+  #C4 = <self::C<invalid-type>*>[]
+  #C5 = <core::Object*>[#C1]
+  #C6 = <core::Object*>[#C2]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///type_variable_uses.dart:
+- C. (from org-dartlang-testcase:///type_variable_uses.dart:6:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/typedef.dart.weak.modular.expect b/pkg/front_end/testcases/general/typedef.dart.weak.modular.expect
new file mode 100644
index 0000000..2b36abf
--- /dev/null
+++ b/pkg/front_end/testcases/general/typedef.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef _NullaryFunction = () →* dynamic;
+typedef _UnaryFunction = (dynamic) →* dynamic;
+typedef _BinaryFunction = (dynamic, dynamic) →* dynamic;
+static method main() → dynamic {
+  core::print(#C1 is () →* dynamic);
+  core::print(#C1 is (dynamic) →* dynamic);
+  core::print(#C1 is (dynamic, dynamic) →* dynamic);
+}
+
+constants  {
+  #C1 = static-tearoff self::main
+}
diff --git a/pkg/front_end/testcases/general/typedef_annotation.dart.weak.modular.expect b/pkg/front_end/testcases/general/typedef_annotation.dart.weak.modular.expect
new file mode 100644
index 0000000..3c94843
--- /dev/null
+++ b/pkg/front_end/testcases/general/typedef_annotation.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+@#C1
+typedef F = () → void;
+@#C1
+typedef G = () → void;
+class A extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::A {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///typedef_annotation.dart:
+- A. (from org-dartlang-testcase:///typedef_annotation.dart:6:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/undefined.dart.weak.modular.expect b/pkg/front_end/testcases/general/undefined.dart.weak.modular.expect
new file mode 100644
index 0000000..0c68639
--- /dev/null
+++ b/pkg/front_end/testcases/general/undefined.dart.weak.modular.expect
@@ -0,0 +1,63 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/undefined.dart:12:5: Error: The getter 'y' isn't defined for the class 'C'.
+//  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'y'.
+//   c.y;
+//     ^
+//
+// pkg/front_end/testcases/general/undefined.dart:14:5: Error: The method 'g' isn't defined for the class 'C'.
+//  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'g'.
+//   c.g();
+//     ^
+//
+// pkg/front_end/testcases/general/undefined.dart:16:5: Error: The setter 'y' isn't defined for the class 'C'.
+//  - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'y'.
+//   c.y = null;
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field dynamic x = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test(self::C* c) → void {
+  c.{self::C::x}{dynamic};
+  invalid-expression "pkg/front_end/testcases/general/undefined.dart:12:5: Error: The getter 'y' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'y'.
+  c.y;
+    ^" in c{<unresolved>}.y;
+  c.{self::C::f}(){() →* void};
+  invalid-expression "pkg/front_end/testcases/general/undefined.dart:14:5: Error: The method 'g' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'g'.
+  c.g();
+    ^" in c{<unresolved>}.g();
+  c.{self::C::x} = null;
+  invalid-expression "pkg/front_end/testcases/general/undefined.dart:16:5: Error: The setter 'y' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/undefined.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'y'.
+  c.y = null;
+    ^" in c{<unresolved>}.y = null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.modular.expect b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.modular.expect
new file mode 100644
index 0000000..fdcdf1e
--- /dev/null
+++ b/pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:11:5: Error: The getter 'x' isn't defined for the class 'C'.
+//  - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
+//   c.x += 1;
+//     ^
+//
+// pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:12:5: Error: The getter 'x' isn't defined for the class 'C'.
+//  - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
+//   c.x ??= 1;
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  set x(dynamic value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test(self::C* c) → void {
+  c.{self::C::x} = 1;
+  let final self::C* #t1 = c in #t1.{self::C::x} = invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:11:5: Error: The getter 'x' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
+  c.x += 1;
+    ^" in #t1{<unresolved>}.x{dynamic}.+(1);
+  let final self::C* #t2 = c in invalid-expression "pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart:12:5: Error: The getter 'x' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/general/undefined_getter_in_compound_assignment.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
+  c.x ??= 1;
+    ^" in #t2{<unresolved>}.x == null ?{dynamic} #t2.{self::C::x} = 1 : null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.modular.expect b/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.modular.expect
new file mode 100644
index 0000000..66c109b
--- /dev/null
+++ b/pkg/front_end/testcases/general/uninitialized_fields.dart.weak.modular.expect
@@ -0,0 +1,77 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Uninitialized extends core::Object {
+  field core::int* x = null;
+  synthetic constructor •() → self::Uninitialized*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class PartiallyInitialized extends core::Object {
+  field core::int* x;
+  constructor •(core::int* x) → self::PartiallyInitialized*
+    : self::PartiallyInitialized::x = x, super core::Object::•()
+    ;
+  constructor noInitializer() → self::PartiallyInitialized*
+    : self::PartiallyInitialized::x = null, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Initialized extends core::Object {
+  field core::int* x;
+  constructor •(core::int* x) → self::Initialized*
+    : self::Initialized::x = x, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Forwarding extends core::Object {
+  field core::int* x;
+  constructor initialize(core::int* x) → self::Forwarding*
+    : self::Forwarding::x = x, super core::Object::•()
+    ;
+  constructor •(core::int* arg) → self::Forwarding*
+    : this self::Forwarding::initialize(arg)
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* uninitializedTopLevel;
+static field core::int* initializedTopLevel = 4;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.weak.modular.expect
new file mode 100644
index 0000000..63b12b9
--- /dev/null
+++ b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.weak.modular.expect
@@ -0,0 +1,866 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:14:26: Error: Superclass has no constructor named 'Super'.
+//   Class.constructor1() : super();
+//                          ^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:15:26: Error: Superclass has no constructor named 'Super.unresolved'.
+//   Class.constructor2() : super.unresolved();
+//                          ^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:16:26: Error: Couldn't find constructor 'Class'.
+//   Class.constructor3() : this();
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:17:26: Error: Couldn't find constructor 'Class.unresolved'.
+//   Class.constructor4() : this.unresolved();
+//                          ^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:25:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:26:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:27:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:29:3: Error: Undefined name 'UnresolvedClass'.
+//   UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:30:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   new UnresolvedClass.unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:31:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   const UnresolvedClass.unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:32:3: Error: Undefined name 'UnresolvedClass'.
+//   UnresolvedClass /**/ .unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:33:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   new UnresolvedClass. /**/ unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:34:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   const UnresolvedClass /**/ .unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:36:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:37:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:38:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:39:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix. /**/ UnresolvedClass();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:40:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix /**/ .UnresolvedClass();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:41:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix. /**/ UnresolvedClass();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:43:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:44:41: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                                         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:45:43: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:46:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:47:47: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+//                                               ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:48:55: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+//                                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:50:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:51:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:52:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:53:3: Error: Method not found: 'UnresolvedClass'.
+//   UnresolvedClass /**/ <int>();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:54:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int> /**/ ();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:55:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass /**/ <int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:57:3: Error: Couldn't find constructor 'UnresolvedClass'.
+//   UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:58:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int>.unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:59:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>.unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:60:3: Error: Couldn't find constructor 'UnresolvedClass'.
+//   UnresolvedClass /**/ <int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:61:7: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new UnresolvedClass<int> /**/ .unresolvedConstructor();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:62:9: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const UnresolvedClass<int>. /**/ unresolvedConstructor();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:64:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:65:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass<int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:66:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass<int>();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:67:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:68:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   new unresolved_prefix.UnresolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:69:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+//   const unresolved_prefix.UnresolvedClass<int> /**/ ();
+//         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:71:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:71:42: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:72:46: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                              ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:73:48: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:74:3: Error: Undefined name 'unresolved_prefix'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//   ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:74:48: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+//   unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:75:52: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+//                                                    ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:76:54: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+//   const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+//                                                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:78:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:79:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:80:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:82:17: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass.unresolvedConstructor();
+//                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:83:21: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass.unresolvedConstructor();
+//                     ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:84:23: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:85:23: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:86:27: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass. /**/ unresolvedConstructor();
+//                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:87:29: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass /**/ .unresolvedConstructor();
+//                             ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:89:19: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:90:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:91:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:92:25: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix. /**/ UnresolvedClass();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:93:29: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix /**/ .UnresolvedClass();
+//                             ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:94:31: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix. /**/ UnresolvedClass();
+//                               ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:96:19: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix.ResolvedClass();
+//                   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:97:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:98:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:99:25: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix. /**/ ResolvedClass();
+//                         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:100:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix /**/ .ResolvedClass();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:101:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix. /**/ ResolvedClass();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:103:19: Error: Undefined name 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:104:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:105:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:106:25: Error: Undefined name 'UnresolvedClass'.
+//   resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:107:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:108:31: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+//                               ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:110:33: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                 ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:111:37: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                     ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:112:39: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix.ResolvedClass.unresolvedConstructor();
+//                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:113:39: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+//                                       ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:114:43: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+//                                           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:115:51: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+//                                                   ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:117:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass<int>();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:118:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass<int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:119:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass<int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:120:3: Error: Couldn't find constructor 'ResolvedClass'.
+//   ResolvedClass /**/ <int>();
+//   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:121:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new ResolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:122:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const ResolvedClass /**/ <int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:124:22: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass<int>.unresolvedConstructor();
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:125:26: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass<int>.unresolvedConstructor();
+//                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:126:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass<int>.unresolvedConstructor();
+//                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:127:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   ResolvedClass<int> /**/ .unresolvedConstructor();
+//                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:128:32: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new ResolvedClass<int>. /**/ unresolvedConstructor();
+//                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:129:34: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const ResolvedClass /**/ <int>.unresolvedConstructor();
+//                                  ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:131:19: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass<int>();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:132:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int>();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:133:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int>();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:134:25: Error: Method not found: 'UnresolvedClass'.
+//   resolved_prefix. /**/ UnresolvedClass<int>();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:135:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass /**/ <int>();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:136:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int> /**/ ();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:138:19: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix.ResolvedClass<int>();
+//                   ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:139:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass<int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:140:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass<int>();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:141:25: Error: Couldn't find constructor 'ResolvedClass'.
+//   resolved_prefix. /**/ ResolvedClass<int>();
+//                         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:142:7: Error: Couldn't find constructor 'ResolvedClass'.
+//   new resolved_prefix.ResolvedClass /**/ <int>();
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:143:9: Error: Couldn't find constructor 'ResolvedClass'.
+//   const resolved_prefix.ResolvedClass<int> /**/ ();
+//         ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:145:19: Error: Couldn't find constructor 'UnresolvedClass'.
+//   resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:146:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:147:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:148:25: Error: Couldn't find constructor 'UnresolvedClass'.
+//   resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:149:23: Error: Couldn't find constructor 'UnresolvedClass'.
+//   new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+//                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:151:14: Error: Couldn't find constructor 'UnresolvedClass'.
+//       . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+//              ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:153:38: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:154:42: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:155:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+//                                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:156:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+//                                            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:157:48: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+//                                                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:158:56: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+//   const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+//                                                        ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///unresolved_constructor_invocation.dart" as resolved_prefix;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Class extends self::Super {
+  constructor constructor1() → self::Class
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:14:26: Error: Superclass has no constructor named 'Super'.
+  Class.constructor1() : super();
+                         ^^^^^"
+    ;
+  constructor constructor2() → self::Class
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:15:26: Error: Superclass has no constructor named 'Super.unresolved'.
+  Class.constructor2() : super.unresolved();
+                         ^^^^^"
+    ;
+  constructor constructor3() → self::Class
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:16:26: Error: Couldn't find constructor 'Class'.
+  Class.constructor3() : this();
+                         ^^^^"
+    ;
+  constructor constructor4() → self::Class
+    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:17:26: Error: Couldn't find constructor 'Class.unresolved'.
+  Class.constructor4() : this.unresolved();
+                         ^^^^"
+    ;
+}
+class ResolvedClass<T extends core::Object? = dynamic> extends core::Object {
+  constructor named() → self::ResolvedClass<self::ResolvedClass::T%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:25:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:26:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:27:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:29:3: Error: Undefined name 'UnresolvedClass'.
+  UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:30:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  new UnresolvedClass.unresolvedConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:31:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  const UnresolvedClass.unresolvedConstructor();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:32:3: Error: Undefined name 'UnresolvedClass'.
+  UnresolvedClass /**/ .unresolvedConstructor();
+  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:33:7: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  new UnresolvedClass. /**/ unresolvedConstructor();
+      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:34:9: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  const UnresolvedClass /**/ .unresolvedConstructor();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:36:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:37:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:38:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:39:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix. /**/ UnresolvedClass();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:40:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix /**/ .UnresolvedClass();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:41:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix. /**/ UnresolvedClass();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:43:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:44:41: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+                                        ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:45:43: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass.unresolvedConstructor();
+                                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:46:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^^^"{<invalid>}.UnresolvedClass{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:47:47: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+                                              ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:48:55: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+                                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:50:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:51:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:52:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:53:3: Error: Method not found: 'UnresolvedClass'.
+  UnresolvedClass /**/ <int>();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:54:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int> /**/ ();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:55:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass /**/ <int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:57:3: Error: Couldn't find constructor 'UnresolvedClass'.
+  UnresolvedClass<int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:58:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int>.unresolvedConstructor();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:59:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>.unresolvedConstructor();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:60:3: Error: Couldn't find constructor 'UnresolvedClass'.
+  UnresolvedClass /**/ <int>.unresolvedConstructor();
+  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:61:7: Error: Couldn't find constructor 'UnresolvedClass'.
+  new UnresolvedClass<int> /**/ .unresolvedConstructor();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:62:9: Error: Couldn't find constructor 'UnresolvedClass'.
+  const UnresolvedClass<int>. /**/ unresolvedConstructor();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:64:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix.UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:65:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass<int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:66:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass<int>();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:67:3: Error: Undefined name 'unresolved_prefix'.
+  unresolved_prefix /**/ .UnresolvedClass<int>();
+  ^^^^^^^^^^^^^^^^^"{dynamic}.UnresolvedClass<core::int>();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:68:7: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  new unresolved_prefix.UnresolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:69:9: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass'.
+  const unresolved_prefix.UnresolvedClass<int> /**/ ();
+        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:71:42: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:72:46: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                             ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:73:48: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:74:48: Error: Couldn't find constructor 'UnresolvedClass.unresolvedConstructor'.
+  unresolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:75:52: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  new unresolved_prefix.UnresolvedClass /**/ <int>.unresolvedConstructor();
+                                                   ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:76:54: Error: Couldn't find constructor 'unresolved_prefix.UnresolvedClass.unresolvedConstructor'.
+  const unresolved_prefix.UnresolvedClass<int>. /**/ unresolvedConstructor();
+                                                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:78:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:79:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:80:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:82:17: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass.unresolvedConstructor();
+                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:83:21: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass.unresolvedConstructor();
+                    ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:84:23: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:85:23: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:86:27: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass. /**/ unresolvedConstructor();
+                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:87:29: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass /**/ .unresolvedConstructor();
+                            ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:89:19: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:90:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:91:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:92:25: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix. /**/ UnresolvedClass();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:93:29: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix /**/ .UnresolvedClass();
+                            ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:94:31: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix. /**/ UnresolvedClass();
+                              ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:96:19: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix.ResolvedClass();
+                  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:97:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:98:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:99:25: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix. /**/ ResolvedClass();
+                        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:100:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix /**/ .ResolvedClass();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:101:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix. /**/ ResolvedClass();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:103:19: Error: Undefined name 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                  ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:104:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:105:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:106:25: Error: Undefined name 'UnresolvedClass'.
+  resolved_prefix /**/ .UnresolvedClass.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^"{dynamic}.unresolvedConstructor();
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:107:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:108:31: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix. /**/ UnresolvedClass. /**/ unresolvedConstructor();
+                              ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:110:33: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:111:37: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                    ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:112:39: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix.ResolvedClass.unresolvedConstructor();
+                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:113:39: Error: Member not found: 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix /**/ .ResolvedClass.unresolvedConstructor();
+                                      ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:114:43: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass /**/ .unresolvedConstructor();
+                                          ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:115:51: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix. /**/ ResolvedClass. /**/ unresolvedConstructor();
+                                                  ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:117:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass<int>();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:118:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass<int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:119:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass<int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:120:3: Error: Couldn't find constructor 'ResolvedClass'.
+  ResolvedClass /**/ <int>();
+  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:121:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new ResolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:122:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const ResolvedClass /**/ <int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:124:22: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass<int>.unresolvedConstructor();
+                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:125:26: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass<int>.unresolvedConstructor();
+                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:126:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass<int>.unresolvedConstructor();
+                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:127:28: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  ResolvedClass<int> /**/ .unresolvedConstructor();
+                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:128:32: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new ResolvedClass<int>. /**/ unresolvedConstructor();
+                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:129:34: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const ResolvedClass /**/ <int>.unresolvedConstructor();
+                                 ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:131:19: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass<int>();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:132:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int>();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:133:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int>();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:134:25: Error: Method not found: 'UnresolvedClass'.
+  resolved_prefix. /**/ UnresolvedClass<int>();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:135:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass /**/ <int>();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:136:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int> /**/ ();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:138:19: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix.ResolvedClass<int>();
+                  ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:139:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass<int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:140:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass<int>();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:141:25: Error: Couldn't find constructor 'ResolvedClass'.
+  resolved_prefix. /**/ ResolvedClass<int>();
+                        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:142:7: Error: Couldn't find constructor 'ResolvedClass'.
+  new resolved_prefix.ResolvedClass /**/ <int>();
+      ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:143:9: Error: Couldn't find constructor 'ResolvedClass'.
+  const resolved_prefix.ResolvedClass<int> /**/ ();
+        ^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:145:19: Error: Couldn't find constructor 'UnresolvedClass'.
+  resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                  ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:146:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:147:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  const resolved_prefix.UnresolvedClass<int>.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:148:25: Error: Couldn't find constructor 'UnresolvedClass'.
+  resolved_prefix /**/ .UnresolvedClass<int>.unresolvedConstructor();
+                        ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:149:23: Error: Couldn't find constructor 'UnresolvedClass'.
+  new resolved_prefix.UnresolvedClass<int> /**/ .unresolvedConstructor();
+                      ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:151:14: Error: Couldn't find constructor 'UnresolvedClass'.
+      . /**/ UnresolvedClass<int>. /**/ unresolvedConstructor();
+             ^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:153:38: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                     ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:154:42: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                         ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:155:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix.ResolvedClass<int>.unresolvedConstructor();
+                                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:156:44: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  resolved_prefix /**/ .ResolvedClass<int>.unresolvedConstructor();
+                                           ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:157:48: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  new resolved_prefix.ResolvedClass<int> /**/ .unresolvedConstructor();
+                                               ^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:158:56: Error: Couldn't find constructor 'ResolvedClass.unresolvedConstructor'.
+  const resolved_prefix. /**/ ResolvedClass<int>. /**/ unresolvedConstructor();
+                                                       ^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/unresolved_prefix_access.dart.weak.modular.expect b/pkg/front_end/testcases/general/unresolved_prefix_access.dart.weak.modular.expect
new file mode 100644
index 0000000..a7f4e10
--- /dev/null
+++ b/pkg/front_end/testcases/general/unresolved_prefix_access.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/unresolved_prefix_access.dart:8:10: Error: Method not found: 'unresolved'.
+//   prefix.unresolved();
+//          ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/unresolved_prefix_access.dart:9:3: Error: A prefix can't be used with null-aware operators.
+// Try replacing '?.' with '.'
+//   prefix?.test();
+//   ^^^^^^
+//
+import self as self;
+
+import "org-dartlang-testcase:///unresolved_prefix_access.dart" as prefix;
+
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/unresolved_prefix_access.dart:8:10: Error: Method not found: 'unresolved'.
+  prefix.unresolved();
+         ^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/unresolved_prefix_access.dart:9:3: Error: A prefix can't be used with null-aware operators.
+Try replacing '?.' with '.'
+  prefix?.test();
+  ^^^^^^" in self::test();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/unsound_promotion.dart.weak.modular.expect b/pkg/front_end/testcases/general/unsound_promotion.dart.weak.modular.expect
new file mode 100644
index 0000000..e5a07f2
--- /dev/null
+++ b/pkg/front_end/testcases/general/unsound_promotion.dart.weak.modular.expect
@@ -0,0 +1,72 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/unsound_promotion.dart:21:16: Error: Inferred type argument 'S' doesn't conform to the bound 'A' of the type variable 'T' on 'g'.
+//  - 'A' is from 'pkg/front_end/testcases/general/unsound_promotion.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     var list = g(s);
+//                ^
+// pkg/front_end/testcases/general/unsound_promotion.dart:13:11: Context: This is the type variable whose bound isn't conformed to.
+// List<T> g<T extends A>(T t) {
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B implements self::A {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+static field core::List<self::A*>* list;
+static method g<T extends self::A*>(self::g::T* t) → core::List<self::g::T*>* {
+  self::list = <self::g::T*>[];
+  core::print(self::list.{core::Object::runtimeType}{core::Type*});
+  return self::list as{TypeError} core::List<self::g::T*>*;
+}
+static method f<S extends core::Object* = dynamic>(self::f::S* s) → core::List<self::f::S*>* {
+  if(s is self::A*) {
+    core::List<self::f::S*>* list = self::g<self::f::S*>(s{self::f::S* & self::A* /* '*' & '*' = '*' */});
+    return list;
+  }
+  return null;
+}
+static method main() → dynamic {
+  self::f<self::B*>(new self::C::•());
+  core::print(self::list.{core::Object::runtimeType}{core::Type*});
+  core::List<self::A*>* aList;
+  aList = self::list;
+  core::Object* o = aList;
+  aList = o as{TypeError} core::List<self::A*>*;
+}
diff --git a/pkg/front_end/testcases/general/unused_methods.dart.weak.modular.expect b/pkg/front_end/testcases/general/unused_methods.dart.weak.modular.expect
new file mode 100644
index 0000000..060120a
--- /dev/null
+++ b/pkg/front_end/testcases/general/unused_methods.dart.weak.modular.expect
@@ -0,0 +1,126 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class UnusedClass extends core::Object {
+  constructor •() → self::UnusedClass*
+    : super core::Object::•() {
+    core::print("Unused");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class UsedAsBaseClass extends core::Object {
+  synthetic constructor •() → self::UsedAsBaseClass*
+    : super core::Object::•()
+    ;
+  method usedInSubclass() → void {
+    core::print("Unused");
+  }
+  method calledFromB() → void {
+    this.{self::UsedAsBaseClass::calledFromSubclass}(){() →* void};
+  }
+  method calledFromSubclass() → void {
+    core::print("Unused");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class UsedAsInterface extends core::Object {
+  synthetic constructor •() → self::UsedAsInterface*
+    : super core::Object::•()
+    ;
+  method usedInSubclass() → void {
+    core::print("Unused");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class InstantiatedButMethodsUnused extends core::Object {
+  synthetic constructor •() → self::InstantiatedButMethodsUnused*
+    : super core::Object::•()
+    ;
+  method usedInSubclass() → void {
+    core::print("Unused");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class ClassA extends self::UsedAsBaseClass implements self::UsedAsInterface, self::InstantiatedButMethodsUnused {
+  synthetic constructor •() → self::ClassA*
+    : super self::UsedAsBaseClass::•()
+    ;
+  method usedInSubclass() → void {
+    core::print("A");
+  }
+}
+class ClassB extends self::UsedAsBaseClass implements self::UsedAsInterface, self::InstantiatedButMethodsUnused {
+  synthetic constructor •() → self::ClassB*
+    : super self::UsedAsBaseClass::•()
+    ;
+  method usedInSubclass() → void {
+    core::print("B");
+    this.{self::UsedAsBaseClass::calledFromB}(){() →* void};
+  }
+  method calledFromSubclass() → void {}
+}
+static method baseClassCall(self::UsedAsBaseClass* object) → void {
+  object.{self::UsedAsBaseClass::usedInSubclass}(){() →* void};
+}
+static method interfaceCall(self::UsedAsInterface* object) → void {
+  object.{self::UsedAsInterface::usedInSubclass}(){() →* void};
+}
+static method exactCallA(self::ClassA* object) → void {
+  object.{self::ClassA::usedInSubclass}(){() →* void};
+}
+static method exactCallB(self::ClassB* object) → void {
+  object.{self::ClassB::usedInSubclass}(){() →* void};
+}
+static method unusedTopLevel() → dynamic {
+  core::print("Unused");
+}
+static method usedTopLevel() → dynamic {}
+static method main() → dynamic {
+  self::usedTopLevel();
+  self::ClassA* a = new self::ClassA::•();
+  self::exactCallA(a);
+  self::baseClassCall(a);
+  self::interfaceCall(a);
+  self::ClassB* b = new self::ClassB::•();
+  self::exactCallB(b);
+  self::baseClassCall(b);
+  self::interfaceCall(b);
+  new self::InstantiatedButMethodsUnused::•();
+}
diff --git a/pkg/front_end/testcases/general/var_as_type_name.dart.weak.modular.expect b/pkg/front_end/testcases/general/var_as_type_name.dart.weak.modular.expect
new file mode 100644
index 0000000..4673e3d
--- /dev/null
+++ b/pkg/front_end/testcases/general/var_as_type_name.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Error: The keyword 'var' can't be used as a type name.
+//   Map<String, var> m;
+//               ^^^
+//
+// pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Error: Type 'var' not found.
+//   Map<String, var> m;
+//               ^^^
+//
+// pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Error: 'var' isn't a type.
+//   Map<String, var> m;
+//               ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::Map<core::String*, invalid-type>* m = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::A* a = new self::A::•();
+  a.{self::A::m} = null;
+}
diff --git a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.modular.expect b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.modular.expect
new file mode 100644
index 0000000..47d6412f
--- /dev/null
+++ b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.modular.expect
@@ -0,0 +1,127 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A<core::String*> {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C<T1 extends core::Object* = dynamic, T2 extends core::Object* = dynamic, T3 extends core::Object* = dynamic> extends self::B {
+  synthetic constructor •() → self::C<self::C::T1*, self::C::T2*, self::C::T3*>*
+    : super self::B::•()
+    ;
+}
+class D<P extends core::Object* = dynamic, Q extends core::Object* = dynamic> extends self::C<core::int*, self::D::Q*, self::D::P*> {
+  covariant-by-class field core::Map<self::D::P*, self::D::Q*>* foo;
+  constructor •(dynamic tt) → self::D<self::D::P*, self::D::Q*>*
+    : self::D::foo = tt as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*, super self::C::•()
+    ;
+  method foo2(dynamic y) → dynamic {
+    if(y is self::A<self::D::P*>*) {
+      core::print("21");
+    }
+    if(y is self::C<dynamic, self::D::Q*, core::List<self::D::P*>*>*) {
+      core::print("22");
+    }
+    this.{self::D::foo} = y as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*;
+  }
+  method foo3<T1 extends core::Object* = dynamic, T2 extends core::Object* = dynamic>(dynamic z) → dynamic {
+    if(z is self::A<self::D::foo3::T1*>*) {
+      core::print("31");
+    }
+    if(z is self::C<core::Map<self::D::foo3::T1*, self::D::P*>*, core::List<self::D::foo3::T2*>*, self::D::Q*>*) {
+      core::print("32");
+    }
+    return (z as core::Map<self::D::foo3::T2*, self::D::Q*>*).{core::Map::values}{core::Iterable<self::D::Q*>*};
+  }
+  method foo4(dynamic w) → core::Map<self::D::P*, self::D::Q*>* {
+    core::List<core::Map<self::D::P*, self::D::Q*>*>* list = <core::Map<self::D::P*, self::D::Q*>*>[w as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*];
+    return w as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*;
+  }
+}
+class E<P extends core::String*> extends core::Object {
+  static factory •<P extends core::String*>() → self::E<self::E::•::P*>*
+    return null;
+  method foo6<covariant-by-class T extends self::E::P*, U extends core::List<self::E::foo6::T*>* = core::List<self::E::P*>*>(core::Map<self::E::foo6::T*, self::E::foo6::U*>* map) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class F<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::F<self::F::T*>*
+    : super core::Object::•()
+    ;
+  abstract method foo7<covariant-by-class Q extends self::F::T*>(self::F::foo7::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::F::T* c) → void;
+  abstract method foo8<covariant-by-class Q extends self::F::T*>(self::F::foo8::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::F::T* c) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class G<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::G<self::G::T*>*
+    : super core::Object::•()
+    ;
+  method foo7<covariant-by-class Q extends self::G::T*>(self::G::foo7::Q* a, core::int* b, covariant-by-class self::G::T* c) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class H<T extends core::Object* = dynamic> extends self::G<self::H::T*> implements self::F<self::H::T*> {
+  synthetic constructor •() → self::H<self::H::T*>*
+    : super self::G::•()
+    ;
+  method foo8<covariant-by-class Q extends self::H::T*>(self::H::foo8::Q* a, covariant-by-declaration core::int* b, covariant-by-class self::H::T* c) → void {}
+  forwarding-stub method foo7<covariant-by-class Q extends self::H::T*>(self::H::foo7::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::H::T* c) → void
+    return super.{self::G::foo7}<self::H::foo7::Q*>(a, b as core::int*, c);
+}
+static field core::List<core::Iterable<dynamic>*>* globalVar;
+static method foo1(dynamic x) → dynamic {
+  if(x is self::B*) {
+    core::print("11");
+  }
+  if(x is self::C<core::int*, core::Object*, dynamic>*) {
+    core::print("12");
+  }
+  return x as self::A<core::int*>*;
+}
+static method foo5(dynamic x) → void {
+  self::globalVar = x as{TypeError,ForDynamic} core::List<core::Iterable<dynamic>*>*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/void_methods.dart.weak.modular.expect b/pkg/front_end/testcases/general/void_methods.dart.weak.modular.expect
new file mode 100644
index 0000000..dff46ae
--- /dev/null
+++ b/pkg/front_end/testcases/general/void_methods.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  field core::List<dynamic>* list = <dynamic>[1, 2, 3];
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  set first(dynamic x) → void
+    return let final core::List<dynamic>* #t1 = this.{self::Foo::list}{core::List<dynamic>*} in let final core::int* #t2 = 0 in let final dynamic #t3 = x in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, dynamic) →* void} in #t3;
+  operator []=(dynamic x, dynamic y) → void
+    return let final core::List<dynamic>* #t5 = this.{self::Foo::list}{core::List<dynamic>*} in let final dynamic #t6 = x as{TypeError,ForDynamic} core::int* in let final dynamic #t7 = y in let final void #t8 = #t5.{core::List::[]=}(#t6, #t7){(core::int*, dynamic) →* void} in #t7;
+  method clear() → void
+    return this.{self::Foo::list}{core::List<dynamic>*}.{core::List::clear}(){() →* void};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::Foo::•().{self::Foo::first} = 4;
+  new self::Foo::•().{self::Foo::[]=}(3, 4){(dynamic, dynamic) →* void};
+  new self::Foo::•().{self::Foo::clear}(){() →* void};
+}
diff --git a/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.modular.expect b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.modular.expect
new file mode 100644
index 0000000..300333f2
--- /dev/null
+++ b/pkg/front_end/testcases/general/warn_unresolved_sends.dart.weak.modular.expect
@@ -0,0 +1,136 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/warn_unresolved_sends.dart:48:10: Error: The getter 'missingField' isn't defined for the class 'D'.
+//  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'missingField'.
+//     this.missingField;
+//          ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/warn_unresolved_sends.dart:49:10: Error: The setter 'missingField' isn't defined for the class 'D'.
+//  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'missingField'.
+//     this.missingField = 0;
+//          ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/warn_unresolved_sends.dart:50:10: Error: The method 'missingMethod' isn't defined for the class 'D'.
+//  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'missingMethod'.
+//     this.missingMethod();
+//          ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/warn_unresolved_sends.dart:52:5: Error: The getter 'missingField' isn't defined for the class 'D'.
+//  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'missingField'.
+//     missingField;
+//     ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/warn_unresolved_sends.dart:53:5: Error: The setter 'missingField' isn't defined for the class 'D'.
+//  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'missingField'.
+//     missingField = 0;
+//     ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/warn_unresolved_sends.dart:54:5: Error: The method 'missingMethod' isn't defined for the class 'D'.
+//  - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'missingMethod'.
+//     missingMethod();
+//     ^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field dynamic superField = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method superMethod() → dynamic {}
+  get setterOnly() → dynamic
+    return null;
+  set setterOnly(dynamic _) → void {}
+  get getterOnly() → dynamic
+    return null;
+  set getterOnly(dynamic _) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  field dynamic field = null;
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  set setterOnly(dynamic _) → void {}
+  get getterOnly() → dynamic
+    return null;
+  method method() → dynamic {}
+  method test() → void {
+    this.{self::D::field}{dynamic};
+    this.{self::C::superField}{dynamic};
+    this.{self::D::field} = 0;
+    this.{self::C::superField} = 0;
+    this.{self::D::method}(){() →* dynamic};
+    this.{self::C::superMethod}(){() →* dynamic};
+    this.{self::C::setterOnly}{dynamic};
+    this.{self::D::setterOnly} = 0;
+    this.{self::D::getterOnly}{dynamic};
+    this.{self::C::getterOnly} = 0;
+    this.{self::D::field}{dynamic};
+    this.{self::C::superField}{dynamic};
+    this.{self::D::field} = 0;
+    this.{self::C::superField} = 0;
+    this.{self::D::method}(){() →* dynamic};
+    this.{self::C::superMethod}(){() →* dynamic};
+    this.{self::C::setterOnly}{dynamic};
+    this.{self::D::setterOnly} = 0;
+    this.{self::D::getterOnly}{dynamic};
+    this.{self::C::getterOnly} = 0;
+    invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:48:10: Error: The getter 'missingField' isn't defined for the class 'D'.
+ - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'missingField'.
+    this.missingField;
+         ^^^^^^^^^^^^" in this{<unresolved>}.missingField;
+    invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:49:10: Error: The setter 'missingField' isn't defined for the class 'D'.
+ - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'missingField'.
+    this.missingField = 0;
+         ^^^^^^^^^^^^" in this{<unresolved>}.missingField = 0;
+    invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:50:10: Error: The method 'missingMethod' isn't defined for the class 'D'.
+ - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'missingMethod'.
+    this.missingMethod();
+         ^^^^^^^^^^^^^" in this{<unresolved>}.missingMethod();
+    invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:52:5: Error: The getter 'missingField' isn't defined for the class 'D'.
+ - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'missingField'.
+    missingField;
+    ^^^^^^^^^^^^" in this{<unresolved>}.missingField;
+    invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:53:5: Error: The setter 'missingField' isn't defined for the class 'D'.
+ - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'missingField'.
+    missingField = 0;
+    ^^^^^^^^^^^^" in this{<unresolved>}.missingField = 0;
+    invalid-expression "pkg/front_end/testcases/general/warn_unresolved_sends.dart:54:5: Error: The method 'missingMethod' isn't defined for the class 'D'.
+ - 'D' is from 'pkg/front_end/testcases/general/warn_unresolved_sends.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'missingMethod'.
+    missingMethod();
+    ^^^^^^^^^^^^^" in this{<unresolved>}.missingMethod();
+  }
+}
+class E extends self::D {
+  field dynamic missingField = null;
+  synthetic constructor •() → self::E*
+    : super self::D::•()
+    ;
+  method missingMethod() → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.modular.expect b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.modular.expect
new file mode 100644
index 0000000..a688b79
--- /dev/null
+++ b/pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart.weak.modular.expect
@@ -0,0 +1,116 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:8:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num> fieldOfA; // Error.
+//          ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:9:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num> staticFieldOfA; // Error.
+//                 ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:12:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// extension E<X extends A<num>> // Error.
+//             ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:14:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   static A<num> fieldOfE; // Error.
+//                 ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:15:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A' in the return type.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num> fooOfE() => null; // Error.
+//                ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:16:22: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void barOfE(A<num> a) {} // Error.
+//                      ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:17:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   void bazOfE<Y extends A<num>>() {} // Error.
+//               ^
+// pkg/front_end/testcases/general/well_boundness_checks_in_outline.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends int> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::int*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  field self::A<core::num*>* fieldOfA = null;
+  static field self::A<core::num*>* staticFieldOfA = null;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension E<X extends self::A<core::num*>*> on self::A<core::int*>* {
+  static field fieldOfE = self::E|fieldOfE;
+  method fooOfE = self::E|fooOfE;
+  tearoff fooOfE = self::E|get#fooOfE;
+  method barOfE = self::E|barOfE;
+  tearoff barOfE = self::E|get#barOfE;
+  method bazOfE = self::E|bazOfE;
+  tearoff bazOfE = self::E|get#bazOfE;
+}
+static field self::A<core::num*>* E|fieldOfE;
+static method E|fooOfE<X extends self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → self::A<core::num*>*
+  return null;
+static method E|get#fooOfE<X extends self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → () →* self::A<core::num*>*
+  return () → self::A<core::num*>* => self::E|fooOfE<self::E|get#fooOfE::X*>(#this);
+static method E|barOfE<X extends self::A<core::num*>*>(lowered final self::A<core::int*>* #this, self::A<core::num*>* a) → void {}
+static method E|get#barOfE<X extends self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → (self::A<core::num*>*) →* void
+  return (self::A<core::num*>* a) → void => self::E|barOfE<self::E|get#barOfE::X*>(#this, a);
+static method E|bazOfE<X extends self::A<core::num*>*, Y extends self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → void {}
+static method E|get#bazOfE<X extends self::A<core::num*>*>(lowered final self::A<core::int*>* #this) → <Y extends self::A<core::num*>*>() →* void
+  return <Y extends self::A<core::num*>*>() → void => self::E|bazOfE<self::E|get#bazOfE::X*, Y*>(#this);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.modular.expect
new file mode 100644
index 0000000..f1e3ba3
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/abstract_members_from_dill/main.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class B extends mai::A {
+  synthetic constructor •() → self::B*
+    : super mai::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.modular.expect
new file mode 100644
index 0000000..85f323d
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/extension_from_dill/extension_from_dill.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library;
+import self as self;
+import "extension_from_dill_lib2.dart" as ext;
+
+import "org-dartlang-testcase:///extension_from_dill_lib.dart";
+
+static method main() → dynamic {
+  ext::Extension|foo("");
+}
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.modular.expect
new file mode 100644
index 0000000..c6ae209
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/issue43538/main.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library;
+import self as self;
+import "const_lib.dart" as con;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///const_lib.dart";
+
+static const field con::B* crossModule = #C3;
+static method main() → dynamic {
+  self::expect(2.71, #C3.{con::A::d}{core::double*});
+  self::expect("default", #C3.{con::A::s}{core::String*});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 2.71
+  #C2 = "default"
+  #C3 = con::B {d:#C1, s:#C2}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main.dart:
+- B. (from org-dartlang-testcase:///const_lib.dart:16:9)
+- _B&A&M. (from org-dartlang-testcase:///const_lib.dart:15:7)
+- A. (from org-dartlang-testcase:///const_lib.dart:6:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.modular.expect
new file mode 100644
index 0000000..d7417c6
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:8:20: Error: Couldn't find constructor 'Bar'.
+//   Bar<int> x = new Bar<int>();
+//                    ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue_43084_lib.dart";
+
+static method main() → dynamic {
+  invalid-type x = invalid-expression "pkg/front_end/testcases/general/with_dependencies/issue_43084/issue_43084.dart:8:20: Error: Couldn't find constructor 'Bar'.
+  Bar<int> x = new Bar<int>();
+                   ^^^";
+  core::print(x);
+}
diff --git a/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.modular.expect
new file mode 100644
index 0000000..1854736
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart:8:3: Error: Couldn't find constructor 'F'.
+//   F();
+//   ^
+//
+import self as self;
+
+import "org-dartlang-testcase:///issue_43084_lib.dart";
+
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/with_dependencies/issue_43084_2/issue_43084.dart:8:3: Error: Couldn't find constructor 'F'.
+  F();
+  ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.modular.expect
new file mode 100644
index 0000000..fc924c0
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.dart.weak.modular.expect
@@ -0,0 +1,99 @@
+library;
+import self as self;
+import "mixin_from_dill_lib1.dart" as mix;
+import "dart:core" as core;
+import "mixin_from_dill_lib2.dart" as mix2;
+
+import "org-dartlang-testcase:///mixin_from_dill_lib1.dart" as lib1;
+import "org-dartlang-testcase:///mixin_from_dill_lib2.dart" as lib2;
+
+static method main() → dynamic {
+  mix::Foo* foo1 = new mix::Foo::•();
+  if(foo1 == null)
+    throw "what?";
+  if(!(foo1 =={mix::_Foo&B&D::==}{(dynamic) →* core::bool*} foo1))
+    throw "what?";
+  foo1.{mix::_Foo&B&D::x}(){() →* void};
+  mix2::Foo* foo2 = new mix2::Foo::•();
+  if(foo2 == null)
+    throw "what?";
+  if(!(foo2 =={mix2::_Foo&B&D::==}{(dynamic) →* core::bool*} foo2))
+    throw "what?";
+  foo2.{mix2::_Foo&B&D::x}(){() →* void};
+}
+
+library;
+import self as mix2;
+import "dart:core" as core;
+
+abstract class _Foo&B&D = mix2::B with mix2::D /*isAnonymousMixin*/  {
+  synthetic constructor •() → mix2::_Foo&B&D*
+    : super mix2::B::•()
+    ;
+  mixin-super-stub operator ==(dynamic dynamic) → core::bool*
+    return super.{mix2::D::==}(dynamic);
+  mixin-super-stub method x() → void
+    return super.{mix2::D::x}();
+}
+class Foo extends mix2::_Foo&B&D {
+  synthetic constructor •() → mix2::Foo*
+    : super mix2::_Foo&B&D::•()
+    ;
+}
+abstract class B extends core::Object implements mix2::C {
+  synthetic constructor •() → mix2::B*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic dynamic) → core::bool* {
+    core::print("B.==");
+    return true;
+  }
+  method x() → void {
+    core::print("B.x");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object {
+  synthetic constructor •() → mix2::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D extends core::Object implements mix2::C {
+  synthetic constructor •() → mix2::D*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic dynamic) → core::bool* {
+    core::print("D.==");
+    return true;
+  }
+  method x() → void {
+    core::print("D.x");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.modular.expect
new file mode 100644
index 0000000..787fde3
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/mixin_from_dill/mixin_from_dill.no_link.dart.weak.modular.expect
@@ -0,0 +1,175 @@
+library;
+import self as self;
+import "mixin_from_dill_lib1.dart" as mix;
+import "dart:core" as core;
+import "mixin_from_dill_lib2.dart" as mix2;
+
+import "org-dartlang-testcase:///mixin_from_dill_lib1.dart" as lib1;
+import "org-dartlang-testcase:///mixin_from_dill_lib2.dart" as lib2;
+
+static method main() → dynamic {
+  mix::Foo* foo1 = new mix::Foo::•();
+  if(foo1 == null)
+    throw "what?";
+  if(!(foo1 =={mix::_Foo&B&D::==}{(dynamic) →* core::bool*} foo1))
+    throw "what?";
+  foo1.{mix::_Foo&B&D::x}(){() →* void};
+  mix2::Foo* foo2 = new mix2::Foo::•();
+  if(foo2 == null)
+    throw "what?";
+  if(!(foo2 =={mix2::_Foo&B&D::==}{(dynamic) →* core::bool*} foo2))
+    throw "what?";
+  foo2.{mix2::_Foo&B&D::x}(){() →* void};
+}
+
+library;
+import self as mix;
+import "dart:core" as core;
+
+abstract class _Foo&B&D = mix::B with mix::D /*isAnonymousMixin*/  {
+  synthetic constructor •() → mix::_Foo&B&D*
+    : super mix::B::•()
+    ;
+  mixin-super-stub operator ==(dynamic dynamic) → core::bool*
+    return super.{mix::D::==}(dynamic);
+  mixin-super-stub method x() → void
+    return super.{mix::D::x}();
+}
+class Foo extends mix::_Foo&B&D {
+  synthetic constructor •() → mix::Foo*
+    : super mix::_Foo&B&D::•()
+    ;
+}
+abstract class B extends core::Object implements mix::C {
+  synthetic constructor •() → mix::B*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic dynamic) → core::bool* {
+    core::print("B.==");
+    return true;
+  }
+  method x() → void {
+    core::print("B.x");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object {
+  synthetic constructor •() → mix::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D extends core::Object implements mix::C {
+  synthetic constructor •() → mix::D*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic dynamic) → core::bool* {
+    core::print("D.==");
+    return true;
+  }
+  method x() → void {
+    core::print("D.x");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+library;
+import self as mix2;
+import "dart:core" as core;
+
+abstract class _Foo&B&D = mix2::B with mix2::D /*isAnonymousMixin*/  {
+  synthetic constructor •() → mix2::_Foo&B&D*
+    : super mix2::B::•()
+    ;
+  mixin-super-stub operator ==(dynamic dynamic) → core::bool*
+    return super.{mix2::D::==}(dynamic);
+  mixin-super-stub method x() → void
+    return super.{mix2::D::x}();
+}
+class Foo extends mix2::_Foo&B&D {
+  synthetic constructor •() → mix2::Foo*
+    : super mix2::_Foo&B&D::•()
+    ;
+}
+abstract class B extends core::Object implements mix2::C {
+  synthetic constructor •() → mix2::B*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic dynamic) → core::bool* {
+    core::print("B.==");
+    return true;
+  }
+  method x() → void {
+    core::print("B.x");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object {
+  synthetic constructor •() → mix2::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D extends core::Object implements mix2::C {
+  synthetic constructor •() → mix2::D*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic dynamic) → core::bool* {
+    core::print("D.==");
+    return true;
+  }
+  method x() → void {
+    core::print("D.x");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.modular.expect
new file mode 100644
index 0000000..02192bf
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "stub_or_not_lib1.dart" as stu;
+
+import "org-dartlang-testcase:///stub_or_not_lib1.dart";
+
+class ProblemClass extends stu::Foo {
+  synthetic constructor •() → self::ProblemClass*
+    : super stu::Foo::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.modular.expect
new file mode 100644
index 0000000..68cbb20
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.modular.expect
@@ -0,0 +1,89 @@
+library;
+import self as self;
+import "stub_or_not_lib1.dart" as stu;
+
+import "org-dartlang-testcase:///stub_or_not_lib1.dart";
+
+class ProblemClass extends stu::Foo {
+  synthetic constructor •() → self::ProblemClass*
+    : super stu::Foo::•()
+    ;
+}
+static method main() → dynamic {}
+
+library;
+import self as stu;
+import "dart:core" as core;
+import "stub_or_not_lib2.dart" as stu2;
+
+import "org-dartlang-testcase:///stub_or_not_lib2.dart";
+
+abstract class Qux extends core::Object implements stu2::EventFileA {
+  synthetic constructor •() → stu::Qux*
+    : super core::Object::•()
+    ;
+  method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class EvenFileBPrime extends stu2::EvenFileB {
+  synthetic constructor •() → stu::EvenFileBPrime*
+    : super stu2::EvenFileB::•()
+    ;
+}
+abstract class Baz extends stu::Qux {
+  synthetic constructor •() → stu::Baz*
+    : super stu::Qux::•()
+    ;
+  method handleEvent(covariant-by-declaration stu::EvenFileBPrime* entry) → void {}
+}
+abstract class Foo extends stu::Baz implements stu::Qux {
+  synthetic constructor •() → stu::Foo*
+    : super stu::Baz::•()
+    ;
+  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
+}
+
+library;
+import self as stu2;
+import "dart:core" as core;
+
+abstract class EventFileA extends core::Object {
+  synthetic constructor •() → stu2::EventFileA*
+    : super core::Object::•()
+    ;
+  abstract method handleEvent(stu2::EvenFileB* entry) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class EvenFileB extends core::Object {
+  synthetic constructor •() → stu2::EvenFileB*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart.weak.modular.expect b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart.weak.modular.expect
new file mode 100644
index 0000000..18c9317
--- /dev/null
+++ b/pkg/front_end/testcases/general/with_dependencies/variance_from_dill/variance_from_dill.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///variance_from_dill_lib.dart";
+
+typedef G<unrelated T extends core::Object? = dynamic> = (() → dynamic) → dynamic;
+static method main() → dynamic {
+  core::print(#C1);
+}
+
+constants  {
+  #C1 = TypeLiteralConstant((() →* dynamic) →* dynamic)
+}
diff --git a/pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart.weak.modular.expect
new file mode 100644
index 0000000..5d340a4
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart:14:27: Error: Too few positional arguments: 1 required, 0 given.
+// typedef void G<@A<dynamic>() T>(T t);
+//                           ^
+// pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart:6:9: Context: Found this candidate, but the arguments don't match.
+//   const A(o);
+//         ^
+//
+// pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart:16:24: Error: Too few positional arguments: 1 required, 0 given.
+// void method1<@A<String>() T>(T t) {}
+//                        ^
+// pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart:6:9: Context: Found this candidate, but the arguments don't match.
+//   const A(o);
+//         ^
+//
+// pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart:9:22: Error: Too few positional arguments: 1 required, 0 given.
+// void Function<@A<int>() T>(T)? f;
+//                      ^
+// pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart:6:9: Context: Found this candidate, but the arguments don't match.
+//   const A(o);
+//         ^
+//
+// pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart:18:35: Error: Too few positional arguments: 1 required, 0 given.
+// void method2(void Function<@A<num>() T>(T) f) {}
+//                                   ^
+// pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart:6:9: Context: Found this candidate, but the arguments don't match.
+//   const A(o);
+//         ^
+//
+// pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart:24:24: Error: Too few positional arguments: 1 required, 0 given.
+//   void local<@A<double>() T>(T t) {}
+//                        ^
+// pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart:6:9: Context: Found this candidate, but the arguments don't match.
+//   const A(o);
+//         ^
+//
+// pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart:26:24: Error: Too few positional arguments: 1 required, 0 given.
+//   void Function<@A<int>() T>(T)? f;
+//                        ^
+// pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart:6:9: Context: Found this candidate, but the arguments don't match.
+//   const A(o);
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F = <T extends core::Object? = dynamic>(T%) → void;
+typedef G<@invalid-expression "pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart:14:27: Error: Too few positional arguments: 1 required, 0 given.
+typedef void G<@A<dynamic>() T>(T t);
+                          ^" contravariant T extends core::Object? = dynamic> = (T%) → void;
+class A<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic o) → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+}
+class Class<T extends <S extends core::Object? = dynamic>(S%) → void> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
+    : super core::Object::•()
+    ;
+}
+static field <T extends core::Object? = dynamic>(T%) →? void f;
+static method method1<@invalid-expression "pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart:16:24: Error: Too few positional arguments: 1 required, 0 given.
+void method1<@A<String>() T>(T t) {}
+                       ^" T extends core::Object? = dynamic>(self::method1::T% t) → void {}
+static method method2(<T extends core::Object? = dynamic>(T%) → void f) → void {}
+static method main() → dynamic {
+  function local<@invalid-expression "pkg/front_end/testcases/generic_metadata/erroneous_function_type_parameter.dart:24:24: Error: Too few positional arguments: 1 required, 0 given.
+  void local<@A<double>() T>(T t) {}
+                       ^" T extends core::Object? = dynamic>(T% t) → void {}
+  <T extends core::Object? = dynamic>(T%) →? void f;
+}
diff --git a/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.weak.modular.expect b/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.weak.modular.expect
new file mode 100644
index 0000000..6900388
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/from_dill/main.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+static method main() → dynamic {
+  mai::C1<<T extends core::Object? = dynamic>(T%) → T%> c1 = new mai::C1::•<<T extends core::Object? = dynamic>(T%) → T%>();
+  mai::C1<<T extends core::Object? = dynamic>(T%) → T%> c2 = new mai::C1::•<<T extends core::Object? = dynamic>(T%) → T%>();
+  mai::C2<<T extends core::Object? = dynamic>() → void> c3 = new mai::C2::•<<T extends core::Object? = dynamic>() → void>();
+  mai::C2<<T extends core::Object? = dynamic>() → void> c4 = new mai::C2::•<<int extends core::Object? = dynamic>() → void>();
+  mai::C3<<T extends core::Object? = dynamic>() → T%> c5 = new mai::C3::•<<T extends core::Object? = dynamic>() → T%>();
+  mai::C3<<T extends core::Object? = dynamic>() → T%> c6 = new mai::C3::•<<T extends core::Object? = dynamic>() → T%>();
+  mai::C4<<T extends core::Object? = dynamic>(T%) → void> c7 = new mai::C4::•<<T extends core::Object? = dynamic>(T%) → void>();
+  mai::C4<<T extends core::Object? = dynamic>(T%) → void> c8 = new mai::C4::•<<T extends core::Object? = dynamic>(T%) → void>();
+  mai::C5<<T extends <S extends core::Object? = dynamic>(S%) → S% = dynamic>(T) → T> c9 = new mai::C5::•<<T extends <S extends core::Object? = dynamic>(S%) → S% = dynamic>(T) → T>();
+  mai::C5<<T extends <S extends core::Object? = dynamic>(S%) → S% = dynamic>(T) → T> c10 = new mai::C5::•<<T extends <S extends core::Object? = dynamic>(S%) → S%>(T) → T>();
+  mai::C6<<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(T%, S%, <V extends S% = dynamic, U extends core::Object? = dynamic>(T%, U%, V%, core::Map<S%, U%>) → V%) → T%> c11 = new mai::C6::•<<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(T%, S%, <V extends S% = dynamic, U extends core::Object? = dynamic>(T%, U%, V%, core::Map<S%, U%>) → V%) → T%>();
+  mai::C6<<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(T%, S%, <V extends S% = dynamic, U extends core::Object? = dynamic>(T%, U%, V%, core::Map<S%, U%>) → V%) → T%> c12 = new mai::C6::•<<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(T%, S%, <V extends S%, U extends core::Object? = dynamic>(T%, U%, V%, core::Map<S%, U%>) → V%) → T%>();
+}
diff --git a/pkg/front_end/testcases/generic_metadata/function_type_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/generic_metadata/function_type_parameter.dart.weak.modular.expect
new file mode 100644
index 0000000..d081a19
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/function_type_parameter.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F = <T extends core::Object? = dynamic>(T%) → void;
+typedef G<@#C1 contravariant T extends core::Object? = dynamic> = (T%) → void;
+class A<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+}
+class Class<T extends <S extends core::Object? = dynamic>(S%) → void> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
+    : super core::Object::•()
+    ;
+}
+static field <T extends core::Object? = dynamic>(T%) →? void f;
+static method method1<@#C2 T extends core::Object? = dynamic>(self::method1::T% t) → void {}
+static method method2(<T extends core::Object? = dynamic>(T%) → void f) → void {}
+static method main() → dynamic {
+  function local<@#C3 T extends core::Object? = dynamic>(T% t) → void {}
+  <T extends core::Object? = dynamic>(T%) →? void f;
+}
+
+constants  {
+  #C1 = self::A<dynamic> {}
+  #C2 = self::A<core::String*> {}
+  #C3 = self::A<core::double*> {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///function_type_parameter.dart:
+- A. (from org-dartlang-testcase:///function_type_parameter.dart:6:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/generic_metadata/generic_metadata.dart.weak.modular.expect b/pkg/front_end/testcases/generic_metadata/generic_metadata.dart.weak.modular.expect
new file mode 100644
index 0000000..b60d2ce
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/generic_metadata.dart.weak.modular.expect
@@ -0,0 +1,99 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/generic_metadata/generic_metadata.dart:21:2: Error: Expected 1 type arguments.
+// @A<int, num>() // error
+//  ^
+// pkg/front_end/testcases/generic_metadata/generic_metadata.dart:6:9: Context: Found this candidate, but the arguments don't match.
+//   const A();
+//         ^
+//
+// pkg/front_end/testcases/generic_metadata/generic_metadata.dart:22:2: Error: Expected 2 type arguments.
+// @B<int>() // error
+//  ^
+// pkg/front_end/testcases/generic_metadata/generic_metadata.dart:10:9: Context: Found this candidate, but the arguments don't match.
+//   const B();
+//         ^
+//
+// pkg/front_end/testcases/generic_metadata/generic_metadata.dart:23:2: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'C'.
+// Try changing type arguments so that they conform to the bounds.
+// @C<String>() // error
+//  ^
+// pkg/front_end/testcases/generic_metadata/generic_metadata.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends num> {
+//         ^
+//
+// pkg/front_end/testcases/generic_metadata/generic_metadata.dart:24:2: Error: Type argument 'num' doesn't conform to the bound 'S' of the type variable 'T' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+// @D<int, num>() // error
+//  ^
+// pkg/front_end/testcases/generic_metadata/generic_metadata.dart:17:24: Context: This is the type variable whose bound isn't conformed to.
+// class D<S extends num, T extends S> {
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+}
+class B<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::B<self::B::S%, self::B::T%>
+    : super core::Object::•()
+    ;
+}
+class C<T extends core::num> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C<self::C::T>
+    : super core::Object::•()
+    ;
+}
+class D<S extends core::num, T extends self::D::S = core::num> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::D<self::D::S, self::D::T>
+    : super core::Object::•()
+    ;
+}
+@invalid-expression "pkg/front_end/testcases/generic_metadata/generic_metadata.dart:21:2: Error: Expected 1 type arguments.
+@A<int, num>() // error
+ ^"
+@invalid-expression "pkg/front_end/testcases/generic_metadata/generic_metadata.dart:22:2: Error: Expected 2 type arguments.
+@B<int>() // error
+ ^"
+@#C1
+@#C2
+static method test() → dynamic {}
+@#C3
+@#C4
+@#C5
+@#C6
+@#C7
+@#C7
+@#C8
+@#C9
+@#C9
+@#C10
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::C<core::String*> {}
+  #C2 = self::D<core::int*, core::num*> {}
+  #C3 = self::A<dynamic> {}
+  #C4 = self::A<core::int*> {}
+  #C5 = self::B<dynamic, dynamic> {}
+  #C6 = self::B<core::int*, core::String*> {}
+  #C7 = self::C<core::num*> {}
+  #C8 = self::C<core::int*> {}
+  #C9 = self::D<core::num*, core::num*> {}
+  #C10 = self::D<core::num*, core::int*> {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///generic_metadata.dart:
+- C. (from org-dartlang-testcase:///generic_metadata.dart:14:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- D. (from org-dartlang-testcase:///generic_metadata.dart:18:9)
+- A. (from org-dartlang-testcase:///generic_metadata.dart:6:9)
+- B. (from org-dartlang-testcase:///generic_metadata.dart:10:9)
diff --git a/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.weak.modular.expect b/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.weak.modular.expect
new file mode 100644
index 0000000..86bb196
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/inferred_generic_types_in_arguments_and_bounds.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+static method foo<Y extends core::Object? = dynamic>(self::foo::Y% y) → self::A<self::foo::Y%>
+  return throw 42;
+static method test() → dynamic {
+  self::A<<Z extends core::Object? = dynamic>(dynamic) → Never> x = self::foo<<Z extends core::Object? = dynamic>(dynamic) → Never>(<Z extends core::Object? = dynamic>(dynamic Z) → Never => throw 42);
+  core::List<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>> y = <<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>>[#C1];
+  core::Set<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>> z = block {
+    final core::Set<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>> #t1 = col::LinkedHashSet::•<<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>>();
+    #t1.{core::Set::add}{Invariant}(y.{core::Iterable::first}{<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>}){(<Y extends core::Object? = dynamic>(Y%) → self::A<Y%>) → core::bool};
+  } =>#t1;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::foo
+}
diff --git a/pkg/front_end/testcases/generic_metadata/issue45329.dart.weak.modular.expect b/pkg/front_end/testcases/generic_metadata/issue45329.dart.weak.modular.expect
new file mode 100644
index 0000000..3dbf472
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/issue45329.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/generic_metadata/issue45329.dart:6:9: Error: Expected an identifier, but got 'void'.
+// Try inserting an identifier before 'void'.
+//   local<void Function()>() {}
+//         ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → dynamic {
+  function local<#T1 extends core::Object? = dynamic>() → Null {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/generic_metadata/issue45330.dart.weak.modular.expect b/pkg/front_end/testcases/generic_metadata/issue45330.dart.weak.modular.expect
new file mode 100644
index 0000000..156f3fb
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/issue45330.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/generic_metadata/issue45330.dart:10:31: Error: Type 'T' is a bound of itself via 'T'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//   genericMethod<void Function<T extends T>()>();
+//                               ^
+//
+// pkg/front_end/testcases/generic_metadata/issue45330_lib.dart:35:31: Error: Type 'T' is a bound of itself via 'T'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//   genericMethod<void Function<T extends T>()>();
+//                               ^
+//
+import self as self;
+import "dart:core" as core;
+
+part issue45330_lib.dart;
+static method genericMethod<T extends core::Object? = dynamic>() → void {}
+static method testInMain() → dynamic {
+  self::genericMethod<<T extends invalid-type>() → void>();
+}
+static method main() → dynamic {}
+static method /* from org-dartlang-testcase:///issue45330_lib.dart */ testInPart() → dynamic {
+  self::genericMethod<<T extends invalid-type>() → void>();
+}
diff --git a/pkg/front_end/testcases/generic_metadata/nested_generic_arguments_and_bounds.dart.weak.modular.expect b/pkg/front_end/testcases/generic_metadata/nested_generic_arguments_and_bounds.dart.weak.modular.expect
new file mode 100644
index 0000000..5c86a64
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/nested_generic_arguments_and_bounds.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant U extends core::Object? = dynamic> = <V extends U% = dynamic>(V%) → dynamic;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+static method foo() → self::A<<Y extends <Z extends core::Object? = dynamic>(Z%) → dynamic = dynamic>(Y) → dynamic>
+  return throw 42;
+static method bar() → self::A<<V extends <W extends core::Object? = dynamic>(W%) → dynamic = dynamic>(V) → dynamic>
+  return throw 42;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/generic_metadata/simple_generic_types_in_arguments_and_bounds.dart.weak.modular.expect b/pkg/front_end/testcases/generic_metadata/simple_generic_types_in_arguments_and_bounds.dart.weak.modular.expect
new file mode 100644
index 0000000..3c45ce6
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/simple_generic_types_in_arguments_and_bounds.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class B extends self::A<<Y extends core::Object? = dynamic>(Y%) → dynamic> {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C<Z extends <Y extends core::Object? = dynamic>(Y%) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::Z>
+    : super core::Object::•()
+    ;
+}
+static method foo(self::A<<Y extends core::Object? = dynamic>(Y%) → dynamic> x) → self::A<<Y extends core::Object? = dynamic>(Y%) → dynamic>
+  return throw 42;
+static method bar<V extends <Y extends core::Object? = dynamic>(Y%) → dynamic>() → dynamic
+  return throw 42;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/generic_metadata/type_parameters_in_default_types.dart.weak.modular.expect b/pkg/front_end/testcases/generic_metadata/type_parameters_in_default_types.dart.weak.modular.expect
new file mode 100644
index 0000000..f970a2a
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/type_parameters_in_default_types.dart.weak.modular.expect
@@ -0,0 +1,5 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method foo<X extends <Y extends self::foo::X = dynamic>() → dynamic = <Y extends dynamic>() → dynamic>() → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/generic_metadata/typedef_generic_types_in_arguments_and_bounds.dart.weak.modular.expect b/pkg/front_end/testcases/generic_metadata/typedef_generic_types_in_arguments_and_bounds.dart.weak.modular.expect
new file mode 100644
index 0000000..e853954
--- /dev/null
+++ b/pkg/front_end/testcases/generic_metadata/typedef_generic_types_in_arguments_and_bounds.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F = <Y extends core::Object? = dynamic>(Y%) → dynamic;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class B extends self::A<<Y extends core::Object? = dynamic>(Y%) → dynamic> {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C<Z extends <Y extends core::Object? = dynamic>(Y%) → dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::Z>
+    : super core::Object::•()
+    ;
+}
+static method foo(self::A<<Y extends core::Object? = dynamic>(Y%) → dynamic> x) → self::A<<Y extends core::Object? = dynamic>(Y%) → dynamic>
+  return throw 42;
+static method bar<V extends <Y extends core::Object? = dynamic>(Y%) → dynamic>() → dynamic
+  return throw 42;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.modular.expect b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.modular.expect
new file mode 100644
index 0000000..90a2cad
--- /dev/null
+++ b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.modular.expect
@@ -0,0 +1,187 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::Function* field1a = #C1;
+  field () →* core::int* field1b = #C1;
+  field (core::int*) →* core::int* field2 = #C2;
+  field (core::int*, core::int*) →* core::int* field3 = #C3;
+  field (core::int*, [core::int*]) →* core::int* field4 = #C4;
+  field ([core::int*, core::int*]) →* core::int* field5 = #C5;
+  field (core::int*, {b: core::int*}) →* core::int* field6 = #C6;
+  field ({a: core::int*, b: core::int*}) →* core::int* field7 = #C7;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  get getter1a() → core::Function*
+    return #C1;
+  get getter1b() → () →* core::int*
+    return #C1;
+  get getter2() → (core::int*) →* core::int*
+    return #C2;
+  get getter3() → (core::int*, core::int*) →* core::int*
+    return #C3;
+  get getter4() → (core::int*, [core::int*]) →* core::int*
+    return #C4;
+  get getter5() → ([core::int*, core::int*]) →* core::int*
+    return #C5;
+  get getter6() → (core::int*, {b: core::int*}) →* core::int*
+    return #C6;
+  get getter7() → ({a: core::int*, b: core::int*}) →* core::int*
+    return #C7;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Subclass extends self::Class {
+  synthetic constructor •() → self::Subclass*
+    : super self::Class::•()
+    ;
+  get field1a() → core::Function* {
+    self::enableRead = false;
+    return #C1;
+  }
+  get field1b() → () →* core::int* {
+    self::enableRead = false;
+    return #C1;
+  }
+  get field2() → (core::int*) →* core::int* {
+    self::enableRead = false;
+    return #C2;
+  }
+  get field3() → (core::int*, core::int*) →* core::int* {
+    self::enableRead = false;
+    return #C3;
+  }
+  get field4() → (core::int*, [core::int*]) →* core::int* {
+    self::enableRead = false;
+    return #C4;
+  }
+  get field5() → ([core::int*, core::int*]) →* core::int* {
+    self::enableRead = false;
+    return #C5;
+  }
+  get field6() → (core::int*, {b: core::int*}) →* core::int* {
+    self::enableRead = false;
+    return #C6;
+  }
+  get field7() → ({a: core::int*, b: core::int*}) →* core::int* {
+    self::enableRead = false;
+    return #C7;
+  }
+  get getter1a() → core::Function* {
+    self::enableRead = false;
+    return #C1;
+  }
+  get getter1b() → () →* core::int* {
+    self::enableRead = false;
+    return #C1;
+  }
+  get getter2() → (core::int*) →* core::int* {
+    self::enableRead = false;
+    return #C2;
+  }
+  get getter3() → (core::int*, core::int*) →* core::int* {
+    self::enableRead = false;
+    return #C3;
+  }
+  get getter4() → (core::int*, [core::int*]) →* core::int* {
+    self::enableRead = false;
+    return #C4;
+  }
+  get getter5() → ([core::int*, core::int*]) →* core::int* {
+    self::enableRead = false;
+    return #C5;
+  }
+  get getter6() → (core::int*, {b: core::int*}) →* core::int* {
+    self::enableRead = false;
+    return #C6;
+  }
+  get getter7() → ({a: core::int*, b: core::int*}) →* core::int* {
+    self::enableRead = false;
+    return #C7;
+  }
+}
+static field core::bool* enableRead = true;
+static method read(core::int* value) → core::int*
+  return self::enableRead ?{core::int*} value : 1.{core::int::unary-}(){() →* core::int*};
+static method method1() → core::int*
+  return 0;
+static method method2(core::int* a) → core::int*
+  return a.{core::int::unary-}(){() →* core::int*};
+static method method3(core::int* a, core::int* b) → core::int*
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
+static method method4(core::int* a, [core::int* b = #C8]) → core::int*
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
+static method method5([core::int* a = #C8, core::int* b = #C8]) → core::int*
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
+static method method6(core::int* a, {core::int* b = #C8}) → core::int*
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
+static method method7({core::int* a = #C8, core::int* b = #C8}) → core::int*
+  return a.{core::num::-}(b){(core::num*) →* core::int*};
+static method main() → dynamic {
+  self::callField(new self::Class::•());
+  self::callGetter(new self::Class::•());
+  self::callField(new self::Subclass::•());
+  self::callGetter(new self::Subclass::•());
+}
+static method callField(self::Class* c) → dynamic {
+  self::expect(0, c.{self::Class::field1a}());
+  self::expect(0, c.{self::Class::field1b}(){() →* core::int*});
+  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t1 = c in let final core::int* #t2 = self::read(42) in #t1.{self::Class::field2}(#t2){(core::int*) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t3 = c in let final core::int* #t4 = self::read(12) in let final core::int* #t5 = self::read(23) in #t3.{self::Class::field3}(#t4, #t5){(core::int*, core::int*) →* core::int*});
+  self::expect(12, let final self::Class* #t6 = c in let final core::int* #t7 = self::read(12) in #t6.{self::Class::field4}(#t7){(core::int*, [core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t8 = c in let final core::int* #t9 = self::read(12) in let final core::int* #t10 = self::read(23) in #t8.{self::Class::field4}(#t9, #t10){(core::int*, [core::int*]) →* core::int*});
+  self::expect(0, c.{self::Class::field5}(){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t11 = c in let final core::int* #t12 = self::read(12) in #t11.{self::Class::field5}(#t12){([core::int*, core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t13 = c in let final core::int* #t14 = self::read(12) in let final core::int* #t15 = self::read(23) in #t13.{self::Class::field5}(#t14, #t15){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t16 = c in let final core::int* #t17 = self::read(12) in #t16.{self::Class::field6}(#t17){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t18 = c in let final core::int* #t19 = self::read(12) in let final core::int* #t20 = self::read(23) in #t18.{self::Class::field6}(#t19, b: #t20){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(0, c.{self::Class::field7}(){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(12, let final self::Class* #t21 = c in let final core::int* #t22 = self::read(12) in #t21.{self::Class::field7}(a: #t22){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t23 = c in let final core::int* #t24 = self::read(23) in #t23.{self::Class::field7}(b: #t24){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t25 = c in let final core::int* #t26 = self::read(12) in let final core::int* #t27 = self::read(23) in #t25.{self::Class::field7}(a: #t26, b: #t27){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t28 = c in let final core::int* #t29 = self::read(23) in let final core::int* #t30 = self::read(12) in #t28.{self::Class::field7}(b: #t29, a: #t30){({a: core::int*, b: core::int*}) →* core::int*});
+}
+static method callGetter(self::Class* c) → dynamic {
+  self::expect(0, c.{self::Class::getter1a}());
+  self::expect(0, c.{self::Class::getter1b}(){() →* core::int*});
+  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}(#t32){(core::int*) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}(#t34, #t35){(core::int*, core::int*) →* core::int*});
+  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}(#t37){(core::int*, [core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}(#t39, #t40){(core::int*, [core::int*]) →* core::int*});
+  self::expect(0, c.{self::Class::getter5}(){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}(#t42){([core::int*, core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}(#t44, #t45){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}(#t47){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}(#t49, b: #t50){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(0, c.{self::Class::getter7}(){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}(a: #t52){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}(b: #t54){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}(a: #t56, b: #t57){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}(b: #t59, a: #t60){({a: core::int*, b: core::int*}) →* core::int*});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  self::enableRead = true;
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+    throw "Expected ${expected}, ${actual}";
+}
+
+constants  {
+  #C1 = static-tearoff self::method1
+  #C2 = static-tearoff self::method2
+  #C3 = static-tearoff self::method3
+  #C4 = static-tearoff self::method4
+  #C5 = static-tearoff self::method5
+  #C6 = static-tearoff self::method6
+  #C7 = static-tearoff self::method7
+  #C8 = 0
+}
diff --git a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.modular.expect b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.modular.expect
new file mode 100644
index 0000000..c46c847
--- /dev/null
+++ b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  field (self::A::T*) →* void f;
+  constructor •((self::A::T*) →* void f) → self::A<self::A::T*>*
+    : self::A::f = f, super core::Object::•()
+    ;
+  method foo(covariant-by-class self::A::T* x) → dynamic
+    return let final self::A::T* #t1 = x in this.{self::A::f}(#t1){(self::A::T*) →* void};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::A::•<core::int*>((core::int* x) → Null {}).{self::A::foo}(3){(core::int*) →* dynamic};
+}
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.weak.modular.expect
new file mode 100644
index 0000000..e38191b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:15:34: Error: The class 'C' is abstract and can't be instantiated.
+//   var /*@type=dynamic */ x = new C();
+//                                  ^
+//
+// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:16:34: Error: The class 'D' is abstract and can't be instantiated.
+//   var /*@type=dynamic */ y = new D(1);
+//                                  ^
+//
+// pkg/front_end/testcases/inference/abstract_class_instantiation.dart:17:24: Error: The class 'D' is abstract and can't be instantiated.
+//   D<List<int>> z = new D(/*@typeArgs=dynamic*/ []);
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(self::D::T* t) → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → void {
+  dynamic x = throw new core::AbstractClassInstantiationError::•("C");
+  dynamic y = let final core::Object* #t1 = 1 in throw new core::AbstractClassInstantiationError::•("D");
+  self::D<core::List<core::int*>*>* z = let final core::Object* #t2 = <dynamic>[] in throw new core::AbstractClassInstantiationError::•("D");
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/assert.dart.weak.modular.expect b/pkg/front_end/testcases/inference/assert.dart.weak.modular.expect
new file mode 100644
index 0000000..1122765
--- /dev/null
+++ b/pkg/front_end/testcases/inference/assert.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method test() → void {
+  assert(self::f<core::bool*>());
+  assert(self::f<core::bool*>(), self::f<dynamic>());
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/assert_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/inference/assert_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..8d3a6de
--- /dev/null
+++ b/pkg/front_end/testcases/inference/assert_initializer.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  constructor expressionOnly() → self::C*
+    : assert(self::f<core::bool*>()), super core::Object::•()
+    ;
+  constructor expressionAndMessage() → self::C*
+    : assert(self::f<core::bool*>(), self::f<dynamic>()), super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {
+  assert(self::f<core::bool*>());
+  assert(self::f<core::bool*>(), self::f<dynamic>());
+}
diff --git a/pkg/front_end/testcases/inference/assign_local.dart.weak.modular.expect b/pkg/front_end/testcases/inference/assign_local.dart.weak.modular.expect
new file mode 100644
index 0000000..21f996a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/assign_local.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {
+  core::num* x;
+  core::int* x1 = x = 1;
+  core::double* x2 = x = 1.0;
+  self::A<core::int*>* y;
+  self::A<core::int*>* y1 = y = new self::A::•<core::int*>();
+  self::B<core::int*>* y2 = y = new self::B::•<core::int*>();
+}
diff --git a/pkg/front_end/testcases/inference/async_await.dart.weak.modular.expect b/pkg/front_end/testcases/inference/async_await.dart.weak.modular.expect
new file mode 100644
index 0000000..3d172fc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_await.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+abstract class MyFuture extends core::Object implements asy::Future<core::int*> {
+  synthetic constructor •() → self::MyFuture*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method then<R extends core::Object* = dynamic>((core::int*) →* FutureOr<self::MyFuture::then::R*>* onValue, {core::Function* onError = #C1}) → asy::Future<self::MyFuture::then::R*>*; -> asy::Future::then
+  abstract member-signature method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<core::int*>*; -> asy::Future::catchError
+  abstract member-signature method whenComplete(() →* FutureOr<void>* action) → asy::Future<core::int*>*; -> asy::Future::whenComplete
+  abstract member-signature method asStream() → asy::Stream<core::int*>*; -> asy::Future::asStream
+  abstract member-signature method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<core::int*>* onTimeout = #C1}) → asy::Future<core::int*>*; -> asy::Future::timeout
+}
+static method test() → void async {
+  core::int* x0;
+  asy::Future<core::int*>* x1;
+  asy::Future<asy::Future<core::int*>*>* x2;
+  asy::Future<FutureOr<core::int*>*>* x3;
+  asy::Future<self::MyFuture*>* x4;
+  FutureOr<core::int*>* x5;
+  FutureOr<asy::Future<core::int*>*>* x6;
+  FutureOr<FutureOr<core::int*>*>* x7;
+  FutureOr<self::MyFuture*>* x8;
+  self::MyFuture* x9;
+  function test0() → asy::Future<core::int*>* async 
+    return x0;
+  function test1() → asy::Future<core::int*>* async 
+    return x1;
+  function test2() → asy::Future<asy::Future<core::int*>*>* async 
+    return x2;
+  function test3() → asy::Future<FutureOr<core::int*>*>* async 
+    return x3;
+  function test4() → asy::Future<self::MyFuture*>* async 
+    return x4;
+  function test5() → asy::Future<core::int*>* async 
+    return x5;
+  function test6() → asy::Future<asy::Future<core::int*>*>* async 
+    return x6;
+  function test7() → asy::Future<FutureOr<core::int*>*>* async 
+    return x7;
+  function test8() → asy::Future<self::MyFuture*>* async 
+    return x8;
+  function test9() → asy::Future<core::int*>* async 
+    return x9;
+  core::int* y0 = await x0;
+  core::int* y1 = await x1;
+  asy::Future<core::int*>* y2 = await x2;
+  FutureOr<core::int*>* y3 = await x3;
+  self::MyFuture* y4 = await x4;
+  core::int* y5 = await x5;
+  asy::Future<core::int*>* y6 = await x6;
+  FutureOr<core::int*>* y7 = await x7;
+  self::MyFuture* y8 = await x8;
+  core::int* y9 = await x9;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.modular.expect b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.modular.expect
new file mode 100644
index 0000000..7974c45
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static field asy::Future<core::int*>* futureInt = null;
+static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* => self::futureInt;
+static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async => self::futureInt;
+static method main() → dynamic {
+  self::f;
+  self::g;
+}
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.modular.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.modular.expect
new file mode 100644
index 0000000..6e90053
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+static field () →* asy::Future<core::int*>* f = () → asy::Future<core::int*>* async => 0;
+static method main() → dynamic {
+  self::f;
+}
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.modular.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.modular.expect
new file mode 100644
index 0000000..a44a6a9
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field FutureOr<core::int*>* futureOrInt = null;
+static field () →* FutureOr<core::int*>* f = () → FutureOr<core::int*>* => self::futureOrInt;
+static field () →* asy::Future<core::int*>* g = () → asy::Future<core::int*>* async => self::futureOrInt;
+static method main() → dynamic {
+  self::f;
+  self::g;
+}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.modular.expect
new file mode 100644
index 0000000..f19d465
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:async";
+import "dart:math" show Random;
+
+static method test() → dynamic {
+  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async {
+    if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
+      return asy::Future::value<core::int*>(1);
+    }
+    else {
+      return asy::Future::value<core::double*>(2.0);
+    }
+  };
+  asy::Future<core::num*>* g = f(){() →* asy::Future<core::num*>*};
+  asy::Future<core::int*>* h = f(){() →* asy::Future<core::num*>*} as{TypeError} asy::Future<core::int*>*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.modular.expect
new file mode 100644
index 0000000..419ef81
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:async";
+import "dart:math" show Random;
+
+static method test() → dynamic {
+  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async {
+    if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
+      return 1;
+    }
+    else {
+      return 2.0;
+    }
+  };
+  asy::Future<core::num*>* g = f(){() →* asy::Future<core::num*>*};
+  asy::Future<core::int*>* h = f(){() →* asy::Future<core::num*>*} as{TypeError} asy::Future<core::int*>*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.modular.expect
new file mode 100644
index 0000000..3af04ad
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:async";
+import "dart:math" show Random;
+
+static method test() → dynamic {
+  () →* asy::Future<core::num*>* f = () → asy::Future<core::num*>* async {
+    if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
+      return asy::Future::value<core::int*>(1);
+    }
+    else {
+      return 2.0;
+    }
+  };
+  asy::Future<core::num*>* g = f(){() →* asy::Future<core::num*>*};
+  asy::Future<core::int*>* h = f(){() →* asy::Future<core::num*>*} as{TypeError} asy::Future<core::int*>*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.modular.expect
new file mode 100644
index 0000000..f68b064
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method test() → dynamic {
+  () →* asy::Stream<core::num*>* f = () → asy::Stream<core::num*>* async* {
+    yield 1;
+    asy::Stream<core::double*>* s;
+    yield* s;
+  };
+  asy::Stream<core::num*>* g = f(){() →* asy::Stream<core::num*>*};
+  asy::Stream<core::int*>* h = f(){() →* asy::Stream<core::num*>*} as{TypeError} asy::Stream<core::int*>*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.modular.expect
new file mode 100644
index 0000000..add23e8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test1() → dynamic {
+  core::List<core::int*>* o;
+  core::Iterable<core::int*>* y = o.{core::Iterable::map}<core::int*>((core::int* x) → core::int* {
+    return x.{core::num::+}(1){(core::num*) →* core::int*};
+  }){((core::int*) →* core::int*) →* core::Iterable<core::int*>*};
+  core::Iterable<core::int*>* z = y;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.modular.expect
new file mode 100644
index 0000000..446c911
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic_void.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method f() → dynamic {
+  core::List<core::int*>* o;
+  o.{core::Iterable::where}((core::int* i) → core::bool* {
+    return i =={core::num::==}{(core::Object*) →* core::bool*} 0;
+  }){((core::int*) →* core::bool*) →* core::Iterable<core::int*>*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..e90018d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//     return /*error:RETURN_OF_INVALID_TYPE*/ 1;
+//                                             ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  function f() → core::String*
+    return null;
+  () →* core::String* g = f;
+  g = () → core::String* {
+    return invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    return /*error:RETURN_OF_INVALID_TYPE*/ 1;
+                                            ^" in 1 as{TypeError} core::String*;
+  };
+}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.modular.expect
new file mode 100644
index 0000000..f1a6a23
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field () →* core::String* g = #C1;
+static method f() → core::String*
+  return null;
+static method main() → dynamic {
+  #C1;
+}
+
+constants  {
+  #C1 = static-tearoff self::f
+}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.modular.expect
new file mode 100644
index 0000000..729dbe7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method main() → dynamic async {
+  () →* asy::Future<Null>* f = () → asy::Future<Null>* async {
+    return null;
+  };
+  asy::Future<dynamic>* y = f(){() →* asy::Future<Null>*};
+  asy::Future<core::String*>* z = f(){() →* asy::Future<Null>*};
+  core::String* s = await f(){() →* asy::Future<Null>*};
+}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.modular.expect
new file mode 100644
index 0000000..a85a79c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method main() → dynamic async {
+  () →* asy::Stream<Null>* f = () → asy::Stream<Null>* async* {
+    yield null;
+  };
+  asy::Stream<dynamic>* y = f(){() →* asy::Stream<Null>*};
+  asy::Stream<core::String*>* z = f(){() →* asy::Stream<Null>*};
+  core::String* s = await f(){() →* asy::Stream<Null>*}.{asy::Stream::first}{asy::Future<Null>*};
+}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.weak.modular.expect
new file mode 100644
index 0000000..4f32533
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic h = null;
+static method foo((core::Object*) →* core::int* f) → void {}
+static method test() → dynamic {
+  (core::Object*) →* Null f = (core::Object* x) → Null {
+    return null;
+  };
+  core::String* y = f(42){(core::Object*) →* Null};
+  f = (core::Object* x) → Null => "hello" as{TypeError} Null;
+  self::foo((core::Object* x) → Null {
+    return null;
+  });
+  self::foo((core::Object* x) → Null {
+    throw "not implemented";
+  });
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.modular.expect
new file mode 100644
index 0000000..579df9a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  () →* core::Iterable<Null>* f = () → core::Iterable<Null>* sync* {
+    yield null;
+  };
+  core::Iterable<dynamic>* y = f(){() →* core::Iterable<Null>*};
+  core::Iterable<core::String*>* z = f(){() →* core::Iterable<Null>*};
+  core::String* s = f(){() →* core::Iterable<Null>*}.{core::Iterable::first}{Null};
+}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.modular.expect
new file mode 100644
index 0000000..314b863
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:math" show Random;
+
+static method test2() → dynamic {
+  core::List<core::num*>* o;
+  core::Iterable<core::num*>* y = o.{core::Iterable::map}<core::num*>((core::num* x) → core::num* {
+    if(math::Random::•().{math::Random::nextBool}(){() →* core::bool*}) {
+      return x.{core::num::toInt}(){() →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+    }
+    else {
+      return x.{core::num::toDouble}(){() →* core::double*};
+    }
+  }){((core::num*) →* core::num*) →* core::Iterable<core::num*>*};
+  core::Iterable<core::num*>* w = y;
+  core::Iterable<core::int*>* z = y as{TypeError} core::Iterable<core::int*>*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.modular.expect
new file mode 100644
index 0000000..e9db0d8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  () →* (core::int*) →* core::double* f = () → (core::int*) →* core::double* {
+    return (core::int* x) → core::double* {
+      return 2.0.{core::double::*}(x){(core::num*) →* core::double*};
+    };
+  };
+}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.modular.expect
new file mode 100644
index 0000000..f309388
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test1() → dynamic {
+  core::List<core::int*>* o;
+  core::Iterable<Null>* y = o.{core::Iterable::map}<Null>((core::int* x) → Null {}){((core::int*) →* Null) →* core::Iterable<Null>*};
+  core::Iterable<core::int*>* z = y;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.weak.modular.expect
new file mode 100644
index 0000000..39b321c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.weak.modular.expect
@@ -0,0 +1,99 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart:35:7: Warning: Must explicitly return a value from a non-void function.
+//       return;
+//       ^
+//
+// pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart:65:7: Warning: Must explicitly return a value from a non-void function.
+//       return;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  () →* Null a = () → Null {};
+  () →* Null b = () → Null {
+    return;
+  };
+  () →* Null c = () → Null {
+    return null;
+  };
+  () →* core::int* d = () → core::int* {
+    return 0;
+  };
+  (core::bool*) →* Null e = (core::bool* b) → Null {
+    if(b) {
+      return;
+    }
+    else {
+      return;
+    }
+  };
+  (core::bool*) →* Null f = (core::bool* b) → Null {
+    if(b) {
+      return;
+    }
+    else {
+      return null;
+    }
+  };
+  (core::bool*) →* core::int* g = (core::bool* b) → core::int* {
+    if(b) {
+      return null;
+    }
+    else {
+      return 0;
+    }
+  };
+  (core::bool*) →* Null h = (core::bool* b) → Null {
+    if(b) {
+      return null;
+    }
+    else {
+      return;
+    }
+  };
+  (core::bool*) →* Null i = (core::bool* b) → Null {
+    if(b) {
+      return null;
+    }
+    else {
+      return null;
+    }
+  };
+  (core::bool*) →* core::int* j = (core::bool* b) → core::int* {
+    if(b) {
+      return null;
+    }
+    else {
+      return 0;
+    }
+  };
+  (core::bool*) →* core::int* k = (core::bool* b) → core::int* {
+    if(b) {
+      return 0;
+    }
+    else {
+      return null;
+    }
+  };
+  (core::bool*) →* core::int* l = (core::bool* b) → core::int* {
+    if(b) {
+      return 0;
+    }
+    else {
+      return null;
+    }
+  };
+  (core::bool*) →* core::int* m = (core::bool* b) → core::int* {
+    if(b) {
+      return 0;
+    }
+    else {
+      return 0;
+    }
+  };
+}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.weak.modular.expect
new file mode 100644
index 0000000..09f2baf
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test() → dynamic {
+  () →* core::Iterable<core::num*>* f = () → core::Iterable<core::num*>* sync* {
+    yield 1;
+    yield*<core::num*>[3, 4.0];
+  };
+  core::Iterable<core::num*>* g = f(){() →* core::Iterable<core::num*>*};
+  core::Iterable<core::int*>* h = f(){() →* core::Iterable<core::num*>*} as{TypeError} core::Iterable<core::int*>*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.weak.modular.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.weak.modular.expect
new file mode 100644
index 0000000..246d431
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method f() → dynamic {
+  core::List<core::int*>* o;
+  o.{core::Iterable::forEach}((core::int* i) → core::int* {
+    return i.{core::num::+}(1){(core::num*) →* core::int*};
+  }){((core::int*) →* void) →* void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bottom.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bottom.dart.weak.modular.expect
new file mode 100644
index 0000000..d841a5d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bottom.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static field dynamic v = null;
+static method main() → dynamic {
+  self::v;
+}
diff --git a/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.modular.expect
new file mode 100644
index 0000000..63cbd26
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bottom_in_closure.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static field () →* Null v = () → Null => null;
+static method main() → dynamic {
+  self::v;
+}
diff --git a/pkg/front_end/testcases/inference/bug30251.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug30251.dart.weak.modular.expect
new file mode 100644
index 0000000..0622d1c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30251.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  final field dynamic x;
+  constructor •(core::int* p) → self::C*
+    : self::C::x = self::f<core::int*>(1.{core::num::+}(p){(core::num*) →* core::int*}), super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>(self::f::T* t) → self::f::T*
+  return t;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30620.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug30620.dart.weak.modular.expect
new file mode 100644
index 0000000..e2320e0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String* foo;
+  constructor •(core::String* foo) → self::A*
+    : self::A::foo = foo, super core::Object::•()
+    ;
+  operator ==(core::Object* other) → core::bool*
+    return other is self::A* && other{self::A*}.{self::A::foo}{core::String*} =={core::String::==}{(core::Object*) →* core::bool*} this.{self::A::foo}{core::String*};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object*) →* core::bool*} new self::A::•("hello"));
+}
diff --git a/pkg/front_end/testcases/inference/bug30620_b.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug30620_b.dart.weak.modular.expect
new file mode 100644
index 0000000..bc320a3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_b.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String* foo;
+  constructor •(core::String* foo) → self::A*
+    : self::A::foo = foo, super core::Object::•()
+    ;
+  operator ==(core::Object* other) → core::bool*
+    return other is self::A* && other{self::A*}.{self::A::foo}{core::String*} =={core::String::==}{(core::Object*) →* core::bool*} this.{self::A::foo}{core::String*} && other{self::A*}.{self::A::foo}{core::String*} =={core::String::==}{(core::Object*) →* core::bool*} this.{self::A::foo}{core::String*};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object*) →* core::bool*} new self::A::•("hello"));
+}
diff --git a/pkg/front_end/testcases/inference/bug30620_c.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug30620_c.dart.weak.modular.expect
new file mode 100644
index 0000000..5a1ff19
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_c.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String* foo;
+  constructor •(core::String* foo) → self::A*
+    : self::A::foo = foo, super core::Object::•()
+    ;
+  operator ==(core::Object* other) → core::bool* {
+    if(other is self::A* && other{self::A*}.{self::A::foo}{core::String*} =={core::String::==}{(core::Object*) →* core::bool*} this.{self::A::foo}{core::String*}) {
+      if(other{self::A*}.{self::A::foo}{core::String*} =={core::String::==}{(core::Object*) →* core::bool*} this.{self::A::foo}{core::String*}) {
+      }
+    }
+    return true;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::print(new self::A::•("hello") =={self::A::==}{(core::Object*) →* core::bool*} new self::A::•("hello"));
+}
diff --git a/pkg/front_end/testcases/inference/bug30620_d.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug30620_d.dart.weak.modular.expect
new file mode 100644
index 0000000..bfc06da
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30620_d.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method foo(dynamic obj) → core::String*
+  return obj is core::String* ?{core::String*} obj{core::String*}.{core::String::toUpperCase}(){() →* core::String*} : null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug30624.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug30624.dart.weak.modular.expect
new file mode 100644
index 0000000..630409a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug30624.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<E extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::E*>*
+    : super core::Object::•()
+    ;
+  method barA([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
+    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t1 = cmp in #t1 == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t1);
+  }
+  method barB([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
+    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t2 = cmp in #t2 == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 as (self::C::E*, self::C::E*) →* core::int* : #t2);
+  }
+  method barC([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
+    (self::C::E*, self::C::E*) →* core::int* v = #C2;
+    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t3 = cmp in #t3 == null ?{(self::C::E*, self::C::E*) →* core::int*} v : #t3);
+  }
+  method barD([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
+    self::foo<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t4 = cmp in #t4 == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t4);
+  }
+  method barE([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
+    self::foo<self::C::E*>(this, cmp == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : cmp);
+  }
+  method barF([(self::C::E*, self::C::E*) →* core::int* cmp = #C1]) → void {
+    self::foo<self::C::E*>(this, !(cmp == null) ?{(self::C::E*, self::C::E*) →* core::int*} cmp : #C2);
+  }
+  static method _default(dynamic a, dynamic b) → core::int* {
+    return 1.{core::int::unary-}(){() →* core::int*};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo<E extends core::Object* = dynamic>(self::C<self::foo::E*>* c, (self::foo::E*, self::foo::E*) →* core::int* cmp) → void {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = static-tearoff self::C::_default
+}
diff --git a/pkg/front_end/testcases/inference/bug31132.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug31132.dart.weak.modular.expect
new file mode 100644
index 0000000..135614f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31132.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B {
+  field dynamic z = null;
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+static method test(self::B* x) → void {
+  self::C* y = x is self::C* ?{self::C*} x{self::C*} : new self::C::•();
+  core::print(y.{self::C::z}{dynamic});
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug31133.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug31133.dart.weak.modular.expect
new file mode 100644
index 0000000..46ea8a2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31133.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  core::int* i = 0;
+  for (final core::int* #t1 = i = i.{core::num::+}(1){(core::num*) →* core::int*}; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  }
+  for (final core::int* #t2 = i = i.{core::num::+}(1){(core::num*) →* core::int*}; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  }
+  for (final core::int* #t3 = i = i.{core::num::-}(1){(core::num*) →* core::int*}; i.{core::num::>=}(0){(core::num*) →* core::bool*}; i = i.{core::num::-}(1){(core::num*) →* core::int*}) {
+  }
+  for (final core::int* #t4 = i = i.{core::num::-}(1){(core::num*) →* core::int*}; i.{core::num::>=}(0){(core::num*) →* core::bool*}; i = i.{core::num::-}(1){(core::num*) →* core::int*}) {
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/bug31436.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug31436.dart.weak.modular.expect
new file mode 100644
index 0000000..adc6d4a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug31436.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method block_test() → void {
+  () →* core::List<core::Object*>* g;
+  g = () → core::List<core::Object*>* {
+    return <core::Object*>[3];
+  };
+  assert(g is () →* core::List<core::Object*>*);
+  assert(!(g is () →* core::List<core::int*>*));
+  g(){() →* core::List<core::Object*>*}.{core::List::add}("hello"){(core::Object*) →* void};
+  core::List<core::int*>* l = <core::int*>[3];
+  g = () → core::List<core::int*>* {
+    return l;
+  };
+  assert(g is () →* core::List<core::Object*>*);
+  assert(g is () →* core::List<core::int*>*);
+  try {
+    g(){() →* core::List<core::Object*>*}.{core::List::add}("hello"){(core::Object*) →* void};
+    throw "expected a runtime error";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+  core::Object* o = l;
+  g = () → core::List<core::Object*>* {
+    return o as{TypeError} core::List<core::Object*>*;
+  };
+  assert(g is () →* core::List<core::Object*>*);
+  assert(!(g is () →* core::List<core::int*>*));
+  assert(!(g is () →* core::Object*));
+  g(){() →* core::List<core::Object*>*};
+  o = 3;
+  try {
+    g(){() →* core::List<core::Object*>*};
+    throw "expected a runtime error";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
+static method arrow_test() → void {
+  () →* core::List<core::Object*>* g;
+  g = () → core::List<core::Object*>* => <core::Object*>[3];
+  assert(g is () →* core::List<core::Object*>*);
+  assert(!(g is () →* core::List<core::int*>*));
+  g(){() →* core::List<core::Object*>*}.{core::List::add}("hello"){(core::Object*) →* void};
+  core::List<core::int*>* l = <core::int*>[3];
+  g = () → core::List<core::int*>* => l;
+  assert(g is () →* core::List<core::Object*>*);
+  assert(g is () →* core::List<core::int*>*);
+  try {
+    g(){() →* core::List<core::Object*>*}.{core::List::add}("hello"){(core::Object*) →* void};
+    throw "expected a runtime error";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+  core::Object* o = l;
+  g = () → core::List<core::Object*>* => o as{TypeError} core::List<core::Object*>*;
+  assert(g is () →* core::List<core::Object*>*);
+  assert(!(g is () →* core::List<core::int*>*));
+  assert(!(g is () →* core::Object*));
+  g(){() →* core::List<core::Object*>*};
+  o = 3;
+  try {
+    g(){() →* core::List<core::Object*>*};
+    throw "expected a runtime error";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
+static method main() → dynamic {
+  self::block_test();
+  self::arrow_test();
+}
diff --git a/pkg/front_end/testcases/inference/bug32291.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug32291.dart.weak.modular.expect
new file mode 100644
index 0000000..b473c4f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug32291.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → void {
+  core::List<core::List<core::String*>*>* l = <core::List<core::String*>*>[<core::String*>["hi", "world"]];
+  core::Iterable<core::List<core::String*>*>* i1 = l.{core::Iterable::map}<core::List<core::String*>*>((core::List<core::String*>* ll) → core::List<core::String*>* => let final core::List<core::String*>* #t1 = ll in #t1 == null ?{core::List<core::String*>*} <core::String*>[] : #t1){((core::List<core::String*>*) →* core::List<core::String*>*) →* core::Iterable<core::List<core::String*>*>*};
+  core::Iterable<core::int*>* i2 = i1.{core::Iterable::map}<core::int*>((core::List<core::String*>* l) → core::int* => l.{core::List::length}{core::int*}){((core::List<core::String*>*) →* core::int*) →* core::Iterable<core::int*>*};
+  core::print(i2);
+}
diff --git a/pkg/front_end/testcases/inference/bug33324.dart.weak.modular.expect b/pkg/front_end/testcases/inference/bug33324.dart.weak.modular.expect
new file mode 100644
index 0000000..318df8a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bug33324.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method foo() → core::int* {
+  core::Function* f = (dynamic x) → dynamic => x;
+  core::List<dynamic>* l = <core::String*>["bar"].{core::Iterable::map}<dynamic>(f as{TypeError} (core::String*) →* dynamic){((core::String*) →* dynamic) →* core::Iterable<dynamic>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<dynamic>*};
+  l.{core::List::add}(42){(dynamic) →* void};
+  return l.{core::Iterable::first}{dynamic}{dynamic}.length as{TypeError,ForDynamic} core::int*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.modular.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.modular.expect
new file mode 100644
index 0000000..bc9a2a22
--- /dev/null
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method call() → core::int*
+    return 0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get call() → self::A*
+    return new self::A::•();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends core::Object {
+  field self::A* fieldA = new self::A::•();
+  field self::B* fieldB = new self::B::•();
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  get getA() → self::A*
+    return new self::A::•();
+  get getB() → self::B*
+    return new self::B::•();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  core::int* callA = new self::A::•().{self::A::call}(){() →* core::int*};
+  core::int* callFieldA = new self::D::•().{self::D::fieldA}{self::A*}.{self::A::call}(){() →* core::int*};
+  core::int* callGetA = new self::D::•().{self::D::getA}{self::A*}.{self::A::call}(){() →* core::int*};
+  core::int* callFieldB = new self::D::•().{self::D::fieldB}{self::B*}.{self::B::call}{self::A*}.{self::A::call}(){() →* core::int*};
+  core::int* callGetB = new self::D::•().{self::D::getB}{self::B*}.{self::B::call}{self::A*}.{self::A::call}(){() →* core::int*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.modular.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.modular.expect
new file mode 100644
index 0000000..36688cc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.modular.expect
@@ -0,0 +1,61 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class ActionDispatcher<P extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::ActionDispatcher<self::ActionDispatcher::P*>*
+    : super core::Object::•()
+    ;
+  method call([covariant-by-class self::ActionDispatcher::P* value = #C1]) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar extends core::Object {
+  synthetic constructor •() → self::Bar*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class FooActions extends core::Object {
+  synthetic constructor •() → self::FooActions*
+    : super core::Object::•()
+    ;
+  get foo() → self::ActionDispatcher<self::Bar*>*
+    return new self::ActionDispatcher::•<self::Bar*>();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {
+  let final self::FooActions* #t1 = new self::FooActions::•() in let final self::Bar* #t2 = new self::Bar::•() in #t1.{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(#t2){([self::Bar*]) →* void};
+  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar*]) →* void};
+  new self::FooActions::•().{self::FooActions::foo}{self::ActionDispatcher<self::Bar*>*}.{self::ActionDispatcher::call}(new self::Bar::•()){([self::Bar*]) →* void};
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.modular.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..1bacd22
--- /dev/null
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/circular_method_inference.dart:12:16: Error: 'A' is a supertype of itself.
+// abstract class A extends B {
+//                ^
+//
+// pkg/front_end/testcases/inference/circular_method_inference.dart:16:16: Error: 'B' is a supertype of itself.
+// abstract class B extends A {
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract method f(dynamic x) → dynamic;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract method f(dynamic x) → dynamic;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.modular.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.modular.expect
new file mode 100644
index 0000000..189aa8d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/circular_reference_via_closures.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+// var x = /*@ returnType=() ->* invalid-type */ () => y;
+//     ^
+//
+import self as self;
+
+static field invalid-type x = () → () →* invalid-type => self::y;
+static field () →* invalid-type y = () → invalid-type => self::x;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.modular.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.modular.expect
new file mode 100644
index 0000000..2439199
--- /dev/null
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+// var x = /*@ returnType=() ->* invalid-type */ () => y;
+//     ^
+//
+import self as self;
+
+static field invalid-type x = () → () →* invalid-type => self::y;
+static field () →* invalid-type y = () → invalid-type => self::x;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.modular.expect b/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.modular.expect
new file mode 100644
index 0000000..1937cae
--- /dev/null
+++ b/pkg/front_end/testcases/inference/closure_param_null_to_object.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  (Null) →* core::int* f = (core::Object* x) → core::int* => 1;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.modular.expect b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.modular.expect
new file mode 100644
index 0000000..9396c77
--- /dev/null
+++ b/pkg/front_end/testcases/inference/coerce_bottom_and_null_types.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method f() → dynamic {
+  core::int* a = 0;
+  dynamic b = null;
+  dynamic c = throw "foo";
+  () →* core::int* d = () → core::int* => 0;
+  () →* Null e = () → Null => null;
+  () →* Null f = () → Null => throw "foo";
+  () →* core::int* g = () → core::int* {
+    return 0;
+  };
+  () →* Null h = () → Null {
+    return null;
+  };
+  () →* Null i = () → Null {
+    return throw "foo";
+  };
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.modular.expect b/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.modular.expect
new file mode 100644
index 0000000..a27510a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/complex_predecrement.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::List<core::int*>* foo = <core::int*>[1, 2, 3];
+  core::print(let final core::List<core::int*>* #t1 = foo in let final core::int* #t2 = 0 in let final core::int* #t3 = #t1.{core::List::[]}(#t2){(core::int*) →* core::int*}.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, core::int*) →* void} in #t3);
+}
diff --git a/pkg/front_end/testcases/inference/conditional_lub.dart.weak.modular.expect b/pkg/front_end/testcases/inference/conditional_lub.dart.weak.modular.expect
new file mode 100644
index 0000000..0d65f10
--- /dev/null
+++ b/pkg/front_end/testcases/inference/conditional_lub.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* b = true;
+static field core::int* x = 0;
+static field core::double* y = 0.0;
+static field core::num* z = self::b ?{core::num*} self::x : self::y;
+static method main() → dynamic {
+  core::num* z = self::b ?{core::num*} self::x : self::y;
+}
diff --git a/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.modular.expect b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..c929f40
--- /dev/null
+++ b/pkg/front_end/testcases/inference/conditional_upwards_inference.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(core::List<self::C::T*>* x) → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::bool* b = false;
+  core::List<core::int*>* l1 = <core::int*>[1];
+  core::List<core::int*>* l2 = <core::int*>[2];
+  self::C<core::int*>* x = new self::C::•<core::int*>(l1);
+  self::C<core::int*>* y = new self::C::•<core::int*>(l2);
+  self::C<core::int*>* z = new self::C::•<core::int*>(b ?{core::List<core::int*>*} l1 : l2);
+}
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.modular.expect b/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.modular.expect
new file mode 100644
index 0000000..24a2f0c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field dynamic field1 = null;
+  field core::int* field2 = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class I extends core::Object {
+  field core::int* field1 = null;
+  field dynamic field2 = null;
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A implements self::I {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  get field1() → core::int*
+    return null;
+  get field2() → core::int*
+    return null;
+  set field1(dynamic value) → void {}
+  set field2(dynamic value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.modular.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.modular.expect
new file mode 100644
index 0000000..edd05fe
--- /dev/null
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.weak.modular.expect
@@ -0,0 +1,93 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I1 extends core::Object {
+  field core::int* x = null;
+  synthetic constructor •() → self::I1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class I2 extends self::I1 {
+  field core::int* y = null;
+  synthetic constructor •() → self::I2*
+    : super self::I1::•()
+    ;
+}
+class A extends core::Object {
+  final field self::I1* a = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  final field self::I2* a = null;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C1 extends core::Object implements self::A, self::B {
+  synthetic constructor •() → self::C1*
+    : super core::Object::•()
+    ;
+  get a() → self::I2*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C2 extends core::Object implements self::B, self::A {
+  synthetic constructor •() → self::C2*
+    : super core::Object::•()
+    ;
+  get a() → self::I2*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.modular.expect
new file mode 100644
index 0000000..f8a6f85
--- /dev/null
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.weak.modular.expect
@@ -0,0 +1,134 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:7: Error: Can't infer a return type for 'a' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   get a => null;
+//       ^
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:22:12: Context: This is one of the overridden members.
+//   final I1 a = null;
+//            ^
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:26:12: Context: This is one of the overridden members.
+//   final I2 a = null;
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class I1 extends core::Object {
+  field core::int* x = null;
+  synthetic constructor •() → self::I1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class I2 extends core::Object {
+  field core::int* y = null;
+  synthetic constructor •() → self::I2*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class I3 extends core::Object implements self::I1, self::I2 {
+  field core::int* x = null;
+  field core::int* y = null;
+  synthetic constructor •() → self::I3*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends core::Object {
+  final field self::I1* a = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  final field self::I2* a = null;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C1 extends core::Object implements self::A, self::B {
+  synthetic constructor •() → self::C1*
+    : super core::Object::•()
+    ;
+  get a() → self::I3*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C2 extends core::Object implements self::A, self::B {
+  synthetic constructor •() → self::C2*
+    : super core::Object::•()
+    ;
+  get a() → invalid-type
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.modular.expect
new file mode 100644
index 0000000..7a1c1c0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class Foo<T extends self::A*> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {
+  self::Foo<self::B*>* foo = new self::Foo::•<self::B*>();
+}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.modular.expect
new file mode 100644
index 0000000..1797fc0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+//                                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::C::T* t;
+  constructor •(self::C::T* t) → self::C<self::C::T*>*
+    : self::C::t = t, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  self::C<core::int*>* x = new self::C::•<core::int*>(42);
+  core::num* y;
+  self::C<core::int*>* c_int = new self::C::•<core::int*>(y as{TypeError} core::int*);
+  self::C<core::num*>* c_num = new self::C::•<core::num*>(123);
+  self::C<core::num*>* c_num2 = let final self::C<core::num*>* #t1 = new self::C::•<core::num*>(456) in block {
+    #t1.{self::C::t} = 1.0;
+  } =>#t1;
+  self::C<dynamic>* c_dynamic = new self::C::•<dynamic>(42);
+  x.{self::C::t} = invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x. /*@target=C.t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+                                                      ^" in "hello" as{TypeError} core::int*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.modular.expect
new file mode 100644
index 0000000..3ed0854
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.weak.modular.expect
@@ -0,0 +1,82 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:22:59: Error: Inferred type argument 'NotA' doesn't conform to the bound 'A' of the type variable 'T' on 'C'.
+//  - 'NotA' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       new /*error:COULD_NOT_INFER*/ /*@ typeArgs=NotA* */ C(myF);
+//                                                           ^
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:12:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends A> {
+//         ^
+//
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:21:29: Error: Inferred type argument 'NotA' doesn't conform to the bound 'A' of the type variable 'T' on 'C'.
+//  - 'NotA' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   var /*@ type=C<NotA*>* */ x =
+//                             ^
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart:12:9: Context: This is the type variable whose bound isn't conformed to.
+// class C<T extends A> {
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<T extends core::Object* = dynamic> = () →* T*;
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<T extends self::A*> extends core::Object {
+  constructor •(() →* self::C::T* f) → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class NotA extends core::Object {
+  synthetic constructor •() → self::NotA*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method myF() → self::NotA*
+  return null;
+static method main() → dynamic {
+  self::C<self::NotA*>* x = new self::C::•<self::NotA*>(#C1);
+}
+
+constants  {
+  #C1 = static-tearoff self::myF
+}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.modular.expect
new file mode 100644
index 0000000..5cf994f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field self::C::T* t;
+  const constructor •(self::C::T* t) → self::C<self::C::T*>*
+    : self::C::t = t, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C<core::int*>* x = #C2;
+}
+
+constants  {
+  #C1 = 42
+  #C2 = self::C<core::int*> {t:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///constructors_infer_from_arguments_const.dart:
+- C. (from org-dartlang-testcase:///constructors_infer_from_arguments_const.dart:10:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..c79ff6d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num*> extends core::Object /*hasConstConstructor*/  {
+  final field self::C::T* x;
+  const constructor •(self::C::T* x) → self::C<self::C::T*>*
+    : self::C::x = x, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<T extends core::num*> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {
+  self::C<core::int*>* c2 = #C2;
+}
+
+constants  {
+  #C1 = 0
+  #C2 = self::C<core::int*> {x:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///constructors_infer_from_arguments_const_with_upper_bound.dart:
+- C. (from org-dartlang-testcase:///constructors_infer_from_arguments_const_with_upper_bound.dart:10:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- D. (from org-dartlang-testcase:///constructors_infer_from_arguments_const_with_upper_bound.dart:14:9)
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..760a01e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(core::List<self::C::T*>* list) → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C<core::int*>* x = new self::C::•<core::int*>(<core::int*>[123]);
+  self::C<core::int*>* y = x;
+  self::C<dynamic>* a = new self::C::•<dynamic>(<dynamic>[123]);
+  self::C<core::Object*>* b = new self::C::•<core::Object*>(<core::Object*>[123]);
+}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.modular.expect
new file mode 100644
index 0000000..32c7a0d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:3: Error: Setter not found: 't'.
+//   t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::C::T* t = null;
+  constructor _() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>* {
+    self::C<self::C::•::T*>* x = new self::C::_<self::C::•::T*>();
+    t = t;
+    return x;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  self::C<core::int*>* x = self::C::•<core::int*>(42);
+  invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:3: Error: Setter not found: 't'.
+  t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+  ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..ba0e34d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::A<self::A::T*>* f = new self::A::•<self::A::T*>();
+  constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  static factory factory<T extends core::Object* = dynamic>() → self::A<self::A::factory::T*>*
+    return new self::A::•<self::A::factory::T*>();
+  method m() → self::A<self::A::T*>*
+    return new self::A::•<self::A::T*>();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.modular.expect
new file mode 100644
index 0000000..adf0647
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::C::T* t = null;
+  constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C<core::int*>* x = new self::C::named<core::int*>(<core::int*>[]);
+}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.modular.expect
new file mode 100644
index 0000000..c030443
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::C::T* t = null;
+  constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  static factory named<T extends core::Object* = dynamic>(self::C::named::T* t) → self::C<self::C::named::T*>* {
+    self::C<self::C::named::T*>* x = new self::C::•<self::C::named::T*>();
+    x.{self::C::t} = t;
+    return x;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C<core::int*>* x = self::C::named<core::int*>(42);
+}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.modular.expect
new file mode 100644
index 0000000..b9202f7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::C::T* t;
+  constructor •(self::C::T* t) → self::C<self::C::T*>*
+    : self::C::t = t, super core::Object::•()
+    ;
+  constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
+    : this self::C::•(t.{core::List::[]}(0){(core::int*) →* self::C::T*})
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C<core::int*>* x = new self::C::named<core::int*>(<core::int*>[42]);
+}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.modular.expect
new file mode 100644
index 0000000..7f8c3dd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class C<T extends core::Object* = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  abstract get t() → self::C::T*;
+  abstract set t(covariant-by-class self::C::T* x) → void;
+  static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
+    return new self::CImpl::•<self::C::•::T*>(t);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
+  covariant-by-class field self::CImpl::T* t;
+  constructor •(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
+    : self::CImpl::t = t, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C<core::int*>* x = new self::CImpl::•<core::int*>(42);
+}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.modular.expect
new file mode 100644
index 0000000..a2fd0ae
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class C<T extends core::Object* = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  abstract get t() → self::C::T*;
+  abstract set t(covariant-by-class self::C::T* x) → void;
+  static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
+    return self::CImpl::•<self::C::•::T*>(t);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
+  covariant-by-class field self::CImpl::T* t;
+  constructor _(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
+    : self::CImpl::t = t, super core::Object::•()
+    ;
+  static factory •<T extends core::Object* = dynamic>(self::CImpl::•::T* t) → self::CImpl<self::CImpl::•::T*>*
+    return new self::CImpl::_<self::CImpl::•::T*>(t);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C<core::int*>* x = self::CImpl::•<core::int*>(42);
+}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.modular.expect
new file mode 100644
index 0000000..5ef8772
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.modular.expect
@@ -0,0 +1,65 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:116: Error: Inferred type argument 'Cloneable<dynamic>' doesn't conform to the bound 'Cloneable<T>' of the type variable 'T' on 'Pair'.
+//  - 'Cloneable' is from 'pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@ typeArgs=Cloneable<dynamic>*, Cloneable<dynamic>* */ Pair
+//                                                                                                                    ^
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:10:12: Context: This is the type variable whose bound isn't conformed to.
+// class Pair<T extends Cloneable<T>, U extends Cloneable<U>> {
+//            ^
+//
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:116: Error: Inferred type argument 'Cloneable<dynamic>' doesn't conform to the bound 'Cloneable<U>' of the type variable 'U' on 'Pair'.
+//  - 'Cloneable' is from 'pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@ typeArgs=Cloneable<dynamic>*, Cloneable<dynamic>* */ Pair
+//                                                                                                                    ^
+// pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:10:36: Context: This is the type variable whose bound isn't conformed to.
+// class Pair<T extends Cloneable<T>, U extends Cloneable<U>> {
+//                                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Cloneable<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Cloneable<self::Cloneable::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Pair<T extends self::Cloneable<self::Pair::T*>* = self::Cloneable<dynamic>*, U extends self::Cloneable<self::Pair::U*>* = self::Cloneable<dynamic>*> extends core::Object {
+  covariant-by-class field self::Pair::T* t;
+  covariant-by-class field self::Pair::U* u;
+  constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
+    : self::Pair::t = t, self::Pair::u = u, super core::Object::•()
+    ;
+  constructor _() → self::Pair<self::Pair::T*, self::Pair::U*>*
+    : self::Pair::u = null, self::Pair::t = null, super core::Object::•()
+    ;
+  get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
+    return new self::Pair::•<self::Pair::U*, self::Pair::T*>(this.{self::Pair::u}{self::Pair::U*}, this.{self::Pair::t}{self::Pair::T*});
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  final self::Pair<self::Cloneable<dynamic>*, self::Cloneable<dynamic>*>* x = new self::Pair::_<self::Cloneable<dynamic>*, self::Cloneable<dynamic>*>();
+}
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.modular.expect
new file mode 100644
index 0000000..f36fcca
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Pair<T extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::Pair::T* t;
+  covariant-by-class field self::Pair::U* u;
+  constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
+    : self::Pair::t = t, self::Pair::u = u, super core::Object::•()
+    ;
+  get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
+    return new self::Pair::•<self::Pair::U*, self::Pair::T*>(this.{self::Pair::u}{self::Pair::U*}, this.{self::Pair::t}{self::Pair::T*});
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.modular.expect
new file mode 100644
index 0000000..63ca562
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart:11:77: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   var /*@type=invalid-type*/ a = new A /*error:EXTRA_POSITIONAL_ARGUMENTS*/ (42);
+//                                                                             ^
+// pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart:8:7: Context: The class 'A' has a constructor that takes no arguments.
+// class A<T> {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  invalid-type a = invalid-expression "pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart:11:77: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  var /*@type=invalid-type*/ a = new A /*error:EXTRA_POSITIONAL_ARGUMENTS*/ (42);
+                                                                            ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.modular.expect b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.modular.expect
new file mode 100644
index 0000000..51015b3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart:13:49: Error: The return type of the method 'B.x' is 'dynamic', which does not match the return type, 'int', of the overridden method, 'A.x'.
+// Change to a subtype of 'int'.
+//   /*error:INVALID_METHOD_OVERRIDE*/ dynamic get x => 3;
+//                                                 ^
+// pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart:9:13: Context: This is the overridden method ('x').
+//   final int x = 2;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::int* x = 2;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object implements self::A {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get x() → dynamic
+    return 3;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo() → dynamic {
+  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+}
+static method main() → dynamic {
+  self::foo();
+}
diff --git a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.modular.expect b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.modular.expect
new file mode 100644
index 0000000..9adf7a2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static field dynamic x = null;
+  static field core::int* y = 3;
+  field dynamic x2 = null;
+  field core::int* y2 = 3;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field dynamic x = null;
+static field core::int* y = 3;
+static method main() → dynamic {
+  self::x;
+  self::y;
+}
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.modular.expect b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.modular.expect
new file mode 100644
index 0000000..6fc489d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+
+static method test() → dynamic {
+  dynamic x = 3;
+  x = "hi";
+}
+static method main() → dynamic {
+  self::test();
+}
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.modular.expect b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.modular.expect
new file mode 100644
index 0000000..7dd89fd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+
+static method test() → dynamic {
+  dynamic x = null;
+  x = "hi";
+  x = 3;
+}
+static method main() → dynamic {
+  self::test();
+}
diff --git a/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.modular.expect
new file mode 100644
index 0000000..c7d6e17
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:21:65: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   dynamic c = /*error:COULD_NOT_INFER*/ /*@ typeArgs=dynamic */ max(x, y);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/downward_inference_fixes_no_upwards_errors.dart:22:81: Error: Inferred type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'T' on 'max'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   var /*@ type=dynamic */ d = /*error:COULD_NOT_INFER*/ /*@ typeArgs=dynamic */ max(
+//                                                                                 ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:math";
+
+static method f() → dynamic {
+  core::num* x;
+  dynamic y;
+  core::num* a = math::max<core::num*>(x, y as{TypeError,ForDynamic} core::num*);
+  core::Object* b = math::max<core::num*>(x, y as{TypeError,ForDynamic} core::num*);
+  dynamic c = math::max<dynamic>(x, y);
+  dynamic d = math::max<dynamic>(x, y);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.modular.expect
new file mode 100644
index 0000000..9ecd2a9
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* T*;
+class A<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field (self::A::T*) →* self::A::T* x;
+  constructor •((self::A::T*) →* self::A::T* x) → self::A<self::A::T*>*
+    : self::A::x = x, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {
+  {
+    core::String* x = "hello";
+    core::int* y = 3;
+    function f(core::List<core::Map<core::int*, core::String*>*>* l) → void {}
+    ;
+    f(<core::Map<core::int*, core::String*>*>[<core::int*, core::String*>{y: x}]){(core::List<core::Map<core::int*, core::String*>*>*) →* void};
+  }
+  {
+    function f(core::int* x) → core::int*
+      return 0;
+    self::A<core::int*>* a = new self::A::•<core::int*>(f);
+  }
+}
diff --git a/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.modular.expect
new file mode 100644
index 0000000..350439b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_context_from_inferred_field_type.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract get foo() → core::Iterable<core::String*>*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object implements self::A {
+  final field core::Iterable<core::String*>* foo = #C1;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {}
+
+constants  {
+  #C1 = <core::String*>[]
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.modular.expect
new file mode 100644
index 0000000..5fdfe4d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::List<core::String*>* l) → self::Foo*
+    : super core::Object::•()
+    ;
+  const constructor named(core::List<core::String*>* l) → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+@#C1
+class Bar extends core::Object {
+  synthetic constructor •() → self::Bar*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+@#C1
+class Baz extends core::Object {
+  synthetic constructor •() → self::Baz*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Foo {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///downwards_inference_annotations.dart:
+- Foo. (from org-dartlang-testcase:///downwards_inference_annotations.dart:9:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Foo.named (from org-dartlang-testcase:///downwards_inference_annotations.dart:10:9)
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.modular.expect
new file mode 100644
index 0000000..bc1bc95
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::List<core::String*>* l) → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Bar extends core::Object {
+  @#C1
+  field dynamic x = null;
+  @#C1
+  constructor •() → self::Bar*
+    : super core::Object::•()
+    ;
+  @#C1
+  abstract method f() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Foo {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///downwards_inference_annotations_class_members.dart:
+- Foo. (from org-dartlang-testcase:///downwards_inference_annotations_class_members.dart:9:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.modular.expect
new file mode 100644
index 0000000..c56e8ad
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_for_loop_variable.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::List<core::String*>* l) → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → void {
+  for (@#C1 core::int* i = 0; i.{core::num::<}(1){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  }
+  for (@#C1 core::int* i in <core::int*>[0]) {
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Foo {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///downwards_inference_annotations_for_loop_variable.dart:
+- Foo. (from org-dartlang-testcase:///downwards_inference_annotations_for_loop_variable.dart:9:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.modular.expect
new file mode 100644
index 0000000..bd79165
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::List<core::String*>* l) → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → void {
+  @#C1 dynamic x;
+  @#C1
+  function f() → void {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Foo {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///downwards_inference_annotations_locals.dart:
+- Foo. (from org-dartlang-testcase:///downwards_inference_annotations_locals.dart:9:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.modular.expect
new file mode 100644
index 0000000..4f025f27
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_locals_referring_to_locals.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  const constructor •(dynamic l) → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → void {
+  @#C1 dynamic y;
+  @#C1
+  function bar() → void {}
+  function baz(@#C1 dynamic formal) → void {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Foo {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///downwards_inference_annotations_locals_referring_to_locals.dart:
+- Foo. (from org-dartlang-testcase:///downwards_inference_annotations_locals_referring_to_locals.dart:9:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.modular.expect
new file mode 100644
index 0000000..d7a402b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.weak.modular.expect
@@ -0,0 +1,47 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::List<core::String*>* l) → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method m(@#C1 dynamic x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f(@#C1 dynamic x) → void {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Foo {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///downwards_inference_annotations_parameter.dart:
+- Foo. (from org-dartlang-testcase:///downwards_inference_annotations_parameter.dart:9:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.modular.expect
new file mode 100644
index 0000000..b72210d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter_local.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::List<core::String*>* l) → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → void {
+  function f(@#C1 dynamic x) → void {}
+  (dynamic) →* Null x = (@#C1 dynamic x) → Null {};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Foo {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///downwards_inference_annotations_parameter_local.dart:
+- Foo. (from org-dartlang-testcase:///downwards_inference_annotations_parameter_local.dart:9:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.modular.expect
new file mode 100644
index 0000000..60436b4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.weak.modular.expect
@@ -0,0 +1,63 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<@#C1 unrelated T extends core::Object* = dynamic> = () →* void;
+class Foo extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::List<core::String*>* l) → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<@#C1 T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  method m<@#C1 T extends core::Object* = dynamic>() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<@#C1 T extends core::Object* = dynamic>() → void {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Foo {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///downwards_inference_annotations_type_variable.dart:
+- Foo. (from org-dartlang-testcase:///downwards_inference_annotations_type_variable.dart:9:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.modular.expect
new file mode 100644
index 0000000..59529f1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable_local.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::List<core::String*>* l) → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → void {
+  function f<@#C1 T extends core::Object* = dynamic>() → void {}
+  <T extends core::Object* = dynamic>() →* Null x = <@#C1 T extends core::Object* = dynamic>() → Null {};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Foo {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///downwards_inference_annotations_type_variable_local.dart:
+- Foo. (from org-dartlang-testcase:///downwards_inference_annotations_type_variable_local.dart:9:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.modular.expect
new file mode 100644
index 0000000..17384f4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_typedef.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+@#C1
+typedef F = () →* void;
+class Foo extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::List<core::String*>* l) → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Foo {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///downwards_inference_annotations_typedef.dart:
+- Foo. (from org-dartlang-testcase:///downwards_inference_annotations_typedef.dart:9:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.modular.expect
new file mode 100644
index 0000000..c16d9c4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   l = /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"];
+//                                                                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  core::List<core::int*>* l;
+  l = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  l = /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];
+                                                                       ^" in "hello" as{TypeError} core::int*];
+  l = l = <core::int*>[1];
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.modular.expect
new file mode 100644
index 0000000..1a5ac1a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method main() → asy::Future<dynamic>* async {
+  dynamic d;
+  core::List<core::int*>* l0 = await<core::int*>[d as{TypeError,ForDynamic} core::int*];
+  core::List<core::int*>* l1 = await asy::Future::value<core::List<core::int*>*>(<core::int*>[d as{TypeError,ForDynamic} core::int*]);
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.modular.expect
new file mode 100644
index 0000000..e2d0f6d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.modular.expect
@@ -0,0 +1,105 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
+  static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
+    return null;
+  abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
+  abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
+  abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
+  abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
+  abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
+  abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
+  abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
+  abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
+  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
+  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
+  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
+  abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
+  abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
+  abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
+  abstract member-signature method forEach((self::MyStream::T*) →* void action) → asy::Future<dynamic>*; -> asy::Stream::forEach
+  abstract member-signature method every((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::every
+  abstract member-signature method any((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::any
+  abstract member-signature get length() → asy::Future<core::int*>*; -> asy::Stream::length
+  abstract member-signature get isEmpty() → asy::Future<core::bool*>*; -> asy::Stream::isEmpty
+  abstract member-signature method cast<R extends core::Object* = dynamic>() → asy::Stream<self::MyStream::cast::R*>*; -> asy::Stream::cast
+  abstract member-signature method toList() → asy::Future<core::List<self::MyStream::T*>*>*; -> asy::Stream::toList
+  abstract member-signature method toSet() → asy::Future<core::Set<self::MyStream::T*>*>*; -> asy::Stream::toSet
+  abstract member-signature method drain<E extends core::Object* = dynamic>([self::MyStream::drain::E* futureValue = #C1]) → asy::Future<self::MyStream::drain::E*>*; -> asy::Stream::drain
+  abstract member-signature method take(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::take
+  abstract member-signature method takeWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::takeWhile
+  abstract member-signature method skip(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skip
+  abstract member-signature method skipWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skipWhile
+  abstract member-signature method distinct([(self::MyStream::T*, self::MyStream::T*) →* core::bool* equals = #C1]) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::distinct
+  abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
+  abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
+  abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
+  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
+  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
+  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
+  abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
+  abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
+}
+static method F<T extends core::Object* = dynamic>() → self::F::T*
+  return null;
+static method f() → asy::Future<dynamic>* async {
+  dynamic d;
+  core::Object* o;
+  for (dynamic x in self::F<core::Iterable<dynamic>*>()) {
+  }
+  for (dynamic x in self::F<core::Iterable<dynamic>*>()) {
+  }
+  for (core::Object* x in self::F<core::Iterable<core::Object*>*>()) {
+  }
+  for (final dynamic #t1 in self::F<core::Iterable<dynamic>*>()) {
+    d = #t1;
+  }
+  for (final core::Object* #t2 in self::F<core::Iterable<core::Object*>*>()) {
+    o = #t2;
+  }
+  await for (dynamic x in self::F<asy::Stream<dynamic>*>()) {
+  }
+  await for (dynamic x in self::F<asy::Stream<dynamic>*>()) {
+  }
+  await for (core::Object* x in self::F<asy::Stream<core::Object*>*>()) {
+  }
+  await for (final dynamic #t3 in self::F<asy::Stream<dynamic>*>()) {
+    d = #t3;
+  }
+  await for (final core::Object* #t4 in self::F<asy::Stream<core::Object*>*>()) {
+    o = #t4;
+  }
+}
+static method main() → asy::Future<dynamic>* async {
+  for (core::int* x in <core::int*>[1, 2, 3]) {
+  }
+  for (core::num* x in <core::num*>[1, 2, 3]) {
+  }
+  for (core::int* x in <core::int*>[1, 2, 3]) {
+  }
+  await for (core::int* x in self::MyStream::•<core::int*>()) {
+  }
+  await for (core::int* x in self::MyStream::•<core::int*>()) {
+  }
+}
+
+constants  {
+  #C1 = null
+  #C2 = ""
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.modular.expect
new file mode 100644
index 0000000..1283bb2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = ([S*]) →* T*;
+class Foo extends core::Object {
+  field core::List<core::int*>* x;
+  constructor •([core::List<core::int*>* x = #C2]) → self::Foo*
+    : self::Foo::x = x, super core::Object::•()
+    ;
+  constructor named([core::List<core::int*>* x = #C2]) → self::Foo*
+    : self::Foo::x = null, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field ([core::List<core::int*>*]) →* core::String* g = ([core::List<core::int*>* llll = #C2]) → core::String* => "hello";
+static method f([core::List<core::int*>* l = #C2]) → void {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = <core::int*>[#C1]
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.modular.expect
new file mode 100644
index 0000000..c66599a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field self::B<core::int*>* b = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(self::B::T* x) → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::A* t1 = let final self::A* #t1 = new self::A::•() in block {
+  #t1.{self::A::b} = new self::B::•<core::int*>(1);
+} =>#t1;
+static field core::List<self::B<core::int*>*>* t2 = <self::B<core::int*>*>[new self::B::•<core::int*>(2)];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.modular.expect
new file mode 100644
index 0000000..69f8074
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(self::A::T* x) → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::List<self::A<core::int*>*>* t1 = <self::A<core::int*>*>[new self::A::•<core::int*>(1)];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.modular.expect
new file mode 100644
index 0000000..3550c19
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.weak.modular.expect
@@ -0,0 +1,164 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class F0 extends core::Object {
+  constructor •(core::List<core::int*>* a) → self::F0*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F1 extends core::Object {
+  constructor •({core::List<core::int*>* a = #C1}) → self::F1*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F2 extends core::Object {
+  constructor •(core::Iterable<core::int*>* a) → self::F2*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F3 extends core::Object {
+  constructor •(core::Iterable<core::Iterable<core::int*>*>* a) → self::F3*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F4 extends core::Object {
+  constructor •({core::Iterable<core::Iterable<core::int*>*>* a = #C1}) → self::F4*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → void {
+  new self::F0::•(<core::int*>[]);
+  new self::F0::•(<core::int*>[3]);
+  new self::F0::•(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                       ^" in "hello" as{TypeError} core::int*]);
+  new self::F0::•(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^" in "hello" as{TypeError} core::int*, 3]);
+  new self::F1::•(a: <core::int*>[]);
+  new self::F1::•(a: <core::int*>[3]);
+  new self::F1::•(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                               ^" in "hello" as{TypeError} core::int*]);
+  new self::F1::•(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^" in "hello" as{TypeError} core::int*, 3]);
+  new self::F2::•(<core::int*>[]);
+  new self::F2::•(<core::int*>[3]);
+  new self::F2::•(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                       ^" in "hello" as{TypeError} core::int*]);
+  new self::F2::•(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^" in "hello" as{TypeError} core::int*, 3]);
+  new self::F3::•(<core::Iterable<core::int*>*>[]);
+  new self::F3::•(<core::Iterable<core::int*>*>[<core::int*>[3]]);
+  new self::F3::•(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                     ^" in "hello" as{TypeError} core::int*]]);
+  new self::F3::•(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
+  new self::F4::•(a: <core::Iterable<core::int*>*>[]);
+  new self::F4::•(a: <core::Iterable<core::int*>*>[<core::int*>[3]]);
+  new self::F4::•(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                     ^" in "hello" as{TypeError} core::int*]]);
+  new self::F4::•(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.modular.expect
new file mode 100644
index 0000000..5fd719d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.weak.modular.expect
@@ -0,0 +1,99 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                       ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
+//                                                                       ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:74: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f1(a: /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                          ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                       ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);
+//                                                                       ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f0(core::List<core::int*>* a) → void {}
+static method f1({core::List<core::int*>* a = #C1}) → void {}
+static method f2(core::Iterable<core::int*>* a) → void {}
+static method f3(core::Iterable<core::Iterable<core::int*>*>* a) → void {}
+static method f4({core::Iterable<core::Iterable<core::int*>*>* a = #C1}) → void {}
+static method test() → void {
+  self::f0(<core::int*>[]);
+  self::f0(<core::int*>[3]);
+  self::f0(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                      ^" in "hello" as{TypeError} core::int*]);
+  self::f0(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
+                                                                      ^" in "hello" as{TypeError} core::int*, 3]);
+  self::f1(a: <core::int*>[]);
+  self::f1(a: <core::int*>[3]);
+  self::f1(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:74: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f1(a: /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                         ^" in "hello" as{TypeError} core::int*]);
+  self::f1(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^" in "hello" as{TypeError} core::int*, 3]);
+  self::f2(<core::int*>[]);
+  self::f2(<core::int*>[3]);
+  self::f2(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                      ^" in "hello" as{TypeError} core::int*]);
+  self::f2(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:71: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  f2(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
+                                                                      ^" in "hello" as{TypeError} core::int*, 3]);
+  self::f3(<core::Iterable<core::int*>*>[]);
+  self::f3(<core::Iterable<core::int*>*>[<core::int*>[3]]);
+  self::f3(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                     ^" in "hello" as{TypeError} core::int*]]);
+  self::f3(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
+  self::f4(a: <core::Iterable<core::int*>*>[]);
+  self::f4(a: <core::Iterable<core::int*>*>[<core::int*>[3]]);
+  self::f4(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                     ^" in "hello" as{TypeError} core::int*]]);
+  self::f4(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.modular.expect
new file mode 100644
index 0000000..f4f3e7f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.weak.modular.expect
@@ -0,0 +1,117 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:69: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
+//         l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (String x) =>
+//                                                                     ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:80: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//         l3 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (int x) => 3;
+//                                                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//             3;
+//             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       return /*error:RETURN_OF_INVALID_TYPE*/ x;
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:76: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
+//  - 'List' is from 'dart:core'.
+//         l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=List<String*>* */ (String
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//               /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                          ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                    ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//             x;
+//             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:63:14: Error: The method 'substring' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'substring'.
+//             .substring(3);
+//              ^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* T*;
+static method test() → void {
+  {
+    (core::int*) →* core::String* l0 = (core::int* x) → Null => null;
+    (core::int*) →* core::String* l1 = (core::int* x) → core::String* => "hello";
+    (core::int*) →* core::String* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:69: Error: A value of type 'String Function(String)' can't be assigned to a variable of type 'String Function(int)'.
+        l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (String x) =>
+                                                                    ^" in ((core::String* x) → core::String* => "hello") as{TypeError} (core::int*) →* core::String*;
+    (core::int*) →* core::String* l3 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:80: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        l3 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=String* */ (int x) => 3;
+                                                                               ^" in 3 as{TypeError} core::String*;
+    (core::int*) →* core::String* l4 = (core::int* x) → core::String* {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+                                              ^" in 3 as{TypeError} core::String*;
+    };
+  }
+  {
+    (core::int*) →* core::String* l0 = (core::int* x) → Null => null;
+    (core::int*) →* core::String* l1 = (core::int* x) → core::String* => "hello";
+    (core::int*) →* core::String* l2 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+            3;
+            ^" in 3 as{TypeError} core::String*;
+    (core::int*) →* core::String* l3 = (core::int* x) → core::String* {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+                                              ^" in 3 as{TypeError} core::String*;
+    };
+    (core::int*) →* core::String* l4 = (core::int* x) → core::String* {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return /*error:RETURN_OF_INVALID_TYPE*/ x;
+                                              ^" in x as{TypeError} core::String*;
+    };
+  }
+  {
+    (core::int*) →* core::List<core::String*>* l0 = (core::int* x) → Null => null;
+    (core::int*) →* core::List<core::String*>* l1 = (core::int* x) → core::List<core::String*>* => <core::String*>["hello"];
+    (core::int*) →* core::List<core::String*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:76: Error: A value of type 'List<String> Function(String)' can't be assigned to a variable of type 'List<String> Function(int)'.
+ - 'List' is from 'dart:core'.
+        l2 = /*error:INVALID_ASSIGNMENT*/ /*@ returnType=List<String*>* */ (String
+                                                                           ^" in ((core::String* x) → core::List<core::String*>* => <core::String*>["hello"]) as{TypeError} (core::int*) →* core::List<core::String*>*;
+    (core::int*) →* core::List<core::String*>* l3 = (core::int* x) → core::List<core::String*>* => <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+              /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+                                                         ^" in 3 as{TypeError} core::String*];
+    (core::int*) →* core::List<core::String*>* l4 = (core::int* x) → core::List<core::String*>* {
+      return <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+                                                   ^" in 3 as{TypeError} core::String*];
+    };
+  }
+  {
+    (core::int*) →* core::int* l0 = (core::int* x) → core::int* => x;
+    (core::int*) →* core::int* l1 = (core::int* x) → core::int* => x.{core::num::+}(1){(core::num*) →* core::int*};
+    (core::int*) →* core::String* l2 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+            x;
+            ^" in x as{TypeError} core::String*;
+    (core::int*) →* core::String* l3 = (core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:63:14: Error: The method 'substring' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'substring'.
+            .substring(3);
+             ^^^^^^^^^" in x{<unresolved>}.substring(3) as{TypeError,ForDynamic} core::String*;
+    (core::String*) →* core::String* l4 = (core::String* x) → core::String* => x.{core::String::substring}(3){(core::int*, [core::int*]) →* core::String*};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.modular.expect
new file mode 100644
index 0000000..a686107
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → void {
+  {
+    function f<T extends core::Object* = dynamic>(T* x) → T*
+      return null;
+    <T extends core::Object* = dynamic>(T*) →* T* v1 = f;
+    v1 = <S extends core::Object* = dynamic>(S* x) → S* => x;
+  }
+  {
+    function f<T extends core::Object* = dynamic>(T* x) → core::List<T*>*
+      return null;
+    <T extends core::Object* = dynamic>(T*) →* core::List<T*>* v2 = f;
+    v2 = <S extends core::Object* = dynamic>(S* x) → core::List<S*>* => <S*>[x];
+    core::Iterable<core::int*>* r = v2<core::int*>(42){(core::int*) →* core::List<core::int*>*};
+    core::Iterable<core::String*>* s = v2<core::String*>("hello"){(core::String*) →* core::List<core::String*>*};
+    core::Iterable<core::List<core::int*>*>* t = v2<core::List<core::int*>*>(<core::int*>[]){(core::List<core::int*>*) →* core::List<core::List<core::int*>*>*};
+    core::Iterable<core::num*>* u = v2<core::num*>(42){(core::num*) →* core::List<core::num*>*};
+    core::Iterable<core::num*>* v = v2<core::num*>(42){(core::num*) →* core::List<core::num*>*};
+  }
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.modular.expect
new file mode 100644
index 0000000..81acf78
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class F3<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(core::Iterable<core::Iterable<self::F3::T*>*>* a) → self::F3<self::F3::T*>*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F4<T extends core::Object* = dynamic> extends core::Object {
+  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a = #C1}) → self::F4<self::F4::T*>*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {
+  new self::F3::•<dynamic>(<core::Iterable<dynamic>*>[]);
+  new self::F4::•<dynamic>(a: <core::Iterable<dynamic>*>[]);
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.modular.expect
new file mode 100644
index 0000000..6d35ee8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.weak.modular.expect
@@ -0,0 +1,172 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
+//                                                                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class F0<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(core::List<self::F0::T*>* a) → self::F0<self::F0::T*>*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F1<T extends core::Object* = dynamic> extends core::Object {
+  constructor •({core::List<self::F1::T*>* a = #C1}) → self::F1<self::F1::T*>*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F2<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(core::Iterable<self::F2::T*>* a) → self::F2<self::F2::T*>*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F3<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(core::Iterable<core::Iterable<self::F3::T*>*>* a) → self::F3<self::F3::T*>*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F4<T extends core::Object* = dynamic> extends core::Object {
+  constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a = #C1}) → self::F4<self::F4::T*>*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → void {
+  new self::F0::•<core::int*>(<core::int*>[]);
+  new self::F0::•<core::int*>(<core::int*>[3]);
+  new self::F0::•<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                       ^" in "hello" as{TypeError} core::int*]);
+  new self::F0::•<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^" in "hello" as{TypeError} core::int*, 3]);
+  new self::F1::•<core::int*>(a: <core::int*>[]);
+  new self::F1::•<core::int*>(a: <core::int*>[3]);
+  new self::F1::•<core::int*>(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                               ^" in "hello" as{TypeError} core::int*]);
+  new self::F1::•<core::int*>(a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^" in "hello" as{TypeError} core::int*, 3]);
+  new self::F2::•<core::int*>(<core::int*>[]);
+  new self::F2::•<core::int*>(<core::int*>[3]);
+  new self::F2::•<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:72: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                       ^" in "hello" as{TypeError} core::int*]);
+  new self::F2::•<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^" in "hello" as{TypeError} core::int*, 3]);
+  new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[]);
+  new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[<core::int*>[3]]);
+  new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                     ^" in "hello" as{TypeError} core::int*]]);
+  new self::F3::•<core::int*>(<core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
+  new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[]);
+  new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[<core::int*>[3]]);
+  new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                     ^" in "hello" as{TypeError} core::int*]]);
+  new self::F4::•<core::int*>(a: <core::Iterable<core::int*>*>[<core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    /*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                     ^" in "hello" as{TypeError} core::int*], <core::int*>[3]]);
+  new self::F3::•<dynamic>(<core::Iterable<dynamic>*>[]);
+  self::F3<core::int*>* f31 = new self::F3::•<core::int*>(<core::List<core::int*>*>[<core::int*>[3]]);
+  self::F3<core::String*>* f32 = new self::F3::•<core::String*>(<core::List<core::String*>*>[<core::String*>["hello"]]);
+  self::F3<core::Object*>* f33 = new self::F3::•<core::Object*>(<core::List<core::Object*>*>[<core::String*>["hello"], <core::int*>[3]]);
+  new self::F4::•<dynamic>(a: <core::Iterable<dynamic>*>[]);
+  new self::F4::•<core::int*>(a: <core::List<core::int*>*>[<core::int*>[3]]);
+  new self::F4::•<core::String*>(a: <core::List<core::String*>*>[<core::String*>["hello"]]);
+  new self::F4::•<core::Object*>(a: <core::List<core::Object*>*>[<core::String*>["hello"], <core::int*>[3]]);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.modular.expect
new file mode 100644
index 0000000..9dc00c4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.weak.modular.expect
@@ -0,0 +1,134 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:68: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
+//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (String x) =>
+//                                                                    ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (int x) => 3;
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//         3;
+//         ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       return /*error:RETURN_OF_INVALID_TYPE*/ x;
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:75: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
+//  - 'List' is from 'dart:core'.
+//     v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=List<String*>* */ (String
+//                                                                           ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//         /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                    ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//         x;
+//         ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'substring'.
+//         .substring(3);
+//          ^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  {
+    function f<S extends core::Object* = dynamic>(core::int* x) → core::String*
+      return null;
+    <S extends core::Object* = dynamic>(core::int*) →* core::String* v = f;
+    v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
+    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => "hello";
+    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:68: Error: A value of type 'String Function<T>(String)' can't be assigned to a variable of type 'String Function<S>(int)'.
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (String x) =>
+                                                                   ^" in (<T extends core::Object* = dynamic>(core::String* x) → core::String* => "hello") as{TypeError} <S extends core::Object* = dynamic>(core::int*) →* core::String*;
+    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=String* */ (int x) => 3;
+                                                                              ^" in 3 as{TypeError} core::String*;
+    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+                                              ^" in 3 as{TypeError} core::String*;
+    };
+  }
+  {
+    function f<S extends core::Object* = dynamic>(core::int* x) → core::String*
+      return null;
+    <S extends core::Object* = dynamic>(core::int*) →* core::String* v = f;
+    v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
+    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => "hello";
+    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        3;
+        ^" in 3 as{TypeError} core::String*;
+    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+                                              ^" in 3 as{TypeError} core::String*;
+    };
+    v = <T extends core::Object* = dynamic>(core::int* x) → core::String* {
+      return invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      return /*error:RETURN_OF_INVALID_TYPE*/ x;
+                                              ^" in x as{TypeError} core::String*;
+    };
+  }
+  {
+    function f<S extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>*
+      return null;
+    <S extends core::Object* = dynamic>(core::int*) →* core::List<core::String*>* v = f;
+    v = <T extends core::Object* = dynamic>(core::int* x) → Null => null;
+    v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* => <core::String*>["hello"];
+    v = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:75: Error: A value of type 'List<String> Function<T>(String)' can't be assigned to a variable of type 'List<String> Function<S>(int)'.
+ - 'List' is from 'dart:core'.
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@ returnType=List<String*>* */ (String
+                                                                          ^" in (<T extends core::Object* = dynamic>(core::String* x) → core::List<core::String*>* => <core::String*>["hello"]) as{TypeError} <S extends core::Object* = dynamic>(core::int*) →* core::List<core::String*>*;
+    v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* => <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+          /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+                                                     ^" in 3 as{TypeError} core::String*];
+    v = <T extends core::Object* = dynamic>(core::int* x) → core::List<core::String*>* {
+      return <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+                                                   ^" in 3 as{TypeError} core::String*];
+    };
+  }
+  {
+    function int2int<S extends core::Object* = dynamic>(core::int* x) → core::int*
+      return null;
+    function int2String<T extends core::Object* = dynamic>(core::int* x) → core::String*
+      return null;
+    function string2String<T extends core::Object* = dynamic>(core::String* x) → core::String*
+      return null;
+    <S extends core::Object* = dynamic>(core::int*) →* core::int* x = int2int;
+    x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x;
+    x = <T extends core::Object* = dynamic>(core::int* x) → core::int* => x.{core::num::+}(1){(core::num*) →* core::int*};
+    <T extends core::Object* = dynamic>(core::int*) →* core::String* y = int2String;
+    y = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        x;
+        ^" in x as{TypeError} core::String*;
+    y = <T extends core::Object* = dynamic>(core::int* x) → core::String* => invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'substring'.
+        .substring(3);
+         ^^^^^^^^^" in x{<unresolved>}.substring(3) as{TypeError,ForDynamic} core::String*;
+    <T extends core::Object* = dynamic>(core::String*) →* core::String* z = string2String;
+    z = <T extends core::Object* = dynamic>(core::String* x) → core::String* => x.{core::String::substring}(3){(core::int*, [core::int*]) →* core::String*};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.modular.expect
new file mode 100644
index 0000000..ef65173
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.modular.expect
@@ -0,0 +1,312 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'A<int, dynamic>' that isn't of expected type 'A<int, String>'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+// Change the type of the object being constructed or the context in which it is used.
+//         a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, "hello");
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'A<dynamic, dynamic>' that isn't of expected type 'A<int, String>'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+// Change the type of the object being constructed or the context in which it is used.
+//         a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'B<String, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+//  - 'B' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+//         a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>("hello", 3);
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'B<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+//  - 'B' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+//         a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
+//  - 'C' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+//     A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);
+//                                                       ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
+//  - 'C' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+//     A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
+//                                                       ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'D<num, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+//  - 'D' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+//         a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>("hello");
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'D<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+//  - 'D' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+//         a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(
+//                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//           /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+//                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//         /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ "hello");
+//                                                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::A::S* x;
+  covariant-by-class field self::A::T* y;
+  constructor •(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
+    : self::A::x = x, self::A::y = y, super core::Object::•()
+    ;
+  constructor named(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
+    : self::A::x = x, self::A::y = y, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::B::T*, self::B::S*> {
+  constructor •(self::B::S* y, self::B::T* x) → self::B<self::B::S*, self::B::T*>*
+    : super self::A::•(x, y)
+    ;
+  constructor named(self::B::S* y, self::B::T* x) → self::B<self::B::S*, self::B::T*>*
+    : super self::A::named(x, y)
+    ;
+}
+class C<S extends core::Object* = dynamic> extends self::B<self::C::S*, self::C::S*> {
+  constructor •(self::C::S* a) → self::C<self::C::S*>*
+    : super self::B::•(a, a)
+    ;
+  constructor named(self::C::S* a) → self::C<self::C::S*>*
+    : super self::B::named(a, a)
+    ;
+}
+class D<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::B<self::D::T*, core::int*> {
+  constructor •(self::D::T* a) → self::D<self::D::S*, self::D::T*>*
+    : super self::B::•(a, 3)
+    ;
+  constructor named(self::D::T* a) → self::D<self::D::S*, self::D::T*>*
+    : super self::B::named(a, 3)
+    ;
+}
+class E<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::C<self::E::S*>*, self::E::T*> {
+  constructor •(self::E::T* a) → self::E<self::E::S*, self::E::T*>*
+    : super self::A::•(null, a)
+    ;
+}
+class F<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::F::S*, self::F::T*> {
+  constructor •(self::F::S* x, self::F::T* y, {core::List<self::F::S*>* a = #C1, core::List<self::F::T*>* b = #C1}) → self::F<self::F::S*, self::F::T*>*
+    : super self::A::•(x, y)
+    ;
+  constructor named(self::F::S* x, self::F::T* y, [self::F::S* a = #C1, self::F::T* b = #C1]) → self::F<self::F::S*, self::F::T*>*
+    : super self::A::•(a, b)
+    ;
+}
+static method test() → void {
+  {
+    self::A<core::int*, core::String*>* a0 = new self::A::•<core::int*, core::String*>(3, "hello");
+    self::A<core::int*, core::String*>* a1 = new self::A::named<core::int*, core::String*>(3, "hello");
+    self::A<core::int*, core::String*>* a2 = new self::A::•<core::int*, core::String*>(3, "hello");
+    self::A<core::int*, core::String*>* a3 = new self::A::named<core::int*, core::String*>(3, "hello");
+    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'A<int, dynamic>' that isn't of expected type 'A<int, String>'.
+ - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+Change the type of the object being constructed or the context in which it is used.
+        a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, \"hello\");
+                                                 ^" in new self::A::•<core::int*, dynamic>(3, "hello");
+    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'A<dynamic, dynamic>' that isn't of expected type 'A<int, String>'.
+ - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+Change the type of the object being constructed or the context in which it is used.
+        a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
+                                                 ^" in new self::A::named<dynamic, dynamic>(3, "hello");
+  }
+  {
+    self::A<core::int*, core::String*>* a0 = new self::A::•<core::int*, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+                                               ^" in 3 as{TypeError} core::String*);
+    self::A<core::int*, core::String*>* a1 = new self::A::named<core::int*, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+                                               ^" in 3 as{TypeError} core::String*);
+  }
+  {
+    self::A<core::int*, core::String*>* a0 = new self::B::•<core::String*, core::int*>("hello", 3);
+    self::A<core::int*, core::String*>* a1 = new self::B::named<core::String*, core::int*>("hello", 3);
+    self::A<core::int*, core::String*>* a2 = new self::B::•<core::String*, core::int*>("hello", 3);
+    self::A<core::int*, core::String*>* a3 = new self::B::named<core::String*, core::int*>("hello", 3);
+    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'B<String, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+ - 'B' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+ - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+        a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>(\"hello\", 3);
+                                              ^" in new self::B::•<core::String*, dynamic>("hello", 3) as{TypeError} self::A<core::int*, core::String*>*;
+    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'B<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+ - 'B' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+ - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+        a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(
+                                              ^" in new self::B::named<dynamic, dynamic>("hello", 3) as{TypeError} self::A<core::int*, core::String*>*;
+  }
+  {
+    self::A<core::int*, core::String*>* a0 = new self::B::•<core::String*, core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
+                                               ^" in 3 as{TypeError} core::String*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+                                               ^" in "hello" as{TypeError} core::int*);
+    self::A<core::int*, core::String*>* a1 = new self::B::named<core::String*, core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
+                                               ^" in 3 as{TypeError} core::String*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+                                               ^" in "hello" as{TypeError} core::int*);
+  }
+  {
+    self::A<core::int*, core::int*>* a0 = new self::C::•<core::int*>(3);
+    self::A<core::int*, core::int*>* a1 = new self::C::named<core::int*>(3);
+    self::A<core::int*, core::int*>* a2 = new self::C::•<core::int*>(3);
+    self::A<core::int*, core::int*>* a3 = new self::C::named<core::int*>(3);
+    self::A<core::int*, core::int*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
+ - 'C' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+ - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+    A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);
+                                                      ^" in new self::C::•<dynamic>(3) as{TypeError} self::A<core::int*, core::int*>*;
+    self::A<core::int*, core::int*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'C<dynamic>' can't be assigned to a variable of type 'A<int, int>'.
+ - 'C' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+ - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+    A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
+                                                      ^" in new self::C::named<dynamic>(3) as{TypeError} self::A<core::int*, core::int*>*;
+  }
+  {
+    self::A<core::int*, core::int*>* a0 = new self::C::•<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+                                               ^" in "hello" as{TypeError} core::int*);
+    self::A<core::int*, core::int*>* a1 = new self::C::named<core::int*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+                                               ^" in "hello" as{TypeError} core::int*);
+  }
+  {
+    self::A<core::int*, core::String*>* a0 = new self::D::•<dynamic, core::String*>("hello");
+    self::A<core::int*, core::String*>* a1 = new self::D::named<dynamic, core::String*>("hello");
+    self::A<core::int*, core::String*>* a2 = new self::D::•<core::int*, core::String*>("hello");
+    self::A<core::int*, core::String*>* a3 = new self::D::named<core::String*, core::String*>("hello");
+    self::A<core::int*, core::String*>* a4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'D<num, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+ - 'D' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+ - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+        a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>(\"hello\");
+                                              ^" in new self::D::•<core::num*, dynamic>("hello") as{TypeError} self::A<core::int*, core::String*>*;
+    self::A<core::int*, core::String*>* a5 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'D<dynamic, dynamic>' can't be assigned to a variable of type 'A<int, String>'.
+ - 'D' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+ - 'A' is from 'pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart'.
+        a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(
+                                              ^" in new self::D::named<dynamic, dynamic>("hello") as{TypeError} self::A<core::int*, core::String*>*;
+  }
+  {
+    self::A<core::int*, core::String*>* a0 = new self::D::•<dynamic, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+                                               ^" in 3 as{TypeError} core::String*);
+    self::A<core::int*, core::String*>* a1 = new self::D::named<dynamic, core::String*>(invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+                                               ^" in 3 as{TypeError} core::String*);
+  }
+  {
+    self::A<self::C<core::int*>*, core::String*>* a0 = new self::E::•<core::int*, core::String*>("hello");
+  }
+  {
+    self::A<core::int*, core::String*>* a0 = new self::F::•<core::int*, core::String*>(3, "hello", a: <core::int*>[3], b: <core::String*>["hello"]);
+    self::A<core::int*, core::String*>* a1 = new self::F::•<core::int*, core::String*>(3, "hello", a: <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                     ^" in "hello" as{TypeError} core::int*], b: <core::String*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+          /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+                                                     ^" in 3 as{TypeError} core::String*]);
+    self::A<core::int*, core::String*>* a2 = new self::F::named<core::int*, core::String*>(3, "hello", 3, "hello");
+    self::A<core::int*, core::String*>* a3 = new self::F::named<core::int*, core::String*>(3, "hello");
+    self::A<core::int*, core::String*>* a4 = new self::F::named<core::int*, core::String*>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^" in "hello" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+                                               ^" in 3 as{TypeError} core::String*);
+    self::A<core::int*, core::String*>* a5 = new self::F::named<core::int*, core::String*>(3, "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+                                               ^" in "hello" as{TypeError} core::int*);
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.modular.expect
new file mode 100644
index 0000000..871e6e1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.weak.modular.expect
@@ -0,0 +1,136 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
+//                                                                                         ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Change the type of the list literal or the context in which it is used.
+//     List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Change the type of the list literal or the context in which it is used.
+//     List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Change the type of the list literal or the context in which it is used.
+//     List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+// Change the type of the list literal or the context in which it is used.
+//     List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
+//                                                                                         ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
+//                                                                                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method foo([core::List<core::String*>* list1 = #C1, core::List<core::String*>* list2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
+                                                                                        ^"]) → void {}
+static method main() → void {
+  {
+    core::List<core::int*>* l0 = <core::int*>[];
+    core::List<core::int*>* l1 = <core::int*>[3];
+    core::List<core::int*>* l2 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                 ^" in "hello" as{TypeError} core::int*];
+    core::List<core::int*>* l3 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                 ^" in "hello" as{TypeError} core::int*, 3];
+  }
+  {
+    core::List<dynamic>* l0 = <dynamic>[];
+    core::List<dynamic>* l1 = <dynamic>[3];
+    core::List<dynamic>* l2 = <dynamic>["hello"];
+    core::List<dynamic>* l3 = <dynamic>["hello", 3];
+  }
+  {
+    core::List<core::int*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+ - 'List' is from 'dart:core'.
+Change the type of the list literal or the context in which it is used.
+    List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
+                                                            ^" in <core::num*>[];
+    core::List<core::int*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+ - 'List' is from 'dart:core'.
+Change the type of the list literal or the context in which it is used.
+    List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
+                                                            ^" in <core::num*>[3];
+    core::List<core::int*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+ - 'List' is from 'dart:core'.
+Change the type of the list literal or the context in which it is used.
+    List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+                                                            ^" in <core::num*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                 ^" in "hello" as{TypeError} core::num*];
+    core::List<core::int*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'List<num>' isn't of expected type 'List<int>'.
+ - 'List' is from 'dart:core'.
+Change the type of the list literal or the context in which it is used.
+    List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+                                                            ^" in <core::num*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                 ^" in "hello" as{TypeError} core::num*, 3];
+  }
+  {
+    core::Iterable<core::int*>* i0 = <core::int*>[];
+    core::Iterable<core::int*>* i1 = <core::int*>[3];
+    core::Iterable<core::int*>* i2 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                 ^" in "hello" as{TypeError} core::int*];
+    core::Iterable<core::int*>* i3 = <core::int*>[invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                 ^" in "hello" as{TypeError} core::int*, 3];
+  }
+  {
+    const core::List<core::int*>* c2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                                                        ^";
+    const core::List<core::int*>* c3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                                                        ^";
+  }
+}
+
+constants  {
+  #C1 = <core::String*>[]
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.modular.expect
new file mode 100644
index 0000000..c0dae24
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.weak.modular.expect
@@ -0,0 +1,91 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef Asserter<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+typedef AsserterBuilder<contravariant S extends core::Object* = dynamic, contravariant T extends core::Object* = dynamic> = (S*) →* (T*) →* void;
+class DartType extends core::Object {
+  synthetic constructor •() → self::DartType*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object {
+  static field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertBOf = null;
+  field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  static get assertCOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void
+    return null;
+  abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
+  method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic {
+    let final core::List<(self::DartType*) →* void>* #t1 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::C::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t1){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    self::C::assertBOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    self::C::assertCOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    let final core::List<(self::DartType*) →* void>* #t2 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::C::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t2){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    assertEOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class G<T extends core::Object* = dynamic> extends core::Object {
+  field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf = null;
+  synthetic constructor •() → self::G<self::G::T*>*
+    : super core::Object::•()
+    ;
+  abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
+  method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic {
+    let final core::List<(self::DartType*) →* void>* #t3 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t3){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    let final core::List<(self::DartType*) →* void>* #t4 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t4){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    let final core::List<(self::DartType*) →* void>* #t5 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in this.{self::G::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t5){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+    assertEOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field (self::DartType*) →* void _isInt;
+static field (self::DartType*) →* void _isString;
+static field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertBOf;
+static get assertCOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void
+  return null;
+static method test() → dynamic {
+  (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf;
+  assertAOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  self::assertBOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  self::assertCOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  self::C::assertBOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  self::C::assertCOf(<(self::DartType*) →* void>[self::_isInt, self::_isString]){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  self::C* c;
+  let final self::C* #t6 = c in let final core::List<(self::DartType*) →* void>* #t7 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t6.{self::C::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t7){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  let final self::C* #t8 = c in let final core::List<(self::DartType*) →* void>* #t9 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t8.{self::C::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t9){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  self::G<core::int*>* g;
+  let final self::G<core::int*>* #t10 = g in let final core::List<(self::DartType*) →* void>* #t11 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t10.{self::G::assertAOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t11){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+  let final self::G<core::int*>* #t12 = g in let final core::List<(self::DartType*) →* void>* #t13 = <(self::DartType*) →* void>[self::_isInt, self::_isString] in #t12.{self::G::assertDOf}{(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void}(#t13){(core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.modular.expect
new file mode 100644
index 0000000..ab58333
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.weak.modular.expect
@@ -0,0 +1,161 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                   ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                  ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       "hello": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                        ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": 3
+//                                             ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+// Change the type of the map literal or the context in which it is used.
+//     Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+// Change the type of the map literal or the context in which it is used.
+//     Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+//  - 'Map' is from 'dart:core'.
+// Change the type of the map literal or the context in which it is used.
+//     Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+//                                                                            ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//       3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                                                      ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//           /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+//                                                                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method foo([core::Map<core::int*, core::String*>* m1 = #C3, core::Map<core::int*, core::String*>* m2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                                                              ^"]) → void {}
+static method test() → void {
+  {
+    core::Map<core::int*, core::String*>* l0 = <core::int*, core::String*>{};
+    core::Map<core::int*, core::String*>* l1 = <core::int*, core::String*>{3: "hello"};
+    core::Map<core::int*, core::String*>* l2 = <core::int*, core::String*>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
+                                            ^" in "hello" as{TypeError} core::int*: "hello"};
+    core::Map<core::int*, core::String*>* l3 = <core::int*, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                 ^" in 3 as{TypeError} core::String*};
+    core::Map<core::int*, core::String*>* l4 = <core::int*, core::String*>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                            ^" in "hello" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+          /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                  ^" in 3 as{TypeError} core::String*};
+  }
+  {
+    core::Map<dynamic, dynamic>* l0 = <dynamic, dynamic>{};
+    core::Map<dynamic, dynamic>* l1 = <dynamic, dynamic>{3: "hello"};
+    core::Map<dynamic, dynamic>* l2 = <dynamic, dynamic>{"hello": "hello"};
+    core::Map<dynamic, dynamic>* l3 = <dynamic, dynamic>{3: 3};
+    core::Map<dynamic, dynamic>* l4 = <dynamic, dynamic>{3: "hello", "hello": 3};
+  }
+  {
+    core::Map<dynamic, core::String*>* l0 = <dynamic, core::String*>{};
+    core::Map<dynamic, core::String*>* l1 = <dynamic, core::String*>{3: "hello"};
+    core::Map<dynamic, core::String*>* l2 = <dynamic, core::String*>{"hello": "hello"};
+    core::Map<dynamic, core::String*>* l3 = <dynamic, core::String*>{3: invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                 ^" in 3 as{TypeError} core::String*};
+    core::Map<dynamic, core::String*>* l4 = <dynamic, core::String*>{3: "hello", "hello": invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                       ^" in 3 as{TypeError} core::String*};
+  }
+  {
+    core::Map<core::int*, dynamic>* l0 = <core::int*, dynamic>{};
+    core::Map<core::int*, dynamic>* l1 = <core::int*, dynamic>{3: "hello"};
+    core::Map<core::int*, dynamic>* l2 = <core::int*, dynamic>{invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
+                                            ^" in "hello" as{TypeError} core::int*: "hello"};
+    core::Map<core::int*, dynamic>* l3 = <core::int*, dynamic>{3: 3};
+    core::Map<core::int*, dynamic>* l4 = <core::int*, dynamic>{3: "hello", invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3
+                                            ^" in "hello" as{TypeError} core::int*: 3};
+  }
+  {
+    core::Map<core::int*, core::String*>* l0 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+Change the type of the map literal or the context in which it is used.
+    Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
+                                                                           ^" in <core::num*, dynamic>{};
+    core::Map<core::int*, core::String*>* l1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+Change the type of the map literal or the context in which it is used.
+    Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+                                                                           ^" in <core::num*, dynamic>{3: "hello"};
+    core::Map<core::int*, core::String*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'Map<num, dynamic>' isn't of expected type 'Map<int, String>'.
+ - 'Map' is from 'dart:core'.
+Change the type of the map literal or the context in which it is used.
+    Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+                                                                           ^" in <core::num*, dynamic>{3: 3};
+  }
+  {
+    const core::Map<core::int*, core::String*>* l2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                                                              ^";
+    const core::Map<core::int*, core::String*>* l3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                                                     ^";
+    const core::Map<core::int*, core::String*>* l4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                                                              ^";
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = "hello"
+  #C3 = <core::int*, core::String*>{#C1:#C2)
+}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.modular.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.modular.expect
new file mode 100644
index 0000000..5951999
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.modular.expect
@@ -0,0 +1,119 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:69: Error: A value of type 'MyStream<dynamic>' can't be assigned to a variable of type 'List<int>'.
+//  - 'MyStream' is from 'pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart'.
+//  - 'List' is from 'dart:core'.
+//   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic */ MyStream();
+//                                                                     ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Stream<List<int>>'.
+//  - 'List' is from 'dart:core'.
+//  - 'Stream' is from 'dart:async'.
+//   yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
+//                                                                ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:63: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Map<int, int>'.
+//  - 'List' is from 'dart:core'.
+//  - 'Map' is from 'dart:core'.
+//   yield /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
+//                                                               ^
+//
+// pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:79: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'Iterable<Map<int, int>>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'Iterable' is from 'dart:core'.
+//   yield* /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic, dynamic */ Map();
+//                                                                               ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
+  static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
+    return null;
+  abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
+  abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
+  abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
+  abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
+  abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
+  abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
+  abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
+  abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
+  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
+  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
+  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
+  abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
+  abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
+  abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
+  abstract member-signature method forEach((self::MyStream::T*) →* void action) → asy::Future<dynamic>*; -> asy::Stream::forEach
+  abstract member-signature method every((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::every
+  abstract member-signature method any((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::any
+  abstract member-signature get length() → asy::Future<core::int*>*; -> asy::Stream::length
+  abstract member-signature get isEmpty() → asy::Future<core::bool*>*; -> asy::Stream::isEmpty
+  abstract member-signature method cast<R extends core::Object* = dynamic>() → asy::Stream<self::MyStream::cast::R*>*; -> asy::Stream::cast
+  abstract member-signature method toList() → asy::Future<core::List<self::MyStream::T*>*>*; -> asy::Stream::toList
+  abstract member-signature method toSet() → asy::Future<core::Set<self::MyStream::T*>*>*; -> asy::Stream::toSet
+  abstract member-signature method drain<E extends core::Object* = dynamic>([self::MyStream::drain::E* futureValue = #C1]) → asy::Future<self::MyStream::drain::E*>*; -> asy::Stream::drain
+  abstract member-signature method take(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::take
+  abstract member-signature method takeWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::takeWhile
+  abstract member-signature method skip(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skip
+  abstract member-signature method skipWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skipWhile
+  abstract member-signature method distinct([(self::MyStream::T*, self::MyStream::T*) →* core::bool* equals = #C1]) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::distinct
+  abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
+  abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
+  abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
+  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
+  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
+  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
+  abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
+  abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
+}
+static method foo() → asy::Stream<core::List<core::int*>*>* async* {
+  yield<core::int*>[];
+  yield invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:69: Error: A value of type 'MyStream<dynamic>' can't be assigned to a variable of type 'List<int>'.
+ - 'MyStream' is from 'pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart'.
+ - 'List' is from 'dart:core'.
+  yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic */ MyStream();
+                                                                    ^" in self::MyStream::•<dynamic>() as{TypeError} core::List<core::int*>*;
+  yield* invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Stream<List<int>>'.
+ - 'List' is from 'dart:core'.
+ - 'Stream' is from 'dart:async'.
+  yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
+                                                               ^" in <dynamic>[] as{TypeError} asy::Stream<core::List<core::int*>*>*;
+  yield* self::MyStream::•<core::List<core::int*>*>();
+}
+static method bar() → core::Iterable<core::Map<core::int*, core::int*>*>* sync* {
+  yield core::Map::•<core::int*, core::int*>();
+  yield invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:63: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Map<int, int>'.
+ - 'List' is from 'dart:core'.
+ - 'Map' is from 'dart:core'.
+  yield /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
+                                                              ^" in <dynamic>[] as{TypeError} core::Map<core::int*, core::int*>*;
+  yield* invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:79: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'Iterable<Map<int, int>>'.
+ - 'Map' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  yield* /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic, dynamic */ Map();
+                                                                              ^" in core::Map::•<dynamic, dynamic>() as{TypeError} core::Iterable<core::Map<core::int*, core::int*>*>*;
+  yield*<core::Map<core::int*, core::int*>*>[];
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = ""
+}
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.modular.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.modular.expect
new file mode 100644
index 0000000..3cc9299
--- /dev/null
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/dynamic_methods.dart:16:46: Error: 'hashCode' isn't a function or method and can't be invoked.
+//       d. /*@target=Object.hashCode*/ hashCode();
+//                                              ^^^^...
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  method foo(core::int* x) → core::int*
+    return x;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  dynamic d = new self::Foo::•();
+  core::int* get_hashCode = d.{core::Object::hashCode}{core::int*};
+  dynamic call_hashCode = invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:46: Error: 'hashCode' isn't a function or method and can't be invoked.
+      d. /*@target=Object.hashCode*/ hashCode();
+                                             ^^^^..." in d.{core::Object::hashCode}{core::int*}{<unresolved>}.call();
+  core::String* call_toString = d.{core::Object::toString}(){() →* core::String*};
+  dynamic call_toStringArg = d{dynamic}.toString(color: "pink");
+  dynamic call_foo0 = d{dynamic}.foo();
+  dynamic call_foo1 = d{dynamic}.foo(1);
+  dynamic call_foo2 = d{dynamic}.foo(1, 2);
+  dynamic call_nsm0 = d{dynamic}.noSuchMethod();
+  dynamic call_nsm1 = d.{core::Object::noSuchMethod}(null){(core::Invocation*) →* dynamic};
+  dynamic call_nsm2 = d{dynamic}.noSuchMethod(null, null);
+  core::bool* equals_self = d =={core::Object::==}{(core::Object*) →* core::bool*} d;
+  core::bool* equals_null = d == null;
+  core::bool* null_equals = d == null;
+  core::bool* not_equals_self = !(d =={core::Object::==}{(core::Object*) →* core::bool*} d);
+  core::bool* not_equals_null = !(d == null);
+  core::bool* null_not_equals = !(d == null);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.modular.expect b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.modular.expect
new file mode 100644
index 0000000..be4cd27
--- /dev/null
+++ b/pkg/front_end/testcases/inference/field_initializer_context_explicit.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  final field core::int* x;
+  constructor •() → self::C*
+    : self::C::x = self::f<core::int*>(), super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.modular.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.modular.expect
new file mode 100644
index 0000000..4be2a2e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object implements self::B {
+  final field core::int* x;
+  constructor •() → self::C*
+    : self::C::x = self::f<core::int*>(), super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.modular.expect b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.modular.expect
new file mode 100644
index 0000000..be4cd27
--- /dev/null
+++ b/pkg/front_end/testcases/inference/field_initializer_context_this.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  final field core::int* x;
+  constructor •() → self::C*
+    : self::C::x = self::f<core::int*>(), super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.modular.expect
new file mode 100644
index 0000000..fa1a596
--- /dev/null
+++ b/pkg/front_end/testcases/inference/field_initializer_parameter.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  final field dynamic x;
+  constructor •(core::int* p) → self::C*
+    : self::C::x = self::f<core::int*>(p), super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>(self::f::T* t) → self::f::T*
+  return t;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..0c7c096
--- /dev/null
+++ b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  final field core::int* x = self::C::_x;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  static get _x() → core::int*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..f7f1c21
--- /dev/null
+++ b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  final field core::int* x = self::y;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static get y() → core::int*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.modular.expect b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.modular.expect
new file mode 100644
index 0000000..93ecd39
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_each_downcast_iterable.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static method test() → dynamic async {
+  core::Object* o;
+  for (dynamic x in o as{TypeError} core::Iterable<dynamic>*) {
+  }
+  await for (dynamic x in o as{TypeError} asy::Stream<dynamic>*) {
+  }
+  core::int* y;
+  for (final dynamic #t1 in o as{TypeError} core::Iterable<dynamic>*) {
+    y = #t1 as{TypeError,ForDynamic} core::int*;
+  }
+  await for (final dynamic #t2 in o as{TypeError} asy::Stream<dynamic>*) {
+    y = #t2 as{TypeError,ForDynamic} core::int*;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_in_loop_promotion.dart.weak.modular.expect b/pkg/front_end/testcases/inference/for_in_loop_promotion.dart.weak.modular.expect
new file mode 100644
index 0000000..f98e42e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_in_loop_promotion.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test(core::List<core::num*>* nums) → void {
+  for (core::num* x in nums) {
+    if(x is core::int*) {
+      core::int* y = x{core::int*};
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.modular.expect b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.modular.expect
new file mode 100644
index 0000000..f17816f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_empty_condition.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  #L1:
+  for (core::num* x = 0; ; x = x.{core::num::+}(1){(core::num*) →* core::num*}) {
+    if(x.{core::num::>=}(10){(core::num*) →* core::bool*})
+      break #L1;
+    if(x is core::int*) {
+      core::int* y = x{core::int*};
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.modular.expect b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.modular.expect
new file mode 100644
index 0000000..8f36a9c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_initializer_expression.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  core::num* x;
+  for (final core::int* #t1 = x = 0; x.{core::num::<}(10){(core::num*) →* core::bool*}; x = x.{core::num::+}(1){(core::num*) →* core::num*}) {
+    if(x is core::int*) {
+      core::int* y = x{core::int*};
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/for_loop_promotion.dart.weak.modular.expect b/pkg/front_end/testcases/inference/for_loop_promotion.dart.weak.modular.expect
new file mode 100644
index 0000000..6cecf17
--- /dev/null
+++ b/pkg/front_end/testcases/inference/for_loop_promotion.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  for (core::num* x = 0; x.{core::num::<}(10){(core::num*) →* core::bool*}; x = x.{core::num::+}(1){(core::num*) →* core::num*}) {
+    if(x is core::int*) {
+      core::int* y = x{core::int*};
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.modular.expect
new file mode 100644
index 0000000..36d60ee
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_or_subtyping.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static method add(core::int* x) → void {}
+static method add2(core::int* y) → dynamic {}
+static method test() → dynamic {
+  asy::Future<core::int*>* f;
+  asy::Future<void>* a = f.{asy::Future::then}<void>(#C1){((core::int*) →* FutureOr<void>*, {onError: core::Function*}) →* asy::Future<void>*};
+  asy::Future<dynamic>* b = f.{asy::Future::then}<dynamic>(#C2){((core::int*) →* FutureOr<dynamic>*, {onError: core::Function*}) →* asy::Future<dynamic>*};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::add
+  #C2 = static-tearoff self::add2
+}
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.modular.expect
new file mode 100644
index 0000000..3472083
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method test() → void {
+  self::MyFuture<dynamic>* f;
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return await asy::Future::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return 3;
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
+    return asy::Future::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return asy::Future::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.modular.expect
new file mode 100644
index 0000000..caba7e5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method test() → void {
+  self::MyFuture<dynamic>* f;
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return await new self::MyFuture::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return 3;
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
+    return new self::MyFuture::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return new self::MyFuture::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.modular.expect
new file mode 100644
index 0000000..1efc406
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method test() → void {
+  self::MyFuture<dynamic>* f;
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return await asy::Future::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return 3;
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
+    return asy::Future::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return asy::Future::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.modular.expect
new file mode 100644
index 0000000..eaff2a5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method test() → void {
+  self::MyFuture<dynamic>* f;
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return await new self::MyFuture::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t3 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t4 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return 3;
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
+    return new self::MyFuture::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t7 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t8 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return new self::MyFuture::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.modular.expect
new file mode 100644
index 0000000..955cbb3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method test() → void {
+  asy::Future<dynamic>* f;
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return await new self::MyFuture::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return 3;
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* {
+    return new self::MyFuture::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => new self::MyFuture::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return new self::MyFuture::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.modular.expect
new file mode 100644
index 0000000..438bfac
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method test() → void {
+  asy::Future<dynamic>* f;
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => await asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return await asy::Future::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t3 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => 3){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t4 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return 3;
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* {
+    return asy::Future::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t7 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async => asy::Future::value<core::int*>(3)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t8 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* async {
+    return asy::Future::value<core::int*>(3);
+  }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.modular.expect
new file mode 100644
index 0000000..816b3ee
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method test() → void {
+  self::MyFuture<core::bool*>* f;
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+    return (await x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
+    return (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.modular.expect
new file mode 100644
index 0000000..11b74949
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method test() → void {
+  self::MyFuture<core::bool*>* f;
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+    return (await x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
+    return (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.modular.expect
new file mode 100644
index 0000000..11b63b1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method test() → void {
+  self::MyFuture<core::bool*>* f;
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+    return (await x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
+    return (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.modular.expect
new file mode 100644
index 0000000..cc3ada3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method test() → void {
+  self::MyFuture<core::bool*>* f;
+  self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+    return (await x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  self::MyFuture<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
+    return (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.modular.expect
new file mode 100644
index 0000000..83acf25
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method test() → void {
+  asy::Future<core::bool*>* f;
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await new self::MyFuture::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+    return (await x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
+    return (x ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.modular.expect
new file mode 100644
index 0000000..0c2809d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method test() → void {
+  asy::Future<core::bool*>* f;
+  asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<core::int*>* async => x ?{core::int*} 2 : await asy::Future::value<core::int*>(3)){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* async {
+    return (await x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* => (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+  asy::Future<core::int*>* t6 = f.{asy::Future::then}<core::int*>((core::bool* x) → FutureOr<core::int*>* {
+    return (x ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+  }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart.weak.modular.expect
new file mode 100644
index 0000000..7024c62
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_downwards_method_target.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method test() → dynamic {
+  asy::Future<core::int*>* f;
+  asy::Future<core::List<core::int*>*>* b = f.{asy::Future::then}<core::List<dynamic>*>((core::int* x) → core::List<dynamic>* => <dynamic>[]){((core::int*) →* FutureOr<core::List<dynamic>*>*, {onError: core::Function*}) →* asy::Future<core::List<dynamic>*>*}.{asy::Future::whenComplete}(() → Null {}){(() →* FutureOr<void>*) →* asy::Future<core::List<dynamic>*>*} as{TypeError} asy::Future<core::List<core::int*>*>*;
+  b = f.{asy::Future::then}<core::List<core::int*>*>((core::int* x) → core::List<core::int*>* => <core::int*>[]){((core::int*) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.modular.expect
new file mode 100644
index 0000000..668e6c8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_explicit_future.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:99: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'FutureOr<Future<List<int>>>'.
+//  - 'List' is from 'dart:core'.
+//  - 'Future' is from 'dart:async'.
+//       /*@returnType=FutureOr<Future<List<int*>*>*>**/ (/*@type=int**/ x) => /*@typeArgs=dynamic*/ []);
+//                                                                                                   ^
+//
+// pkg/front_end/testcases/inference/future_then_explicit_future.dart:16:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
+//  - 'Future' is from 'dart:async'.
+//  - 'List' is from 'dart:core'.
+//   Future<List<int>> y = x;
+//                         ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method m1() → dynamic {
+  asy::Future<core::int*>* f;
+  asy::Future<asy::Future<core::List<core::int*>*>*>* x = f.{asy::Future::then}<asy::Future<core::List<core::int*>*>*>((core::int* x) → FutureOr<asy::Future<core::List<core::int*>*>*>* => invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:15:99: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'FutureOr<Future<List<int>>>'.
+ - 'List' is from 'dart:core'.
+ - 'Future' is from 'dart:async'.
+      /*@returnType=FutureOr<Future<List<int*>*>*>**/ (/*@type=int**/ x) => /*@typeArgs=dynamic*/ []);
+                                                                                                  ^" in <dynamic>[] as{TypeError} FutureOr<asy::Future<core::List<core::int*>*>*>*){((core::int*) →* FutureOr<asy::Future<core::List<core::int*>*>*>*, {onError: core::Function*}) →* asy::Future<asy::Future<core::List<core::int*>*>*>*};
+  asy::Future<core::List<core::int*>*>* y = invalid-expression "pkg/front_end/testcases/inference/future_then_explicit_future.dart:16:25: Error: A value of type 'Future<Future<List<int>>>' can't be assigned to a variable of type 'Future<List<int>>'.
+ - 'Future' is from 'dart:async'.
+ - 'List' is from 'dart:core'.
+  Future<List<int>> y = x;
+                        ^" in x as{TypeError} asy::Future<core::List<core::int*>*>*;
+}
+static method m2() → dynamic {
+  asy::Future<core::int*>* f;
+  asy::Future<core::List<core::int*>*>* x = f.{asy::Future::then}<core::List<core::int*>*>((core::int* x) → core::List<core::int*>* => <core::int*>[]){((core::int*) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
+  asy::Future<core::List<core::int*>*>* y = x;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.modular.expect
new file mode 100644
index 0000000..39e82e2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method test() → void {
+  self::MyFuture<core::int*>* f;
+  asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::int* x) → asy::Future<core::int*>* async => let final core::int* #t1 = x in #t1 == null ?{core::int*} await asy::Future::value<core::int*>(3) : #t1){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t2 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* async {
+    return (let final core::int* #t2 = await x in #t2 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t2) as{TypeError} FutureOr<core::int*>*;
+  }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t5 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* => (let final core::int* #t3 = x in #t3 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t3) as{TypeError} FutureOr<core::int*>*){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+  asy::Future<core::int*>* t6 = f.{self::MyFuture::then}<core::int*>((core::int* x) → FutureOr<core::int*>* {
+    return (let final core::int* #t4 = x in #t4 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t4) as{TypeError} FutureOr<core::int*>*;
+  }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..ac37ff3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
+//  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards.dart'.
+//  - 'Future' is from 'dart:async'.
+//   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
+//                                                 ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method main() → void {
+  self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
+  asy::Future<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
+ - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards.dart'.
+ - 'Future' is from 'dart:async'.
+  Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
+                                                ^" in f as{TypeError} asy::Future<core::int*>*;
+  asy::Future<core::num*>* f3 = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*} as asy::Future<core::double*>*;
+}
+static method foo() → self::MyFuture<dynamic>*
+  return new self::MyFuture::value<core::int*>(1);
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.modular.expect
new file mode 100644
index 0000000..e071ff7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.modular.expect
@@ -0,0 +1,65 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
+//  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards_2.dart'.
+//   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
+//                                                   ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method main() → void {
+  self::MyFuture<core::double*>* f = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*};
+  self::MyFuture<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
+ - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards_2.dart'.
+  MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
+                                                  ^" in f as{TypeError} self::MyFuture<core::int*>*;
+  self::MyFuture<core::num*>* f3 = self::foo().{self::MyFuture::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* self::MyFuture<core::double*>*} as self::MyFuture<core::double*>*;
+}
+static method foo() → self::MyFuture<dynamic>*
+  return new self::MyFuture::value<core::int*>(1);
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.modular.expect
new file mode 100644
index 0000000..c45ca17
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
+//  - 'Future' is from 'dart:async'.
+//   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
+//                                                 ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(self::MyFuture::T* x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method test() → void {
+  asy::Future<core::double*>* f = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* asy::Future<core::double*>*};
+  asy::Future<core::int*>* f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
+ - 'Future' is from 'dart:async'.
+  Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
+                                                ^" in f as{TypeError} asy::Future<core::int*>*;
+  asy::Future<core::num*>* f3 = self::foo().{asy::Future::then}<core::double*>((dynamic _) → core::double* => 2.3){((dynamic) →* FutureOr<core::double*>*, {onError: core::Function*}) →* asy::Future<core::double*>*} as asy::Future<core::double*>*;
+}
+static method foo() → asy::Future<dynamic>*
+  return asy::Future::value<core::int*>(1);
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.modular.expect
new file mode 100644
index 0000000..3acce35
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_then_upwards_from_block.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method test() → dynamic {
+  asy::Future<core::int*>* base;
+  asy::Future<core::bool*>* f = base.{asy::Future::then}<core::bool*>((core::int* x) → core::bool* {
+    return x =={core::num::==}{(core::Object*) →* core::bool*} 0;
+  }){((core::int*) →* FutureOr<core::bool*>*, {onError: core::Function*}) →* asy::Future<core::bool*>*};
+  asy::Future<core::bool*>* g = base.{asy::Future::then}<core::bool*>((core::int* x) → core::bool* => x =={core::num::==}{(core::Object*) →* core::bool*} 0){((core::int*) →* FutureOr<core::bool*>*, {onError: core::Function*}) →* asy::Future<core::bool*>*};
+  asy::Future<core::bool*>* b = f;
+  b = g;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.modular.expect
new file mode 100644
index 0000000..dcdc4a1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(dynamic x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method g1(core::bool* x) → asy::Future<core::int*>* async {
+  return (x ?{core::Object*} 42 : asy::Future::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
+}
+static method g2(core::bool* x) → asy::Future<core::int*>* async 
+  return (x ?{core::Object*} 42 : asy::Future::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
+static method g3(core::bool* x) → asy::Future<core::int*>* async {
+  core::Object* y = x ?{core::Object*} 42 : asy::Future::value<core::int*>(42);
+  return y as{TypeError} FutureOr<core::int*>*;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.modular.expect
new file mode 100644
index 0000000..1c0791d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value(dynamic x) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static method g1(core::bool* x) → asy::Future<core::int*>* async {
+  return (x ?{core::Object*} 42 : new self::MyFuture::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
+}
+static method g2(core::bool* x) → asy::Future<core::int*>* async 
+  return (x ?{core::Object*} 42 : new self::MyFuture::value<core::int*>(42)) as{TypeError} FutureOr<core::int*>*;
+static method g3(core::bool* x) → asy::Future<core::int*>* async {
+  core::Object* y = x ?{core::Object*} 42 : new self::MyFuture::value<dynamic>(42);
+  return y as{TypeError} FutureOr<core::int*>*;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.modular.expect
new file mode 100644
index 0000000..ccef45f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_union_downwards.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
+//         new /*@ typeArgs=int* */ Future.value('hi'));
+//                                               ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static field self::MyFuture<dynamic>* f;
+static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
+        new /*@ typeArgs=int* */ Future.value('hi'));
+                                              ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
+static method g2() → asy::Future<core::List<core::int*>*>* async {
+  return <core::int*>[3];
+}
+static method g3() → asy::Future<core::List<core::int*>*>* async {
+  return asy::Future::value<core::List<core::int*>*>(<core::int*>[3]);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.modular.expect
new file mode 100644
index 0000000..09bd9c2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static field self::MyFuture<dynamic>* f;
+static field asy::Future<core::int*>* t1 = self::f.{self::MyFuture::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
+static field asy::Future<core::List<core::int*>*>* t2 = self::f.{self::MyFuture::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* self::MyFuture<core::List<core::int*>*>*};
+static method g2() → asy::Future<core::List<core::int*>*>* async {
+  return <core::int*>[3];
+}
+static method g3() → asy::Future<core::List<core::int*>*>* async {
+  return new self::MyFuture::value<core::List<core::int*>*>(<core::int*>[3]);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.modular.expect
new file mode 100644
index 0000000..36b2fa5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
+//         new /*@ typeArgs=int* */ Future.value('hi'));
+//                                               ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static field asy::Future<dynamic>* f;
+static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<core::int*>* => asy::Future::value<core::int*>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:47: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>'.
+        new /*@ typeArgs=int* */ Future.value('hi'));
+                                              ^" in "hi" as{TypeError} FutureOr<core::int*>?)){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
+static method g2() → asy::Future<core::List<core::int*>*>* async {
+  return <core::int*>[3];
+}
+static method g3() → asy::Future<core::List<core::int*>*>* async {
+  return asy::Future::value<core::List<core::int*>*>(<core::int*>[3]);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.modular.expect
new file mode 100644
index 0000000..5ecc3e7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class MyFuture<T extends core::Object* = dynamic> extends core::Object implements asy::Future<self::MyFuture::T*> {
+  constructor •() → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  constructor value([dynamic x = #C1]) → self::MyFuture<self::MyFuture::T*>*
+    : super core::Object::•() {}
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  method then<S extends core::Object* = dynamic>((self::MyFuture::T*) →* FutureOr<self::MyFuture::then::S*>* f, {core::Function* onError = #C1}) → self::MyFuture<self::MyFuture::then::S*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method whenComplete(() →* FutureOr<void>* action) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+  no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+    return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
+}
+static field asy::Future<dynamic>* f;
+static field asy::Future<core::int*>* t1 = self::f.{asy::Future::then}<core::int*>((dynamic _) → self::MyFuture<core::int*>* => new self::MyFuture::value<core::int*>("hi")){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
+static field asy::Future<core::List<core::int*>*>* t2 = self::f.{asy::Future::then}<core::List<core::int*>*>((dynamic _) → core::List<core::int*>* => <core::int*>[3]){((dynamic) →* FutureOr<core::List<core::int*>*>*, {onError: core::Function*}) →* asy::Future<core::List<core::int*>*>*};
+static method g2() → asy::Future<core::List<core::int*>*>* async {
+  return <core::int*>[3];
+}
+static method g3() → asy::Future<core::List<core::int*>*>* async {
+  return new self::MyFuture::value<core::List<core::int*>*>(<core::int*>[3]);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #asStream
+  #C8 = <dynamic>[]
+  #C9 = #timeout
+  #C10 = #onTimeout
+}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.modular.expect
new file mode 100644
index 0000000..05e3e74
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo() → dynamic async {
+  asy::Future<core::List<self::A*>*>* f1 = null;
+  asy::Future<core::List<self::A*>*>* f2 = null;
+  core::List<core::List<self::A*>*>* merged = await asy::Future::wait<core::List<self::A*>*>(<asy::Future<core::List<self::A*>*>*>[f1, f2]);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.modular.expect
new file mode 100644
index 0000000..8b0d132
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_generic_return.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static method id<T extends core::Object* = dynamic>(self::id::T* x) → self::id::T*
+  return x;
+static method test() → dynamic async {
+  asy::Future<core::String*>* f;
+  core::String* s = await self::id<FutureOr<core::String*>*>(f);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.modular.expect b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.modular.expect
new file mode 100644
index 0000000..f663f65
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C extends self::A {
+  synthetic constructor •() → self::C*
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic async {
+  asy::Future<self::B*>* b = asy::Future::value<self::B*>(new self::B::•());
+  asy::Future<self::C*>* c = asy::Future::value<self::C*>(new self::C::•());
+  core::List<asy::Future<self::A*>*>* lll = <asy::Future<self::A*>*>[b, c];
+  core::List<self::A*>* result = await asy::Future::wait<self::A*>(lll);
+  core::List<self::A*>* result2 = await asy::Future::wait<self::A*>(<asy::Future<self::A*>*>[b, c]);
+  core::List<self::A*>* list = result;
+  list = result2;
+}
diff --git a/pkg/front_end/testcases/inference/generator_closure.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generator_closure.dart.weak.modular.expect
new file mode 100644
index 0000000..c703bed
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generator_closure.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method foo(() →* asy::Stream<core::int*>* values) → void {}
+static method main() → void {
+  self::foo(() → asy::Stream<core::int*>* async* {
+    yield 0;
+    yield 1;
+  });
+}
diff --git a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.modular.expect
new file mode 100644
index 0000000..b6875d1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef ToValue<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+static method main() → dynamic {
+  function f<T extends core::Object* = dynamic>(T* x) → (T*) →* void
+    return null;
+  (core::int*) →* void x = f<core::int*>(42){(core::int*) →* (core::int*) →* void};
+  (core::int*) →* void y = f<core::int*>(42){(core::int*) →* (core::int*) →* void};
+  (core::int*) →* void takesInt = x;
+  takesInt = y;
+}
diff --git a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..421c4af
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method f<S extends core::Object* = dynamic, T extends core::Object* = dynamic>(self::f::S* s) → self::f::T*
+  return null;
+static method main() → dynamic {
+  core::String* x = self::f<core::int*, core::String*>(42);
+  core::String* y = #C1<core::int*, core::String*>(42){(core::int*) →* core::String*};
+}
+
+constants  {
+  #C1 = static-tearoff self::f
+}
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..3871d0a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart:26:79: Error: Inferred type argument 'int' doesn't conform to the bound 'String' of the type variable 'U' on 'Foo<String>.method'.
+//  - 'Foo' is from 'pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       . /*error:COULD_NOT_INFER*/ /*@ typeArgs=int* */ /*@target=Foo.method*/ method(
+//                                                                               ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo<T extends core::Pattern*> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T*>*
+    : super core::Object::•()
+    ;
+  method method<covariant-by-class U extends self::Foo::T*>(self::Foo::method::U* u) → self::Foo::method::U*
+    return u;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::Foo::•<core::String*>().{self::Foo::method}<core::int*>(42){(core::int*) →* core::int*};
+}
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.modular.expect
new file mode 100644
index 0000000..9c23381
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.weak.modular.expect
@@ -0,0 +1,54 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+//       /*@ typeArgs=int* */ max(1, 2.0));
+//                                   ^
+//
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+//       /*@ typeArgs=int* */ min(1, 2.0));
+//                                   ^
+//
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:37: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//   printInt(/*@ typeArgs=int* */ min("hi", "there"));
+//                                     ^
+//
+// pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:43: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//   printInt(/*@ typeArgs=int* */ min("hi", "there"));
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:math" as math;
+
+import "dart:math";
+
+static method printInt(core::int* x) → void
+  return core::print(x);
+static method printDouble(core::double* x) → void
+  return core::print(x);
+static method myMax(core::num* x, core::num* y) → core::num*
+  return math::max<core::num*>(x, y);
+static method f() → dynamic {
+  self::printInt(math::max<core::int*>(1, 2));
+  self::printInt(math::min<core::int*>(1, 2));
+  self::printDouble(math::max<core::double*>(1.0, 2.0));
+  self::printDouble(math::min<core::double*>(1.0, 2.0));
+  self::printInt(self::myMax(1, 2) as{TypeError} core::int*);
+  self::printInt(self::myMax(1, 2) as core::int*);
+  self::printInt(math::max<core::int*>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:28:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+      /*@ typeArgs=int* */ max(1, 2.0));
+                                  ^" in 2.0 as{TypeError} core::int*));
+  self::printInt(math::min<core::int*>(1, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:30:35: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+      /*@ typeArgs=int* */ min(1, 2.0));
+                                  ^" in 2.0 as{TypeError} core::int*));
+  self::printDouble(math::max<core::double*>(1.0, 2.0));
+  self::printDouble(math::min<core::double*>(1.0, 2.0));
+  self::printInt(math::min<core::int*>(invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:37: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  printInt(/*@ typeArgs=int* */ min(\"hi\", \"there\"));
+                                    ^" in "hi" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:37:43: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  printInt(/*@ typeArgs=int* */ min(\"hi\", \"there\"));
+                                          ^" in "there" as{TypeError} core::int*));
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.modular.expect
new file mode 100644
index 0000000..6c102fe
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.weak.modular.expect
@@ -0,0 +1,56 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:13:3: Error: Can't infer types for 'm' as the overridden members don't have a combined signature.
+// Try adding explicit types.
+//   m(x) => x;
+//   ^
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:9:5: Context: This is one of the overridden members.
+//   T m<T>(T x) => x;
+//     ^
+//
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:13:3: Error: Declared type variables of 'D.m' doesn't match those on overridden method 'C.m'.
+//   m(x) => x;
+//   ^
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:9:5: Context: This is the overridden method ('m').
+//   T m<T>(T x) => x;
+//     ^
+//
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:18:73: Error: Expected 0 type arguments.
+//       . /*error:WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD*/ /*@target=D.m*/ m<int>(
+//                                                                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+    return x;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method m(invalid-type x) → invalid-type
+    return x;
+}
+static method main() → dynamic {
+  core::int* y = invalid-expression "pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:18:73: Error: Expected 0 type arguments.
+      . /*error:WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD*/ /*@target=D.m*/ m<int>(
+                                                                        ^" in new self::D::•().{self::D::m}{<inapplicable>}.<core::int*>(42){(invalid-type) →* invalid-type};
+  core::print(y);
+}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.modular.expect
new file mode 100644
index 0000000..79f41c9
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//           /*@ typeArgs=String* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
+//                                                                               ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object* = dynamic>(core::List<self::f::T*>* s) → self::f::T*
+  return null;
+static method test() → dynamic {
+  core::String* x = self::f<core::String*>(<core::String*>["hi"]);
+  core::String* y = self::f<core::String*>(<core::String*>[invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+          /*@ typeArgs=String* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
+                                                                              ^" in 42 as{TypeError} core::String*]);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.modular.expect
new file mode 100644
index 0000000..b0966cb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  core::List<core::int*>* o;
+  core::int* y = o.{core::Iterable::fold}<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y){(core::num*) →* core::int*}){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+  dynamic z = o.{core::Iterable::fold}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x{dynamic}.+(y)){(dynamic, (dynamic, core::int*) →* dynamic) →* dynamic};
+  y = z as{TypeError,ForDynamic} core::int*;
+}
+static method functionExpressionInvocation() → void {
+  core::List<core::int*>* o;
+  core::int* y = o.{core::Iterable::fold}{<T extends core::Object* = dynamic>(T*, (T*, core::int*) →* T*) →* T*}<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y){(core::num*) →* core::int*}){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+  dynamic z = o.{core::Iterable::fold}{<T extends core::Object* = dynamic>(T*, (T*, core::int*) →* T*) →* T*}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x{dynamic}.+(y)){(dynamic, (dynamic, core::int*) →* dynamic) →* dynamic};
+  y = z as{TypeError,ForDynamic} core::int*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.modular.expect
new file mode 100644
index 0000000..7241ba2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:14:5: Error: Declared type variables of 'D.m' doesn't match those on overridden method 'C.m'.
+//   T m<T>(T x) => x;
+//     ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:9:3: Context: This is the overridden method ('m').
+//   m(x) => x;
+//   ^
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:14:12: Error: The parameter 'x' of the method 'D.m' has type 'T', which does not match the corresponding type, 'dynamic', in the overridden method, 'C.m'.
+// Change to a supertype of 'dynamic', or, for a covariant parameter, a subtype.
+//   T m<T>(T x) => x;
+//            ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:9:3: Context: This is the overridden method ('m').
+//   m(x) => x;
+//   ^
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:15:5: Error: Declared type variables of 'D.g' doesn't match those on overridden method 'C.g'.
+//   T g<T>(T x) => x;
+//     ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:10:11: Context: This is the overridden method ('g').
+//   dynamic g(int x) => x;
+//           ^
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:15:12: Error: The parameter 'x' of the method 'D.g' has type 'T', which does not match the corresponding type, 'int', in the overridden method, 'C.g'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   T g<T>(T x) => x;
+//            ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:10:11: Context: This is the overridden method ('g').
+//   dynamic g(int x) => x;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method m(dynamic x) → dynamic
+    return x;
+  method g(core::int* x) → dynamic
+    return x;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method m<T extends core::Object* = dynamic>(self::D::m::T* x) → self::D::m::T*
+    return x;
+  method g<T extends core::Object* = dynamic>(self::D::g::T* x) → self::D::g::T*
+    return x;
+}
+static method main() → dynamic {
+  core::int* y = (new self::D::•() as self::C*).{self::C::m}(42){(dynamic) →* dynamic} as{TypeError,ForDynamic} core::int*;
+  core::print(y);
+}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.modular.expect
new file mode 100644
index 0000000..6d57e34
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant V extends core::Object* = dynamic> = (V*) →* void;
+class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super self::D::•()
+    ;
+  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → (self::C::f::U*) →* void {}
+}
+class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+  method f<U extends core::Object* = dynamic>(self::D::f::U* u) → (self::D::f::U*) →* void
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.modular.expect
new file mode 100644
index 0000000..58ca700
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef G<V extends core::Object* = dynamic> = () →* core::List<V*>*;
+class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super self::D::•()
+    ;
+  method f<U extends core::Object* = dynamic>(() →* core::List<self::C::f::U*>* g) → void
+    return null;
+}
+abstract class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+  abstract method f<U extends core::Object* = dynamic>(() →* core::List<self::D::f::U*>* g) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.modular.expect
new file mode 100644
index 0000000..60d43bc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<V extends core::Object* = dynamic> = () →* V*;
+class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super self::D::•()
+    ;
+  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → () →* self::C::f::U* {}
+}
+class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+  method f<U extends core::Object* = dynamic>(self::D::f::U* u) → () →* self::D::f::U*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.modular.expect
new file mode 100644
index 0000000..a033796
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.modular.expect
@@ -0,0 +1,189 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:26:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+//       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+//                                                                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+//       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+//                                                                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:31:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:32:70: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ math.max);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:45:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOOI(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+//   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+//   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+//                                                                        ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:48:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOON(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:49:65: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   takeOOO(/*error:COULD_NOT_INFER,error:INVALID_CAST_FUNCTION*/ min);
+//                                                                 ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:73:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:75:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:82:25: Error: Inferred type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'T Function<T extends num>(T, T)'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//       . /*@target=C.m*/ m);
+//                         ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+//           . /*@target=C.m*/ m);
+//                             ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+//           . /*@target=C.m*/ m);
+//                             ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:math" as math;
+import "dart:math" show min;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method m<T extends core::num*>(self::C::m::T* x, self::C::m::T* y) → self::C::m::T*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  self::takeIII(#C2);
+  self::takeDDD(#C3);
+  self::takeNNN(#C4);
+  self::takeIDN(#C4);
+  self::takeDIN(#C4);
+  self::takeIIN(#C2);
+  self::takeDDN(#C3);
+  self::takeIIO(#C2);
+  self::takeDDO(#C3);
+  self::takeOOI(#C5 as{TypeError} (core::Object*, core::Object*) →* core::int*);
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+                                                                        ^" in #C4 as{TypeError} (core::double*, core::int*) →* core::int*);
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+                                                                        ^" in #C4 as{TypeError} (core::int*, core::double*) →* core::double*);
+  self::takeOON(#C5 as{TypeError} (core::Object*, core::Object*) →* core::num*);
+  self::takeOOO(#C5 as{TypeError} (core::Object*, core::Object*) →* core::num*);
+  self::takeIII(#C7);
+  self::takeDDD(#C8);
+  self::takeNNN(#C9);
+  self::takeIDN(#C9);
+  self::takeDIN(#C9);
+  self::takeIIN(#C7);
+  self::takeDDN(#C8);
+  self::takeIIO(#C7);
+  self::takeDDO(#C8);
+  self::takeOOI(#C10 as{TypeError} (core::Object*, core::Object*) →* core::int*);
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+  takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+                                                                       ^" in #C9 as{TypeError} (core::double*, core::int*) →* core::int*);
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+  takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+                                                                       ^" in #C9 as{TypeError} (core::int*, core::double*) →* core::double*);
+  self::takeOON(#C10 as{TypeError} (core::Object*, core::Object*) →* core::num*);
+  self::takeOOO(#C10 as{TypeError} (core::Object*, core::Object*) →* core::num*);
+  self::takeIII(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::int*>);
+  self::takeDDD(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::double*>);
+  self::takeNNN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>);
+  self::takeIDN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>);
+  self::takeDIN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>);
+  self::takeIIN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::int*>);
+  self::takeDDN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::double*>);
+  self::takeIIO(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::int*>);
+  self::takeDDO(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::double*>);
+  self::takeOON((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+  self::takeOOO((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+  self::takeOOI((new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
+  self::takeIDI(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
+          . /*@target=C.m*/ m);
+                            ^" in (new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
+  self::takeDID(invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:29: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
+          . /*@target=C.m*/ m);
+                            ^" in (new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
+}
+static method takeIII((core::int*, core::int*) →* core::int* fn) → void {}
+static method takeDDD((core::double*, core::double*) →* core::double* fn) → void {}
+static method takeIDI((core::double*, core::int*) →* core::int* fn) → void {}
+static method takeDID((core::int*, core::double*) →* core::double* fn) → void {}
+static method takeIDN((core::double*, core::int*) →* core::num* fn) → void {}
+static method takeDIN((core::int*, core::double*) →* core::num* fn) → void {}
+static method takeIIN((core::int*, core::int*) →* core::num* fn) → void {}
+static method takeDDN((core::double*, core::double*) →* core::num* fn) → void {}
+static method takeNNN((core::num*, core::num*) →* core::num* fn) → void {}
+static method takeOON((core::Object*, core::Object*) →* core::num* fn) → void {}
+static method takeOOO((core::Object*, core::Object*) →* core::num* fn) → void {}
+static method takeOOI((core::Object*, core::Object*) →* core::int* fn) → void {}
+static method takeIIO((core::int*, core::int*) →* core::Object* fn) → void {}
+static method takeDDO((core::double*, core::double*) →* core::Object* fn) → void {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff math::max
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = instantiation #C1 <core::double*>
+  #C4 = instantiation #C1 <core::num*>
+  #C5 = instantiation #C1 <core::Object*>
+  #C6 = static-tearoff math::min
+  #C7 = instantiation #C6 <core::int*>
+  #C8 = instantiation #C6 <core::double*>
+  #C9 = instantiation #C6 <core::num*>
+  #C10 = instantiation #C6 <core::Object*>
+}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.modular.expect
new file mode 100644
index 0000000..530ec6a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+    return x;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method m<S extends core::Object* = dynamic>(self::D::m::S* x) → self::D::m::S*
+    return x;
+}
+static method main() → dynamic {
+  core::int* y = new self::D::•().{self::D::m}<core::int*>(42){(core::int*) →* core::int*};
+  core::print(y);
+}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.modular.expect
new file mode 100644
index 0000000..4831a9f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+//
+// Problems outside component:
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:9:8: Error: Not found: 'dart:_foreign_helper'
+// import 'dart:_foreign_helper' show JS; // error
+//        ^
+//
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:9:8: Error: Can't access platform private library.
+// import 'dart:_foreign_helper' show JS; // error
+//        ^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:12:14: Error: Method not found: 'JS'.
+//   String x = JS('int', '42'); // error
+//              ^^
+//
+// pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:13:34: Error: Method not found: 'JS'.
+//   var /*@type=invalid-type*/ y = JS<String>('String', '"hello"');
+//                                  ^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:_foreign_helper" show JS;
+
+static method test() → dynamic {
+  core::String* x = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:12:14: Error: Method not found: 'JS'.
+  String x = JS('int', '42'); // error
+             ^^";
+  invalid-type y = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_js_builtin.dart:13:34: Error: Method not found: 'JS'.
+  var /*@type=invalid-type*/ y = JS<String>('String', '\"hello\"');
+                                 ^^";
+  y = "world";
+  y = 42;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.modular.expect
new file mode 100644
index 0000000..f3dc908
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//           1.0);
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f() → void {
+  core::List<core::String*>* y;
+  core::Iterable<core::String*>* x = y.{core::Iterable::map}<core::String*>((core::String* z) → core::String* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+          1.0);
+          ^" in 1.0 as{TypeError} core::String*){((core::String*) →* core::String*) →* core::Iterable<core::String*>*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.modular.expect
new file mode 100644
index 0000000..2f4c738
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//                           /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
+//                                                                                                                           ^
+//
+// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:111: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
+//                   /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
+//                                                                                                               ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static method make(core::int* x) → asy::Future<core::int*>*
+  return asy::Future::•<core::int*>(() → core::int* => x);
+static method test() → dynamic {
+  core::Iterable<asy::Future<core::int*>*>* list = <core::int*>[1, 2, 3].{core::Iterable::map}<asy::Future<core::int*>*>(#C1){((core::int*) →* asy::Future<core::int*>*) →* core::Iterable<asy::Future<core::int*>*>*};
+  asy::Future<core::List<core::int*>*>* results = asy::Future::wait<core::int*>(list);
+  asy::Future<core::String*>* results2 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", (FutureOr<core::String*>* x, core::int* y) → FutureOr<core::String*>* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+                          /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
+                                                                                                                          ^" in x{<unresolved>}.+(y.{core::int::toString}(){() →* core::String*}) as{TypeError,ForDynamic} FutureOr<core::String*>*){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
+  asy::Future<core::String*>* results3 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → FutureOr<core::String*>* => list.{core::Iterable::fold}<FutureOr<core::String*>*>("", invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:111: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
+                  /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@ returnType=String* */ (String
+                                                                                                              ^" in ((core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}(){() →* core::String*}){(core::String*) →* core::String*}) as{TypeError} (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*){(FutureOr<core::String*>*, (FutureOr<core::String*>*, core::int*) →* FutureOr<core::String*>*) →* FutureOr<core::String*>*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
+  asy::Future<core::String*>* results4 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → core::String* => list.{core::Iterable::fold}<core::String*>("", (core::String* x, core::int* y) → core::String* => x.{core::String::+}(y.{core::int::toString}(){() →* core::String*}){(core::String*) →* core::String*}){(core::String*, (core::String*, core::int*) →* core::String*) →* core::String*}){((core::List<core::int*>*) →* FutureOr<core::String*>*, {onError: core::Function*}) →* asy::Future<core::String*>*};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::make
+}
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.modular.expect
new file mode 100644
index 0000000..5a1deb3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "dart:math" as math;
+
+class Trace extends core::Object {
+  field core::List<self::Frame*>* frames = <self::Frame*>[];
+  synthetic constructor •() → self::Trace*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Frame extends core::Object {
+  field core::String* location = "";
+  synthetic constructor •() → self::Frame*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::List<self::Trace*>* traces = <self::Trace*>[];
+  core::int* longest = traces.{core::Iterable::map}<core::int*>((self::Trace* trace) → core::int* {
+    return trace.{self::Trace::frames}{core::List<self::Frame*>*}.{core::Iterable::map}<core::int*>((self::Frame* frame) → core::int* => frame.{self::Frame::location}{core::String*}.{core::String::length}{core::int*}){((self::Frame*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C2){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+  }){((self::Trace*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C2){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+}
+
+constants  {
+  #C1 = static-tearoff math::max
+  #C2 = instantiation #C1 <core::int*>
+}
diff --git a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.modular.expect b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..868f419
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = (core::int*) →* core::Iterable<core::num*>*;
+typedef G = (core::double*) →* core::List<core::int*>*;
+static method generic<T extends core::Object* = dynamic>((self::generic::T*) →* dynamic a, (self::generic::T*) →* dynamic b) → self::generic::T*
+  return null;
+static method main() → dynamic {
+  (core::num*) →* core::List<core::int*>* v = self::generic<(core::num*) →* core::List<core::int*>*>(((core::int*) →* core::Iterable<core::num*>* f) → Null => null, ((core::double*) →* core::List<core::int*>* g) → Null => null);
+}
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.modular.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.modular.expect
new file mode 100644
index 0000000..d6bd505
--- /dev/null
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class C<E extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::E*>*
+    : super core::Object::•()
+    ;
+  method sort([(self::C::E*, self::C::E*) →* core::int* compare = #C1]) → void {
+    self::C::sort2<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t1 = compare in #t1 == null ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t1);
+  }
+  static method _compareAny(dynamic a, dynamic b) → core::int* {
+    throw "unimplemented";
+  }
+  static method sort2<E extends core::Object* = dynamic>(self::C<self::C::sort2::E*>* a, (self::C::sort2::E*, self::C::sort2::E*) →* core::int* compare) → void {
+    throw "unimplemented";
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = static-tearoff self::C::_compareAny
+}
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.modular.expect
new file mode 100644
index 0000000..2948381e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.weak.modular.expect
@@ -0,0 +1,89 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:3: Error: Can't infer types for 'f' as the overridden members don't have a combined signature.
+// Try adding explicit types.
+//   f(x, {y}) {}
+//   ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the overridden members.
+//   A f(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the overridden members.
+//   I f(I x, {I y}) {}
+//     ^
+//
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:3: Error: Can't infer types for 'g' as the overridden members don't have a combined signature.
+// Try adding explicit types.
+//   g(x, {y}) {}
+//   ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the overridden members.
+//   A g(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the overridden members.
+//   A g(I x, {I y}) {}
+//     ^
+//
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:18:3: Error: Can't infer types for 'h' as the overridden members don't have a combined signature.
+// Try adding explicit types.
+//   h(x, {y}) {}
+//   ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:12:5: Context: This is one of the overridden members.
+//   A h(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:24:5: Context: This is one of the overridden members.
+//   A h(A x, {I y}) {}
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method f(self::A* x, {self::A* y = #C1}) → self::A* {}
+  method g(self::A* x, {self::A* y = #C1}) → self::A* {}
+  method h(self::A* x, {self::A* y = #C1}) → self::A* {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A implements self::I {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  method f(invalid-type x, {invalid-type y = #C1}) → invalid-type {}
+  method g(invalid-type x, {invalid-type y = #C1}) → invalid-type {}
+  method h(invalid-type x, {invalid-type y = #C1}) → invalid-type {}
+}
+class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  method f(self::I* x, {self::I* y = #C1}) → self::I* {}
+  method g(self::I* x, {self::I* y = #C1}) → self::A* {}
+  method h(self::A* x, {self::I* y = #C1}) → self::A* {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.modular.expect
new file mode 100644
index 0000000..d7facc2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  operator []=(dynamic index, dynamic value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  operator []=(dynamic index, dynamic value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C implements self::I {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  operator []=(dynamic index, dynamic value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.modular.expect
new file mode 100644
index 0000000..9cecf38
--- /dev/null
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  operator []=(core::int* index, dynamic value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  operator []=(core::int* index, dynamic value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C implements self::I {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  operator []=(core::int* index, dynamic value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.modular.expect
new file mode 100644
index 0000000..d6c7c50
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object implements self::B {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  get x() → core::int*
+    return self::f() as{TypeError,ForDynamic} core::int*;
+  set x(core::int* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  field core::int* x = 0;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f() → dynamic
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.modular.expect
new file mode 100644
index 0000000..43a39ef
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.weak.modular.expect
@@ -0,0 +1,72 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B* member = null;
+  synthetic constructor •() → self::Test*
+    : super core::Object::•()
+    ;
+  method test() → void {
+    this.{self::Test::member} = self::f<self::B*>();
+    this.{self::Test::member}{self::B*} == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : null;
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v1 = this.{self::Test::member} = self::f<self::B*>();
+    self::B* v2 = let final self::B* #t1 = this.{self::Test::member}{self::B*} in #t1 == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : #t1;
+    self::A* v3 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::B* #t2 = this.{self::Test::member}{self::B*} in let final self::B* #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..af067f3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.weak.modular.expect
@@ -0,0 +1,88 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int* t = null;
+  synthetic constructor •() → self::Test1*
+    : super core::Object::•()
+    ;
+  method test() → void {
+    core::int* v1 = this.{self::Test1::t} = self::getInt();
+    core::int* v4 = let final core::int* #t1 = this.{self::Test1::t}{core::int*} in #t1 == null ?{core::int*} this.{self::Test1::t} = self::getInt() : #t1;
+    core::int* v7 = this.{self::Test1::t} = this.{self::Test1::t}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::int* v10 = this.{self::Test1::t} = this.{self::Test1::t}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final core::int* #t2 = this.{self::Test1::t}{core::int*} in let final core::int* #t3 = this.{self::Test1::t} = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test2 extends core::Object {
+  field core::num* t = null;
+  synthetic constructor •() → self::Test2*
+    : super core::Object::•()
+    ;
+  method test() → void {
+    core::int* v1 = this.{self::Test2::t} = self::getInt();
+    core::num* v2 = this.{self::Test2::t} = self::getNum();
+    core::double* v3 = this.{self::Test2::t} = self::getDouble();
+    core::num* v4 = let final core::num* #t4 = this.{self::Test2::t}{core::num*} in #t4 == null ?{core::num*} this.{self::Test2::t} = self::getInt() : #t4;
+    core::num* v5 = let final core::num* #t5 = this.{self::Test2::t}{core::num*} in #t5 == null ?{core::num*} this.{self::Test2::t} = self::getNum() : #t5;
+    core::num* v6 = let final core::num* #t6 = this.{self::Test2::t}{core::num*} in #t6 == null ?{core::num*} this.{self::Test2::t} = self::getDouble() : #t6;
+    core::num* v7 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final core::num* #t7 = this.{self::Test2::t}{core::num*} in let final core::num* #t8 = this.{self::Test2::t} = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test3 extends core::Object {
+  field core::double* t = null;
+  synthetic constructor •() → self::Test3*
+    : super core::Object::•()
+    ;
+  method test3() → void {
+    core::double* v3 = this.{self::Test3::t} = self::getDouble();
+    core::double* v6 = let final core::double* #t9 = this.{self::Test3::t}{core::double*} in #t9 == null ?{core::double*} this.{self::Test3::t} = self::getDouble() : #t9;
+    core::double* v7 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final core::double* #t10 = this.{self::Test3::t}{core::double*} in let final core::double* #t11 = this.{self::Test3::t} = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method getInt() → core::int*
+  return 0;
+static method getNum() → core::num*
+  return 0;
+static method getDouble() → core::double*
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.modular.expect
new file mode 100644
index 0000000..446a6ee
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.weak.modular.expect
@@ -0,0 +1,91 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  synthetic constructor •() → self::Test*
+    : super core::Object::•()
+    ;
+  operator [](self::Index* i) → self::B*
+    return null;
+  operator []=(self::Index* i, self::B* v) → void {}
+  method test() → void {
+    self::Test* t = self::f<self::Test*>();
+    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
+    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::B*} #t1.{self::Test::[]=}(#t2, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
+    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
+    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
+    let final self::Test* #t7 = t in let final self::Index* #t8 = self::f<self::Index*>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
+    t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
+    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in let final self::B* #t11 = #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index*, self::B*) →* void} in #t11;
+    let final self::Test* #t13 = t in let final self::Index* #t14 = self::f<self::Index*>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
+    self::B* v1 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = self::f<self::B*>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
+    self::B* v2 = let final self::Test* #t19 = t in let final self::Index* #t20 = self::f<self::Index*>() in let final self::B* #t21 = #t19.{self::Test::[]}(#t20){(self::Index*) →* self::B*} in #t21 == null ?{self::B*} let final self::B* #t22 = self::f<self::B*>() in let final void #t23 = #t19.{self::Test::[]=}(#t20, #t22){(self::Index*, self::B*) →* void} in #t22 : #t21;
+    self::B* v4 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
+    self::C* v5 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::C* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30){(self::Index*, self::B*) →* void} in #t30;
+    self::B* v6 = t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
+    self::B* v7 = let final self::Test* #t32 = t in let final self::Index* #t33 = self::f<self::Index*>() in let final self::B* #t34 = #t32.{self::Test::[]}(#t33){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34){(self::Index*, self::B*) →* void} in #t34;
+    self::B* v8 = let final self::Test* #t36 = t in let final self::Index* #t37 = self::f<self::Index*>() in let final self::B* #t38 = #t36.{self::Test::[]}(#t37){(self::Index*) →* self::B*} in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t38;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.weak.modular.expect
new file mode 100644
index 0000000..3a7a814
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.weak.modular.expect
@@ -0,0 +1,94 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class Base extends core::Object {
+  synthetic constructor •() → self::Base*
+    : super core::Object::•()
+    ;
+  operator [](self::Index* i) → self::B*
+    return null;
+  operator []=(self::Index* i, self::B* v) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test extends self::Base {
+  synthetic constructor •() → self::Test*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    super.{self::Base::[]=}(self::f<self::Index*>(), self::f<self::B*>());
+    let final self::Index* #t1 = self::f<self::Index*>() in super.{self::Base::[]}(#t1) == null ?{self::B*} super.{self::Base::[]=}(#t1, self::f<self::B*>()) : null;
+    let final self::Index* #t2 = self::f<self::Index*>() in super.{self::Base::[]=}(#t2, super.{self::Base::[]}(#t2).{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*);
+    let final self::Index* #t3 = self::f<self::Index*>() in super.{self::Base::[]=}(#t3, super.{self::Base::[]}(#t3).{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*});
+    let final self::Index* #t4 = self::f<self::Index*>() in super.{self::Base::[]=}(#t4, super.{self::Base::[]}(#t4).{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*});
+    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = super.{self::Base::[]}(#t5).{self::B::-}(1){(core::int*) →* self::B*} in let final void #t7 = super.{self::Base::[]=}(#t5, #t6) in #t6;
+    let final self::Index* #t8 = self::f<self::Index*>() in super.{self::Base::[]=}(#t8, super.{self::Base::[]}(#t8).{self::B::-}(1){(core::int*) →* self::B*});
+    self::B* v1 = let final self::Index* #t9 = self::f<self::Index*>() in let final self::B* #t10 = self::f<self::B*>() in let final void #t11 = super.{self::Base::[]=}(#t9, #t10) in #t10;
+    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = super.{self::Base::[]}(#t12) in #t13 == null ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = super.{self::Base::[]=}(#t12, #t14) in #t14 : #t13;
+    self::A* v3 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = super.{self::Base::[]}(#t16).{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t18 = super.{self::Base::[]=}(#t16, #t17) in #t17;
+    self::B* v4 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = super.{self::Base::[]}(#t19).{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t21 = super.{self::Base::[]=}(#t19, #t20) in #t20;
+    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = super.{self::Base::[]}(#t22).{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t24 = super.{self::Base::[]=}(#t22, #t23) in #t23;
+    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = super.{self::Base::[]}(#t25).{self::B::-}(1){(core::int*) →* self::B*} in let final void #t27 = super.{self::Base::[]=}(#t25, #t26) in #t26;
+    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = super.{self::Base::[]}(#t28) in let final void #t30 = super.{self::Base::[]=}(#t28, #t29.{self::B::-}(1){(core::int*) →* self::B*}) in #t29;
+  }
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.weak.modular.expect
new file mode 100644
index 0000000..d61e224
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.weak.modular.expect
@@ -0,0 +1,89 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  synthetic constructor •() → self::Test*
+    : super core::Object::•()
+    ;
+  operator [](self::Index* i) → self::B*
+    return null;
+  operator []=(self::Index* i, self::B* v) → void {}
+  method test() → void {
+    this.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
+    let final self::Index* #t1 = self::f<self::Index*>() in this.{self::Test::[]}(#t1){(self::Index*) →* self::B*} == null ?{self::B*} this.{self::Test::[]=}(#t1, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
+    let final self::Index* #t2 = self::f<self::Index*>() in this.{self::Test::[]=}(#t2, this.{self::Test::[]}(#t2){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
+    let final self::Index* #t3 = self::f<self::Index*>() in this.{self::Test::[]=}(#t3, this.{self::Test::[]}(#t3){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
+    let final self::Index* #t4 = self::f<self::Index*>() in this.{self::Test::[]=}(#t4, this.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
+    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = this.{self::Test::[]}(#t5){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t7 = this.{self::Test::[]=}(#t5, #t6){(self::Index*, self::B*) →* void} in #t6;
+    let final self::Index* #t8 = self::f<self::Index*>() in this.{self::Test::[]=}(#t8, this.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
+    self::B* v1 = let final self::Index* #t9 = self::f<self::Index*>() in let final self::B* #t10 = self::f<self::B*>() in let final void #t11 = this.{self::Test::[]=}(#t9, #t10){(self::Index*, self::B*) →* void} in #t10;
+    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = this.{self::Test::[]}(#t12){(self::Index*) →* self::B*} in #t13 == null ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = this.{self::Test::[]=}(#t12, #t14){(self::Index*, self::B*) →* void} in #t14 : #t13;
+    self::A* v4 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = this.{self::Test::[]}(#t16){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t18 = this.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
+    self::B* v3 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = this.{self::Test::[]}(#t19){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t21 = this.{self::Test::[]=}(#t19, #t20){(self::Index*, self::B*) →* void} in #t20;
+    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = this.{self::Test::[]}(#t22){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t24 = this.{self::Test::[]=}(#t22, #t23){(self::Index*, self::B*) →* void} in #t23;
+    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = this.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t27 = this.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
+    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = this.{self::Test::[]}(#t28){(self::Index*) →* self::B*} in let final void #t30 = this.{self::Test::[]=}(#t28, #t29.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t29;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.weak.modular.expect
new file mode 100644
index 0000000..5bdc052
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method test() → void {
+  self::B* local;
+  local = self::f<self::B*>();
+  local == null ?{self::B*} local = self::f<self::B*>() : null;
+  local = local.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  local = local.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  local = local.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  local = local.{self::B::-}(1){(core::int*) →* self::B*};
+  local = local.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v1 = local = self::f<self::B*>();
+  self::B* v2 = let final self::B* #t1 = local in #t1 == null ?{self::B*} local = self::f<self::B*>() : #t1;
+  self::A* v3 = local = local.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = local = local.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = local = local.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = local = local.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t2 = local in let final self::B* #t3 = local = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..eda9415
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local_upwards.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method getInt() → core::int*
+  return 0;
+static method getNum() → core::num*
+  return 0;
+static method getDouble() → core::double*
+  return 0.0;
+static method test1(core::int* t) → void {
+  core::int* v1 = t = self::getInt();
+  core::int* v4 = let final core::int* #t1 = t in #t1 == null ?{core::int*} t = self::getInt() : #t1;
+  core::int* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+  core::int* v10 = t = t.{core::num::+}(1){(core::num*) →* core::int*};
+  core::int* v11 = let final core::int* #t2 = t in let final core::int* #t3 = t = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
+}
+static method test2(core::num* t) → void {
+  core::int* v1 = t = self::getInt();
+  core::num* v2 = t = self::getNum();
+  core::double* v3 = t = self::getDouble();
+  core::num* v4 = let final core::num* #t4 = t in #t4 == null ?{core::num*} t = self::getInt() : #t4;
+  core::num* v5 = let final core::num* #t5 = t in #t5 == null ?{core::num*} t = self::getNum() : #t5;
+  core::num* v6 = let final core::num* #t6 = t in #t6 == null ?{core::num*} t = self::getDouble() : #t6;
+  core::num* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+  core::num* v8 = t = t.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+  core::num* v9 = t = t.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+  core::num* v10 = t = t.{core::num::+}(1){(core::num*) →* core::num*};
+  core::num* v11 = let final core::num* #t7 = t in let final core::num* #t8 = t = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
+}
+static method test3(core::double* t) → void {
+  core::double* v3 = t = self::getDouble();
+  core::double* v6 = let final core::double* #t9 = t in #t9 == null ?{core::double*} t = self::getDouble() : #t9;
+  core::double* v7 = t = t.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+  core::double* v8 = t = t.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+  core::double* v9 = t = t.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+  core::double* v10 = t = t.{core::double::+}(1){(core::num*) →* core::double*};
+  core::double* v11 = let final core::double* #t10 = t in let final core::double* #t11 = t = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.weak.modular.expect
new file mode 100644
index 0000000..2e41284
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.weak.modular.expect
@@ -0,0 +1,72 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B* member = null;
+  synthetic constructor •() → self::Test*
+    : super core::Object::•()
+    ;
+  static method test(self::Test* t) → void {
+    t.{self::Test::member} = self::f<self::B*>();
+    let final self::Test* #t1 = t in #t1.{self::Test::member}{self::B*} == null ?{self::B*} #t1.{self::Test::member} = self::f<self::B*>() : null;
+    let final self::Test* #t2 = t in #t2.{self::Test::member} = #t2.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    let final self::Test* #t3 = t in #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    let final self::Test* #t4 = t in #t4.{self::Test::member} = #t4.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    let final self::Test* #t5 = t in #t5.{self::Test::member} = #t5.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    let final self::Test* #t6 = t in #t6.{self::Test::member} = #t6.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v1 = t.{self::Test::member} = self::f<self::B*>();
+    self::B* v2 = let final self::Test* #t7 = t in let final self::B* #t8 = #t7.{self::Test::member}{self::B*} in #t8 == null ?{self::B*} #t7.{self::Test::member} = self::f<self::B*>() : #t8;
+    self::A* v3 = let final self::Test* #t9 = t in #t9.{self::Test::member} = #t9.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = let final self::Test* #t10 = t in #t10.{self::Test::member} = #t10.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = let final self::Test* #t11 = t in #t11.{self::Test::member} = #t11.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = let final self::Test* #t12 = t in #t12.{self::Test::member} = #t12.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::Test* #t13 = t in let final self::B* #t14 = #t13.{self::Test::member}{self::B*} in let final self::B* #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1){(core::int*) →* self::B*} in #t14;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.modular.expect
new file mode 100644
index 0000000..681f9aa
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.weak.modular.expect
@@ -0,0 +1,72 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B* member = null;
+  synthetic constructor •() → self::Test*
+    : super core::Object::•()
+    ;
+  static method test(self::Test* t) → void {
+    let final self::Test* #t1 = t in #t1 == null ?{self::B*} null : #t1.{self::Test::member} = self::f<self::B*>();
+    let final self::Test* #t2 = t in #t2 == null ?{self::B*} null : #t2.{self::Test::member}{self::B*} == null ?{self::B*} #t2.{self::Test::member} = self::f<self::B*>() : null;
+    let final self::Test* #t3 = t in #t3 == null ?{self::A*} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    let final self::Test* #t4 = t in #t4 == null ?{self::B*} null : #t4.{self::Test::member} = #t4.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    let final self::Test* #t5 = t in #t5 == null ?{self::C*} null : #t5.{self::Test::member} = #t5.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    let final self::Test* #t6 = t in #t6 == null ?{self::B*} null : let final self::B* #t7 = #t6.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
+    let final self::Test* #t9 = t in #t9 == null ?{self::B*} null : #t9.{self::Test::member} = #t9.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v1 = let final self::Test* #t10 = t in #t10 == null ?{self::B*} null : #t10.{self::Test::member} = self::f<self::B*>();
+    self::B* v2 = let final self::Test* #t11 = t in #t11 == null ?{self::B*} null : let final self::B* #t12 = #t11.{self::Test::member}{self::B*} in #t12 == null ?{self::B*} #t11.{self::Test::member} = self::f<self::B*>() : #t12;
+    self::A* v3 = let final self::Test* #t13 = t in #t13 == null ?{self::A*} null : let final self::A* #t14 = #t13.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
+    self::B* v4 = let final self::Test* #t16 = t in #t16 == null ?{self::B*} null : let final self::B* #t17 = #t16.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
+    self::C* v5 = let final self::Test* #t19 = t in #t19 == null ?{self::C*} null : let final self::C* #t20 = #t19.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
+    self::B* v6 = let final self::Test* #t22 = t in #t22 == null ?{self::B*} null : let final self::B* #t23 = #t22.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
+    self::B* v7 = let final self::Test* #t25 = t in #t25 == null ?{self::B*} null : let final self::B* #t26 = #t25.{self::Test::member}{self::B*} in let final void #t27 = #t25.{self::Test::member} = #t26.{self::B::-}(1){(core::int*) →* self::B*} in #t26;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..defcb5a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.weak.modular.expect
@@ -0,0 +1,88 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int* prop = null;
+  synthetic constructor •() → self::Test1*
+    : super core::Object::•()
+    ;
+  static method test(self::Test1* t) → void {
+    core::int* v1 = let final self::Test1* #t1 = t in #t1 == null ?{core::int*} null : #t1.{self::Test1::prop} = self::getInt();
+    core::int* v4 = let final self::Test1* #t2 = t in #t2 == null ?{core::int*} null : let final core::int* #t3 = #t2.{self::Test1::prop}{core::int*} in #t3 == null ?{core::int*} #t2.{self::Test1::prop} = self::getInt() : #t3;
+    core::int* v7 = let final self::Test1* #t4 = t in #t4 == null ?{core::int*} null : let final core::int* #t5 = #t4.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t6 = #t4.{self::Test1::prop} = #t5 in #t5;
+    core::int* v10 = let final self::Test1* #t7 = t in #t7 == null ?{core::int*} null : let final core::int* #t8 = #t7.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
+    core::int* v11 = let final self::Test1* #t10 = t in #t10 == null ?{core::int*} null : let final core::int* #t11 = #t10.{self::Test1::prop}{core::int*} in let final void #t12 = #t10.{self::Test1::prop} = #t11.{core::num::+}(1){(core::num*) →* core::int*} in #t11;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test2 extends core::Object {
+  field core::num* prop = null;
+  synthetic constructor •() → self::Test2*
+    : super core::Object::•()
+    ;
+  static method test(self::Test2* t) → void {
+    core::int* v1 = let final self::Test2* #t13 = t in #t13 == null ?{core::int*} null : #t13.{self::Test2::prop} = self::getInt();
+    core::num* v2 = let final self::Test2* #t14 = t in #t14 == null ?{core::num*} null : #t14.{self::Test2::prop} = self::getNum();
+    core::double* v3 = let final self::Test2* #t15 = t in #t15 == null ?{core::double*} null : #t15.{self::Test2::prop} = self::getDouble();
+    core::num* v4 = let final self::Test2* #t16 = t in #t16 == null ?{core::num*} null : let final core::num* #t17 = #t16.{self::Test2::prop}{core::num*} in #t17 == null ?{core::num*} #t16.{self::Test2::prop} = self::getInt() : #t17;
+    core::num* v5 = let final self::Test2* #t18 = t in #t18 == null ?{core::num*} null : let final core::num* #t19 = #t18.{self::Test2::prop}{core::num*} in #t19 == null ?{core::num*} #t18.{self::Test2::prop} = self::getNum() : #t19;
+    core::num* v6 = let final self::Test2* #t20 = t in #t20 == null ?{core::num*} null : let final core::num* #t21 = #t20.{self::Test2::prop}{core::num*} in #t21 == null ?{core::num*} #t20.{self::Test2::prop} = self::getDouble() : #t21;
+    core::num* v7 = let final self::Test2* #t22 = t in #t22 == null ?{core::num*} null : let final core::num* #t23 = #t22.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t24 = #t22.{self::Test2::prop} = #t23 in #t23;
+    core::num* v8 = let final self::Test2* #t25 = t in #t25 == null ?{core::num*} null : let final core::num* #t26 = #t25.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t27 = #t25.{self::Test2::prop} = #t26 in #t26;
+    core::num* v9 = let final self::Test2* #t28 = t in #t28 == null ?{core::num*} null : let final core::num* #t29 = #t28.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
+    core::num* v10 = let final self::Test2* #t31 = t in #t31 == null ?{core::num*} null : let final core::num* #t32 = #t31.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
+    core::num* v11 = let final self::Test2* #t34 = t in #t34 == null ?{core::num*} null : let final core::num* #t35 = #t34.{self::Test2::prop}{core::num*} in let final void #t36 = #t34.{self::Test2::prop} = #t35.{core::num::+}(1){(core::num*) →* core::num*} in #t35;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test3 extends core::Object {
+  field core::double* prop = null;
+  synthetic constructor •() → self::Test3*
+    : super core::Object::•()
+    ;
+  static method test3(self::Test3* t) → void {
+    core::double* v3 = let final self::Test3* #t37 = t in #t37 == null ?{core::double*} null : #t37.{self::Test3::prop} = self::getDouble();
+    core::double* v6 = let final self::Test3* #t38 = t in #t38 == null ?{core::double*} null : let final core::double* #t39 = #t38.{self::Test3::prop}{core::double*} in #t39 == null ?{core::double*} #t38.{self::Test3::prop} = self::getDouble() : #t39;
+    core::double* v7 = let final self::Test3* #t40 = t in #t40 == null ?{core::double*} null : let final core::double* #t41 = #t40.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t42 = #t40.{self::Test3::prop} = #t41 in #t41;
+    core::double* v8 = let final self::Test3* #t43 = t in #t43 == null ?{core::double*} null : let final core::double* #t44 = #t43.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t45 = #t43.{self::Test3::prop} = #t44 in #t44;
+    core::double* v9 = let final self::Test3* #t46 = t in #t46 == null ?{core::double*} null : let final core::double* #t47 = #t46.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t48 = #t46.{self::Test3::prop} = #t47 in #t47;
+    core::double* v10 = let final self::Test3* #t49 = t in #t49 == null ?{core::double*} null : let final core::double* #t50 = #t49.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
+    core::double* v11 = let final self::Test3* #t52 = t in #t52 == null ?{core::double*} null : let final core::double* #t53 = #t52.{self::Test3::prop}{core::double*} in let final void #t54 = #t52.{self::Test3::prop} = #t53.{core::double::+}(1){(core::num*) →* core::double*} in #t53;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method getInt() → core::int*
+  return 0;
+static method getNum() → core::num*
+  return 0;
+static method getDouble() → core::double*
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.weak.modular.expect
new file mode 100644
index 0000000..28b3433
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.weak.modular.expect
@@ -0,0 +1,77 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class Base extends core::Object {
+  field self::B* member = null;
+  synthetic constructor •() → self::Base*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test extends self::Base {
+  synthetic constructor •() → self::Test*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    super.{self::Base::member} = self::f<self::B*>();
+    super.{self::Base::member} == null ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : null;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v1 = super.{self::Base::member} = self::f<self::B*>();
+    self::B* v2 = let final self::B* #t1 = super.{self::Base::member} in #t1 == null ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : #t1;
+    self::A* v3 = super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::B* #t2 = super.{self::Base::member} in let final self::B* #t3 = super.{self::Base::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
+  }
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..15883a8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.weak.modular.expect
@@ -0,0 +1,73 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  field core::int* intProp = null;
+  field core::num* numProp = null;
+  field core::double* doubleProp = null;
+  synthetic constructor •() → self::Base*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test1 extends self::Base {
+  synthetic constructor •() → self::Test1*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int* v1 = super.{self::Base::intProp} = self::getInt();
+    core::int* v4 = let final core::int* #t1 = super.{self::Base::intProp} in #t1 == null ?{core::int*} super.{self::Base::intProp} = self::getInt() : #t1;
+    core::int* v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::int* v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final core::int* #t2 = super.{self::Base::intProp} in let final core::int* #t3 = super.{self::Base::intProp} = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
+  }
+}
+class Test2 extends self::Base {
+  synthetic constructor •() → self::Test2*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int* v1 = super.{self::Base::numProp} = self::getInt();
+    core::num* v2 = super.{self::Base::numProp} = self::getNum();
+    core::double* v3 = super.{self::Base::numProp} = self::getDouble();
+    core::num* v4 = let final core::num* #t4 = super.{self::Base::numProp} in #t4 == null ?{core::num*} super.{self::Base::numProp} = self::getInt() : #t4;
+    core::num* v5 = let final core::num* #t5 = super.{self::Base::numProp} in #t5 == null ?{core::num*} super.{self::Base::numProp} = self::getNum() : #t5;
+    core::num* v6 = let final core::num* #t6 = super.{self::Base::numProp} in #t6 == null ?{core::num*} super.{self::Base::numProp} = self::getDouble() : #t6;
+    core::num* v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final core::num* #t7 = super.{self::Base::numProp} in let final core::num* #t8 = super.{self::Base::numProp} = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
+  }
+}
+class Test3 extends self::Base {
+  synthetic constructor •() → self::Test3*
+    : super self::Base::•()
+    ;
+  method test3() → void {
+    core::double* v3 = super.{self::Base::doubleProp} = self::getDouble();
+    core::double* v6 = let final core::double* #t9 = super.{self::Base::doubleProp} in #t9 == null ?{core::double*} super.{self::Base::doubleProp} = self::getDouble() : #t9;
+    core::double* v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final core::double* #t10 = super.{self::Base::doubleProp} in let final core::double* #t11 = super.{self::Base::doubleProp} = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
+  }
+}
+static method getInt() → core::int*
+  return 0;
+static method getNum() → core::num*
+  return 0;
+static method getDouble() → core::double*
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..1e03234
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.weak.modular.expect
@@ -0,0 +1,88 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int* prop = null;
+  synthetic constructor •() → self::Test1*
+    : super core::Object::•()
+    ;
+  static method test(self::Test1* t) → void {
+    core::int* v1 = t.{self::Test1::prop} = self::getInt();
+    core::int* v4 = let final self::Test1* #t1 = t in let final core::int* #t2 = #t1.{self::Test1::prop}{core::int*} in #t2 == null ?{core::int*} #t1.{self::Test1::prop} = self::getInt() : #t2;
+    core::int* v7 = let final self::Test1* #t3 = t in #t3.{self::Test1::prop} = #t3.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::int* v10 = let final self::Test1* #t4 = t in #t4.{self::Test1::prop} = #t4.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final self::Test1* #t5 = t in let final core::int* #t6 = #t5.{self::Test1::prop}{core::int*} in let final core::int* #t7 = #t5.{self::Test1::prop} = #t6.{core::num::+}(1){(core::num*) →* core::int*} in #t6;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test2 extends core::Object {
+  field core::num* prop = null;
+  synthetic constructor •() → self::Test2*
+    : super core::Object::•()
+    ;
+  static method test(self::Test2* t) → void {
+    core::int* v1 = t.{self::Test2::prop} = self::getInt();
+    core::num* v2 = t.{self::Test2::prop} = self::getNum();
+    core::double* v3 = t.{self::Test2::prop} = self::getDouble();
+    core::num* v4 = let final self::Test2* #t8 = t in let final core::num* #t9 = #t8.{self::Test2::prop}{core::num*} in #t9 == null ?{core::num*} #t8.{self::Test2::prop} = self::getInt() : #t9;
+    core::num* v5 = let final self::Test2* #t10 = t in let final core::num* #t11 = #t10.{self::Test2::prop}{core::num*} in #t11 == null ?{core::num*} #t10.{self::Test2::prop} = self::getNum() : #t11;
+    core::num* v6 = let final self::Test2* #t12 = t in let final core::num* #t13 = #t12.{self::Test2::prop}{core::num*} in #t13 == null ?{core::num*} #t12.{self::Test2::prop} = self::getDouble() : #t13;
+    core::num* v7 = let final self::Test2* #t14 = t in #t14.{self::Test2::prop} = #t14.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = let final self::Test2* #t15 = t in #t15.{self::Test2::prop} = #t15.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = let final self::Test2* #t16 = t in #t16.{self::Test2::prop} = #t16.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = let final self::Test2* #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final self::Test2* #t18 = t in let final core::num* #t19 = #t18.{self::Test2::prop}{core::num*} in let final core::num* #t20 = #t18.{self::Test2::prop} = #t19.{core::num::+}(1){(core::num*) →* core::num*} in #t19;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test3 extends core::Object {
+  field core::double* prop = null;
+  synthetic constructor •() → self::Test3*
+    : super core::Object::•()
+    ;
+  static method test3(self::Test3* t) → void {
+    core::double* v3 = t.{self::Test3::prop} = self::getDouble();
+    core::double* v6 = let final self::Test3* #t21 = t in let final core::double* #t22 = #t21.{self::Test3::prop}{core::double*} in #t22 == null ?{core::double*} #t21.{self::Test3::prop} = self::getDouble() : #t22;
+    core::double* v7 = let final self::Test3* #t23 = t in #t23.{self::Test3::prop} = #t23.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = let final self::Test3* #t24 = t in #t24.{self::Test3::prop} = #t24.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = let final self::Test3* #t25 = t in #t25.{self::Test3::prop} = #t25.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = let final self::Test3* #t26 = t in #t26.{self::Test3::prop} = #t26.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final self::Test3* #t27 = t in let final core::double* #t28 = #t27.{self::Test3::prop}{core::double*} in let final core::double* #t29 = #t27.{self::Test3::prop} = #t28.{core::double::+}(1){(core::num*) →* core::double*} in #t28;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method getInt() → core::int*
+  return 0;
+static method getNum() → core::num*
+  return 0;
+static method getDouble() → core::double*
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.modular.expect
new file mode 100644
index 0000000..e1508e3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* f = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::A* a = new self::A::•();
+static field core::int* c = 0;
+static method main() → dynamic {
+  self::a;
+  self::c;
+}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.weak.modular.expect
new file mode 100644
index 0000000..090413f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  static field self::B* staticVariable = null;
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+static field self::B* topLevelVariable;
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method test_topLevelVariable() → void {
+  self::topLevelVariable = self::f<self::B*>();
+  self::topLevelVariable == null ?{self::B*} self::topLevelVariable = self::f<self::B*>() : null;
+  self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v1 = self::topLevelVariable = self::f<self::B*>();
+  self::B* v2 = let final self::B* #t1 = self::topLevelVariable in #t1 == null ?{self::B*} self::topLevelVariable = self::f<self::B*>() : #t1;
+  self::A* v3 = self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t2 = self::topLevelVariable in let final self::B* #t3 = self::topLevelVariable = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
+}
+static method test_staticVariable() → void {
+  self::B::staticVariable = self::f<self::B*>();
+  self::B::staticVariable == null ?{self::B*} self::B::staticVariable = self::f<self::B*>() : null;
+  self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v1 = self::B::staticVariable = self::f<self::B*>();
+  self::B* v2 = let final self::B* #t4 = self::B::staticVariable in #t4 == null ?{self::B*} self::B::staticVariable = self::f<self::B*>() : #t4;
+  self::A* v3 = self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t5 = self::B::staticVariable in let final self::B* #t6 = self::B::staticVariable = #t5.{self::B::-}(1){(core::int*) →* self::B*} in #t5;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..4130e63
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static_upwards.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::int* topLevelInt;
+static field core::num* topLevelNum;
+static field core::double* topLevelDouble;
+static method getInt() → core::int*
+  return 0;
+static method getNum() → core::num*
+  return 0;
+static method getDouble() → core::double*
+  return 0.0;
+static method test1() → void {
+  core::int* v1 = self::topLevelInt = self::getInt();
+  core::int* v4 = let final core::int* #t1 = self::topLevelInt in #t1 == null ?{core::int*} self::topLevelInt = self::getInt() : #t1;
+  core::int* v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+  core::int* v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1){(core::num*) →* core::int*};
+  core::int* v11 = let final core::int* #t2 = self::topLevelInt in let final core::int* #t3 = self::topLevelInt = #t2.{core::num::+}(1){(core::num*) →* core::int*} in #t2;
+}
+static method test2() → void {
+  core::int* v1 = self::topLevelNum = self::getInt();
+  core::num* v2 = self::topLevelNum = self::getNum();
+  core::double* v3 = self::topLevelNum = self::getDouble();
+  core::num* v4 = let final core::num* #t4 = self::topLevelNum in #t4 == null ?{core::num*} self::topLevelNum = self::getInt() : #t4;
+  core::num* v5 = let final core::num* #t5 = self::topLevelNum in #t5 == null ?{core::num*} self::topLevelNum = self::getNum() : #t5;
+  core::num* v6 = let final core::num* #t6 = self::topLevelNum in #t6 == null ?{core::num*} self::topLevelNum = self::getDouble() : #t6;
+  core::num* v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+  core::num* v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+  core::num* v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+  core::num* v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1){(core::num*) →* core::num*};
+  core::num* v11 = let final core::num* #t7 = self::topLevelNum in let final core::num* #t8 = self::topLevelNum = #t7.{core::num::+}(1){(core::num*) →* core::num*} in #t7;
+}
+static method test3() → void {
+  core::double* v3 = self::topLevelDouble = self::getDouble();
+  core::double* v6 = let final core::double* #t9 = self::topLevelDouble in #t9 == null ?{core::double*} self::topLevelDouble = self::getDouble() : #t9;
+  core::double* v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+  core::double* v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+  core::double* v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+  core::double* v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1){(core::num*) →* core::double*};
+  core::double* v11 = let final core::double* #t10 = self::topLevelDouble in let final core::double* #t11 = self::topLevelDouble = #t10.{core::double::+}(1){(core::num*) →* core::double*} in #t10;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.modular.expect
new file mode 100644
index 0000000..2fd7b9e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_binary_custom.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator +(dynamic other) → core::int*
+    return 1;
+  operator -(dynamic other) → core::double*
+    return 2.0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* v_add = new self::A::•().{self::A::+}("foo"){(dynamic) →* core::int*};
+static field core::double* v_minus = new self::A::•().{self::A::-}("bar"){(dynamic) →* core::double*};
+static method main() → dynamic {
+  self::v_add;
+  self::v_minus;
+}
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.modular.expect
new file mode 100644
index 0000000..38be484
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* a_equal = 1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2.0;
+static field core::bool* a_notEqual = !(1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2.0);
+static field core::double* a_add = 1.0.{core::double::+}(2.0){(core::num*) →* core::double*};
+static field core::double* a_subtract = 1.0.{core::double::-}(2.0){(core::num*) →* core::double*};
+static field core::double* a_multiply = 1.0.{core::double::*}(2.0){(core::num*) →* core::double*};
+static field core::double* a_divide = 1.0.{core::double::/}(2.0){(core::num*) →* core::double*};
+static field core::int* a_floorDivide = 1.0.{core::double::~/}(2.0){(core::num*) →* core::int*};
+static field core::bool* a_greater = 1.0.{core::num::>}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_less = 1.0.{core::num::<}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_greaterEqual = 1.0.{core::num::>=}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_lessEqual = 1.0.{core::num::<=}(2.0){(core::num*) →* core::bool*};
+static field core::double* a_modulo = 1.0.{core::double::%}(2.0){(core::num*) →* core::double*};
+static method main() → dynamic {
+  self::a_equal;
+  self::a_notEqual;
+  self::a_add;
+  self::a_subtract;
+  self::a_multiply;
+  self::a_divide;
+  self::a_floorDivide;
+  self::a_greater;
+  self::a_less;
+  self::a_greaterEqual;
+  self::a_lessEqual;
+  self::a_modulo;
+}
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.modular.expect
new file mode 100644
index 0000000..1f62c1e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* a_equal = 1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2;
+static field core::bool* a_notEqual = !(1.0 =={core::num::==}{(core::Object*) →* core::bool*} 2);
+static field core::double* a_add = 1.0.{core::double::+}(2){(core::num*) →* core::double*};
+static field core::double* a_subtract = 1.0.{core::double::-}(2){(core::num*) →* core::double*};
+static field core::double* a_multiply = 1.0.{core::double::*}(2){(core::num*) →* core::double*};
+static field core::double* a_divide = 1.0.{core::double::/}(2){(core::num*) →* core::double*};
+static field core::int* a_floorDivide = 1.0.{core::double::~/}(2){(core::num*) →* core::int*};
+static field core::bool* a_greater = 1.0.{core::num::>}(2){(core::num*) →* core::bool*};
+static field core::bool* a_less = 1.0.{core::num::<}(2){(core::num*) →* core::bool*};
+static field core::bool* a_greaterEqual = 1.0.{core::num::>=}(2){(core::num*) →* core::bool*};
+static field core::bool* a_lessEqual = 1.0.{core::num::<=}(2){(core::num*) →* core::bool*};
+static field core::double* a_modulo = 1.0.{core::double::%}(2){(core::num*) →* core::double*};
+static method main() → dynamic {
+  self::a_equal;
+  self::a_notEqual;
+  self::a_add;
+  self::a_subtract;
+  self::a_multiply;
+  self::a_divide;
+  self::a_floorDivide;
+  self::a_greater;
+  self::a_less;
+  self::a_greaterEqual;
+  self::a_lessEqual;
+  self::a_modulo;
+}
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.modular.expect
new file mode 100644
index 0000000..1e26a3e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* a_equal = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2.0;
+static field core::bool* a_notEqual = !(1 =={core::num::==}{(core::Object*) →* core::bool*} 2.0);
+static field core::double* a_add = 1.{core::num::+}(2.0){(core::num*) →* core::double*};
+static field core::double* a_subtract = 1.{core::num::-}(2.0){(core::num*) →* core::double*};
+static field core::double* a_multiply = 1.{core::num::*}(2.0){(core::num*) →* core::double*};
+static field core::double* a_divide = 1.{core::num::/}(2.0){(core::num*) →* core::double*};
+static field core::int* a_floorDivide = 1.{core::num::~/}(2.0){(core::num*) →* core::int*};
+static field core::bool* a_greater = 1.{core::num::>}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_less = 1.{core::num::<}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_greaterEqual = 1.{core::num::>=}(2.0){(core::num*) →* core::bool*};
+static field core::bool* a_lessEqual = 1.{core::num::<=}(2.0){(core::num*) →* core::bool*};
+static field core::double* a_modulo = 1.{core::num::%}(2.0){(core::num*) →* core::double*};
+static method main() → dynamic {
+  self::a_equal;
+  self::a_notEqual;
+  self::a_add;
+  self::a_subtract;
+  self::a_multiply;
+  self::a_divide;
+  self::a_floorDivide;
+  self::a_greater;
+  self::a_less;
+  self::a_greaterEqual;
+  self::a_lessEqual;
+  self::a_modulo;
+}
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.modular.expect
new file mode 100644
index 0000000..883662f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* a_equal = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2;
+static field core::bool* a_notEqual = !(1 =={core::num::==}{(core::Object*) →* core::bool*} 2);
+static field core::int* a_bitXor = 1.{core::int::^}(2){(core::int*) →* core::int*};
+static field core::int* a_bitAnd = 1.{core::int::&}(2){(core::int*) →* core::int*};
+static field core::int* a_bitOr = 1.{core::int::|}(2){(core::int*) →* core::int*};
+static field core::int* a_bitShiftRight = 1.{core::int::>>}(2){(core::int*) →* core::int*};
+static field core::int* a_bitShiftLeft = 1.{core::int::<<}(2){(core::int*) →* core::int*};
+static field core::int* a_add = 1.{core::num::+}(2){(core::num*) →* core::int*};
+static field core::int* a_subtract = 1.{core::num::-}(2){(core::num*) →* core::int*};
+static field core::int* a_multiply = 1.{core::num::*}(2){(core::num*) →* core::int*};
+static field core::double* a_divide = 1.{core::num::/}(2){(core::num*) →* core::double*};
+static field core::int* a_floorDivide = 1.{core::num::~/}(2){(core::num*) →* core::int*};
+static field core::bool* a_greater = 1.{core::num::>}(2){(core::num*) →* core::bool*};
+static field core::bool* a_less = 1.{core::num::<}(2){(core::num*) →* core::bool*};
+static field core::bool* a_greaterEqual = 1.{core::num::>=}(2){(core::num*) →* core::bool*};
+static field core::bool* a_lessEqual = 1.{core::num::<=}(2){(core::num*) →* core::bool*};
+static field core::int* a_modulo = 1.{core::num::%}(2){(core::num*) →* core::int*};
+static method main() → dynamic {
+  self::a_equal;
+  self::a_notEqual;
+  self::a_bitXor;
+  self::a_bitAnd;
+  self::a_bitOr;
+  self::a_bitShiftRight;
+  self::a_bitShiftLeft;
+  self::a_add;
+  self::a_subtract;
+  self::a_multiply;
+  self::a_divide;
+  self::a_floorDivide;
+  self::a_greater;
+  self::a_less;
+  self::a_greaterEqual;
+  self::a_lessEqual;
+  self::a_modulo;
+}
diff --git a/pkg/front_end/testcases/inference/infer_conditional.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_conditional.dart.weak.modular.expect
new file mode 100644
index 0000000..b2128b8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_conditional.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::num* a = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2 ?{core::num*} 1 : 2.0;
+static field core::num* b = 1 =={core::num::==}{(core::Object*) →* core::bool*} 2 ?{core::num*} 1.0 : 2;
+static method main() → dynamic {
+  self::a;
+  self::b;
+}
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.modular.expect
new file mode 100644
index 0000000..ba94200
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_consts_transitively_2_a.dart";
+
+static const field core::int* m1 = #C1;
+static const field core::int* m2 = #C1;
+static method foo() → dynamic {
+  core::int* i;
+  i = #C1;
+}
+static method main() → dynamic {}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_consts_transitively_2.dart";
+import "org-dartlang-testcase:///infer_consts_transitively_2_b.dart";
+
+static const field core::int* a1 = #C1;
+static const field core::int* a2 = #C1;
+static method main() → dynamic {}
+
+library;
+import self as self3;
+import "dart:core" as core;
+
+static const field core::int* b1 = #C1;
+static method main() → dynamic {
+  #C1;
+}
+
+constants  {
+  #C1 = 2
+}
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.modular.expect
new file mode 100644
index 0000000..7f72a48
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_consts_transitively_2.dart";
+import "org-dartlang-testcase:///infer_consts_transitively_2_b.dart";
+
+static const field core::int* a1 = #C1;
+static const field core::int* a2 = #C1;
+static method main() → dynamic {}
+
+library test;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_consts_transitively_2_a.dart";
+
+static const field core::int* m1 = #C1;
+static const field core::int* m2 = #C1;
+static method foo() → dynamic {
+  core::int* i;
+  i = #C1;
+}
+static method main() → dynamic {}
+
+library;
+import self as self3;
+import "dart:core" as core;
+
+static const field core::int* b1 = #C1;
+static method main() → dynamic {
+  #C1;
+}
+
+constants  {
+  #C1 = 2
+}
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.modular.expect
new file mode 100644
index 0000000..85d3066
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static const field core::int* b1 = #C1;
+static method main() → dynamic {
+  #C1;
+}
+
+constants  {
+  #C1 = 2
+}
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.modular.expect
new file mode 100644
index 0000000..85d3066
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static const field core::int* b1 = #C1;
+static method main() → dynamic {
+  #C1;
+}
+
+constants  {
+  #C1 = 2
+}
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.modular.expect
new file mode 100644
index 0000000..5692085
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.weak.modular.expect
@@ -0,0 +1,75 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.y*/ y;
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.w*/ w;
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.z*/ z;
+//                                                             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field dynamic x = null;
+  field core::int* y = 2;
+  field core::String* z = "hi";
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object implements self::A {
+  field dynamic x = 2;
+  field core::int* y = 3;
+  field core::String* z = null;
+  field core::int* w = 2;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo() → dynamic {
+  core::String* s;
+  core::int* i;
+  s = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
+  s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:21:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.y*/ y;
+                                                            ^" in new self::B::•().{self::B::y}{core::int*} as{TypeError} core::String*;
+  s = new self::B::•().{self::B::z}{core::String*};
+  s = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:23:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.w*/ w;
+                                                            ^" in new self::B::•().{self::B::w}{core::int*} as{TypeError} core::String*;
+  i = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+  i = new self::B::•().{self::B::y}{core::int*};
+  i = invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:27:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.z*/ z;
+                                                            ^" in new self::B::•().{self::B::z}{core::String*} as{TypeError} core::int*;
+  i = new self::B::•().{self::B::w}{core::int*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.modular.expect
new file mode 100644
index 0000000..ba522a3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object implements self::B {
+  field core::int* x = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  field core::int* x = 0;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..cc037d5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object implements self::B {
+  field core::int* x = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object implements self::C {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..ad938ca
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object implements self::B {
+  field core::int* x = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object implements self::C {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract set x(core::int* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract set x(core::int* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.modular.expect
new file mode 100644
index 0000000..4c56b7e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.weak.modular.expect
@@ -0,0 +1,107 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:7: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var x;
+//       ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the overridden members.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the overridden members.
+//   double get x;
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::num*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::double*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E extends self::A implements self::B {
+  field core::int* x = null;
+  synthetic constructor •() → self::E*
+    : super self::A::•()
+    ;
+}
+class F extends self::A implements self::C {
+  field core::int* x = null;
+  synthetic constructor •() → self::F*
+    : super self::A::•()
+    ;
+}
+class G extends self::A implements self::D {
+  field invalid-type x = null;
+  synthetic constructor •() → self::G*
+    : super self::A::•()
+    ;
+}
+class H extends self::C implements self::D {
+  field core::double* x = null;
+  synthetic constructor •() → self::H*
+    : super self::C::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.modular.expect
new file mode 100644
index 0000000..c1a5df1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::num*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  abstract get x() → core::int*;
+}
+class C extends self::B {
+  field core::int* x = null;
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.modular.expect
new file mode 100644
index 0000000..7b26ea1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field core::List<self::A::T*>* z = null;
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::List<self::A::T*>*;
+  abstract set y(covariant-by-class core::List<self::A::T*>* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A<core::int*> {
+  field core::List<core::int*>* x = null;
+  covariant-by-class field core::List<core::int*>* y = null;
+  covariant-by-class field core::List<core::int*>* z = null;
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..c7c2a14
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.weak.modular.expect
@@ -0,0 +1,105 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get x() → core::int*
+    return 0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::A {
+  field core::int* x = null;
+  synthetic constructor •() → self::C*
+    : super self::A::•()
+    ;
+}
+class D extends self::B {
+  field core::int* x = null;
+  synthetic constructor •() → self::D*
+    : super self::B::•()
+    ;
+}
+class E extends core::Object implements self::A {
+  field core::int* x = null;
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F extends core::Object implements self::B {
+  field core::int* x = null;
+  synthetic constructor •() → self::F*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _G&Object&B = core::Object with self::B /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_G&Object&B*
+    : super core::Object::•()
+    ;
+  mixin-super-stub get x() → core::int*
+    return super.{self::B::x};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class G extends self::_G&Object&B {
+  field core::int* x = null;
+  synthetic constructor •() → self::G*
+    : super self::_G&Object&B::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..476388a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.weak.modular.expect
@@ -0,0 +1,104 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract set x(core::int* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  set x(core::int* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::A {
+  field core::int* x = null;
+  synthetic constructor •() → self::C*
+    : super self::A::•()
+    ;
+}
+class D extends self::B {
+  field core::int* x = null;
+  synthetic constructor •() → self::D*
+    : super self::B::•()
+    ;
+}
+class E extends core::Object implements self::A {
+  field core::int* x = null;
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F extends core::Object implements self::B {
+  field core::int* x = null;
+  synthetic constructor •() → self::F*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _G&Object&B = core::Object with self::B /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_G&Object&B*
+    : super core::Object::•()
+    ;
+  mixin-super-stub set x(core::int* value) → void
+    return super.{self::B::x} = value;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class G extends self::_G&Object&B {
+  field core::int* x = null;
+  synthetic constructor •() → self::G*
+    : super self::_G&Object&B::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_static.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_field_static.dart.weak.modular.expect
new file mode 100644
index 0000000..c785e64
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_field_static.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  static get x() → core::int*
+    return 0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  static field dynamic x = self::f();
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C extends self::A {
+  static field dynamic x = null;
+  synthetic constructor •() → self::C*
+    : super self::A::•()
+    ;
+}
+static method f() → dynamic
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..3eab43e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:9:11: Error: The type 'int' of the getter 'A.x' is not assignable to the type 'double' of the setter 'A.x'.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:10:12: Context: This is the declaration of the setter 'A.x'.
+//   void set x(double value) {}
+//            ^
+//
+// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:14:9: Error: The type 'int' of the field 'B.x' is not assignable to the type 'double' of the inherited setter 'A.x'.
+//   final x;
+//         ^
+// pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart:10:12: Context: This is the declaration of the setter 'A.x'.
+//   void set x(double value) {}
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::int*;
+  set x(core::double* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  final field core::int* x;
+  constructor •(core::int* x) → self::B*
+    : self::B::x = x, super self::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.modular.expect
new file mode 100644
index 0000000..2668951
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  final field core::int* x;
+  constructor •(core::int* x) → self::B*
+    : self::B::x = x, super self::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.modular.expect
new file mode 100644
index 0000000..287066b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  set x(core::double* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  final field core::double* x;
+  constructor •(core::double* x) → self::B*
+    : self::B::x = x, super self::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.modular.expect
new file mode 100644
index 0000000..a18d682
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.weak.modular.expect
@@ -0,0 +1,191 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Undefined name 'x'.
+// var b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
+//                                              ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Undefined name 'x'.
+//   /*error:UNDEFINED_IDENTIFIER*/ x
+//                                  ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:32:58: Error: The operator 'unary-' isn't defined for the class 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
+// Try correcting the operator to an existing operator, or defining a 'unary-' operator.
+// var i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();
+//                                                          ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:36:36: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
+//   a = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'String' can't be assigned to a variable of type 'B'.
+//  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
+//   b = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<invalid-type>'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+//   c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
+//                                                           ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+//   c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
+//                                                           ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:36: Error: A value of type 'int' can't be assigned to a variable of type 'Map<dynamic, dynamic>'.
+//  - 'Map' is from 'dart:core'.
+//   d = /*error:INVALID_ASSIGNMENT*/ 3;
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:67: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'A'.
+//  - 'Map' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
+//   e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
+//                                                                   ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
+//   f = /*error:INVALID_ASSIGNMENT*/ false;
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
+//   g = /*error:INVALID_ASSIGNMENT*/ false;
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:52:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
+//  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
+//   h = /*error:INVALID_ASSIGNMENT*/ false;
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:56:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
+//  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
+//   j = /*error:INVALID_ASSIGNMENT*/ false;
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:57:58: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'B'.
+//  - 'List' is from 'dart:core'.
+//  - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
+//   j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];
+//                                                          ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+class A extends core::Object {
+  field core::int* x = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator +(dynamic other) → self::B*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  constructor •(dynamic ignore) → self::B*
+    : super self::A::•()
+    ;
+}
+static field self::A* a = new self::A::•();
+static field self::B* b = new self::B::•(invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Undefined name 'x'.
+var b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
+                                             ^");
+static field core::List<invalid-type>* c1 = <invalid-type>[invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Undefined name 'x'.
+  /*error:UNDEFINED_IDENTIFIER*/ x
+                                 ^"];
+static field core::List<dynamic>* c2 = #C1;
+static field core::Map<dynamic, dynamic>* d = <dynamic, dynamic>{"a": "b"};
+static field self::A* e = let final self::A* #t1 = new self::A::•() in block {
+  #t1.{self::A::x} = 3;
+} =>#t1;
+static field core::int* f = 2.{core::num::+}(3){(core::num*) →* core::int*};
+static field core::int* g = 3.{core::int::unary-}(){() →* core::int*};
+static field self::B* h = new self::A::•().{self::A::+}(3){(dynamic) →* self::B*};
+static field dynamic i = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:32:58: Error: The operator 'unary-' isn't defined for the class 'A'.
+ - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
+Try correcting the operator to an existing operator, or defining a 'unary-' operator.
+var i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();
+                                                         ^" in new self::A::•(){<unresolved>}.unary-();
+static field self::B* j = null as self::B*;
+static method test1() → dynamic {
+  self::a = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:36:36: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
+ - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
+  a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^" in "hi" as{TypeError} self::A*;
+  self::a = new self::B::•(3);
+  self::b = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'String' can't be assigned to a variable of type 'B'.
+ - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
+  b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^" in "hi" as{TypeError} self::B*;
+  self::b = new self::B::•(3);
+  self::c1 = <invalid-type>[];
+  self::c1 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:41:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<invalid-type>'.
+ - 'Set' is from 'dart:core'.
+ - 'List' is from 'dart:core'.
+  c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
+                                                          ^" in ( block {
+    final core::Set<dynamic>* #t2 = col::LinkedHashSet::•<dynamic>();
+  } =>#t2) as{TypeError} core::List<invalid-type>*;
+  self::c2 = <dynamic>[];
+  self::c2 = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:59: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'List<dynamic>'.
+ - 'Set' is from 'dart:core'.
+ - 'List' is from 'dart:core'.
+  c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ {};
+                                                          ^" in ( block {
+    final core::Set<dynamic>* #t3 = col::LinkedHashSet::•<dynamic>();
+  } =>#t3) as{TypeError} core::List<dynamic>*;
+  self::d = <dynamic, dynamic>{};
+  self::d = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:36: Error: A value of type 'int' can't be assigned to a variable of type 'Map<dynamic, dynamic>'.
+ - 'Map' is from 'dart:core'.
+  d = /*error:INVALID_ASSIGNMENT*/ 3;
+                                   ^" in 3 as{TypeError} core::Map<dynamic, dynamic>*;
+  self::e = new self::A::•();
+  self::e = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:67: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'A'.
+ - 'Map' is from 'dart:core'.
+ - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
+  e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
+                                                                  ^" in <dynamic, dynamic>{} as{TypeError} self::A*;
+  self::f = 3;
+  self::f = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
+  f = /*error:INVALID_ASSIGNMENT*/ false;
+                                   ^" in false as{TypeError} core::int*;
+  self::g = 1;
+  self::g = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'bool' can't be assigned to a variable of type 'int'.
+  g = /*error:INVALID_ASSIGNMENT*/ false;
+                                   ^" in false as{TypeError} core::int*;
+  self::h = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:52:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
+ - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
+  h = /*error:INVALID_ASSIGNMENT*/ false;
+                                   ^" in false as{TypeError} self::B*;
+  self::h = new self::B::•("b");
+  self::i = false;
+  self::j = new self::B::•("b");
+  self::j = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:56:36: Error: A value of type 'bool' can't be assigned to a variable of type 'B'.
+ - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
+  j = /*error:INVALID_ASSIGNMENT*/ false;
+                                   ^" in false as{TypeError} self::B*;
+  self::j = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:57:58: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'B'.
+ - 'List' is from 'dart:core'.
+ - 'B' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
+  j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];
+                                                         ^" in <dynamic>[] as{TypeError} self::B*;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.modular.expect
new file mode 100644
index 0000000..8b4fa52
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field dynamic x = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object implements self::A {
+  field dynamic x = 2;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo() → dynamic {
+  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.modular.expect
new file mode 100644
index 0000000..d5127a5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field dynamic x = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object implements self::A {
+  final field dynamic x = 2;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo() → dynamic {
+  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.modular.expect
new file mode 100644
index 0000000..79f52e7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.weak.modular.expect
@@ -0,0 +1,77 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart" as inf;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart";
+
+static field core::int* y = inf::x;
+static method test1() → dynamic {
+  core::int* t = 3;
+  t = inf::x;
+  t = self::y;
+}
+static method main() → dynamic {}
+
+library;
+import self as inf;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+static field core::int* x = 2;
+static method main() → dynamic {}
+
+library test;
+import self as self2;
+import "dart:core" as core;
+import "infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart" as inf2;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
+
+class B extends core::Object {
+  static field core::int* y = inf2::A::x;
+  synthetic constructor •() → self2::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test1() → dynamic {
+  core::int* t = 3;
+  t = inf2::A::x;
+  t = self2::B::y;
+}
+static method main() → dynamic {}
+
+library;
+import self as inf2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+class A extends core::Object {
+  static field core::int* x = 2;
+  synthetic constructor •() → inf2::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.modular.expect
new file mode 100644
index 0000000..fb74297
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart" as inf;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
+
+class B extends core::Object {
+  static field core::int* y = inf::A::x;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test1() → dynamic {
+  core::int* t = 3;
+  t = inf::A::x;
+  t = self::B::y;
+}
+static method main() → dynamic {}
+
+library;
+import self as inf;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+class A extends core::Object {
+  static field core::int* x = 2;
+  synthetic constructor •() → inf::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.modular.expect
new file mode 100644
index 0000000..da8a870
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+class A extends core::Object {
+  static field core::int* x = 2;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+library test;
+import self as self2;
+import "dart:core" as core;
+import "infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart" as self;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
+
+class B extends core::Object {
+  static field core::int* y = self::A::x;
+  synthetic constructor •() → self2::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test1() → dynamic {
+  core::int* t = 3;
+  t = self::A::x;
+  t = self2::B::y;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.modular.expect
new file mode 100644
index 0000000..7e9fca5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+static field core::int* x = 2;
+static method main() → dynamic {}
+
+library test;
+import self as self2;
+import "dart:core" as core;
+import "infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart" as inf;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
+
+class B extends core::Object {
+  static field core::int* y = inf::A::x;
+  synthetic constructor •() → self2::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test1() → dynamic {
+  core::int* t = 3;
+  t = inf::A::x;
+  t = self2::B::y;
+}
+static method main() → dynamic {}
+
+library;
+import self as inf;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+class A extends core::Object {
+  static field core::int* x = 2;
+  synthetic constructor •() → inf::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.modular.expect
new file mode 100644
index 0000000..cfb8761
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   x = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   y = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+//
+import self as self;
+import "infer_from_variables_in_non_cycle_imports_with_flag_a.dart" as inf;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_non_cycle_imports_with_flag_a.dart";
+
+static field core::int* y = inf::x;
+static method test1() → dynamic {
+  inf::x = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^" in "hi" as{TypeError} core::int*;
+  self::y = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^" in "hi" as{TypeError} core::int*;
+}
+static method main() → dynamic {}
+
+library;
+import self as inf;
+import "dart:core" as core;
+
+static field core::int* x = 2;
+static method main() → dynamic {
+  inf::x;
+}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.modular.expect
new file mode 100644
index 0000000..74f640c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.weak.modular.expect
@@ -0,0 +1,65 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   A.x = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                      ^
+//
+// pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   B.y = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                      ^
+//
+import self as self;
+import "dart:core" as core;
+import "infer_from_variables_in_non_cycle_imports_with_flag2_a.dart" as inf;
+
+import "org-dartlang-testcase:///infer_from_variables_in_non_cycle_imports_with_flag2_a.dart";
+
+class B extends core::Object {
+  static field core::int* y = inf::A::x;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test1() → dynamic {
+  inf::A::x = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  A.x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                     ^" in "hi" as{TypeError} core::int*;
+  self::B::y = invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  B.y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                     ^" in "hi" as{TypeError} core::int*;
+}
+static method main() → dynamic {}
+
+library;
+import self as inf;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static field core::int* x = 2;
+  synthetic constructor •() → inf::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.modular.expect
new file mode 100644
index 0000000..81376fe
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static field core::int* x = 2;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.modular.expect
new file mode 100644
index 0000000..298b12b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static field core::int* x = 2;
+static method main() → dynamic {
+  self::x;
+}
diff --git a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.modular.expect
new file mode 100644
index 0000000..91d941e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::A::X* field = null;
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B<Y extends core::Object* = dynamic> extends core::Object implements self::A<self::B::Y*> {
+  synthetic constructor •() → self::B<self::B::Y*>*
+    : super core::Object::•()
+    ;
+  abstract get field() → self::B::Y*;
+  abstract set field(covariant-by-class self::B::Y* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object implements self::A<core::int*> {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract get field() → core::int*;
+  abstract set field(covariant-by-class core::int* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.modular.expect
new file mode 100644
index 0000000..6d31625
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method m<T extends core::Object* = dynamic>(core::int* a, {core::String* b = #C1, self::C::m::T* c = #C1}) → self::C::m::T*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, b: "bbb", c: 2.0){(core::int*, {b: core::String*, c: core::double*}) →* core::double*};
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.modular.expect
new file mode 100644
index 0000000..5c86982
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method m<T extends core::Object* = dynamic>(core::int* a, [self::C::m::T* b = #C1]) → self::C::m::T*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, 2.0){(core::int*, [core::double*]) →* core::double*};
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.modular.expect
new file mode 100644
index 0000000..7af5aa7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method m<T extends core::Object* = dynamic>(core::int* a, [core::String* b = #C1, self::C::m::T* c = #C1]) → self::C::m::T*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::double* y = new self::C::•().{self::C::m}<core::double*>(1, "bbb", 2.0){(core::int*, [core::String*, core::double*]) →* core::double*};
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.modular.expect
new file mode 100644
index 0000000..4435be3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+    return x;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::int* y = new self::C::•().{self::C::m}<core::int*>(42){(core::int*) →* core::int*};
+}
diff --git a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..b45aed1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract set x(core::double* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  abstract get x() → core::double*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..a1ce381
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.weak.modular.expect
@@ -0,0 +1,56 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object implements self::B {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  get x() → core::int*
+    return self::f() as{TypeError,ForDynamic} core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object implements self::C {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f() → dynamic
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.weak.modular.expect
new file mode 100644
index 0000000..74ddf33
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Resource extends core::Object {
+  synthetic constructor •() → self::Resource*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Folder extends self::Resource {
+  synthetic constructor •() → self::Folder*
+    : super self::Resource::•()
+    ;
+}
+class Foo<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(self::Foo::T* t) → self::Foo<self::Foo::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method getResource(core::String* str) → self::Resource*
+  return null;
+static method main() → dynamic {
+  core::Map<core::String*, core::List<self::Folder*>*>* map = <core::String*, core::List<self::Folder*>*>{"pkgA": <self::Folder*>[self::getResource("/pkgA/lib/") as{TypeError} self::Folder*], "pkgB": <self::Folder*>[self::getResource("/pkgB/lib/") as{TypeError} self::Folder*]};
+  core::List<core::Map<core::String*, self::Folder*>*>* list = <core::Map<core::String*, self::Folder*>*>[<core::String*, self::Folder*>{"pkgA": self::getResource("/pkgA/lib/") as{TypeError} self::Folder*}, <core::String*, self::Folder*>{"pkgB": self::getResource("/pkgB/lib/") as{TypeError} self::Folder*}];
+  self::Foo<core::List<self::Folder*>*>* foo = new self::Foo::•<core::List<self::Folder*>*>(<self::Folder*>[self::getResource("/pkgA/lib/") as{TypeError} self::Folder*]);
+}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.modular.expect
new file mode 100644
index 0000000..588ca83
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:79: Error: Method not found: 'g'.
+//   /*@returnType=invalid-type*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+//                                                                               ^
+//
+// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
+//   g() => 0;
+//   ^
+// pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:79: Context: Previous use of 'g'.
+//   /*@returnType=invalid-type*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+//                                                                               ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → dynamic {
+  function f() → invalid-type
+    return invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:79: Error: Method not found: 'g'.
+  /*@returnType=invalid-type*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+                                                                              ^";
+  {
+    invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
+  g() => 0;
+  ^";
+    function g() → core::int*
+      return 0;
+  }
+  () →* invalid-type v = f;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.modular.expect
new file mode 100644
index 0000000..eb05a20
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static method test() → dynamic {
+  function f0() → core::int*
+    return 42;
+  function f1() → asy::Future<core::int*>* async 
+    return 42;
+  function f2() → core::int* {
+    return 42;
+  }
+  function f3() → asy::Future<core::int*>* async {
+    return 42;
+  }
+  function f4() → core::Iterable<core::int*>* sync* {
+    yield 42;
+  }
+  function f5() → asy::Stream<core::int*>* async* {
+    yield 42;
+  }
+  function f6() → core::num*
+    return 42;
+  function f7() → dynamic
+    return f7(){() →* dynamic};
+  function f8() → asy::Stream<core::int*>*
+    return f5(){() →* asy::Stream<core::int*>*};
+  () →* core::int* v0 = f0;
+  () →* asy::Future<core::int*>* v1 = f1;
+  () →* core::int* v2 = f2;
+  () →* asy::Future<core::int*>* v3 = f3;
+  () →* core::Iterable<core::int*>* v4 = f4;
+  () →* asy::Stream<core::int*>* v5 = f5;
+  () →* core::num* v6 = f6;
+  () →* dynamic v7 = f7;
+  () →* asy::Stream<core::int*>* v8 = f8;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.modular.expect
new file mode 100644
index 0000000..abae228
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = () →* core::int*;
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract method x(() →* core::int* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  abstract method x(() →* dynamic value) → void;
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method g(self::B* b) → dynamic {
+  b.{self::B::x}(self::f<() →* dynamic>()){(() →* dynamic) →* void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.modular.expect
new file mode 100644
index 0000000..4b3051b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.weak.modular.expect
@@ -0,0 +1,98 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:25:3: Error: Can't infer types for 'f' as the overridden members don't have a combined signature.
+// Try adding explicit types.
+//   f(x, y);
+//   ^
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:11:7: Context: This is one of the overridden members.
+//   int f(int x, int y);
+//       ^
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:18:7: Context: This is one of the overridden members.
+//   int f(int x);
+//       ^
+//
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:28:3: Error: Can't infer types for 'i' as the overridden members don't have a combined signature.
+// Try adding explicit types.
+//   i(x, {y, z});
+//   ^
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:14:7: Context: This is one of the overridden members.
+//   int i(int x, {int y});
+//       ^
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:21:7: Context: This is one of the overridden members.
+//   int i(int x, {int z});
+//       ^
+//
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:25:3: Error: The method 'C.f' has more required arguments than those of overridden method 'B.f'.
+//   f(x, y);
+//   ^
+// pkg/front_end/testcases/inference/infer_method_missing_params.dart:18:7: Context: This is the overridden method ('f').
+//   int f(int x);
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract method f(core::int* x, core::int* y) → core::int*;
+  abstract method g(core::int* x, [core::int* y = #C1]) → core::int*;
+  abstract method h(core::int* x, {core::int* y = #C1}) → core::int*;
+  abstract method i(core::int* x, {core::int* y = #C1}) → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract method f(core::int* x) → core::int*;
+  abstract method g(core::int* x) → core::int*;
+  abstract method h(core::int* x) → core::int*;
+  abstract method i(core::int* x, {core::int* z = #C1}) → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object implements self::A, self::B {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract method f(invalid-type x, invalid-type y) → invalid-type;
+  abstract method g(core::int* x, [core::int* y = #C1]) → core::int*;
+  abstract method h(core::int* x, {core::int* y = #C1}) → core::int*;
+  abstract method i(invalid-type x, {invalid-type y = #C1, invalid-type z = #C1}) → invalid-type;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.modular.expect
new file mode 100644
index 0000000..516ea9a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends self::D {
+  synthetic constructor •() → self::C*
+    : super self::D::•()
+    ;
+  set foo(core::int* x) → void {}
+}
+class D extends core::Object {
+  field core::int* foo = null;
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..84b9408
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends self::D {
+  synthetic constructor •() → self::C*
+    : super self::D::•()
+    ;
+  set foo(core::int* x) → void {}
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  set foo(core::int* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.modular.expect
new file mode 100644
index 0000000..ec7b742
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* a_not = !true;
+static field core::int* a_complement = 1.{core::int::~}(){() →* core::int*};
+static field core::int* a_negate = 1.{core::int::unary-}(){() →* core::int*};
+static method main() → dynamic {
+  self::a_not;
+  self::a_complement;
+  self::a_negate;
+}
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.modular.expect
new file mode 100644
index 0000000..2c6f832
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator ~() → core::int*
+    return 1;
+  operator unary-() → core::double*
+    return 2.0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::A* a = new self::A::•();
+static field core::int* v_complement = self::a.{self::A::~}(){() →* core::int*};
+static field core::double* v_negate = self::a.{self::A::unary-}(){() →* core::double*};
+static method main() → dynamic {
+  self::a;
+  self::v_complement;
+  self::v_negate;
+}
diff --git a/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.modular.expect
new file mode 100644
index 0000000..1e36c8b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_rethrow.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+
+static method test(() →* dynamic f, () →* dynamic g) → dynamic {
+  try {
+    f(){() →* dynamic};
+  }
+  on dynamic catch(final dynamic _) {
+    g(){() →* dynamic};
+    rethrow;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.modular.expect
new file mode 100644
index 0000000..cdbf9e5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method strings() → core::List<core::String*>* {
+  core::Iterable<core::String*>* stuff = <dynamic>[].{core::Iterable::expand}<core::String*>((dynamic i) → core::List<core::String*>* {
+    return <core::String*>[];
+  }){((dynamic) →* core::Iterable<core::String*>*) →* core::Iterable<core::String*>*};
+  return stuff.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+}
+static method main() → dynamic {
+  self::strings();
+}
diff --git a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..3259075
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  static set foo(core::int* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static set bar(core::int* x) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..8778884
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::double*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  abstract set x(core::double* value) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..70ec7fa
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object implements self::B {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  set x(core::int* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object implements self::C {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract set x(core::int* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract set x(core::int* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.modular.expect
new file mode 100644
index 0000000..6c97fd8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = () →* core::int*;
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract set x(() →* core::int* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  abstract set x(() →* dynamic value) → void;
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method g(self::B* b) → dynamic {
+  b.{self::B::x} = self::f<() →* dynamic>();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.modular.expect
new file mode 100644
index 0000000..a14272b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  set x(core::int* i) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  set x(core::Object* o) → void {}
+}
+static method main() → dynamic {
+  new self::B::•().{self::B::x} = "hello";
+}
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.modular.expect
new file mode 100644
index 0000000..445bbcb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.weak.modular.expect
@@ -0,0 +1,51 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "infer_statics_transitively_a.dart" as inf;
+
+import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
+
+static final field core::int* m1 = inf::a1;
+static final field core::int* m2 = inf::A::a2;
+static method foo() → dynamic {
+  core::int* i;
+  i = self::m1;
+}
+static method main() → dynamic {}
+
+library;
+import self as inf;
+import "dart:core" as core;
+import "infer_statics_transitively_b.dart" as inf2;
+import "infer_statics_transitively.dart" as self;
+
+import "org-dartlang-testcase:///infer_statics_transitively.dart";
+import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
+
+class A extends core::Object {
+  static final field core::int* a2 = inf2::b1;
+  synthetic constructor •() → inf::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static final field core::int* a1 = self::m2;
+static method main() → dynamic {}
+
+library;
+import self as inf2;
+import "dart:core" as core;
+
+static final field core::int* b1 = 2;
+static method main() → dynamic {
+  inf2::b1;
+}
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.modular.expect
new file mode 100644
index 0000000..a530b9e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static const field core::int* x1 = #C1;
+static final field core::int* x2 = 1;
+static final field core::int* y1 = #C1;
+static final field core::int* y2 = self::x2;
+static method foo() → dynamic {
+  core::int* i;
+  i = self::y1;
+  i = self::y2;
+}
+static method main() → dynamic {
+  self::foo();
+}
+
+constants  {
+  #C1 = 1
+}
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.modular.expect
new file mode 100644
index 0000000..0f736d7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.weak.modular.expect
@@ -0,0 +1,52 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_transitively3_a.dart" show a1, A;
+import "org-dartlang-testcase:///infer_statics_transitively3_a.dart" as p show a2, A;
+
+static const field core::int* t1 = #C1;
+static const field core::int* t2 = #C1;
+static const field core::int* t3 = #C2;
+static const field core::int* t4 = #C3;
+static const field dynamic t5 = #C4;
+static const field dynamic t6 = #C4;
+static method foo() → dynamic {
+  core::int* i;
+  i = #C1;
+  i = #C1;
+  i = #C2;
+  i = #C3;
+}
+static method main() → dynamic {}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static const field dynamic a3 = #C4;
+  synthetic constructor •() → self2::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field core::int* a1 = #C2;
+static const field core::int* a2 = #C3;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 3
+  #C3 = 4
+  #C4 = null
+}
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.modular.expect
new file mode 100644
index 0000000..a54e7ab
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static const field dynamic a3 = #C1;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field core::int* a1 = #C2;
+static const field core::int* a2 = #C3;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = 3
+  #C3 = 4
+}
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.modular.expect
new file mode 100644
index 0000000..54b40b9
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.weak.modular.expect
@@ -0,0 +1,81 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "infer_statics_transitively_b.dart" as inf;
+import "infer_statics_transitively.dart" as test;
+
+import "org-dartlang-testcase:///infer_statics_transitively.dart";
+import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
+
+class A extends core::Object {
+  static final field core::int* a2 = inf::b1;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static final field core::int* a1 = test::m2;
+static method main() → dynamic {
+  self::a1;
+}
+
+library test;
+import self as test;
+import "dart:core" as core;
+import "infer_statics_transitively_a.dart" as inf2;
+
+import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
+
+static final field core::int* m1 = inf2::a1;
+static final field core::int* m2 = inf2::A::a2;
+static method foo() → dynamic {
+  core::int* i;
+  i = test::m1;
+}
+static method main() → dynamic {}
+
+library;
+import self as inf;
+import "dart:core" as core;
+
+static final field core::int* b1 = 2;
+static method main() → dynamic {
+  inf::b1;
+}
+
+library;
+import self as inf2;
+import "dart:core" as core;
+import "infer_statics_transitively_b.dart" as inf;
+import "infer_statics_transitively.dart" as test;
+
+import "org-dartlang-testcase:///infer_statics_transitively.dart";
+import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
+
+class A extends core::Object {
+  static final field core::int* a2 = inf::b1;
+  synthetic constructor •() → inf2::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static final field core::int* a1 = test::m2;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.modular.expect
new file mode 100644
index 0000000..327bcc1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.weak.modular.expect
@@ -0,0 +1,51 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "infer_statics_transitively_b.dart" as inf;
+import "infer_statics_transitively.dart" as test;
+
+import "org-dartlang-testcase:///infer_statics_transitively.dart";
+import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
+
+class A extends core::Object {
+  static final field core::int* a2 = inf::b1;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static final field core::int* a1 = test::m2;
+static method main() → dynamic {}
+
+library test;
+import self as test;
+import "dart:core" as core;
+import "infer_statics_transitively_a.dart" as self;
+
+import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
+
+static final field core::int* m1 = self::a1;
+static final field core::int* m2 = self::A::a2;
+static method foo() → dynamic {
+  core::int* i;
+  i = test::m1;
+}
+static method main() → dynamic {}
+
+library;
+import self as inf;
+import "dart:core" as core;
+
+static final field core::int* b1 = 2;
+static method main() → dynamic {
+  inf::b1;
+}
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.modular.expect
new file mode 100644
index 0000000..8c80bfe
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static final field core::int* b1 = 2;
+static method main() → dynamic {
+  self::b1;
+}
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.modular.expect
new file mode 100644
index 0000000..4a992cd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "infer_statics_with_method_invocations_a.dart" as inf;
+
+import "org-dartlang-testcase:///infer_statics_with_method_invocations_a.dart";
+
+class T extends core::Object {
+  static final field self::T* foo = self::T::m1(self::T::m2(inf::m3("", "")));
+  synthetic constructor •() → self::T*
+    : super core::Object::•()
+    ;
+  static method m1(core::String* m) → self::T* {
+    return null;
+  }
+  static method m2(dynamic e) → core::String* {
+    return "";
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+library;
+import self as inf;
+import "dart:core" as core;
+
+static method m3(core::String* a, core::String* b, [dynamic a1 = #C1, dynamic a2 = #C1]) → dynamic {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.modular.expect
new file mode 100644
index 0000000..e864516
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method m3(core::String* a, core::String* b, [dynamic a1 = #C1, dynamic a2 = #C1]) → dynamic {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/infer_throw.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_throw.dart.weak.modular.expect
new file mode 100644
index 0000000..8f6f2b1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_throw.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* t = true;
+static field dynamic a = throw 0;
+static field core::int* b = (throw 0) ?{core::int*} 1 : 2;
+static field core::int* c = self::t ?{core::int*} throw 1 : 2;
+static field core::int* d = self::t ?{core::int*} 1 : throw 2;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.modular.expect
new file mode 100644
index 0000000..e583c2a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_throw_downwards.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic x = throw self::f<dynamic>();
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method g() → void {
+  dynamic x = throw self::f<dynamic>();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.modular.expect
new file mode 100644
index 0000000..454f2de
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
+//                                                                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* x = 2;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  get x() → core::int*
+    return 3;
+}
+static method foo() → dynamic {
+  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
+                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{core::int*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.modular.expect
new file mode 100644
index 0000000..a8b5b21
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.weak.modular.expect
@@ -0,0 +1,51 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
+//                                                                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::int* x = 2;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object implements self::A {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get x() → core::int*
+    return 3;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo() → dynamic {
+  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
+                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{core::int*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.modular.expect
new file mode 100644
index 0000000..be69c0e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   x = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test1() → dynamic {
+  core::int* x = 3;
+  x = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^" in "hi" as{TypeError} core::int*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.modular.expect
new file mode 100644
index 0000000..318a2d0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   x = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test2() → dynamic {
+  core::int* x = 3;
+  x = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^" in "hi" as{TypeError} core::int*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.modular.expect
new file mode 100644
index 0000000..f622139
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     a = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                      ^
+//
+// pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     b = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                      ^
+//
+// pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//     c = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* x = 0;
+  field core::int* y = null;
+  final field core::int* z = 42;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method test1() → dynamic {
+    core::int* a = this.{self::A::x}{core::int*};
+    a = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                     ^" in "hi" as{TypeError} core::int*;
+    a = 3;
+    core::int* b = this.{self::A::y}{core::int*};
+    b = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                     ^" in "hi" as{TypeError} core::int*;
+    b = 4;
+    core::int* c = this.{self::A::z}{core::int*};
+    c = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                     ^" in "hi" as{TypeError} core::int*;
+    c = 4;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.modular.expect
new file mode 100644
index 0000000..63aa12a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   a = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   b = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+//
+// pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   c = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::int* x = 0;
+static field core::int* y = 0;
+static final field core::int* z = 42;
+static method test1() → dynamic {
+  core::int* a = self::x;
+  a = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^" in "hi" as{TypeError} core::int*;
+  a = 3;
+  core::int* b = self::y;
+  b = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^" in "hi" as{TypeError} core::int*;
+  b = 4;
+  core::int* c = self::z;
+  c = invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^" in "hi" as{TypeError} core::int*;
+  c = 4;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.modular.expect
new file mode 100644
index 0000000..dced83d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
+//                                                                    ^
+//
+import self as self;
+import "infer_type_regardless_of_declaration_order_or_cycles_b.dart" as inf;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles_b.dart";
+
+class C extends inf::B {
+  synthetic constructor •() → self::C*
+    : super inf::B::•()
+    ;
+  get x() → core::int*
+    return null;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  get x() → core::int*
+    return 0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo() → dynamic {
+  core::int* y = new self::C::•().{self::C::x}{core::int*};
+  core::String* z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
+                                                                   ^" in new self::C::•().{self::C::x}{core::int*} as{TypeError} core::String*;
+}
+static method main() → dynamic {
+  self::foo();
+}
+
+library;
+import self as inf;
+import "infer_type_regardless_of_declaration_order_or_cycles.dart" as self;
+
+import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles.dart";
+
+class B extends self::A {
+  synthetic constructor •() → inf::B*
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.modular.expect
new file mode 100644
index 0000000..0acdfbf
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library;
+import self as self;
+import "infer_type_regardless_of_declaration_order_or_cycles.dart" as test;
+
+import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles.dart";
+
+class B extends test::A {
+  synthetic constructor •() → self::B*
+    : super test::A::•()
+    ;
+}
+static method main() → dynamic {}
+
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
+//                                                                    ^
+//
+import self as test;
+import "infer_type_regardless_of_declaration_order_or_cycles_b.dart" as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles_b.dart";
+
+class C extends self::B {
+  synthetic constructor •() → test::C*
+    : super self::B::•()
+    ;
+  get x() → core::int*
+    return null;
+}
+class A extends core::Object {
+  synthetic constructor •() → test::A*
+    : super core::Object::•()
+    ;
+  get x() → core::int*
+    return 0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo() → dynamic {
+  core::int* y = new test::C::•().{test::C::x}{core::int*};
+  core::String* z = invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C.x*/ x;
+                                                                   ^" in new test::C::•().{test::C::x}{core::int*} as{TypeError} core::String*;
+}
+static method main() → dynamic {
+  test::foo();
+}
diff --git a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.modular.expect
new file mode 100644
index 0000000..a416db2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::Map<core::int*, core::String*>* a = <core::int*, core::String*>{0: "aaa", 1: "bbb"};
+static field core::Map<core::double*, core::int*>* b = <core::double*, core::int*>{1.1: 1, 2.2: 2};
+static field core::Map<core::List<core::int*>*, core::Map<core::String*, core::double*>*>* c = <core::List<core::int*>*, core::Map<core::String*, core::double*>*>{};
+static field core::Map<core::int*, dynamic>* d = <core::int*, dynamic>{};
+static field core::Map<dynamic, core::int*>* e = <dynamic, core::int*>{};
+static field core::Map<dynamic, dynamic>* f = <dynamic, dynamic>{};
+static method main() → dynamic {
+  self::a;
+  self::b;
+  self::c;
+  self::d;
+  self::e;
+  self::f;
+}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.modular.expect
new file mode 100644
index 0000000..a263f07
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   get w => /*error:RETURN_OF_INVALID_TYPE*/ "hello";
+//                                             ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
+//                                                                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  final field self::A::T* x = null;
+  final field self::A::T* w = null;
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object implements self::A<core::int*> {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get x() → core::int*
+    return 3;
+  get w() → core::int*
+    return invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  get w => /*error:RETURN_OF_INVALID_TYPE*/ \"hello\";
+                                            ^" in "hello" as{TypeError} core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo() → dynamic {
+  core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:68: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B.x*/ x;
+                                                                   ^" in new self::B::•().{self::B::x}{core::int*} as{TypeError} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{core::int*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.modular.expect
new file mode 100644
index 0000000..4e199e1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:73: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B.x*/ x;
+//                                                                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::A::T* x = null;
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> {
+  covariant-by-class field self::B::E* y = null;
+  synthetic constructor •() → self::B<self::B::E*>*
+    : super self::A::•()
+    ;
+  get x() → self::B::E*
+    return this.{self::B::y}{self::B::E*};
+}
+static method foo() → dynamic {
+  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:73: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B.x*/ x;
+                                                                        ^" in new self::B::•<core::String*>().{self::B::x}{core::String*} as{TypeError} core::int*;
+  core::String* z = new self::B::•<core::String*>().{self::B::x}{core::String*};
+}
+static method main() → dynamic {
+  self::foo();
+}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.modular.expect
new file mode 100644
index 0000000..5b19a39
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       . /*@target=B.m*/ m(null, null);
+//                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class I<E extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::E*>*
+    : super core::Object::•()
+    ;
+  abstract method m(dynamic a, (dynamic, self::I::E*) →* core::String* f) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class A<E extends core::Object* = dynamic> extends core::Object implements self::I<self::A::E*> /*hasConstConstructor*/  {
+  const constructor •() → self::A<self::A::E*>*
+    : super core::Object::•()
+    ;
+  abstract method m(dynamic a, (dynamic, self::A::E*) →* core::String* f) → core::String*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M extends core::Object {
+  final field core::int* y = 0;
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> implements self::M /*hasConstConstructor*/  {
+  const constructor •() → self::B<self::B::E*>*
+    : super self::A::•()
+    ;
+  get y() → core::int*
+    return 0;
+  method m(dynamic a, (dynamic, self::B::E*) →* dynamic f) → core::String* {}
+}
+static method foo() → dynamic {
+  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:25: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      . /*@target=B.m*/ m(null, null);
+                        ^" in new self::B::•<dynamic>().{self::B::m}(null, null){(dynamic, (dynamic, dynamic) →* dynamic) →* core::String*} as{TypeError} core::int*;
+  core::String* z = new self::B::•<dynamic>().{self::B::m}(null, null){(dynamic, (dynamic, dynamic) →* dynamic) →* core::String*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.modular.expect
new file mode 100644
index 0000000..27f0da3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.weak.modular.expect
@@ -0,0 +1,86 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       . /*@target=A.value*/ value;
+//                             ^
+//
+import self as self;
+import "dart:core" as core;
+import "infer_types_on_generic_instantiations_in_library_cycle_a.dart" as inf;
+
+import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle_a.dart";
+
+abstract class A<E extends core::Object* = dynamic> extends core::Object implements inf::I<self::A::E*> /*hasConstConstructor*/  {
+  final field self::A::E* value = null;
+  const constructor •() → self::A<self::A::E*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M extends core::Object {
+  final field core::int* y = 0;
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> implements self::M /*hasConstConstructor*/  {
+  const constructor •() → self::B<self::B::E*>*
+    : super self::A::•()
+    ;
+  get y() → core::int*
+    return 0;
+  method m(dynamic a, (dynamic, core::int*) →* dynamic f) → self::A<self::B::E*>* {}
+}
+static method foo() → dynamic {
+  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      . /*@target=A.value*/ value;
+                            ^" in new self::B::•<core::String*>().{self::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* self::A<core::String*>*}.{self::A::value}{core::String*} as{TypeError} core::int*;
+  core::String* z = new self::B::•<core::String*>().{self::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* self::A<core::String*>*}.{self::A::value}{core::String*};
+}
+static method main() → dynamic {}
+
+library;
+import self as inf;
+import "dart:core" as core;
+import "infer_types_on_generic_instantiations_in_library_cycle.dart" as self;
+
+import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle.dart";
+
+abstract class I<E extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → inf::I<inf::I::E*>*
+    : super core::Object::•()
+    ;
+  abstract method m(dynamic a, (dynamic, core::int*) →* core::String* f) → self::A<inf::I::E*>*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.modular.expect
new file mode 100644
index 0000000..e7555d5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.weak.modular.expect
@@ -0,0 +1,86 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "infer_types_on_generic_instantiations_in_library_cycle.dart" as test;
+
+import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle.dart";
+
+abstract class I<E extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::E*>*
+    : super core::Object::•()
+    ;
+  abstract method m(dynamic a, (dynamic, core::int*) →* core::String* f) → test::A<self::I::E*>*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       . /*@target=A.value*/ value;
+//                             ^
+//
+import self as test;
+import "dart:core" as core;
+import "infer_types_on_generic_instantiations_in_library_cycle_a.dart" as self;
+
+import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle_a.dart";
+
+abstract class A<E extends core::Object* = dynamic> extends core::Object implements self::I<test::A::E*> /*hasConstConstructor*/  {
+  final field test::A::E* value = null;
+  const constructor •() → test::A<test::A::E*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M extends core::Object {
+  final field core::int* y = 0;
+  synthetic constructor •() → test::M*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<E extends core::Object* = dynamic> extends test::A<test::B::E*> implements test::M /*hasConstConstructor*/  {
+  const constructor •() → test::B<test::B::E*>*
+    : super test::A::•()
+    ;
+  get y() → core::int*
+    return 0;
+  method m(dynamic a, (dynamic, core::int*) →* dynamic f) → test::A<test::B::E*>* {}
+}
+static method foo() → dynamic {
+  core::int* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:29: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      . /*@target=A.value*/ value;
+                            ^" in new test::B::•<core::String*>().{test::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* test::A<core::String*>*}.{test::A::value}{core::String*} as{TypeError} core::int*;
+  core::String* z = new test::B::•<core::String*>().{test::B::m}(null, null){(dynamic, (dynamic, core::int*) →* dynamic) →* test::A<core::String*>*}.{test::A::value}{core::String*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.modular.expect
new file mode 100644
index 0000000..bd1fcf0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart:13:49: Error: The return type of the method 'B.x' is 'dynamic', which does not match the return type, 'int', of the overridden method, 'A.x'.
+// Change to a subtype of 'int'.
+//   /*error:INVALID_METHOD_OVERRIDE*/ dynamic get x => 3;
+//                                                 ^
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart:9:11: Context: This is the overridden method ('x').
+//   final T x = null;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  final field self::A::T* x = null;
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object implements self::A<core::int*> {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get x() → dynamic
+    return 3;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo() → dynamic {
+  core::String* y = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::String*;
+  core::int* z = new self::B::•().{self::B::x}{dynamic} as{TypeError,ForDynamic} core::int*;
+}
+static method main() → dynamic {
+  self::foo();
+}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.modular.expect
new file mode 100644
index 0000000..680de12
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.modular.expect
@@ -0,0 +1,142 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       int x = /*error:INVALID_ASSIGNMENT*/ i;
+//                                            ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
+//       int x = /*error:INVALID_ASSIGNMENT*/ i;
+//                                            ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+//  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
+//     String y = /*error:INVALID_ASSIGNMENT*/ x;
+//                                             ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+//  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
+// Try changing the type of the variable.
+//   for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {
+//               ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:70: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
+//  - 'Iterable' is from 'dart:core'.
+//   for (var /*@ type=dynamic */ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
+//                                                                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  field core::int* bar = 42;
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar<T extends core::Iterable<core::String*>*> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::T*>*
+    : super core::Object::•()
+    ;
+  method foo(covariant-by-class self::Bar::T* t) → void {
+    for (core::String* i in t) {
+      core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      int x = /*error:INVALID_ASSIGNMENT*/ i;
+                                           ^" in i as{TypeError} core::int*;
+    }
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Baz<T extends core::Object* = dynamic, E extends core::Iterable<self::Baz::T*>* = core::Iterable<dynamic>*, S extends self::Baz::E* = core::Iterable<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
+    : super core::Object::•()
+    ;
+  method foo(covariant-by-class self::Baz::S* t) → void {
+    for (self::Baz::T* i in t) {
+      core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
+      int x = /*error:INVALID_ASSIGNMENT*/ i;
+                                           ^" in i as{TypeError} core::int*;
+      self::Baz::T* y = i;
+    }
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  core::List<self::Foo*>* list = <self::Foo*>[];
+  for (self::Foo* x in list) {
+    core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+ - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
+    String y = /*error:INVALID_ASSIGNMENT*/ x;
+                                            ^" in x as{TypeError} core::String*;
+  }
+  for (dynamic x in list) {
+    core::String* y = x as{TypeError,ForDynamic} core::String*;
+  }
+  for (final self::Foo* #t1 in list) {
+    core::String* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+ - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
+Try changing the type of the variable.
+  for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {
+              ^" in #t1 as{TypeError} core::String*;
+    core::String* y = x;
+  }
+  dynamic z;
+  for (final self::Foo* #t2 in list) {
+    z = #t2;
+    core::String* y = z as{TypeError,ForDynamic} core::String*;
+  }
+  core::Iterable<dynamic>* iter = list;
+  for (final dynamic #t3 in iter) {
+    self::Foo* x = #t3 as{TypeError,ForDynamic} self::Foo*;
+    self::Foo* y = x;
+  }
+  dynamic iter2 = list;
+  for (final dynamic #t4 in iter2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    self::Foo* x = #t4 as{TypeError,ForDynamic} self::Foo*;
+    self::Foo* y = x;
+  }
+  core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
+  for (dynamic x in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:70: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Map' is from 'dart:core'.
+ - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart'.
+ - 'Iterable' is from 'dart:core'.
+  for (var /*@ type=dynamic */ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
+                                                                     ^" in map as{TypeError} core::Iterable<dynamic>*) {
+    core::String* y = x as{TypeError,ForDynamic} core::String*;
+  }
+  for (core::String* x in map.{core::Map::keys}{core::Iterable<core::String*>*}) {
+    core::String* y = x;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.modular.expect
new file mode 100644
index 0000000..c16146f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.modular.expect
@@ -0,0 +1,198 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       int x = /*error:INVALID_ASSIGNMENT*/ i;
+//                                            ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
+//       int x = /*error:INVALID_ASSIGNMENT*/ i;
+//                                            ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+//  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
+//     String y = /*error:INVALID_ASSIGNMENT*/ x;
+//                                             ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+//  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
+// Try changing the type of the variable.
+//   await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {
+//                     ^
+//
+// pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:76: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Stream<dynamic>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
+//  - 'Stream' is from 'dart:async'.
+//   await for (var /*@ type=dynamic */ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
+//                                                                            ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class Foo extends core::Object {
+  field core::int* bar = 42;
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar<T extends asy::Stream<core::String*>*> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::T*>*
+    : super core::Object::•()
+    ;
+  method foo(covariant-by-class self::Bar::T* t) → dynamic async {
+    await for (core::String* i in t) {
+      core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      int x = /*error:INVALID_ASSIGNMENT*/ i;
+                                           ^" in i as{TypeError} core::int*;
+    }
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Baz<T extends core::Object* = dynamic, E extends asy::Stream<self::Baz::T*>* = asy::Stream<dynamic>*, S extends self::Baz::E* = asy::Stream<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
+    : super core::Object::•()
+    ;
+  method foo(covariant-by-class self::Baz::S* t) → dynamic async {
+    await for (self::Baz::T* i in t) {
+      core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
+      int x = /*error:INVALID_ASSIGNMENT*/ i;
+                                           ^" in i as{TypeError} core::int*;
+      self::Baz::T* y = i;
+    }
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
+  static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
+    return null;
+  abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
+  abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
+  abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
+  abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
+  abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
+  abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
+  abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
+  abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
+  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
+  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
+  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
+  abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
+  abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
+  abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
+  abstract member-signature method forEach((self::MyStream::T*) →* void action) → asy::Future<dynamic>*; -> asy::Stream::forEach
+  abstract member-signature method every((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::every
+  abstract member-signature method any((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::any
+  abstract member-signature get length() → asy::Future<core::int*>*; -> asy::Stream::length
+  abstract member-signature get isEmpty() → asy::Future<core::bool*>*; -> asy::Stream::isEmpty
+  abstract member-signature method cast<R extends core::Object* = dynamic>() → asy::Stream<self::MyStream::cast::R*>*; -> asy::Stream::cast
+  abstract member-signature method toList() → asy::Future<core::List<self::MyStream::T*>*>*; -> asy::Stream::toList
+  abstract member-signature method toSet() → asy::Future<core::Set<self::MyStream::T*>*>*; -> asy::Stream::toSet
+  abstract member-signature method drain<E extends core::Object* = dynamic>([self::MyStream::drain::E* futureValue = #C1]) → asy::Future<self::MyStream::drain::E*>*; -> asy::Stream::drain
+  abstract member-signature method take(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::take
+  abstract member-signature method takeWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::takeWhile
+  abstract member-signature method skip(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skip
+  abstract member-signature method skipWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skipWhile
+  abstract member-signature method distinct([(self::MyStream::T*, self::MyStream::T*) →* core::bool* equals = #C1]) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::distinct
+  abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
+  abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
+  abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
+  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
+  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
+  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
+  abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
+  abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
+}
+static method test() → dynamic async {
+  self::MyStream<self::Foo*>* myStream = self::MyStream::•<self::Foo*>();
+  await for (self::Foo* x in myStream) {
+    core::String* y = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+ - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
+    String y = /*error:INVALID_ASSIGNMENT*/ x;
+                                            ^" in x as{TypeError} core::String*;
+  }
+  await for (dynamic x in myStream) {
+    core::String* y = x as{TypeError,ForDynamic} core::String*;
+  }
+  await for (final self::Foo* #t1 in myStream) {
+    core::String* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
+ - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
+Try changing the type of the variable.
+  await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {
+                    ^" in #t1 as{TypeError} core::String*;
+    core::String* y = x;
+  }
+  dynamic z;
+  await for (final self::Foo* #t2 in myStream) {
+    z = #t2;
+    core::String* y = z as{TypeError,ForDynamic} core::String*;
+  }
+  asy::Stream<dynamic>* stream = myStream;
+  await for (final dynamic #t3 in stream) {
+    self::Foo* x = #t3 as{TypeError,ForDynamic} self::Foo*;
+    self::Foo* y = x;
+  }
+  dynamic stream2 = myStream;
+  await for (final dynamic #t4 in stream2 as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
+    self::Foo* x = #t4 as{TypeError,ForDynamic} self::Foo*;
+    self::Foo* y = x;
+  }
+  core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
+  await for (dynamic x in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:76: Error: The type 'Map<String, Foo>' used in the 'for' loop must implement 'Stream<dynamic>'.
+ - 'Map' is from 'dart:core'.
+ - 'Foo' is from 'pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart'.
+ - 'Stream' is from 'dart:async'.
+  await for (var /*@ type=dynamic */ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
+                                                                           ^" in map as{TypeError} asy::Stream<dynamic>*) {
+    core::String* y = x as{TypeError,ForDynamic} core::String*;
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = ""
+}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..22c972f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test() → dynamic {
+  for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    core::int* j = i.{core::num::+}(1){(core::num*) →* core::int*};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.modular.expect
new file mode 100644
index 0000000..f8773b2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_use_of_void_local.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+
+static method f() → void {}
+static method g() → void {
+  void x = self::f();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.modular.expect b/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.modular.expect
new file mode 100644
index 0000000..3bfd2e6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_variable_void.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+
+static field void x = self::f();
+static method f() → void {}
+static method main() → dynamic {
+  self::x;
+}
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.modular.expect
new file mode 100644
index 0000000..524ef39
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   Foo([this.x = /*error:INVALID_ASSIGNMENT*/ "1"]);
+//                                              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  field core::int* x = 1;
+  constructor •([core::int* x = invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  Foo([this.x = /*error:INVALID_ASSIGNMENT*/ \"1\"]);
+                                             ^"]) → self::Foo*
+    : self::Foo::x = x, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.modular.expect
new file mode 100644
index 0000000..24a6a4b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::String* x = "x";
+  field core::Map<core::String*, core::Map<core::String*, core::String*>*>* y = <core::String*, core::Map<core::String*, core::String*>*>{"a": <core::String*, core::String*>{"b": "c"}, "d": <core::String*, core::String*>{"e": self::C::x}};
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.modular.expect
new file mode 100644
index 0000000..3b47743
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::String* y = self::x;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::String* x = "x";
+static method main() → dynamic {
+  self::x;
+}
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.modular.expect
new file mode 100644
index 0000000..8ee4d33
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.weak.modular.expect
@@ -0,0 +1,6 @@
+library test;
+import self as self;
+
+static method main() → dynamic {
+  () →* Null f = () → Null {};
+}
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.modular.expect
new file mode 100644
index 0000000..21efe4c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return_void_context.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  constructor •(() →* void func) → self::C*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C* c = new self::C::•(() → Null {});
+}
diff --git a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.modular.expect
new file mode 100644
index 0000000..e5b98d2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* a = null;
+  field core::List<core::int*>* b = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method m() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::A* v = let final self::A* #t1 = new self::A::•() in block {
+  #t1.{self::A::a} = 1;
+  #t1.{self::A::b}{core::List<core::int*>*}.{core::List::add}(2){(core::int*) →* void};
+  #t1.{self::A::m}(){() →* void};
+} =>#t1;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.modular.expect
new file mode 100644
index 0000000..83b4e3b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  operator *(self::C* other) → core::bool*
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C* c = new self::C::•();
+static field core::bool* x = self::c.{self::C::*}(self::c){(self::C*) →* core::bool*};
+static method main() → dynamic {
+  self::c;
+  self::x;
+}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.modular.expect
new file mode 100644
index 0000000..6764bc5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  operator *(self::C* other) → core::bool*
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object implements self::I {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C* c;
+static field core::bool* x = self::c.{self::I::*}(self::c){(self::C*) →* core::bool*};
+static method main() → dynamic {
+  self::c;
+}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.modular.expect
new file mode 100644
index 0000000..250adf8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  operator [](core::int* index) → core::bool*
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C* c = new self::C::•();
+  core::bool* x = c.{self::C::[]}(0){(core::int*) →* core::bool*};
+}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.modular.expect
new file mode 100644
index 0000000..007c0cd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  operator [](core::int* index) → core::bool*
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object implements self::I {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f() → dynamic {
+  self::C* c;
+  core::bool* x = c.{self::I::[]}(0){(core::int*) →* core::bool*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.modular.expect
new file mode 100644
index 0000000..d0c4a3c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  operator unary-() → core::bool*
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C* c = new self::C::•();
+static field core::bool* x = self::c.{self::C::unary-}(){() →* core::bool*};
+static method main() → dynamic {
+  self::c;
+  self::x;
+}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.modular.expect
new file mode 100644
index 0000000..443ba4b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  operator unary-() → core::bool*
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object implements self::I {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C* c;
+static field core::bool* x = self::c.{self::I::unary-}(){() →* core::bool*};
+static method main() → dynamic {
+  self::c;
+}
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..909f982
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method g() → core::bool*
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field () →* core::bool* x = self::f().{self::C::g}{() →* core::bool*};
+static method f() → self::C*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.modular.expect
new file mode 100644
index 0000000..a162c11
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  method g() → core::bool*
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object implements self::I {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field () →* core::bool* x = self::f().{self::I::g}{() →* core::bool*};
+static method f() → self::C*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..6eef7cc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field (core::Object*) →* void v = #C1;
+static method main() → dynamic {
+  self::v;
+}
+
+constants  {
+  #C1 = static-tearoff core::print
+}
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.modular.expect
new file mode 100644
index 0000000..429fa8a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method g() → core::bool*
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::bool* x = self::f().{self::C::g}(){() →* core::bool*};
+static method f() → self::C*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.modular.expect
new file mode 100644
index 0000000..c694d88
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  method g() → core::bool*
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object implements self::I {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::bool* x = self::f().{self::I::g}(){() →* core::bool*};
+static method f() → self::C*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect
new file mode 100644
index 0000000..5f1e09a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E*>* values = #C4;
+  static const field self::E* v1 = #C3;
+  const constructor •(core::int* index, core::String* name) → self::E*
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String*
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static final field self::E* x = #C3;
+static method main() → dynamic {
+  self::x;
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "v1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///inferred_type_is_enum.dart:
+- E. (from org-dartlang-testcase:///inferred_type_is_enum.dart:8:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect
new file mode 100644
index 0000000..624054f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E*>* values = #C4;
+  static const field self::E* v1 = #C3;
+  const constructor •(core::int* index, core::String* name) → self::E*
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String*
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static final field core::List<self::E*>* x = #C4;
+static method main() → dynamic {
+  self::x;
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "v1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///inferred_type_is_enum_values.dart:
+- E. (from org-dartlang-testcase:///inferred_type_is_enum_values.dart:8:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.modular.expect
new file mode 100644
index 0000000..2f74b63
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = () →* void;
+static final field core::Map<core::String*, () →* void>* x = <core::String*, () →* void>{};
+static method main() → dynamic {
+  self::x;
+}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.modular.expect
new file mode 100644
index 0000000..24aba57
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<T extends core::Object* = dynamic> = () →* T*;
+static final field core::Map<core::String*, () →* core::int*>* x = <core::String*, () →* core::int*>{};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.modular.expect
new file mode 100644
index 0000000..21d3b06
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<() →* core::Object*>* v = <() →* core::Object*>[#C1, #C2];
+static method f() → core::int*
+  return null;
+static method g() → core::String*
+  return null;
+static method main() → dynamic {
+  self::v;
+}
+
+constants  {
+  #C1 = static-tearoff self::f
+  #C2 = static-tearoff self::g
+}
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.modular.expect
new file mode 100644
index 0000000..9be942f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<((core::String*) →* core::int*) →* core::Object*>* v = <((core::String*) →* core::int*) →* core::Object*>[#C1, #C2];
+static method f((core::String*) →* core::int* x) → core::int*
+  return null;
+static method g((core::String*) →* core::int* x) → core::String*
+  return null;
+static method main() → dynamic {
+  self::v;
+}
+
+constants  {
+  #C1 = static-tearoff self::f
+  #C2 = static-tearoff self::g
+}
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.modular.expect
new file mode 100644
index 0000000..0b7d047
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<({x: core::int*}) →* core::Object*>* v = <({x: core::int*}) →* core::Object*>[#C1, #C2];
+static method f({core::int* x = #C3}) → core::int*
+  return null;
+static method g({core::int* x = #C3}) → core::String*
+  return null;
+static method main() → dynamic {
+  self::v;
+}
+
+constants  {
+  #C1 = static-tearoff self::f
+  #C2 = static-tearoff self::g
+  #C3 = null
+}
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.modular.expect
new file mode 100644
index 0000000..704ff597
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<([core::int*]) →* core::Object*>* v = <([core::int*]) →* core::Object*>[#C1, #C2];
+static method f([core::int* x = #C3]) → core::int*
+  return null;
+static method g([core::int* x = #C3]) → core::String*
+  return null;
+static method main() → dynamic {
+  self::v;
+}
+
+constants  {
+  #C1 = static-tearoff self::f
+  #C2 = static-tearoff self::g
+  #C3 = null
+}
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.modular.expect
new file mode 100644
index 0000000..b495253
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<(core::int*) →* core::Object*>* v = <(core::int*) →* core::Object*>[#C1, #C2];
+static method f(core::int* x) → core::int*
+  return null;
+static method g(core::int* x) → core::String*
+  return null;
+static method main() → dynamic {
+  self::v;
+}
+
+constants  {
+  #C1 = static-tearoff self::f
+  #C2 = static-tearoff self::g
+}
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.modular.expect
new file mode 100644
index 0000000..7c6c26d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static final field (core::bool*) →* (core::int*) →* core::Map<core::int*, core::bool*>* f = (core::bool* b) → (core::int*) →* core::Map<core::int*, core::bool*>* => (core::int* i) → core::Map<core::int*, core::bool*>* => <core::int*, core::bool*>{i: b};
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.modular.expect
new file mode 100644
index 0000000..edd69ee
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static final field (core::bool*) →* core::bool* f = (core::bool* b) → core::bool* => b;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.modular.expect
new file mode 100644
index 0000000..06af2b3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static final field (core::bool*) →* core::int* f = (core::bool* b) → core::int* => 1;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.modular.expect
new file mode 100644
index 0000000..ac18ccc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static final field (core::bool*) →* core::int* f = (core::bool* b) → core::int* => 1;
+static method main() → dynamic {
+  self::f;
+}
diff --git a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.modular.expect
new file mode 100644
index 0000000..7b33a23
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I1 extends core::Object {
+  final field core::int* x = self::y;
+  synthetic constructor •() → self::I1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I2 extends core::Object {
+  synthetic constructor •() → self::I2*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::num*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object implements self::I1, self::I2 {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  get x() → core::int*
+    return 0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* y = new self::C::•().{self::C::x}{core::int*};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.modular.expect
new file mode 100644
index 0000000..1e592bc2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(self::B<core::List<self::A::T*>*>* b) → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::A<dynamic>* x = new self::A::•<dynamic>(new self::B::•<core::List<dynamic>*>());
+}
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.modular.expect
new file mode 100644
index 0000000..f272f74
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.modular.expect
@@ -0,0 +1,51 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f<T extends core::Object* = dynamic>(self::C::f::T* x) → self::C::f::T*
+    return x;
+  static method g<T extends core::Object* = dynamic>(self::C::g::T* x) → self::C::g::T*
+    return x;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method test() → void {
+    (core::int*) →* core::int* func;
+    func = super.{self::C::f}<core::int*>;
+  }
+}
+static method f<T extends core::Object* = dynamic>(self::f::T* x) → self::f::T*
+  return x;
+static method test() → void {
+  function h<T extends core::Object* = dynamic>(T* x) → T*
+    return x;
+  (core::int*) →* core::int* func;
+  func = #C2;
+  func = new self::C::•().{self::C::f}{<T extends core::Object* = dynamic>(T*) →* T*}<core::int*>;
+  func = #C4;
+  func = h<core::int*>;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::f
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = static-tearoff self::C::g
+  #C4 = instantiation #C3 <core::int*>
+}
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.modular.expect
new file mode 100644
index 0000000..86594e9
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method f<U extends core::Object* = dynamic>(self::C::f::U* x) → (self::C::T*) →* void
+    return (self::C::T* y) → Null {};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test(self::C<core::String*>* c) → void {
+  (core::int*) →* (core::String*) →* void tearoff = (c.{self::C::f}{<U extends core::Object* = dynamic>(U*) →* (core::String*) →* void} as{TypeError,CovarianceCheck} <U extends core::Object* = dynamic>(U*) →* (core::String*) →* void)<core::int*>;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.modular.expect
new file mode 100644
index 0000000..2e086bf
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:10:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+//   func = f.call;
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test(<T extends core::Object* = dynamic>(T*) →* T* f) → void {
+  (core::int*) →* core::int* func;
+  func = invalid-expression "pkg/front_end/testcases/inference/instantiate_tearoff_of_call.dart:10:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'int Function(int)'.
+  func = f.call;
+           ^" in f.call as{TypeError} (core::int*) →* core::int*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.modular.expect
new file mode 100644
index 0000000..0fb60dc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B<T extends self::A<core::int*>*> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A<T extends core::int*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::B<self::A<core::int*>*>* v = null;
+static method main() → dynamic {
+  self::v;
+}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.modular.expect
new file mode 100644
index 0000000..0612d0f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::int*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends self::A<core::int*>*> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::B<self::A<core::int*>*>* v = null;
+static method main() → dynamic {
+  self::v;
+}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..731ae28
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends self::A<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::B<self::A<dynamic>*>* v = null;
+static method main() → dynamic {
+  self::v;
+}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.modular.expect
new file mode 100644
index 0000000..09072c4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::int*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::A<core::int*>* v = null;
+static method main() → dynamic {
+  self::v;
+}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.modular.expect
new file mode 100644
index 0000000..09072c4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::int*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::A<core::int*>* v = null;
+static method main() → dynamic {
+  self::v;
+}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..05cb019
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C<dynamic>* v = new self::C::•<dynamic>();
+}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.modular.expect
new file mode 100644
index 0000000..1fb9971
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num*> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C<core::int*>* x = new self::C::•<core::int*>();
+static method main() → dynamic {
+  self::x;
+}
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.modular.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.modular.expect
new file mode 100644
index 0000000..6bd9194
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends self::A*> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::B<self::A*>* v = null;
+static method main() → dynamic {
+  self::v;
+}
diff --git a/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.modular.expect b/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.modular.expect
new file mode 100644
index 0000000..bdd406c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/int_upwards_local.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int* x = 1;
+}
diff --git a/pkg/front_end/testcases/inference/issue41199.dart.weak.modular.expect b/pkg/front_end/testcases/inference/issue41199.dart.weak.modular.expect
new file mode 100644
index 0000000..6d7392d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/issue41199.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method foo<X extends core::Object* = dynamic>(<Y extends core::Object* = dynamic>() →* core::Map<self::foo::X*, Y*>* f) → dynamic
+  return null;
+static method baz() → dynamic
+  return self::foo<dynamic>(<Z extends core::Object* = dynamic>() → core::Map<dynamic, Z*>* => <dynamic, Z*>{});
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.modular.expect b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.modular.expect
new file mode 100644
index 0000000..9cfc708
--- /dev/null
+++ b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method getListOfString() → core::List<core::String*>*
+  return #C1;
+static method foo() → void {
+  core::List<dynamic>* myList = self::getListOfString();
+  myList.{core::Iterable::map}<core::int*>((dynamic type) → core::int* => 42){((dynamic) →* core::int*) →* core::Iterable<core::int*>*};
+}
+static method bar() → void {
+  dynamic list;
+  try {
+    list = <core::String*>[];
+  }
+  on dynamic catch(final dynamic _) {
+    return;
+  }
+  list{dynamic}.map((dynamic value) → core::String* => "${value}");
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <core::String*>[]
+}
diff --git a/pkg/front_end/testcases/inference/lambda_return_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/lambda_return_type.dart.weak.modular.expect
new file mode 100644
index 0000000..c4026b5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/lambda_return_type.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef FunctionReturningNum = () →* core::num*;
+static method test() → dynamic {
+  core::int* i = 1;
+  core::Object* o = 1;
+  () →* core::num* a = () → core::int* => i;
+  () →* core::num* b = () → core::num* => o as{TypeError} core::num*;
+  () →* core::num* c = () → core::int* {
+    return i;
+  };
+  () →* core::num* d = () → core::num* {
+    return o as{TypeError} core::num*;
+  };
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.modular.expect b/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.modular.expect
new file mode 100644
index 0000000..bfc338c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/lambda_void_context.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method f() → dynamic {
+  core::List<core::int*>* o;
+  o.{core::Iterable::forEach}((core::int* i) → core::int* => i.{core::num::+}(1){(core::num*) →* core::int*}){((core::int*) →* void) →* void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.modular.expect b/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.modular.expect
new file mode 100644
index 0000000..87ba7a9
--- /dev/null
+++ b/pkg/front_end/testcases/inference/list_literal_typed.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int*>* a = <core::int*>[];
+static field core::List<core::double*>* b = <core::double*>[1.0, 2.0, 3.0];
+static field core::List<core::List<core::int*>*>* c = <core::List<core::int*>*>[];
+static field core::List<dynamic>* d = <dynamic>[1, 2.0, false];
+static method main() → dynamic {
+  core::List<core::int*>* a = <core::int*>[];
+  core::List<core::double*>* b = <core::double*>[1.0, 2.0, 3.0];
+  core::List<core::List<core::int*>*>* c = <core::List<core::int*>*>[];
+  core::List<dynamic>* d = <dynamic>[1, 2.0, false];
+}
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.weak.modular.expect b/pkg/front_end/testcases/inference/list_literals.dart.weak.modular.expect
new file mode 100644
index 0000000..a4e38e4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/list_literals.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/list_literals.dart:10:70: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/list_literals.dart:11:70: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+//   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
+//                                                                      ^
+//
+// pkg/front_end/testcases/inference/list_literals.dart:18:70: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
+//   x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+//                                                                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test1() → dynamic {
+  core::List<core::int*>* x = <core::int*>[1, 2, 3];
+  x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:70: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+                                                                     ^" in "hi" as{TypeError} core::int*){(core::int*) →* void};
+  x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:70: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+  x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
+                                                                     ^" in 4.0 as{TypeError} core::int*){(core::int*) →* void};
+  x.{core::List::add}(4){(core::int*) →* void};
+  core::List<core::num*>* y = x;
+}
+static method test2() → dynamic {
+  core::List<core::num*>* x = <core::num*>[1, 2.0, 3];
+  x.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:70: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
+  x. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+                                                                     ^" in "hi" as{TypeError} core::num*){(core::num*) →* void};
+  x.{core::List::add}(4.0){(core::num*) →* void};
+  core::List<core::int*>* y = x as{TypeError} core::List<core::int*>*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.modular.expect b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.modular.expect
new file mode 100644
index 0000000..6efc2e7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test1() → dynamic {
+  core::List<Null>* x = <Null>[null];
+  x.{core::List::add}(42 as{TypeError} Null){(Null) →* void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.modular.expect
new file mode 100644
index 0000000..75f767f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/list_literals_top_level.dart:10:71: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+//   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+//                                                                       ^
+//
+// pkg/front_end/testcases/inference/list_literals_top_level.dart:11:71: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+//   x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
+//                                                                       ^
+//
+// pkg/front_end/testcases/inference/list_literals_top_level.dart:18:71: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
+//   x2. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+//                                                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int*>* x1 = <core::int*>[1, 2, 3];
+static field core::List<core::num*>* x2 = <core::num*>[1, 2.0, 3];
+static method test1() → dynamic {
+  self::x1.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:71: Error: The argument type 'String' can't be assigned to the parameter type 'int'.
+  x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+                                                                      ^" in "hi" as{TypeError} core::int*){(core::int*) →* void};
+  self::x1.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:71: Error: The argument type 'double' can't be assigned to the parameter type 'int'.
+  x1. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
+                                                                      ^" in 4.0 as{TypeError} core::int*){(core::int*) →* void};
+  self::x1.{core::List::add}(4){(core::int*) →* void};
+  core::List<core::num*>* y = self::x1;
+}
+static method test2() → dynamic {
+  self::x2.{core::List::add}(invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:71: Error: The argument type 'String' can't be assigned to the parameter type 'num'.
+  x2. /*@target=List.add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+                                                                      ^" in "hi" as{TypeError} core::num*){(core::num*) →* void};
+  self::x2.{core::List::add}(4.0){(core::num*) →* void};
+  core::List<core::int*>* y = self::x2 as{TypeError} core::List<core::int*>*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.modular.expect
new file mode 100644
index 0000000..908eca7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::C::T* t;
+  constructor •(self::C::T* t) → self::C<self::C::T*>*
+    : self::C::t = t, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C<core::int*>* x = new self::C::•<core::int*>(42);
+  core::num* y;
+  self::C<core::int*>* c_int = new self::C::•<core::int*>(y as{TypeError} core::int*);
+  self::C<core::num*>* c_num = new self::C::•<core::num*>(123);
+  self::C<dynamic>* c_dynamic = new self::C::•<dynamic>(42);
+}
diff --git a/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.modular.expect b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.modular.expect
new file mode 100644
index 0000000..220da3b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/local_reference_upwards_local.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method main() → dynamic {
+  asy::Future<core::int*>* futureInt = null;
+  asy::Future<core::int*>* x = futureInt;
+}
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.modular.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.modular.expect
new file mode 100644
index 0000000..421e71c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/local_return_and_yield.dart:19:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+//  - 'Future' is from 'dart:async'.
+//     return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+//                                      ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+typedef IntToInt = (core::int*) →* core::int*;
+static method main() → dynamic {
+  function a() → (core::int*) →* core::int* {
+    return (core::int* x) → core::int* => x;
+  }
+  function b() → asy::Future<(core::int*) →* core::int*>* async {
+    return invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:38: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+ - 'Future' is from 'dart:async'.
+    return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+                                     ^" in ((dynamic x) → dynamic => x) as{TypeError} FutureOr<(core::int*) →* core::int*>*;
+  }
+  function c() → core::Iterable<(core::int*) →* core::int*>* sync* {
+    yield(core::int* x) → core::int* => x;
+  }
+  function d() → core::Iterable<(core::int*) →* core::int*>* sync* {
+    yield*<(core::int*) →* core::int*>[(core::int* x) → core::int* => x];
+  }
+  function e() → asy::Stream<(core::int*) →* core::int*>* async* {
+    yield(core::int* x) → core::int* => x;
+  }
+  function f() → asy::Stream<(core::int*) →* core::int*>* async* {
+    yield* asy::Stream::fromIterable<(core::int*) →* core::int*>(<(core::int*) →* core::int*>[(core::int* x) → core::int* => x]);
+  }
+}
diff --git a/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.modular.expect b/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.modular.expect
new file mode 100644
index 0000000..8b606cf
--- /dev/null
+++ b/pkg/front_end/testcases/inference/logical_or_promotion.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  field self::A* a = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f(core::Object* o) → void {
+    if(o is self::A* || o is self::B*) {
+      if(o is self::A*) {
+        this.{self::C::a} = o{self::A*};
+      }
+    }
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.weak.modular.expect b/pkg/front_end/testcases/inference/map_literals.dart.weak.modular.expect
new file mode 100644
index 0000000..f3f2fd7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/map_literals.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+//                                              ^
+//
+// pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+//                                              ^
+//
+// pkg/front_end/testcases/inference/map_literals.dart:15:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+//                                                            ^
+//
+// pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+//       /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+//                                              ^
+//
+// pkg/front_end/testcases/inference/map_literals.dart:29:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
+//  - 'Pattern' is from 'dart:core'.
+//   x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+//                                                            ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test1() → dynamic {
+  core::Map<core::int*, core::String*>* x = <core::int*, core::String*>{1: "x", 2: "y"};
+  x.{core::Map::[]=}(3, "z"){(core::int*, core::String*) →* void};
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+                                             ^" in "hi" as{TypeError} core::int*, "w"){(core::int*, core::String*) →* void};
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+                                             ^" in 4.0 as{TypeError} core::int*, "u"){(core::int*, core::String*) →* void};
+  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:60: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+                                                           ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
+  core::Map<core::num*, core::String*>* y = x;
+}
+static method test2() → dynamic {
+  core::Map<core::num*, core::Pattern*>* x = <core::num*, core::Pattern*>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
+  x.{core::Map::[]=}(3, "z"){(core::num*, core::Pattern*) →* void};
+  x.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+                                             ^" in "hi" as{TypeError} core::num*, "w"){(core::num*, core::Pattern*) →* void};
+  x.{core::Map::[]=}(4.0, "u"){(core::num*, core::Pattern*) →* void};
+  x.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:60: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
+ - 'Pattern' is from 'dart:core'.
+  x /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+                                                           ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
+  core::Pattern* p = null;
+  x.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
+  core::Map<core::int*, core::String*>* y = x as{TypeError} core::Map<core::int*, core::String*>*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.modular.expect b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.modular.expect
new file mode 100644
index 0000000..b636b6c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test1() → dynamic {
+  core::Map<Null, Null>* x = <Null, Null>{null: null};
+  x.{core::Map::[]=}(3 as{TypeError} Null, "z" as{TypeError} Null){(Null, Null) →* void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.modular.expect
new file mode 100644
index 0000000..cd284fd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/map_literals_top_level.dart:11:66: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+//                                                                  ^
+//
+// pkg/front_end/testcases/inference/map_literals_top_level.dart:12:66: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+//                                                                  ^
+//
+// pkg/front_end/testcases/inference/map_literals_top_level.dart:13:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   x1 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+//                                                             ^
+//
+// pkg/front_end/testcases/inference/map_literals_top_level.dart:20:66: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+//   x2 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+//                                                                  ^
+//
+// pkg/front_end/testcases/inference/map_literals_top_level.dart:22:61: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
+//  - 'Pattern' is from 'dart:core'.
+//   x2 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+//                                                             ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::Map<core::int*, core::String*>* x1 = <core::int*, core::String*>{1: "x", 2: "y"};
+static field core::Map<core::num*, core::Pattern*>* x2 = <core::num*, core::Pattern*>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
+static method test1() → dynamic {
+  self::x1.{core::Map::[]=}(3, "z"){(core::int*, core::String*) →* void};
+  self::x1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:11:66: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+                                                                 ^" in "hi" as{TypeError} core::int*, "w"){(core::int*, core::String*) →* void};
+  self::x1.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:12:66: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  x1 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+                                                                 ^" in 4.0 as{TypeError} core::int*, "u"){(core::int*, core::String*) →* void};
+  self::x1.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:13:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  x1 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+                                                            ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
+  core::Map<core::num*, core::String*>* y = self::x1;
+}
+static method test2() → dynamic {
+  self::x2.{core::Map::[]=}(3, "z"){(core::num*, core::Pattern*) →* void};
+  self::x2.{core::Map::[]=}(invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:20:66: Error: A value of type 'String' can't be assigned to a variable of type 'num'.
+  x2 /*@target=Map.[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+                                                                 ^" in "hi" as{TypeError} core::num*, "w"){(core::num*, core::Pattern*) →* void};
+  self::x2.{core::Map::[]=}(4.0, "u"){(core::num*, core::Pattern*) →* void};
+  self::x2.{core::Map::[]=}(3, invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:22:61: Error: A value of type 'int' can't be assigned to a variable of type 'Pattern'.
+ - 'Pattern' is from 'dart:core'.
+  x2 /*@target=Map.[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+                                                            ^" in 42 as{TypeError} core::Pattern*){(core::num*, core::Pattern*) →* void};
+  core::Pattern* p = null;
+  self::x2.{core::Map::[]=}(2, p){(core::num*, core::Pattern*) →* void};
+  core::Map<core::int*, core::String*>* y = self::x2 as{TypeError} core::Map<core::int*, core::String*>*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.modular.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.modular.expect
new file mode 100644
index 0000000..05bd044
--- /dev/null
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::D<core::int*>* f = new self::C::•().{self::C::f}<core::int*>(){() →* self::D<core::int*>*};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.modular.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.modular.expect
new file mode 100644
index 0000000..28c5383
--- /dev/null
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C* c;
+static field self::D<core::int*>* f = self::c.{self::C::f}<core::int*>(){() →* self::D<core::int*>*};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.modular.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.modular.expect
new file mode 100644
index 0000000..b87237a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  static method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::D<core::int*>* f = self::C::f<core::int*>();
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.modular.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.modular.expect
new file mode 100644
index 0000000..a32a635
--- /dev/null
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::D<core::int*>* g = self::f<core::int*>();
+static method f<T extends core::Object* = dynamic>() → self::D<self::f::T*>*
+  return null;
+static method main() → dynamic {
+  self::g;
+}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.modular.expect
new file mode 100644
index 0000000..ce1b438
--- /dev/null
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class I<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M0<X extends core::Object* = dynamic, Y extends core::String*> extends self::I<self::M0::X*> {
+  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
+    : super self::I::•()
+    ;
+}
+class M1 extends core::Object implements self::I<core::int*> {
+  synthetic constructor •() → self::M1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int*, core::String*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0*
+    : super self::M1::•()
+    ;
+}
+class A extends self::_A&M1&M0 {
+  synthetic constructor •() → self::A*
+    : super self::_A&M1&M0::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.modular.expect
new file mode 100644
index 0000000..f202e79
--- /dev/null
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_2.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class I<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M0<X extends core::Object* = dynamic, Y extends self::M0::X* = dynamic> extends self::I<self::M0::X*> {
+  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
+    : super self::I::•()
+    ;
+}
+class M1 extends core::Object implements self::I<core::int*> {
+  synthetic constructor •() → self::M1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int*, core::int*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0*
+    : super self::M1::•()
+    ;
+}
+class A extends self::_A&M1&M0 {
+  synthetic constructor •() → self::A*
+    : super self::_A&M1&M0::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect
new file mode 100644
index 0000000..69d5022
--- /dev/null
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:7: Error: Type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<Y>' of the type variable 'Y' on 'M0' in the supertype 'M0' of class 'M1 with M0'.
+//  - 'Comparable' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// class A extends M1 with M0 {}
+//       ^
+// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: This is the type variable whose bound isn't conformed to.
+// class M0<X, Y extends Comparable<Y>> extends I<X> {}
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class I<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y*>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> {
+  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
+    : super self::I::•()
+    ;
+}
+class M1 extends core::Object implements self::I<core::int*> {
+  synthetic constructor •() → self::M1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int*, core::Comparable<dynamic>*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0*
+    : super self::M1::•()
+    ;
+}
+class A extends self::_A&M1&M0 {
+  synthetic constructor •() → self::A*
+    : super self::_A&M1&M0::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.modular.expect
new file mode 100644
index 0000000..4493630
--- /dev/null
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_4.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class I<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M0<X extends core::Object* = dynamic, Y extends ({name: core::String*}) →* void> extends self::I<self::M0::X*> {
+  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
+    : super self::I::•()
+    ;
+}
+class M1 extends core::Object implements self::I<core::int*> {
+  synthetic constructor •() → self::M1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A&M1&M0 = self::M1 with self::M0<core::int*, ({name: core::String*}) →* void> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M1&M0*
+    : super self::M1::•()
+    ;
+}
+class A extends self::_A&M1&M0 {
+  synthetic constructor •() → self::A*
+    : super self::_A&M1&M0::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.modular.expect
new file mode 100644
index 0000000..4f31d67
--- /dev/null
+++ b/pkg/front_end/testcases/inference/mixin_inference_multiple_constraints.dart.weak.modular.expect
@@ -0,0 +1,75 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class I<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class J<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::J<self::J::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _M0&I&J<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> = self::I<self::_M0&I&J::X*> with self::J<self::_M0&I&J::Y*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_M0&I&J<self::_M0&I&J::X*, self::_M0&I&J::Y*>*
+    : super self::I::•()
+    ;
+}
+class M0<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends self::_M0&I&J<self::M0::X*, self::M0::Y*> {
+  synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
+    : super self::_M0&I&J::•()
+    ;
+}
+class M1 extends core::Object implements self::I<core::int*> {
+  synthetic constructor •() → self::M1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M2 extends self::M1 implements self::J<core::double*> {
+  synthetic constructor •() → self::M2*
+    : super self::M1::•()
+    ;
+}
+abstract class _A&M2&M0 = self::M2 with self::M0<core::int*, core::double*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M2&M0*
+    : super self::M2::•()
+    ;
+}
+class A extends self::_A&M2&M0 {
+  synthetic constructor •() → self::A*
+    : super self::_A&M2&M0::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.modular.expect
new file mode 100644
index 0000000..012dd24
--- /dev/null
+++ b/pkg/front_end/testcases/inference/mixin_inference_non_trivial_constraints.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class I<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M0<T extends core::Object* = dynamic> extends self::I<core::List<self::M0::T*>*> {
+  synthetic constructor •() → self::M0<self::M0::T*>*
+    : super self::I::•()
+    ;
+}
+class M1<T extends core::Object* = dynamic> extends self::I<core::List<self::M1::T*>*> {
+  synthetic constructor •() → self::M1<self::M1::T*>*
+    : super self::I::•()
+    ;
+}
+class M2<T extends core::Object* = dynamic> extends self::M1<core::Map<self::M2::T*, self::M2::T*>*> {
+  synthetic constructor •() → self::M2<self::M2::T*>*
+    : super self::M1::•()
+    ;
+}
+abstract class _A&M2&M0 = self::M2<core::int*> with self::M0<core::Map<core::int*, core::int*>*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M2&M0*
+    : super self::M2::•()
+    ;
+}
+class A extends self::_A&M2&M0 {
+  synthetic constructor •() → self::A*
+    : super self::_A&M2&M0::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.modular.expect
new file mode 100644
index 0000000..0f8933b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_1.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class I<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M0<T extends core::Object* = dynamic> extends self::I<self::M0::T*> {
+  synthetic constructor •() → self::M0<self::M0::T*>*
+    : super self::I::•()
+    ;
+}
+class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
+  synthetic constructor •() → self::M1<self::M1::T*>*
+    : super self::I::•()
+    ;
+}
+abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M0&M1*
+    : super self::M0::•()
+    ;
+}
+class A extends self::_A&M0&M1 {
+  synthetic constructor •() → self::A*
+    : super self::_A&M0&M1::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.modular.expect
new file mode 100644
index 0000000..d7c017d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_2.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class I<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M0<T extends core::Object* = dynamic> extends self::I<self::M0::T*> {
+  synthetic constructor •() → self::M0<self::M0::T*>*
+    : super self::I::•()
+    ;
+}
+class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
+  synthetic constructor •() → self::M1<self::M1::T*>*
+    : super self::I::•()
+    ;
+}
+class M2<T extends core::Object* = dynamic> extends self::I<self::M2::T*> {
+  synthetic constructor •() → self::M2<self::M2::T*>*
+    : super self::I::•()
+    ;
+}
+abstract class _A&M0&M1 = self::M0<core::int*> with self::M1<core::int*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M0&M1*
+    : super self::M0::•()
+    ;
+}
+abstract class _A&M0&M1&M2 = self::_A&M0&M1 with self::M2<core::int*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&M0&M1&M2*
+    : super self::_A&M0&M1::•()
+    ;
+}
+class A extends self::_A&M0&M1&M2 {
+  synthetic constructor •() → self::A*
+    : super self::_A&M0&M1&M2::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.modular.expect
new file mode 100644
index 0000000..da805eec
--- /dev/null
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.weak.modular.expect
@@ -0,0 +1,73 @@
+//
+// Problems in component:
+//
+// pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:13:7: Error: 'Object with M0, M1' can't implement both 'I<dynamic>' and 'I<int>'
+//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
+// class A extends Object with M0, M1<int> {}
+//       ^
+//
+library;
+import self as self;
+import "dart:core" as core;
+
+class I<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M0<T extends core::Object* = dynamic> extends core::Object implements self::I<self::M0::T*> {
+  synthetic constructor •() → self::M0<self::M0::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
+  synthetic constructor •() → self::M1<self::M1::T*>*
+    : super self::I::•()
+    ;
+}
+abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A&Object&M0*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<core::int*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A&Object&M0&M1*
+    : super self::_A&Object&M0::•()
+    ;
+}
+class A extends self::_A&Object&M0&M1 {
+  synthetic constructor •() → self::A*
+    : super self::_A&Object&M0&M1::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.modular.expect
new file mode 100644
index 0000000..1391478
--- /dev/null
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.weak.modular.expect
@@ -0,0 +1,73 @@
+//
+// Problems in component:
+//
+// pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart:14:7: Error: 'A' can't implement both 'I<dynamic>' and 'I<int>'
+//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart'.
+// class A extends Object with M0, M1 implements I<int> {}
+//       ^
+//
+library;
+import self as self;
+import "dart:core" as core;
+
+class I<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M0<T extends core::Object* = dynamic> extends core::Object implements self::I<self::M0::T*> {
+  synthetic constructor •() → self::M0<self::M0::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M1<T extends core::Object* = dynamic> extends self::I<self::M1::T*> {
+  synthetic constructor •() → self::M1<self::M1::T*>*
+    : super self::I::•()
+    ;
+}
+abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A&Object&M0*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A&Object&M0&M1*
+    : super self::_A&Object&M0::•()
+    ;
+}
+class A extends self::_A&Object&M0&M1 implements self::I<core::int*> {
+  synthetic constructor •() → self::A*
+    : super self::_A&Object&M0&M1::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.weak.modular.expect
new file mode 100644
index 0000000..5907e7e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.weak.modular.expect
@@ -0,0 +1,83 @@
+//
+// Problems in component:
+//
+// pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:13:7: Error: 'Object with M0, M1' can't implement both 'I<dynamic, int>' and 'I<String, dynamic>'
+//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_unification_1.dart'.
+// class A extends Object with M0, M1 {}
+//       ^
+//
+library;
+import self as self;
+import "dart:core" as core;
+
+class I<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X*, self::I::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M0<T extends core::Object* = dynamic> extends core::Object implements self::I<self::M0::T*, core::int*> {
+  synthetic constructor •() → self::M0<self::M0::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M1<T extends core::Object* = dynamic> extends core::Object implements self::I<core::String*, self::M1::T*> {
+  synthetic constructor •() → self::M1<self::M1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A&Object&M0*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A&Object&M0&M1*
+    : super self::_A&Object&M0::•()
+    ;
+}
+class A extends self::_A&Object&M0&M1 {
+  synthetic constructor •() → self::A*
+    : super self::_A&Object&M0&M1::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.weak.modular.expect
new file mode 100644
index 0000000..41a47e4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.weak.modular.expect
@@ -0,0 +1,84 @@
+//
+// Problems in component:
+//
+// pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:17:7: Error: 'Object with M0, M1' can't implement both 'I<dynamic, List<dynamic>>' and 'I<List<dynamic>, dynamic>'
+//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_unification_2.dart'.
+//  - 'List' is from 'dart:core'.
+// class A extends Object with M0, M1 {}
+//       ^
+//
+library;
+import self as self;
+import "dart:core" as core;
+
+class I<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::X*, self::I::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M0<T extends core::Object* = dynamic> extends core::Object implements self::I<self::M0::T*, core::List<self::M0::T*>*> {
+  synthetic constructor •() → self::M0<self::M0::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M1<T extends core::Object* = dynamic> extends core::Object implements self::I<core::List<self::M1::T*>*, self::M1::T*> {
+  synthetic constructor •() → self::M1<self::M1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A&Object&M0 = core::Object with self::M0<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A&Object&M0*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A&Object&M0&M1*
+    : super self::_A&Object&M0::•()
+    ;
+}
+class A extends self::_A&Object&M0&M1 {
+  synthetic constructor •() → self::A*
+    : super self::_A&Object&M0&M1::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart.weak.modular.expect b/pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart.weak.modular.expect
new file mode 100644
index 0000000..fb95dc3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test1() → dynamic {
+  core::num* x = 3;
+  x = null;
+}
+static method main() → dynamic {
+  self::test1();
+}
diff --git a/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.modular.expect
new file mode 100644
index 0000000..5049806
--- /dev/null
+++ b/pkg/front_end/testcases/inference/non_const_invocation.dart.weak.modular.expect
@@ -0,0 +1,54 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant U extends core::Object* = dynamic, V extends core::Object* = dynamic> = (U*) →* V*;
+class Foo<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T*>*
+    : super core::Object::•()
+    ;
+  get v1() → self::Bar<self::Foo::T*>*
+    return new self::Bar::•<self::Foo::T*>();
+  get v2() → self::Bar<core::List<self::Foo::T*>*>*
+    return new self::Bar::•<core::List<self::Foo::T*>*>();
+  get v3() → self::Bar<(self::Foo::T*) →* self::Foo::T*>*
+    return new self::Bar::•<(self::Foo::T*) →* self::Foo::T*>();
+  get v4() → self::Bar<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>*
+    return new self::Bar::•<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>();
+  get v5() → core::List<self::Foo::T*>*
+    return <self::Foo::T*>[];
+  get v6() → core::List<(self::Foo::T*) →* self::Foo::T*>*
+    return <(self::Foo::T*) →* self::Foo::T*>[];
+  get v7() → core::Map<self::Foo::T*, self::Foo::T*>*
+    return <self::Foo::T*, self::Foo::T*>{};
+  get v8() → core::Map<(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>*
+    return <(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>{};
+  get v9() → core::Map<self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>*
+    return <self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>{};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::Bar<self::Bar::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..8a5e873
--- /dev/null
+++ b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  get x() → dynamic
+    return null;
+  set x(dynamic value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.modular.expect
new file mode 100644
index 0000000..cbf7329
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f() → core::int*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method g(self::C* c) → dynamic {
+  core::int* x = let final self::C* #t1 = c in #t1 == null ?{core::int*} null : #t1.{self::C::f}(){() →* core::int*};
+  let final self::C* #t2 = c in #t2 == null ?{core::int*} null : #t2.{self::C::f}(){() →* core::int*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.modular.expect b/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.modular.expect
new file mode 100644
index 0000000..b8c3acb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_aware_property_get.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int* x = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f(self::C* c) → void {
+  core::int* x = let final self::C* #t1 = c in #t1 == null ?{core::int*} null : #t1.{self::C::x}{core::int*};
+  let final self::C* #t2 = c in #t2 == null ?{core::int*} null : #t2.{self::C::x}{core::int*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.modular.expect b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.modular.expect
new file mode 100644
index 0000000..15f12a3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::List<core::int*>* x;
+  core::List<core::int*>* y = let final core::List<core::int*>* #t1 = x in #t1 == null ?{core::List<core::int*>*} <core::int*>[] : #t1;
+  core::List<core::int*>* z = y;
+}
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.modular.expect
new file mode 100644
index 0000000..33d1268
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::List<core::int*>* x;
+  core::List<core::num*>* y = let final core::List<core::int*>* #t1 = x in #t1 == null ?{core::List<core::num*>*} <core::num*>[] : #t1;
+}
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.modular.expect b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.modular.expect
new file mode 100644
index 0000000..4344e6b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic h = null;
+static method foo((core::Object*) →* core::int* f) → void {}
+static method test() → dynamic {
+  (core::Object*) →* Null f = (core::Object* x) → Null => null;
+  core::String* y = f(42){(core::Object*) →* Null};
+  f = (core::Object* x) → Null => "hello" as{TypeError} Null;
+  dynamic g = null;
+  g = "hello";
+  g{dynamic}.foo();
+  self::h = "hello";
+  self::h{dynamic}.foo();
+  self::foo((core::Object* x) → Null => null);
+  self::foo((core::Object* x) → Null => throw "not implemented");
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.modular.expect b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.modular.expect
new file mode 100644
index 0000000..09b660d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/overloaded_int_operators.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::num* n = 1;
+  core::int* i = 1;
+  core::double* d = 1.0;
+  core::double* ddPlus = d.{core::double::+}(d){(core::num*) →* core::double*};
+  core::double* ddMinus = d.{core::double::-}(d){(core::num*) →* core::double*};
+  core::double* ddTimes = d.{core::double::*}(d){(core::num*) →* core::double*};
+  core::double* ddMod = d.{core::double::%}(d){(core::num*) →* core::double*};
+  core::double* diPlus = d.{core::double::+}(i){(core::num*) →* core::double*};
+  core::double* diMinus = d.{core::double::-}(i){(core::num*) →* core::double*};
+  core::double* diTimes = d.{core::double::*}(i){(core::num*) →* core::double*};
+  core::double* diMod = d.{core::double::%}(i){(core::num*) →* core::double*};
+  core::double* dnPlus = d.{core::double::+}(n){(core::num*) →* core::double*};
+  core::double* dnMinus = d.{core::double::-}(n){(core::num*) →* core::double*};
+  core::double* dnTimes = d.{core::double::*}(n){(core::num*) →* core::double*};
+  core::double* dnMod = d.{core::double::%}(n){(core::num*) →* core::double*};
+  core::double* idPlus = i.{core::num::+}(d){(core::num*) →* core::double*};
+  core::double* idMinus = i.{core::num::-}(d){(core::num*) →* core::double*};
+  core::double* idTimes = i.{core::num::*}(d){(core::num*) →* core::double*};
+  core::double* idMod = i.{core::num::%}(d){(core::num*) →* core::double*};
+  core::int* iiPlus = i.{core::num::+}(i){(core::num*) →* core::int*};
+  core::int* iiMinus = i.{core::num::-}(i){(core::num*) →* core::int*};
+  core::int* iiTimes = i.{core::num::*}(i){(core::num*) →* core::int*};
+  core::int* iiMod = i.{core::num::%}(i){(core::num*) →* core::int*};
+  core::num* inPlus = i.{core::num::+}(n){(core::num*) →* core::num*};
+  core::num* inMinus = i.{core::num::-}(n){(core::num*) →* core::num*};
+  core::num* inTimes = i.{core::num::*}(n){(core::num*) →* core::num*};
+  core::num* inMod = i.{core::num::%}(n){(core::num*) →* core::num*};
+  core::num* ndPlus = n.{core::num::+}(d){(core::num*) →* core::num*};
+  core::num* ndMinus = n.{core::num::-}(d){(core::num*) →* core::num*};
+  core::num* ndTimes = n.{core::num::*}(d){(core::num*) →* core::num*};
+  core::num* ndMod = n.{core::num::%}(d){(core::num*) →* core::num*};
+  core::num* niPlus = n.{core::num::+}(i){(core::num*) →* core::num*};
+  core::num* niMinus = n.{core::num::-}(i){(core::num*) →* core::num*};
+  core::num* niTimes = n.{core::num::*}(i){(core::num*) →* core::num*};
+  core::num* niMod = n.{core::num::%}(i){(core::num*) →* core::num*};
+  core::num* nnPlus = n.{core::num::+}(n){(core::num*) →* core::num*};
+  core::num* nnMinus = n.{core::num::-}(n){(core::num*) →* core::num*};
+  core::num* nnTimes = n.{core::num::*}(n){(core::num*) →* core::num*};
+  core::num* nnMod = n.{core::num::%}(n){(core::num*) →* core::num*};
+}
diff --git a/pkg/front_end/testcases/inference/override_equals.dart.weak.modular.expect b/pkg/front_end/testcases/inference/override_equals.dart.weak.modular.expect
new file mode 100644
index 0000000..736b7cd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/override_equals.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class NullEquality extends core::Object {
+  synthetic constructor •() → self::NullEquality*
+    : super core::Object::•()
+    ;
+  @#C1
+  operator ==(core::Object* other) → Null
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SubNullEquality extends self::NullEquality {
+  synthetic constructor •() → self::SubNullEquality*
+    : super self::NullEquality::•()
+    ;
+  method test() → void {
+    core::bool* super_equals_self = super.{self::NullEquality::==}(this);
+    core::bool* super_equals_null = super.{self::NullEquality::==}(null);
+    core::bool* super_not_equals_self = !super.{self::NullEquality::==}(this);
+    core::bool* super_not_equals_null = !super.{self::NullEquality::==}(null);
+  }
+}
+static method test() → dynamic {
+  self::NullEquality* n = new self::NullEquality::•();
+  core::bool* equals_self = n =={self::NullEquality::==}{(core::Object*) →* Null} n;
+  core::bool* equals_null = n == null;
+  core::bool* null_equals = n == null;
+  core::bool* not_equals_self = !(n =={self::NullEquality::==}{(core::Object*) →* Null} n);
+  core::bool* not_equals_null = !(n == null);
+  core::bool* null_not_equals = !(n == null);
+}
+static method main() → dynamic {
+  self::test();
+  new self::SubNullEquality::•().{self::SubNullEquality::test}(){() →* void};
+}
+
+constants  {
+  #C1 = core::_Override {}
+}
diff --git a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.modular.expect b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..d9defc4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object* = dynamic> extends core::Object {
+  final field core::String* foo = "bar";
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<Y extends core::Object* = dynamic> extends self::A<self::B::Y*> {
+  final field core::String* foo;
+  constructor •(core::String* foo) → self::B<self::B::Y*>*
+    : self::B::foo = foo, super self::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.modular.expect
new file mode 100644
index 0000000..4e88a92
--- /dev/null
+++ b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract method foo({covariant-by-class core::Iterable<self::A::X*>* x = #C1}) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<Y extends core::Object* = dynamic> extends core::Object implements self::A<self::B::Y*> {
+  synthetic constructor •() → self::B<self::B::Y*>*
+    : super core::Object::•()
+    ;
+  method foo({covariant-by-class core::Iterable<self::B::Y*>* x = #C1}) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.modular.expect
new file mode 100644
index 0000000..b20f8c7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/parameter_defaults_downwards.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method optional_toplevel([core::List<core::int*>* x = #C1]) → void {}
+static method named_toplevel({core::List<core::int*>* x = #C1}) → void {}
+static method main() → dynamic {
+  function optional_local([core::List<core::int*>* x = #C1]) → void {}
+  function named_local({core::List<core::int*>* x = #C1}) → void {}
+  ([core::List<core::int*>*]) →* Null optional_closure = ([core::List<core::int*>* x = #C1]) → Null {};
+  ({x: core::List<core::int*>*}) →* Null name_closure = ({core::List<core::int*>* x = #C1}) → Null {};
+}
+
+constants  {
+  #C1 = <core::int*>[]
+}
diff --git a/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..d6fb1da
--- /dev/null
+++ b/pkg/front_end/testcases/inference/parameter_defaults_upwards.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  constructor optional(([self::C::T*]) →* void func) → self::C<self::C::T*>*
+    : super core::Object::•() {}
+  constructor named(({x: self::C::T*}) →* void func) → self::C<self::C::T*>*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method optional_toplevel([dynamic x = #C2]) → void {}
+static method named_toplevel({dynamic x = #C2}) → void {}
+static method main() → dynamic {
+  function optional_local([dynamic x = #C2]) → void {}
+  function named_local({dynamic x = #C2}) → void {}
+  self::C<dynamic>* c_optional_toplevel = new self::C::optional<dynamic>(#C3);
+  self::C<dynamic>* c_named_toplevel = new self::C::named<dynamic>(#C4);
+  self::C<dynamic>* c_optional_local = new self::C::optional<dynamic>(optional_local);
+  self::C<dynamic>* c_named_local = new self::C::named<dynamic>(named_local);
+  self::C<dynamic>* c_optional_closure = new self::C::optional<dynamic>(([dynamic x = #C2]) → Null {});
+  self::C<dynamic>* c_named_closure = new self::C::named<dynamic>(({dynamic x = #C2}) → Null {});
+}
+
+constants  {
+  #C1 = 0
+  #C2 = <core::int*>[#C1]
+  #C3 = static-tearoff self::optional_toplevel
+  #C4 = static-tearoff self::named_toplevel
+}
diff --git a/pkg/front_end/testcases/inference/promote_bounds.dart.weak.modular.expect b/pkg/front_end/testcases/inference/promote_bounds.dart.weak.modular.expect
new file mode 100644
index 0000000..cdec2e88
--- /dev/null
+++ b/pkg/front_end/testcases/inference/promote_bounds.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract method foo() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  abstract method bar() → void;
+}
+static method f<T extends self::B*>(self::f::T* a) → void {
+  if(a is core::String*) {
+    a.{self::B::foo}(){() →* void};
+  }
+  if(a is self::C*) {
+    a{self::f::T* & self::C* /* '*' & '*' = '*' */}.{self::C::bar}(){() →* void};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/promote_from_logical_rhs.dart.weak.modular.expect b/pkg/front_end/testcases/inference/promote_from_logical_rhs.dart.weak.modular.expect
new file mode 100644
index 0000000..16ae59d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/promote_from_logical_rhs.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test(core::Object* a, core::bool* b) → void {
+  if(b && a is core::int*) {
+    core::print(a{core::int*});
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/promotion_subtype_check.dart.weak.modular.expect b/pkg/front_end/testcases/inference/promotion_subtype_check.dart.weak.modular.expect
new file mode 100644
index 0000000..f240935
--- /dev/null
+++ b/pkg/front_end/testcases/inference/promotion_subtype_check.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method f(core::Object* x) → void {
+  if(x is core::int*) {
+    if(x{core::int*} is core::String*) {
+      core::int* y = x{core::int*};
+    }
+  }
+}
+static method g(core::int* x) → void {
+  if(x is core::String*) {
+    core::int* y = x;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.modular.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.modular.expect
new file mode 100644
index 0000000..3e27040
--- /dev/null
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* x = 2;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::A* a = new self::A::•();
+  self::A* b = a;
+  core::print(a.{self::A::x}{core::int*});
+  core::print(a.{self::A::x}{core::int*}.{core::num::+}(2){(core::num*) →* core::int*});
+}
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.modular.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.modular.expect
new file mode 100644
index 0000000..06148db
--- /dev/null
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* x = 2;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  dynamic a = new self::A::•();
+  self::A* b = a as{TypeError,ForDynamic} self::A*;
+  core::print(a{dynamic}.x);
+  core::print(a{dynamic}.x{dynamic}.+(2));
+}
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.modular.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.modular.expect
new file mode 100644
index 0000000..81035d4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   a1. /*@target=A.x*/ x = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                                        ^
+//
+// pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   a2. /*@target=A.x*/ x = /*error:INVALID_ASSIGNMENT*/ "hi";
+//                                                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* x = 2;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test5() → dynamic {
+  self::A* a1 = new self::A::•();
+  a1.{self::A::x} = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  a1. /*@target=A.x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                                       ^" in "hi" as{TypeError} core::int*;
+  self::A* a2 = new self::A::•();
+  a2.{self::A::x} = invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:56: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  a2. /*@target=A.x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                                       ^" in "hi" as{TypeError} core::int*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.modular.expect
new file mode 100644
index 0000000..91157a6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* x = 42;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  field self::A* a = new self::A::•();
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  field self::B* b = new self::B::•();
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends core::Object {
+  field self::C* c = new self::C::•();
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {
+  self::D* d1 = new self::D::•();
+  core::print(d1.{self::D::c}{self::C*}.{self::C::b}{self::B*}.{self::B::a}{self::A*}.{self::A::x}{core::int*});
+  self::D* d2 = new self::D::•();
+  core::print(d2.{self::D::c}{self::C*}.{self::C::b}{self::B*}.{self::B::a}{self::A*}.{self::A::x}{core::int*});
+}
diff --git a/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.modular.expect b/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.modular.expect
new file mode 100644
index 0000000..ba60f97
--- /dev/null
+++ b/pkg/front_end/testcases/inference/propagate_variable_get.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int* a = 0;
+  core::int* b = a;
+}
diff --git a/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.modular.expect b/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.modular.expect
new file mode 100644
index 0000000..4c93980
--- /dev/null
+++ b/pkg/front_end/testcases/inference/property_get_toplevel.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int* field = 0;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  get getter() → core::int*
+    return 0;
+  method function() → core::int*
+    return 0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C* c = new self::C::•();
+static field () →* core::int* function_ref = self::c.{self::C::function}{() →* core::int*};
+static field core::List<() →* core::int*>* function_ref_list = <() →* core::int*>[self::c.{self::C::function}{() →* core::int*}];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/property_set.dart.weak.modular.expect b/pkg/front_end/testcases/inference/property_set.dart.weak.modular.expect
new file mode 100644
index 0000000..c2feed8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/property_set.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field core::List<self::A::T*>* x = null;
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  set y(covariant-by-class core::List<self::A::T*>* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  self::A<core::int*>* a_int = new self::A::•<core::int*>();
+  self::A<core::Object*>* a_object = new self::A::•<core::Object*>();
+  self::A<dynamic>* a_dynamic = new self::A::•<dynamic>();
+  core::List<core::int*>* x_int = a_int.{self::A::x} = <core::int*>[0];
+  core::List<core::int*>* y_int = a_int.{self::A::y} = <core::int*>[0];
+  core::List<core::Object*>* x_object = a_object.{self::A::x} = <core::Object*>[0];
+  core::List<core::Object*>* y_object = a_object.{self::A::y} = <core::Object*>[0];
+  core::List<dynamic>* x_dynamic = a_dynamic.{self::A::x} = <dynamic>[0];
+  core::List<dynamic>* y_dynamic = a_dynamic.{self::A::y} = <dynamic>[0];
+  core::List<core::int*>* x_int_explicit = a_int.{self::A::x} = <core::int*>[0];
+  core::List<core::int*>* y_int_explicit = a_int.{self::A::y} = <core::int*>[0];
+  core::List<core::int*>* x_object_explicit = a_object.{self::A::x} = <core::int*>[0];
+  core::List<core::int*>* y_object_explicit = a_object.{self::A::y} = <core::int*>[0];
+  core::List<core::int*>* x_dynamic_explicit = a_dynamic.{self::A::x} = <core::int*>[0];
+  core::List<core::int*>* y_dynamic_explicit = a_dynamic.{self::A::y} = <core::int*>[0];
+  core::List<core::int*>* x_int_downward = a_int.{self::A::x} = <core::int*>[0];
+  core::List<core::int*>* y_int_downward = a_int.{self::A::y} = <core::int*>[0];
+  core::List<core::int*>* x_object_downward = (a_object.{self::A::x} = <core::Object*>[0]) as{TypeError} core::List<core::int*>*;
+  core::List<core::int*>* y_object_downward = (a_object.{self::A::y} = <core::Object*>[0]) as{TypeError} core::List<core::int*>*;
+  core::List<core::int*>* x_dynamic_downward = (a_dynamic.{self::A::x} = <dynamic>[0]) as{TypeError} core::List<core::int*>*;
+  core::List<core::int*>* y_dynamic_downward = (a_dynamic.{self::A::y} = <dynamic>[0]) as{TypeError} core::List<core::int*>*;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..3e05504
--- /dev/null
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/property_set_bad_setter.dart:9:13: Error: A setter should have exactly one formal parameter.
+//   void set x() {}
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  set x(dynamic #synthetic) → void {
+    invalid-expression "pkg/front_end/testcases/inference/property_set_bad_setter.dart:9:13: Error: A setter should have exactly one formal parameter.
+  void set x() {}
+            ^";
+    {}
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f(self::A* a) → void {
+  core::int* x = a.{self::A::x} = 0;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.modular.expect b/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.modular.expect
new file mode 100644
index 0000000..d617cd4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method _mergeSort<T extends core::Object* = dynamic>((self::_mergeSort::T*) →* self::_mergeSort::T* list, (self::_mergeSort::T*, self::_mergeSort::T*) →* core::int* compare, (self::_mergeSort::T*) →* self::_mergeSort::T* target) → void {
+  self::_mergeSort<self::_mergeSort::T*>(list, compare, target);
+  self::_mergeSort<self::_mergeSort::T*>(list, compare, list);
+  self::_mergeSort<self::_mergeSort::T*>(target, compare, target);
+  self::_mergeSort<self::_mergeSort::T*>(target, compare, list);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.modular.expect b/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.modular.expect
new file mode 100644
index 0000000..1c7e0ba
--- /dev/null
+++ b/pkg/front_end/testcases/inference/reference_to_typedef.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = () →* void;
+static final field core::Type* x = #C1;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(() →* void)
+}
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.modular.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.modular.expect
new file mode 100644
index 0000000..a3cae75
--- /dev/null
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num*> extends core::Object {
+  covariant-by-class field self::C::T* a = null;
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method op(core::double* b) → void {
+    core::double* r1 = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
+    core::double* r2 = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
+    core::double* r3 = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} core::double*;
+    core::double* r4 = this.{self::C::a}{self::C::T*}.{core::num::/}(b){(core::num*) →* core::double*};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.modular.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.modular.expect
new file mode 100644
index 0000000..24e9591
--- /dev/null
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num*> extends core::Object {
+  covariant-by-class field self::C::T* a = null;
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method op(core::int* b) → void {
+    self::C::T* r1 = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    self::C::T* r2 = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    self::C::T* r3 = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+  }
+  method opEq(core::int* b) → void {
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.modular.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.modular.expect
new file mode 100644
index 0000000..88143e7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num*> extends core::Object {
+  covariant-by-class field self::C::T* a = null;
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method op(covariant-by-class self::C::T* b) → void {
+    self::C::T* r1 = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    self::C::T* r2 = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    self::C::T* r3 = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+  }
+  method opEq(covariant-by-class self::C::T* b) → void {
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+    this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/setter_return_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference/setter_return_type.dart.weak.modular.expect
new file mode 100644
index 0000000..b816e0d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/setter_return_type.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  set x(core::int* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  set x(core::int* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C implements self::I {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  set x(core::int* value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.modular.expect b/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.modular.expect
new file mode 100644
index 0000000..da6bc88
--- /dev/null
+++ b/pkg/front_end/testcases/inference/simple_literal_bool.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* a = true;
+static method main() → dynamic {
+  core::bool* b = false;
+}
diff --git a/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.modular.expect b/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.modular.expect
new file mode 100644
index 0000000..ce86f42
--- /dev/null
+++ b/pkg/front_end/testcases/inference/simple_literal_double.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::double* a = 1.2;
+static method main() → dynamic {
+  core::double* b = 3.4;
+}
diff --git a/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.modular.expect b/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.modular.expect
new file mode 100644
index 0000000..02faaca
--- /dev/null
+++ b/pkg/front_end/testcases/inference/simple_literal_int.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::int* a = 1;
+static method main() → dynamic {
+  core::int* b = 2;
+}
diff --git a/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.modular.expect b/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.modular.expect
new file mode 100644
index 0000000..8afbb2c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/simple_literal_null.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static field dynamic a = null;
+static method main() → dynamic {
+  dynamic b = null;
+}
diff --git a/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..b89fa7d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  static method f(core::String* s) → core::int*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field (core::String*) →* core::int* v = #C1;
+static method main() → dynamic {
+  #C1;
+}
+
+constants  {
+  #C1 = static-tearoff self::C::f
+}
diff --git a/pkg/front_end/testcases/inference/string_literal.dart.weak.modular.expect b/pkg/front_end/testcases/inference/string_literal.dart.weak.modular.expect
new file mode 100644
index 0000000..c59623a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/string_literal.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::int* x = 1;
+static field core::String* a = "aaa";
+static field core::String* b = "b ${self::x} bb";
+static field core::String* c = "c ${self::x} ccccc";
+static method main() → dynamic {
+  core::int* x = 1;
+  core::String* a = "aaa";
+  core::String* b = "b ${x} bb";
+  core::String* c = "c ${x} ccccc";
+}
diff --git a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.modular.expect b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.modular.expect
new file mode 100644
index 0000000..d1ef879
--- /dev/null
+++ b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::List<core::num*>* x = <core::num*>[0];
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::List<core::num*>* y = <core::num*>[0];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_index_set.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_index_set.dart.weak.modular.expect
new file mode 100644
index 0000000..8b870ab
--- /dev/null
+++ b/pkg/front_end/testcases/inference/super_index_set.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  operator []=(core::int* x, core::String* y) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  operator []=(core::Object* x, core::Object* y) → void {}
+  method h() → void {
+    super.{self::B::[]=}(self::f<core::int*>(), self::f<core::String*>());
+  }
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.modular.expect
new file mode 100644
index 0000000..e59a920
--- /dev/null
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class B<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  operator []=(covariant-by-class core::Map<core::int*, self::B::T*>* x, covariant-by-class core::List<self::B::T*>* y) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
+  synthetic constructor •() → self::C<self::C::U*>*
+    : super self::B::•()
+    ;
+  operator []=(covariant-by-class core::Object* x, covariant-by-class core::Object* y) → void {}
+  method h() → void {
+    super.{self::B::[]=}(self::f<core::Map<core::int*, asy::Future<self::C::U*>*>*>(), self::f<core::List<asy::Future<self::C::U*>*>*>());
+  }
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..8e244eb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/super_initializer.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends self::B {
+  constructor •() → self::C*
+    : super self::B::•(self::f<core::int*>())
+    ;
+}
+class B extends core::Object {
+  constructor •(core::int* x) → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.modular.expect
new file mode 100644
index 0000000..1d91491
--- /dev/null
+++ b/pkg/front_end/testcases/inference/super_initializer_substitution.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(self::B::T* t) → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<U extends core::Object* = dynamic> extends self::B<core::List<self::C::U*>*> {
+  constructor •() → self::C<self::C::U*>*
+    : super self::B::•(self::f<core::List<self::C::U*>*>())
+    ;
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.modular.expect
new file mode 100644
index 0000000..f51320a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/super_method_invocation.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f() → core::int*
+    return 0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method g() → void {
+    core::int* x = super.{self::C::f}();
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.modular.expect
new file mode 100644
index 0000000..940c20e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
+  synthetic constructor •() → self::E<self::E::T*>*
+    : super self::D::•()
+    ;
+}
+class B<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  method g(covariant-by-class self::E<self::B::T*>* x) → self::D<self::B::T*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
+  synthetic constructor •() → self::C<self::C::U*>*
+    : super self::B::•()
+    ;
+  method g(covariant-by-class core::Object* x) → self::E<asy::Future<self::C::U*>*>*
+    return null;
+  method h() → void {
+    self::D<asy::Future<self::C::U*>*>* x = super.{self::B::g}(self::f<self::E<asy::Future<self::C::U*>*>*>());
+  }
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_property_get.dart.weak.modular.expect
new file mode 100644
index 0000000..c9a8df8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/super_property_get.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int* x = 0;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method g() → void {
+    core::int* y = super.{self::C::x};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.modular.expect
new file mode 100644
index 0000000..23c68ac
--- /dev/null
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field () →* core::int* f = () → core::int* => 0;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method g() → void {
+    core::int* y = super.{self::C::f}(){() →* core::int*};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.modular.expect
new file mode 100644
index 0000000..f32675f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class CallableClass extends core::Object {
+  synthetic constructor •() → self::CallableClass*
+    : super core::Object::•()
+    ;
+  method call() → core::int*
+    return 0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  field self::CallableClass* f = new self::CallableClass::•();
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method g() → void {
+    core::int* y = super.{self::C::f}.{self::CallableClass::call}(){() →* core::int*};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.modular.expect
new file mode 100644
index 0000000..752cdaf
--- /dev/null
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
+  synthetic constructor •() → self::E<self::E::T*>*
+    : super self::D::•()
+    ;
+}
+class B<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::D<self::B::T*>* x = null;
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
+  synthetic constructor •() → self::C<self::C::U*>*
+    : super self::B::•()
+    ;
+  get x() → self::E<asy::Future<self::C::U*>*>*
+    return null;
+  set x(covariant-by-class core::Object* x) → void {}
+  method g() → void {
+    self::D<asy::Future<self::C::U*>*>* y = super.{self::B::x};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.modular.expect
new file mode 100644
index 0000000..5f7255e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f() → core::int*
+    return 0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method g() → void {
+    () →* core::int* y = super.{self::C::f};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.modular.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.modular.expect
new file mode 100644
index 0000000..2b490e3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
+  synthetic constructor •() → self::E<self::E::T*>*
+    : super self::D::•()
+    ;
+}
+class B<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::D<self::B::T*>* x = null;
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
+  synthetic constructor •() → self::C<self::C::U*>*
+    : super self::B::•()
+    ;
+  get x() → self::E<asy::Future<self::C::U*>*>*
+    return null;
+  set x(covariant-by-class core::Object* x) → void {}
+  method g() → void {
+    super.{self::B::x} = self::f<self::D<asy::Future<self::C::U*>*>*>();
+  }
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/switch_continue.dart.weak.modular.expect b/pkg/front_end/testcases/inference/switch_continue.dart.weak.modular.expect
new file mode 100644
index 0000000..64406d0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/switch_continue.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test(core::int* x, () →* void f) → void {
+  #L1:
+  switch(x) {
+    #L2:
+    case #C1:
+      {
+        f(){() →* void};
+        continue #L3;
+      }
+    #L3:
+    case #C2:
+      {
+        f(){() →* void};
+        break #L1;
+      }
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = 1
+}
diff --git a/pkg/front_end/testcases/inference/symbol_literal.dart.weak.modular.expect b/pkg/front_end/testcases/inference/symbol_literal.dart.weak.modular.expect
new file mode 100644
index 0000000..1a4d6a8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/symbol_literal.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  core::Symbol* x = #C1;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #foo
+}
diff --git a/pkg/front_end/testcases/inference/this_reference.dart.weak.modular.expect b/pkg/front_end/testcases/inference/this_reference.dart.weak.modular.expect
new file mode 100644
index 0000000..06fb537
--- /dev/null
+++ b/pkg/front_end/testcases/inference/this_reference.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method f() → void {
+    self::C<self::C::T*>* x = this;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.modular.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.modular.expect
new file mode 100644
index 0000000..3ca6230
--- /dev/null
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+//  - 'Future' is from 'dart:async'.
+//   return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+//                                    ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+typedef IntToInt = (core::int*) →* core::int*;
+static method a() → (core::int*) →* core::int* {
+  return (core::int* x) → core::int* => x;
+}
+static method b() → asy::Future<(core::int*) →* core::int*>* async {
+  return invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:36: Error: A value of type 'Future<dynamic Function(dynamic)>' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
+ - 'Future' is from 'dart:async'.
+  return /*@ returnType=dynamic */ (/*@ type=dynamic */ x) => x;
+                                   ^" in ((dynamic x) → dynamic => x) as{TypeError} FutureOr<(core::int*) →* core::int*>*;
+}
+static method c() → core::Iterable<(core::int*) →* core::int*>* sync* {
+  yield(core::int* x) → core::int* => x;
+}
+static method d() → core::Iterable<(core::int*) →* core::int*>* sync* {
+  yield*<(core::int*) →* core::int*>[(core::int* x) → core::int* => x];
+}
+static method e() → asy::Stream<(core::int*) →* core::int*>* async* {
+  yield(core::int* x) → core::int* => x;
+}
+static method f() → asy::Stream<(core::int*) →* core::int*>* async* {
+  yield* asy::Stream::fromIterable<(core::int*) →* core::int*>(<(core::int*) →* core::int*>[(core::int* x) → core::int* => x]);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.modular.expect b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.modular.expect
new file mode 100644
index 0000000..9ab8405
--- /dev/null
+++ b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::int* i = 0;
+static method main() → dynamic {
+  core::int* j = self::i;
+}
diff --git a/pkg/front_end/testcases/inference/try_catch.dart.weak.modular.expect b/pkg/front_end/testcases/inference/try_catch.dart.weak.modular.expect
new file mode 100644
index 0000000..086e91e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/try_catch.dart.weak.modular.expect
@@ -0,0 +1,70 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E extends core::Object {
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test(() →* void f) → void {
+  try {
+    core::int* x = 0;
+    f(){() →* void};
+  }
+  on self::C* catch(no-exception-var) {
+    core::int* x = 0;
+  }
+  on self::D* catch(final self::D* x) {
+    self::D* x2 = x;
+  }
+  on self::E* catch(final self::E* x, final core::StackTrace* y) {
+    self::E* x2 = x;
+    core::StackTrace* y2 = y;
+  }
+  on dynamic catch(final dynamic x, final core::StackTrace* y) {
+    dynamic x2 = x;
+    core::StackTrace* y2 = y;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.modular.expect b/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.modular.expect
new file mode 100644
index 0000000..62db44d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/try_catch_finally.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E extends core::Object {
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test(() →* void f) → void {
+  try
+    try {
+      core::int* x = 0;
+      f(){() →* void};
+    }
+    on self::C* catch(no-exception-var) {
+      core::int* x = 0;
+    }
+    on self::D* catch(final self::D* x) {
+      self::D* x2 = x;
+    }
+    on self::E* catch(final self::E* x, final core::StackTrace* y) {
+      self::E* x2 = x;
+      core::StackTrace* y2 = y;
+    }
+    on dynamic catch(final dynamic x, final core::StackTrace* y) {
+      dynamic x2 = x;
+      core::StackTrace* y2 = y;
+    }
+  finally {
+    core::int* x = 0;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/try_catch_promotion.dart.weak.modular.expect b/pkg/front_end/testcases/inference/try_catch_promotion.dart.weak.modular.expect
new file mode 100644
index 0000000..0f37b73
--- /dev/null
+++ b/pkg/front_end/testcases/inference/try_catch_promotion.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+}
+class E extends core::StackTrace {
+  synthetic constructor •() → self::E*
+    : super core::StackTrace::•()
+    ;
+  abstract member-signature method toString() → core::String*; -> core::StackTrace::toString
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test(() →* void f) → void {
+  try {
+    f(){() →* void};
+  }
+  on self::C* catch(final self::C* x, final core::StackTrace* y) {
+    self::C* x1 = x;
+    core::StackTrace* y1 = y;
+    if(x is self::D*) {
+      self::D* x2 = x{self::D*};
+    }
+    if(y is self::E*) {
+      self::E* y2 = y{self::E*};
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/try_finally.dart.weak.modular.expect b/pkg/front_end/testcases/inference/try_finally.dart.weak.modular.expect
new file mode 100644
index 0000000..f52f88a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/try_finally.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method test(() →* void f) → void {
+  try {
+    core::int* x = 0;
+    f(){() →* void};
+  }
+  finally {
+    core::int* x = 0;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/type_cast.dart.weak.modular.expect b/pkg/front_end/testcases/inference/type_cast.dart.weak.modular.expect
new file mode 100644
index 0000000..4d12ac0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/type_cast.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super self::A::•()
+    ;
+  method foo() → dynamic {}
+}
+static field self::A<core::num*>* a = new self::B::•<core::int*>();
+static field self::B<core::int*>* b = self::a as self::B<core::int*>*;
+static method main() → dynamic {
+  self::A<core::num*>* a = new self::B::•<core::int*>();
+  self::B<core::int*>* b = a as self::B<core::int*>*;
+}
diff --git a/pkg/front_end/testcases/inference/type_promotion_ignores_local_functions.dart.weak.modular.expect b/pkg/front_end/testcases/inference/type_promotion_ignores_local_functions.dart.weak.modular.expect
new file mode 100644
index 0000000..6269884
--- /dev/null
+++ b/pkg/front_end/testcases/inference/type_promotion_ignores_local_functions.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef FunctionReturningInt = () →* core::int*;
+static method main() → dynamic {
+  function f() → core::num*
+    return 0;
+  if(f is () →* core::int*) {
+    f;
+  }
+}
diff --git a/pkg/front_end/testcases/inference/type_promotion_not_and_not.dart.weak.modular.expect b/pkg/front_end/testcases/inference/type_promotion_not_and_not.dart.weak.modular.expect
new file mode 100644
index 0000000..ca793f8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/type_promotion_not_and_not.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method f(core::Object* x) → void {
+  if(!(x is core::int*) && !(x is core::String*)) {
+    core::print(x);
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/type_promotion_simple.dart.weak.modular.expect b/pkg/front_end/testcases/inference/type_promotion_simple.dart.weak.modular.expect
new file mode 100644
index 0000000..4e2acb6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/type_promotion_simple.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::num* n = null;
+  if(n is core::int*) {
+    core::int* i = n{core::int*};
+  }
+}
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.weak.modular.expect b/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.weak.modular.expect
new file mode 100644
index 0000000..db5f0ef
--- /dev/null
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_access_in_a_closure.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::num* n = null;
+  if(n is core::int*) {
+    core::num* i = n;
+    () → Null {
+      n;
+    };
+  }
+  n = null;
+}
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.weak.modular.expect b/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.weak.modular.expect
new file mode 100644
index 0000000..ca4ba99
--- /dev/null
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_assignment_in_scope.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::num* n = null;
+  if(n is core::int*) {
+    core::num* i = n;
+    n = null;
+  }
+}
diff --git a/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.weak.modular.expect b/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.weak.modular.expect
new file mode 100644
index 0000000..d377034
--- /dev/null
+++ b/pkg/front_end/testcases/inference/type_promotion_stopped_by_mutation_in_a_closure.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::num* n = null;
+  if(n is core::int*) {
+    core::num* i = n;
+  }
+  () → Null {
+    n = null;
+  };
+}
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.weak.modular.expect
new file mode 100644
index 0000000..e3758d3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/unresolved_super.dart:16:37: Error: Superclass has no method named '[]='.
+//     var /*@type=dynamic*/ v5 = super[0] = /*@typeArgs=dynamic*/ f();
+//                                     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method test() → void {
+    dynamic v5 = let final core::int* #t1 = 0 in let final dynamic #t2 = self::f<dynamic>() in let final void #t3 = invalid-expression "pkg/front_end/testcases/inference/unresolved_super.dart:16:37: Error: Superclass has no method named '[]='.
+    var /*@type=dynamic*/ v5 = super[0] = /*@typeArgs=dynamic*/ f();
+                                    ^" in #t2;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.modular.expect
new file mode 100644
index 0000000..4c0ed46
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::double* v = ((dynamic x) → core::double* => 1.0)(() → core::int* {
+    return 1;
+  }){(dynamic) →* core::double*};
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.modular.expect
new file mode 100644
index 0000000..e65f4933
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C<dynamic>* v = new self::C::•<dynamic>(() → core::int* {
+  return 1;
+});
+static method main() → dynamic {
+  self::v;
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.modular.expect
new file mode 100644
index 0000000..156c565
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C<core::int*>* v = new self::C::•<core::int*>(() → core::int* {
+  return 1;
+});
+static method main() → dynamic {
+  self::v;
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.modular.expect
new file mode 100644
index 0000000..0e7282f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C<core::int*>* v = new self::C::•<core::int*>(() → core::int* {
+    return 1;
+  });
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.modular.expect
new file mode 100644
index 0000000..939c023
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  constructor •(() →* dynamic x) → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C* v = new self::C::•(() → core::int* {
+  return 1;
+});
+static method main() → dynamic {
+  self::v;
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.modular.expect
new file mode 100644
index 0000000..2ac59fb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<dynamic>* v = self::f<dynamic>(() → core::int* {
+  return 1;
+});
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+  return <self::f::T*>[g(){() →* self::f::T*}];
+static method main() → dynamic {
+  self::v;
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.modular.expect
new file mode 100644
index 0000000..14f27fa
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// var v = (f<dynamic>)/*@typeArgs=int**/(/*@returnType=int**/() {
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+  return 1;
+}){(() →* core::int*) →* core::List<core::int*>*};
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+  return <self::f::T*>[g(){() →* self::f::T*}];
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::f
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.modular.expect
new file mode 100644
index 0000000..cf406c1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<dynamic>* v = #C1<dynamic>(() → core::int* {
+  return 1;
+}){(() →* dynamic) →* core::List<dynamic>*};
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+  return <self::f::T*>[g(){() →* self::f::T*}];
+static method main() → dynamic {
+  self::v;
+}
+
+constants  {
+  #C1 = static-tearoff self::f
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.modular.expect
new file mode 100644
index 0000000..06e337e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int*>* v = self::f<core::int*>(() → core::int* {
+  return 1;
+});
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+  return <self::f::T*>[g(){() →* self::f::T*}];
+static method main() → dynamic {
+  self::v;
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.modular.expect
new file mode 100644
index 0000000..1d604ce
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1.dart:9:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// var v = (f<int>)/*@typeArgs=int**/(/*@returnType=int**/() {
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+  return 1;
+}){(() →* core::int*) →* core::List<core::int*>*};
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+  return <self::f::T*>[g(){() →* self::f::T*}];
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::f
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.modular.expect
new file mode 100644
index 0000000..26fdda1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+  return 1;
+}){(() →* core::int*) →* core::List<core::int*>*};
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+  return <self::f::T*>[g(){() →* self::f::T*}];
+static method main() → dynamic {
+  self::v;
+}
+
+constants  {
+  #C1 = static-tearoff self::f
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.modular.expect
new file mode 100644
index 0000000..720cf75
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::List<core::int*>* v = self::f<core::int*>(() → core::int* {
+    return 1;
+  });
+}
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+  return <self::f::T*>[g(){() →* self::f::T*}];
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.modular.expect
new file mode 100644
index 0000000..7def91f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+    return 1;
+  }){(() →* core::int*) →* core::List<core::int*>*};
+}
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+  return <self::f::T*>[g(){() →* self::f::T*}];
+
+constants  {
+  #C1 = static-tearoff self::f
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.modular.expect
new file mode 100644
index 0000000..715a3f3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::double* v = self::f(() → core::int* {
+    return 1;
+  });
+}
+static method f(dynamic x) → core::double*
+  return 1.0;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.modular.expect
new file mode 100644
index 0000000..d720962
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::double* v = #C1(() → core::int* {
+    return 1;
+  }){(dynamic) →* core::double*};
+}
+static method f(dynamic x) → core::double*
+  return 1.0;
+
+constants  {
+  #C1 = static-tearoff self::f
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.modular.expect
new file mode 100644
index 0000000..bc2b33d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::List<dynamic>* v = <dynamic>[() → core::int* {
+    return 1;
+  }];
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.modular.expect
new file mode 100644
index 0000000..b747c51
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = () →* core::int*;
+static method main() → dynamic {
+  core::List<() →* core::int*>* v = <() →* core::int*>[() → core::int* {
+    return 1;
+  }];
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.modular.expect
new file mode 100644
index 0000000..5b2da50
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::List<() →* core::int*>* v = <() →* core::int*>[() → core::int* {
+    return 1;
+  }];
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.modular.expect
new file mode 100644
index 0000000..07d95de
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::Map<core::int*, dynamic>* v = <core::int*, dynamic>{1: () → core::int* {
+    return 1;
+  }};
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.modular.expect
new file mode 100644
index 0000000..7e2da76
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = () →* core::int*;
+static method main() → dynamic {
+  core::Map<core::int*, () →* core::int*>* v = <core::int*, () →* core::int*>{1: () → core::int* {
+    return 1;
+  }};
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.modular.expect
new file mode 100644
index 0000000..f2aa7b1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::Map<core::int*, () →* core::int*>* v = <core::int*, () →* core::int*>{1: () → core::int* {
+    return 1;
+  }};
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.modular.expect
new file mode 100644
index 0000000..7011442a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
+    return <self::C::f::T*>[g(){() →* self::C::f::T*}];
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::List<dynamic>* v = new self::C::•().{self::C::f}<dynamic>(() → core::int* {
+    return 1;
+  }){(() →* dynamic) →* core::List<dynamic>*};
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.modular.expect
new file mode 100644
index 0000000..3df5bcf
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
+    return <self::C::f::T*>[g(){() →* self::C::f::T*}];
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::List<core::int*>* v = new self::C::•().{self::C::f}<core::int*>(() → core::int* {
+    return 1;
+  }){(() →* core::int*) →* core::List<core::int*>*};
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.modular.expect
new file mode 100644
index 0000000..3df5bcf
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
+    return <self::C::f::T*>[g(){() →* self::C::f::T*}];
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::List<core::int*>* v = new self::C::•().{self::C::f}<core::int*>(() → core::int* {
+    return 1;
+  }){(() →* core::int*) →* core::List<core::int*>*};
+}
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.modular.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.modular.expect
new file mode 100644
index 0000000..f00aa66
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f(dynamic x) → core::double*
+    return 1.0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::double* v = new self::C::•().{self::C::f}(() → core::int* {
+  return 1;
+}){(dynamic) →* core::double*};
+static method main() → dynamic {
+  self::v;
+}
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.modular.expect b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.modular.expect
new file mode 100644
index 0000000..751e547
--- /dev/null
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic x = self::run<dynamic>(#C1);
+static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T* {
+  core::print("running");
+  self::run::T* t = f(){() →* self::run::T*};
+  core::print("done running");
+  return t;
+}
+static method printRunning() → void {
+  core::print("running");
+}
+static method main() → dynamic {
+  function printRunning() → void {
+    core::print("running");
+  }
+  dynamic x = self::run<dynamic>(printRunning);
+  void y = self::run<void>(printRunning);
+  x = 123;
+  x = "hi";
+  y = 123;
+  y = "hi";
+}
+
+constants  {
+  #C1 = static-tearoff self::printRunning
+}
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.modular.expect
new file mode 100644
index 0000000..388292d
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.weak.modular.expect
@@ -0,0 +1,72 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant U extends core::Object* = dynamic, V extends core::Object* = dynamic> = (U*) →* V*;
+class Foo<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T*>*
+    : super core::Object::•()
+    ;
+  get v1() → self::Bar<self::Foo::T*>*
+    return #C1;
+  get v2() → self::Bar<core::List<self::Foo::T*>*>*
+    return #C2;
+  get v3() → self::Bar<(self::Foo::T*) →* self::Foo::T*>*
+    return #C3;
+  get v4() → self::Bar<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>*
+    return #C4;
+  get v5() → core::List<self::Foo::T*>*
+    return #C5;
+  get v6() → core::List<(self::Foo::T*) →* self::Foo::T*>*
+    return #C6;
+  get v7() → core::Map<self::Foo::T*, self::Foo::T*>*
+    return #C7;
+  get v8() → core::Map<(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>*
+    return #C8;
+  get v9() → core::Map<self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>*
+    return #C9;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::Bar<self::Bar::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Bar<Null> {}
+  #C2 = self::Bar<core::List<Null>*> {}
+  #C3 = self::Bar<(core::Object*) →* Null> {}
+  #C4 = self::Bar<((Null) →* core::Object*) →* Null> {}
+  #C5 = <Null>[]
+  #C6 = <(core::Object*) →* Null>[]
+  #C7 = <Null, Null>{)
+  #C8 = <(core::Object*) →* Null, Null>{)
+  #C9 = <Null, (core::Object*) →* Null>{)
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_invocation.dart:
+- Bar. (from org-dartlang-testcase:///const_invocation.dart:24:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.modular.expect
new file mode 100644
index 0000000..a062019
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:18:5: Error: Can't infer the type of 'b': circularity found during type inference.
+// Specify the type explicitly.
+// var b = /*@ returnType=() ->* invalid-type */ () =>
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method f<T extends core::Object* = dynamic>(self::A::f::T* t) → self::A::f::T*
+    return t;
+  method g(dynamic i) → core::int*
+    return 0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::A* a = new self::A::•();
+static field invalid-type b = () → () →* invalid-type => self::a.{self::A::f}<() →* invalid-type>(self::c){(() →* invalid-type) →* () →* invalid-type};
+static field () →* invalid-type c = () → invalid-type => self::a.{self::A::f}<invalid-type>(self::b){(invalid-type) →* invalid-type};
+static field () →* () →* core::int* d = () → () →* core::int* => self::a.{self::A::f}<() →* core::int*>(self::e){(() →* core::int*) →* () →* core::int*};
+static field () →* core::int* e = () → core::int* => self::a.{self::A::g}(self::d){(dynamic) →* core::int*};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.modular.expect
new file mode 100644
index 0000000..3ae5f85
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:5: Error: Can't infer the type of 'a': circularity found during type inference.
+// Specify the type explicitly.
+// var a = /*@ returnType=num* */ () => intValue /*@target=num.+*/ + b;
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::int* intValue = 0;
+static field core::num* numValue = 0;
+static field core::double* doubleValue = 0.0;
+static field invalid-type a = () → core::num* => self::intValue.{core::num::+}(self::b as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+static field dynamic b = self::a{dynamic}.call();
+static field () →* core::num* c = () → core::num* => self::numValue.{core::num::+}(self::d){(core::num*) →* core::num*};
+static field core::num* d = self::c(){() →* core::num*};
+static field () →* core::double* e = () → core::double* => self::doubleValue.{core::double::+}(self::f){(core::num*) →* core::double*};
+static field core::double* f = self::e(){() →* core::double*};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/do_loop.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/do_loop.dart.weak.modular.expect
new file mode 100644
index 0000000..2639877
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/do_loop.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method test() → void {
+  do {
+    core::int* x = 0;
+  }
+  while (self::f<core::bool*>())
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.modular.expect
new file mode 100644
index 0000000..f211b44
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field self::B<core::int*>* b = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(self::B::T* x) → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::List<self::B<core::int*>*>* t3 = <self::B<core::int*>*>[new self::B::•<core::int*>(3)];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.modular.expect
new file mode 100644
index 0000000..aaa7123
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  constructor •(self::A::T* x) → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::List<self::A<core::int*>*>* t2 = <self::A<core::int*>*>[new self::A::•<core::int*>(2)];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.modular.expect
new file mode 100644
index 0000000..b83a5f8
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/field_inference_circularity.dart:12:7: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+//   var x = /*@returnType=invalid-type*/ () => new B(). /*@target=B.x*/ x;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field invalid-type x = () → invalid-type => new self::B::•().{self::B::x}{invalid-type};
+  field () →* invalid-type y = () → invalid-type => new self::B::•().{self::B::x}{invalid-type};
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  field invalid-type x = null;
+  field () →* invalid-type y = null;
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.modular.expect
new file mode 100644
index 0000000..0a972fb
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  field self::A* aField = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  set aSetter(self::A* value) → void {}
+  method test() → void {
+    self::A* aLocal;
+    for (final self::A* #t1 in self::f<core::Iterable<self::A*>*>()) {
+      aLocal = #t1;
+    }
+    for (final self::A* #t2 in self::f<core::Iterable<self::A*>*>()) {
+      this.{self::C::aField} = #t2;
+    }
+    for (final self::A* #t3 in self::f<core::Iterable<self::A*>*>()) {
+      this.{self::C::aSetter} = #t3;
+    }
+    for (final self::A* #t4 in self::f<core::Iterable<self::A*>*>()) {
+      self::aTopLevel = #t4;
+    }
+    for (final self::A* #t5 in self::f<core::Iterable<self::A*>*>()) {
+      self::aTopLevelSetter = #t5;
+    }
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::A* aTopLevel;
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static set aTopLevelSetter(self::A* value) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.modular.expect
new file mode 100644
index 0000000..727e04a
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   for (int x in s) {}
+//                 ^
+//
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:23: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+//  - 'Stream' is from 'dart:async'.
+//   await for (int x in s) {}
+//                       ^
+//
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:13: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   for (y in s) {}
+//             ^
+//
+// pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:19: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+//  - 'Stream' is from 'dart:async'.
+//   await for (y in s) {}
+//                   ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static method test() → dynamic async {
+  core::String* s;
+  for (final dynamic #t1 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:17: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  for (int x in s) {}
+                ^" in s as{TypeError} core::Iterable<dynamic>*) {
+    core::int* x = #t1 as{TypeError,ForDynamic} core::int*;
+  }
+  await for (final dynamic #t2 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:23: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+ - 'Stream' is from 'dart:async'.
+  await for (int x in s) {}
+                      ^" in s as{TypeError} asy::Stream<dynamic>*) {
+    core::int* x = #t2 as{TypeError,ForDynamic} core::int*;
+  }
+  core::int* y;
+  for (final dynamic #t3 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:13: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  for (y in s) {}
+            ^" in s as{TypeError} core::Iterable<dynamic>*) {
+    y = #t3 as{TypeError,ForDynamic} core::int*;
+  }
+  await for (final dynamic #t4 in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:19: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+ - 'Stream' is from 'dart:async'.
+  await for (y in s) {}
+                  ^" in s as{TypeError} asy::Stream<dynamic>*) {
+    y = #t4 as{TypeError,ForDynamic} core::int*;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.modular.expect
new file mode 100644
index 0000000..e195507
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.weak.modular.expect
@@ -0,0 +1,84 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:10: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
+// Try changing the type of the variable.
+//   for (i in iterable) {}
+//          ^
+//
+// pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:16: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
+// Try changing the type of the variable.
+//   await for (i in stream) {}
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method test() → dynamic async {
+  core::Iterable<self::A*>* iterable;
+  asy::Stream<self::A*>* stream;
+  self::A* a;
+  self::B* b;
+  core::int* i;
+  for (final self::A* #t1 in iterable) {
+    a = #t1;
+  }
+  await for (final self::A* #t2 in stream) {
+    a = #t2;
+  }
+  for (final self::A* #t3 in iterable) {
+    b = #t3 as{TypeError} self::B*;
+  }
+  await for (final self::A* #t4 in stream) {
+    b = #t4 as{TypeError} self::B*;
+  }
+  for (final self::A* #t5 in iterable) {
+    i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:10: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
+ - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
+Try changing the type of the variable.
+  for (i in iterable) {}
+         ^" in #t5 as{TypeError} core::int*;
+  }
+  await for (final self::A* #t6 in stream) {
+    i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:16: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
+ - 'A' is from 'pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart'.
+Try changing the type of the variable.
+  await for (i in stream) {}
+               ^" in #t6 as{TypeError} core::int*;
+  }
+  for (final self::A* #t7 in self::f<core::Iterable<self::A*>*>()) {
+    a = #t7;
+  }
+  await for (final self::A* #t8 in self::f<asy::Stream<self::A*>*>()) {
+    a = #t8;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.modular.expect
new file mode 100644
index 0000000..cf8fb9e
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.weak.modular.expect
@@ -0,0 +1,125 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator +(core::int* value) → self::C*
+    return null;
+  operator *(self::D* value) → self::C*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  operator +(core::int* value) → self::E*
+    return null;
+  operator *(self::F* value) → self::E*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E extends core::Object {
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F extends core::Object {
+  synthetic constructor •() → self::F*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class G extends core::Object {
+  synthetic constructor •() → self::G*
+    : super core::Object::•()
+    ;
+  operator [](core::int* i) → self::A*
+    return null;
+  operator []=(core::int* i, self::B* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method test1(self::G* g) → void {
+  let final self::G* #t1 = g in let final core::int* #t2 = 0 in #t1.{self::G::[]=}(#t2, #t1.{self::G::[]}(#t2){(core::int*) →* self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*}){(core::int*, self::B*) →* void};
+  self::C* x = let final self::G* #t3 = g in let final core::int* #t4 = 0 in let final self::C* #t5 = #t3.{self::G::[]}(#t4){(core::int*) →* self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*} in let final void #t6 = #t3.{self::G::[]=}(#t4, #t5){(core::int*, self::B*) →* void} in #t5;
+}
+static method test2(self::G* g) → void {
+  let final self::G* #t7 = g in let final core::int* #t8 = 0 in let final self::C* #t9 = #t7.{self::G::[]}(#t8){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*} in let final void #t10 = #t7.{self::G::[]=}(#t8, #t9){(core::int*, self::B*) →* void} in #t9;
+  self::C* x = let final self::G* #t11 = g in let final core::int* #t12 = 0 in let final self::C* #t13 = #t11.{self::G::[]}(#t12){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*} in let final void #t14 = #t11.{self::G::[]=}(#t12, #t13){(core::int*, self::B*) →* void} in #t13;
+}
+static method test3(self::G* g) → void {
+  let final self::G* #t15 = g in let final core::int* #t16 = 0 in #t15.{self::G::[]=}(#t16, #t15.{self::G::[]}(#t16){(core::int*) →* self::A*}.{self::A::+}(1){(core::int*) →* self::C*}){(core::int*, self::B*) →* void};
+  self::A* x = let final self::G* #t17 = g in let final core::int* #t18 = 0 in let final self::A* #t19 = #t17.{self::G::[]}(#t18){(core::int*) →* self::A*} in let final void #t20 = #t17.{self::G::[]=}(#t18, #t19.{self::A::+}(1){(core::int*) →* self::C*}){(core::int*, self::B*) →* void} in #t19;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.modular.expect
new file mode 100644
index 0000000..43a39ef
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.weak.modular.expect
@@ -0,0 +1,72 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B* member = null;
+  synthetic constructor •() → self::Test*
+    : super core::Object::•()
+    ;
+  method test() → void {
+    this.{self::Test::member} = self::f<self::B*>();
+    this.{self::Test::member}{self::B*} == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : null;
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v1 = this.{self::Test::member} = self::f<self::B*>();
+    self::B* v2 = let final self::B* #t1 = this.{self::Test::member}{self::B*} in #t1 == null ?{self::B*} this.{self::Test::member} = self::f<self::B*>() : #t1;
+    self::A* v3 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = this.{self::Test::member} = this.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::B* #t2 = this.{self::Test::member}{self::B*} in let final self::B* #t3 = this.{self::Test::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..c9e63c0
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.weak.modular.expect
@@ -0,0 +1,93 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int* t = null;
+  synthetic constructor •() → self::Test1*
+    : super core::Object::•()
+    ;
+  method test() → void {
+    core::int* v1 = this.{self::Test1::t} = self::getInt();
+    core::num* v2 = this.{self::Test1::t} = self::getNum() as{TypeError} core::int*;
+    core::int* v4 = let final core::int* #t1 = this.{self::Test1::t}{core::int*} in #t1 == null ?{core::int*} this.{self::Test1::t} = self::getInt() : #t1;
+    core::num* v5 = let final core::int* #t2 = this.{self::Test1::t}{core::int*} in #t2 == null ?{core::num*} this.{self::Test1::t} = self::getNum() as{TypeError} core::int* : #t2;
+    core::int* v7 = this.{self::Test1::t} = this.{self::Test1::t}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::num* v8 = this.{self::Test1::t} = this.{self::Test1::t}{core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int*;
+    core::int* v10 = this.{self::Test1::t} = this.{self::Test1::t}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final core::int* #t3 = this.{self::Test1::t}{core::int*} in let final core::int* #t4 = this.{self::Test1::t} = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test2 extends core::Object {
+  field core::num* t = null;
+  synthetic constructor •() → self::Test2*
+    : super core::Object::•()
+    ;
+  method test() → void {
+    core::int* v1 = this.{self::Test2::t} = self::getInt();
+    core::num* v2 = this.{self::Test2::t} = self::getNum();
+    core::double* v3 = this.{self::Test2::t} = self::getDouble();
+    core::num* v4 = let final core::num* #t5 = this.{self::Test2::t}{core::num*} in #t5 == null ?{core::num*} this.{self::Test2::t} = self::getInt() : #t5;
+    core::num* v5 = let final core::num* #t6 = this.{self::Test2::t}{core::num*} in #t6 == null ?{core::num*} this.{self::Test2::t} = self::getNum() : #t6;
+    core::num* v6 = let final core::num* #t7 = this.{self::Test2::t}{core::num*} in #t7 == null ?{core::num*} this.{self::Test2::t} = self::getDouble() : #t7;
+    core::num* v7 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = this.{self::Test2::t} = this.{self::Test2::t}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final core::num* #t8 = this.{self::Test2::t}{core::num*} in let final core::num* #t9 = this.{self::Test2::t} = #t8.{core::num::+}(1){(core::num*) →* core::num*} in #t8;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test3 extends core::Object {
+  field core::double* t = null;
+  synthetic constructor •() → self::Test3*
+    : super core::Object::•()
+    ;
+  method test3() → void {
+    core::num* v2 = this.{self::Test3::t} = self::getNum() as{TypeError} core::double*;
+    core::double* v3 = this.{self::Test3::t} = self::getDouble();
+    core::num* v5 = let final core::double* #t10 = this.{self::Test3::t}{core::double*} in #t10 == null ?{core::num*} this.{self::Test3::t} = self::getNum() as{TypeError} core::double* : #t10;
+    core::double* v6 = let final core::double* #t11 = this.{self::Test3::t}{core::double*} in #t11 == null ?{core::double*} this.{self::Test3::t} = self::getDouble() : #t11;
+    core::double* v7 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = this.{self::Test3::t} = this.{self::Test3::t}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final core::double* #t12 = this.{self::Test3::t}{core::double*} in let final core::double* #t13 = this.{self::Test3::t} = #t12.{core::double::+}(1){(core::num*) →* core::double*} in #t12;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method getInt() → core::int*
+  return 0;
+static method getNum() → core::num*
+  return 0;
+static method getDouble() → core::double*
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.modular.expect
new file mode 100644
index 0000000..f6ef830
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::double*>* a = <core::double*>[];
+static field core::double* b = let final core::List<core::double*>* #t1 = self::a in let final core::int* #t2 = 0 in let final core::double* #t3 = 1.0 in let final void #t4 = #t1.{core::List::[]=}(#t2, #t3){(core::int*, core::double*) →* void} in #t3;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.modular.expect
new file mode 100644
index 0000000..8b4ab90
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.weak.modular.expect
@@ -0,0 +1,92 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  synthetic constructor •() → self::Test*
+    : super core::Object::•()
+    ;
+  operator [](self::Index* i) → self::B*
+    return null;
+  operator []=(self::Index* i, self::B* v) → void {}
+  method test() → void {
+    self::Test* t = self::f<self::Test*>();
+    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
+    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::B*} #t1.{self::Test::[]=}(#t2, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
+    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
+    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in #t5.{self::Test::[]=}(#t6, #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
+    let final self::Test* #t7 = t in let final self::Index* #t8 = self::f<self::Index*>() in #t7.{self::Test::[]=}(#t8, #t7.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
+    t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
+    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in let final self::B* #t11 = #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t12 = #t9.{self::Test::[]=}(#t10, #t11){(self::Index*, self::B*) →* void} in #t11;
+    let final self::Test* #t13 = t in let final self::Index* #t14 = self::f<self::Index*>() in #t13.{self::Test::[]=}(#t14, #t13.{self::Test::[]}(#t14){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
+    self::B* v1 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = self::f<self::B*>() in let final void #t18 = #t15.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
+    self::B* v2 = let final self::Test* #t19 = t in let final self::Index* #t20 = self::f<self::Index*>() in let final self::B* #t21 = #t19.{self::Test::[]}(#t20){(self::Index*) →* self::B*} in #t21 == null ?{self::B*} let final self::B* #t22 = self::f<self::B*>() in let final void #t23 = #t19.{self::Test::[]=}(#t20, #t22){(self::Index*, self::B*) →* void} in #t22 : #t21;
+    self::A* v3 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::A* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
+    self::B* v4 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::B* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30){(self::Index*, self::B*) →* void} in #t30;
+    self::C* v5 = let final self::Test* #t32 = t in let final self::Index* #t33 = self::f<self::Index*>() in let final self::C* #t34 = #t32.{self::Test::[]}(#t33){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t35 = #t32.{self::Test::[]=}(#t33, #t34){(self::Index*, self::B*) →* void} in #t34;
+    self::B* v6 = t.{self::Test::[]}(self::f<self::Index*>()){(self::Index*) →* self::B*};
+    self::B* v7 = let final self::Test* #t36 = t in let final self::Index* #t37 = self::f<self::Index*>() in let final self::B* #t38 = #t36.{self::Test::[]}(#t37){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t39 = #t36.{self::Test::[]=}(#t37, #t38){(self::Index*, self::B*) →* void} in #t38;
+    self::B* v8 = let final self::Test* #t40 = t in let final self::Index* #t41 = self::f<self::Index*>() in let final self::B* #t42 = #t40.{self::Test::[]}(#t41){(self::Index*) →* self::B*} in let final void #t43 = #t40.{self::Test::[]=}(#t41, #t42.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t42;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.modular.expect
new file mode 100644
index 0000000..685af9c
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.weak.modular.expect
@@ -0,0 +1,101 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator +(self::F* v) → self::C*
+    return null;
+  operator -(core::int* i) → self::C*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::E* v) → self::D*
+    return null;
+  operator -(core::int* i) → self::D*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+}
+class E extends self::D {
+  synthetic constructor •() → self::E*
+    : super self::D::•()
+    ;
+}
+class F extends self::E {
+  synthetic constructor •() → self::F*
+    : super self::E::•()
+    ;
+}
+class Test extends core::Object {
+  synthetic constructor •() → self::Test*
+    : super core::Object::•()
+    ;
+  operator [](self::Index* i) → self::B*
+    return null;
+  operator []=(self::Index* i, self::A* v) → void {}
+  method test() → void {
+    self::Test* t = self::f<self::Test*>();
+    t.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::A*>()){(self::Index*, self::A*) →* void};
+    let final self::Test* #t1 = t in let final self::Index* #t2 = self::f<self::Index*>() in #t1.{self::Test::[]}(#t2){(self::Index*) →* self::B*} == null ?{self::A*} #t1.{self::Test::[]=}(#t2, self::f<self::A*>()){(self::Index*, self::A*) →* void} : null;
+    let final self::Test* #t3 = t in let final self::Index* #t4 = self::f<self::Index*>() in #t3.{self::Test::[]=}(#t4, #t3.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::E*>()){(self::E*) →* self::D*}){(self::Index*, self::A*) →* void};
+    let final self::Test* #t5 = t in let final self::Index* #t6 = self::f<self::Index*>() in let final self::D* #t7 = #t5.{self::Test::[]}(#t6){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*} in let final void #t8 = #t5.{self::Test::[]=}(#t6, #t7){(self::Index*, self::A*) →* void} in #t7;
+    let final self::Test* #t9 = t in let final self::Index* #t10 = self::f<self::Index*>() in #t9.{self::Test::[]=}(#t10, #t9.{self::Test::[]}(#t10){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*}){(self::Index*, self::A*) →* void};
+    self::A* v1 = let final self::Test* #t11 = t in let final self::Index* #t12 = self::f<self::Index*>() in let final self::A* #t13 = self::f<self::A*>() in let final void #t14 = #t11.{self::Test::[]=}(#t12, #t13){(self::Index*, self::A*) →* void} in #t13;
+    self::A* v2 = let final self::Test* #t15 = t in let final self::Index* #t16 = self::f<self::Index*>() in let final self::B* #t17 = #t15.{self::Test::[]}(#t16){(self::Index*) →* self::B*} in #t17 == null ?{self::A*} let final self::A* #t18 = self::f<self::A*>() in let final void #t19 = #t15.{self::Test::[]=}(#t16, #t18){(self::Index*, self::A*) →* void} in #t18 : #t17;
+    self::D* v3 = let final self::Test* #t20 = t in let final self::Index* #t21 = self::f<self::Index*>() in let final self::D* #t22 = #t20.{self::Test::[]}(#t21){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::E*>()){(self::E*) →* self::D*} in let final void #t23 = #t20.{self::Test::[]=}(#t21, #t22){(self::Index*, self::A*) →* void} in #t22;
+    self::D* v4 = let final self::Test* #t24 = t in let final self::Index* #t25 = self::f<self::Index*>() in let final self::D* #t26 = #t24.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::D*} in let final void #t27 = #t24.{self::Test::[]=}(#t25, #t26){(self::Index*, self::A*) →* void} in #t26;
+    self::B* v5 = let final self::Test* #t28 = t in let final self::Index* #t29 = self::f<self::Index*>() in let final self::B* #t30 = #t28.{self::Test::[]}(#t29){(self::Index*) →* self::B*} in let final void #t31 = #t28.{self::Test::[]=}(#t29, #t30.{self::B::-}(1){(core::int*) →* self::D*}){(self::Index*, self::A*) →* void} in #t30;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.weak.modular.expect
new file mode 100644
index 0000000..3a7a814
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.weak.modular.expect
@@ -0,0 +1,94 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class Base extends core::Object {
+  synthetic constructor •() → self::Base*
+    : super core::Object::•()
+    ;
+  operator [](self::Index* i) → self::B*
+    return null;
+  operator []=(self::Index* i, self::B* v) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test extends self::Base {
+  synthetic constructor •() → self::Test*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    super.{self::Base::[]=}(self::f<self::Index*>(), self::f<self::B*>());
+    let final self::Index* #t1 = self::f<self::Index*>() in super.{self::Base::[]}(#t1) == null ?{self::B*} super.{self::Base::[]=}(#t1, self::f<self::B*>()) : null;
+    let final self::Index* #t2 = self::f<self::Index*>() in super.{self::Base::[]=}(#t2, super.{self::Base::[]}(#t2).{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*);
+    let final self::Index* #t3 = self::f<self::Index*>() in super.{self::Base::[]=}(#t3, super.{self::Base::[]}(#t3).{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*});
+    let final self::Index* #t4 = self::f<self::Index*>() in super.{self::Base::[]=}(#t4, super.{self::Base::[]}(#t4).{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*});
+    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = super.{self::Base::[]}(#t5).{self::B::-}(1){(core::int*) →* self::B*} in let final void #t7 = super.{self::Base::[]=}(#t5, #t6) in #t6;
+    let final self::Index* #t8 = self::f<self::Index*>() in super.{self::Base::[]=}(#t8, super.{self::Base::[]}(#t8).{self::B::-}(1){(core::int*) →* self::B*});
+    self::B* v1 = let final self::Index* #t9 = self::f<self::Index*>() in let final self::B* #t10 = self::f<self::B*>() in let final void #t11 = super.{self::Base::[]=}(#t9, #t10) in #t10;
+    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = super.{self::Base::[]}(#t12) in #t13 == null ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = super.{self::Base::[]=}(#t12, #t14) in #t14 : #t13;
+    self::A* v3 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = super.{self::Base::[]}(#t16).{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t18 = super.{self::Base::[]=}(#t16, #t17) in #t17;
+    self::B* v4 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = super.{self::Base::[]}(#t19).{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t21 = super.{self::Base::[]=}(#t19, #t20) in #t20;
+    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = super.{self::Base::[]}(#t22).{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t24 = super.{self::Base::[]=}(#t22, #t23) in #t23;
+    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = super.{self::Base::[]}(#t25).{self::B::-}(1){(core::int*) →* self::B*} in let final void #t27 = super.{self::Base::[]=}(#t25, #t26) in #t26;
+    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = super.{self::Base::[]}(#t28) in let final void #t30 = super.{self::Base::[]=}(#t28, #t29.{self::B::-}(1){(core::int*) →* self::B*}) in #t29;
+  }
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..92e9469
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.modular.expect
@@ -0,0 +1,224 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:106:31: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+//             /*@target=num.+*/ += getInt();
+//                               ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:116:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+//     var /*@ type=int* */ v10 = /*@target=num.+*/ ++super
+//                                                  ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:120:33: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+//         ['x'] /*@target=num.+*/ ++;
+//                                 ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:244:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//             /*@target=double.+*/ += getInt();
+//                                  ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:248:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//             /*@target=double.+*/ += getNum();
+//                                  ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:250:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//     var /*@ type=double* */ v10 = /*@target=double.+*/ ++super
+//                                                        ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:254:36: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//         ['x'] /*@target=double.+*/ ++;
+//                                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Base<T extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Base<self::Base::T*, self::Base::U*>*
+    : super core::Object::•()
+    ;
+  operator [](core::String* s) → self::Base::T*
+    return this.{self::Base::getValue}(s){(core::String*) →* self::Base::T*};
+  operator []=(core::String* s, covariant-by-class self::Base::U* v) → void
+    return this.{self::Base::setValue}(s, v){(core::String*, self::Base::U*) →* void};
+  abstract method getValue(core::String* s) → self::Base::T*;
+  abstract method setValue(core::String* s, covariant-by-class self::Base::U* v) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Test1 extends self::Base<core::int*, core::int*> {
+  synthetic constructor •() → self::Test1*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int* v1 = let final core::String* #t1 = "x" in let final core::int* #t2 = self::getInt() in let final void #t3 = super.{self::Base::[]=}(#t1, #t2) in #t2;
+    core::num* v2 = let final core::String* #t4 = "x" in let final core::num* #t5 = self::getNum() as{TypeError} core::int* in let final void #t6 = super.{self::Base::[]=}(#t4, #t5) in #t5;
+    core::int* v4 = let final core::String* #t7 = "x" in let final core::int* #t8 = super.{self::Base::[]}(#t7) in #t8 == null ?{core::int*} let final core::int* #t9 = self::getInt() in let final void #t10 = super.{self::Base::[]=}(#t7, #t9) in #t9 : #t8;
+    core::num* v5 = let final core::String* #t11 = "x" in let final core::int* #t12 = super.{self::Base::[]}(#t11) in #t12 == null ?{core::num*} let final core::num* #t13 = self::getNum() as{TypeError} core::int* in let final void #t14 = super.{self::Base::[]=}(#t11, #t13) in #t13 : #t12;
+    core::int* v7 = let final core::String* #t15 = "x" in let final core::int* #t16 = super.{self::Base::[]}(#t15).{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t17 = super.{self::Base::[]=}(#t15, #t16) in #t16;
+    core::num* v8 = let final core::String* #t18 = "x" in let final core::num* #t19 = super.{self::Base::[]}(#t18).{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t20 = super.{self::Base::[]=}(#t18, #t19) in #t19;
+    core::int* v10 = let final core::String* #t21 = "x" in let final core::int* #t22 = super.{self::Base::[]}(#t21).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t23 = super.{self::Base::[]=}(#t21, #t22) in #t22;
+    core::int* v11 = let final core::String* #t24 = "x" in let final core::int* #t25 = super.{self::Base::[]}(#t24) in let final void #t26 = super.{self::Base::[]=}(#t24, #t25.{core::num::+}(1){(core::num*) →* core::int*}) in #t25;
+  }
+}
+abstract class Test2 extends self::Base<core::int*, core::num*> {
+  synthetic constructor •() → self::Test2*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int* v1 = let final core::String* #t27 = "x" in let final core::int* #t28 = self::getInt() in let final void #t29 = super.{self::Base::[]=}(#t27, #t28) in #t28;
+    core::num* v2 = let final core::String* #t30 = "x" in let final core::num* #t31 = self::getNum() in let final void #t32 = super.{self::Base::[]=}(#t30, #t31) in #t31;
+    core::double* v3 = let final core::String* #t33 = "x" in let final core::double* #t34 = self::getDouble() in let final void #t35 = super.{self::Base::[]=}(#t33, #t34) in #t34;
+    core::int* v4 = let final core::String* #t36 = "x" in let final core::int* #t37 = super.{self::Base::[]}(#t36) in #t37 == null ?{core::int*} let final core::int* #t38 = self::getInt() in let final void #t39 = super.{self::Base::[]=}(#t36, #t38) in #t38 : #t37;
+    core::num* v5 = let final core::String* #t40 = "x" in let final core::int* #t41 = super.{self::Base::[]}(#t40) in #t41 == null ?{core::num*} let final core::num* #t42 = self::getNum() in let final void #t43 = super.{self::Base::[]=}(#t40, #t42) in #t42 : #t41;
+    core::num* v6 = let final core::String* #t44 = "x" in let final core::int* #t45 = super.{self::Base::[]}(#t44) in #t45 == null ?{core::num*} let final core::double* #t46 = self::getDouble() in let final void #t47 = super.{self::Base::[]=}(#t44, #t46) in #t46 : #t45;
+    core::int* v7 = let final core::String* #t48 = "x" in let final core::int* #t49 = super.{self::Base::[]}(#t48).{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t50 = super.{self::Base::[]=}(#t48, #t49) in #t49;
+    core::num* v8 = let final core::String* #t51 = "x" in let final core::num* #t52 = super.{self::Base::[]}(#t51).{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t53 = super.{self::Base::[]=}(#t51, #t52) in #t52;
+    core::double* v9 = let final core::String* #t54 = "x" in let final core::double* #t55 = super.{self::Base::[]}(#t54).{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t56 = super.{self::Base::[]=}(#t54, #t55) in #t55;
+    core::int* v10 = let final core::String* #t57 = "x" in let final core::int* #t58 = super.{self::Base::[]}(#t57).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t59 = super.{self::Base::[]=}(#t57, #t58) in #t58;
+    core::int* v11 = let final core::String* #t60 = "x" in let final core::int* #t61 = super.{self::Base::[]}(#t60) in let final void #t62 = super.{self::Base::[]=}(#t60, #t61.{core::num::+}(1){(core::num*) →* core::int*}) in #t61;
+  }
+}
+abstract class Test3 extends self::Base<core::int*, core::double*> {
+  synthetic constructor •() → self::Test3*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::num* v2 = let final core::String* #t63 = "x" in let final core::num* #t64 = self::getNum() as{TypeError} core::double* in let final void #t65 = super.{self::Base::[]=}(#t63, #t64) in #t64;
+    core::double* v3 = let final core::String* #t66 = "x" in let final core::double* #t67 = self::getDouble() in let final void #t68 = super.{self::Base::[]=}(#t66, #t67) in #t67;
+    core::num* v5 = let final core::String* #t69 = "x" in let final core::int* #t70 = super.{self::Base::[]}(#t69) in #t70 == null ?{core::num*} let final core::num* #t71 = self::getNum() as{TypeError} core::double* in let final void #t72 = super.{self::Base::[]=}(#t69, #t71) in #t71 : #t70;
+    core::num* v6 = let final core::String* #t73 = "x" in let final core::int* #t74 = super.{self::Base::[]}(#t73) in #t74 == null ?{core::num*} let final core::double* #t75 = self::getDouble() in let final void #t76 = super.{self::Base::[]=}(#t73, #t75) in #t75 : #t74;
+    core::int* v7 = let final core::String* #t77 = "x" in let final core::int* #t78 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:106:31: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+            /*@target=num.+*/ += getInt();
+                              ^" in super.{self::Base::[]}(#t77).{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t79 = super.{self::Base::[]=}(#t77, #t78) in #t78;
+    core::num* v8 = let final core::String* #t80 = "x" in let final core::num* #t81 = super.{self::Base::[]}(#t80).{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t82 = super.{self::Base::[]=}(#t80, #t81) in #t81;
+    core::double* v9 = let final core::String* #t83 = "x" in let final core::double* #t84 = super.{self::Base::[]}(#t83).{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t85 = super.{self::Base::[]=}(#t83, #t84) in #t84;
+    core::int* v10 = let final core::String* #t86 = "x" in let final core::int* #t87 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:116:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+    var /*@ type=int* */ v10 = /*@target=num.+*/ ++super
+                                                 ^" in super.{self::Base::[]}(#t86).{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t88 = super.{self::Base::[]=}(#t86, #t87) in #t87;
+    core::int* v11 = let final core::String* #t89 = "x" in let final core::int* #t90 = super.{self::Base::[]}(#t89) in let final void #t91 = super.{self::Base::[]=}(#t89, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:120:33: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+        ['x'] /*@target=num.+*/ ++;
+                                ^" in #t90.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*) in #t90;
+  }
+}
+abstract class Test4 extends self::Base<core::num*, core::int*> {
+  synthetic constructor •() → self::Test4*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int* v1 = let final core::String* #t92 = "x" in let final core::int* #t93 = self::getInt() in let final void #t94 = super.{self::Base::[]=}(#t92, #t93) in #t93;
+    core::num* v2 = let final core::String* #t95 = "x" in let final core::num* #t96 = self::getNum() as{TypeError} core::int* in let final void #t97 = super.{self::Base::[]=}(#t95, #t96) in #t96;
+    core::num* v4 = let final core::String* #t98 = "x" in let final core::num* #t99 = super.{self::Base::[]}(#t98) in #t99 == null ?{core::num*} let final core::int* #t100 = self::getInt() in let final void #t101 = super.{self::Base::[]=}(#t98, #t100) in #t100 : #t99;
+    core::num* v5 = let final core::String* #t102 = "x" in let final core::num* #t103 = super.{self::Base::[]}(#t102) in #t103 == null ?{core::num*} let final core::num* #t104 = self::getNum() as{TypeError} core::int* in let final void #t105 = super.{self::Base::[]=}(#t102, #t104) in #t104 : #t103;
+    core::num* v7 = let final core::String* #t106 = "x" in let final core::num* #t107 = super.{self::Base::[]}(#t106).{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t108 = super.{self::Base::[]=}(#t106, #t107) in #t107;
+    core::num* v8 = let final core::String* #t109 = "x" in let final core::num* #t110 = super.{self::Base::[]}(#t109).{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t111 = super.{self::Base::[]=}(#t109, #t110) in #t110;
+    core::num* v10 = let final core::String* #t112 = "x" in let final core::num* #t113 = super.{self::Base::[]}(#t112).{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t114 = super.{self::Base::[]=}(#t112, #t113) in #t113;
+    core::num* v11 = let final core::String* #t115 = "x" in let final core::num* #t116 = super.{self::Base::[]}(#t115) in let final void #t117 = super.{self::Base::[]=}(#t115, #t116.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int*) in #t116;
+  }
+}
+abstract class Test5 extends self::Base<core::num*, core::num*> {
+  synthetic constructor •() → self::Test5*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int* v1 = let final core::String* #t118 = "x" in let final core::int* #t119 = self::getInt() in let final void #t120 = super.{self::Base::[]=}(#t118, #t119) in #t119;
+    core::num* v2 = let final core::String* #t121 = "x" in let final core::num* #t122 = self::getNum() in let final void #t123 = super.{self::Base::[]=}(#t121, #t122) in #t122;
+    core::double* v3 = let final core::String* #t124 = "x" in let final core::double* #t125 = self::getDouble() in let final void #t126 = super.{self::Base::[]=}(#t124, #t125) in #t125;
+    core::num* v4 = let final core::String* #t127 = "x" in let final core::num* #t128 = super.{self::Base::[]}(#t127) in #t128 == null ?{core::num*} let final core::int* #t129 = self::getInt() in let final void #t130 = super.{self::Base::[]=}(#t127, #t129) in #t129 : #t128;
+    core::num* v5 = let final core::String* #t131 = "x" in let final core::num* #t132 = super.{self::Base::[]}(#t131) in #t132 == null ?{core::num*} let final core::num* #t133 = self::getNum() in let final void #t134 = super.{self::Base::[]=}(#t131, #t133) in #t133 : #t132;
+    core::num* v6 = let final core::String* #t135 = "x" in let final core::num* #t136 = super.{self::Base::[]}(#t135) in #t136 == null ?{core::num*} let final core::double* #t137 = self::getDouble() in let final void #t138 = super.{self::Base::[]=}(#t135, #t137) in #t137 : #t136;
+    core::num* v7 = let final core::String* #t139 = "x" in let final core::num* #t140 = super.{self::Base::[]}(#t139).{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t141 = super.{self::Base::[]=}(#t139, #t140) in #t140;
+    core::num* v8 = let final core::String* #t142 = "x" in let final core::num* #t143 = super.{self::Base::[]}(#t142).{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t144 = super.{self::Base::[]=}(#t142, #t143) in #t143;
+    core::num* v9 = let final core::String* #t145 = "x" in let final core::num* #t146 = super.{self::Base::[]}(#t145).{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t147 = super.{self::Base::[]=}(#t145, #t146) in #t146;
+    core::num* v10 = let final core::String* #t148 = "x" in let final core::num* #t149 = super.{self::Base::[]}(#t148).{core::num::+}(1){(core::num*) →* core::num*} in let final void #t150 = super.{self::Base::[]=}(#t148, #t149) in #t149;
+    core::num* v11 = let final core::String* #t151 = "x" in let final core::num* #t152 = super.{self::Base::[]}(#t151) in let final void #t153 = super.{self::Base::[]=}(#t151, #t152.{core::num::+}(1){(core::num*) →* core::num*}) in #t152;
+  }
+}
+abstract class Test6 extends self::Base<core::num*, core::double*> {
+  synthetic constructor •() → self::Test6*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::num* v2 = let final core::String* #t154 = "x" in let final core::num* #t155 = self::getNum() as{TypeError} core::double* in let final void #t156 = super.{self::Base::[]=}(#t154, #t155) in #t155;
+    core::double* v3 = let final core::String* #t157 = "x" in let final core::double* #t158 = self::getDouble() in let final void #t159 = super.{self::Base::[]=}(#t157, #t158) in #t158;
+    core::num* v5 = let final core::String* #t160 = "x" in let final core::num* #t161 = super.{self::Base::[]}(#t160) in #t161 == null ?{core::num*} let final core::num* #t162 = self::getNum() as{TypeError} core::double* in let final void #t163 = super.{self::Base::[]=}(#t160, #t162) in #t162 : #t161;
+    core::num* v6 = let final core::String* #t164 = "x" in let final core::num* #t165 = super.{self::Base::[]}(#t164) in #t165 == null ?{core::num*} let final core::double* #t166 = self::getDouble() in let final void #t167 = super.{self::Base::[]=}(#t164, #t166) in #t166 : #t165;
+    core::num* v7 = let final core::String* #t168 = "x" in let final core::num* #t169 = super.{self::Base::[]}(#t168).{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t170 = super.{self::Base::[]=}(#t168, #t169) in #t169;
+    core::num* v8 = let final core::String* #t171 = "x" in let final core::num* #t172 = super.{self::Base::[]}(#t171).{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t173 = super.{self::Base::[]=}(#t171, #t172) in #t172;
+    core::num* v9 = let final core::String* #t174 = "x" in let final core::num* #t175 = super.{self::Base::[]}(#t174).{core::num::+}(self::getDouble()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t176 = super.{self::Base::[]=}(#t174, #t175) in #t175;
+    core::num* v10 = let final core::String* #t177 = "x" in let final core::num* #t178 = super.{self::Base::[]}(#t177).{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t179 = super.{self::Base::[]=}(#t177, #t178) in #t178;
+    core::num* v11 = let final core::String* #t180 = "x" in let final core::num* #t181 = super.{self::Base::[]}(#t180) in let final void #t182 = super.{self::Base::[]=}(#t180, #t181.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double*) in #t181;
+  }
+}
+abstract class Test7 extends self::Base<core::double*, core::int*> {
+  synthetic constructor •() → self::Test7*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int* v1 = let final core::String* #t183 = "x" in let final core::int* #t184 = self::getInt() in let final void #t185 = super.{self::Base::[]=}(#t183, #t184) in #t184;
+    core::num* v2 = let final core::String* #t186 = "x" in let final core::num* #t187 = self::getNum() as{TypeError} core::int* in let final void #t188 = super.{self::Base::[]=}(#t186, #t187) in #t187;
+    core::num* v4 = let final core::String* #t189 = "x" in let final core::double* #t190 = super.{self::Base::[]}(#t189) in #t190 == null ?{core::num*} let final core::int* #t191 = self::getInt() in let final void #t192 = super.{self::Base::[]=}(#t189, #t191) in #t191 : #t190;
+    core::num* v5 = let final core::String* #t193 = "x" in let final core::double* #t194 = super.{self::Base::[]}(#t193) in #t194 == null ?{core::num*} let final core::num* #t195 = self::getNum() as{TypeError} core::int* in let final void #t196 = super.{self::Base::[]=}(#t193, #t195) in #t195 : #t194;
+    core::double* v7 = let final core::String* #t197 = "x" in let final core::double* #t198 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:244:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+            /*@target=double.+*/ += getInt();
+                                 ^" in super.{self::Base::[]}(#t197).{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t199 = super.{self::Base::[]=}(#t197, #t198) in #t198;
+    core::double* v8 = let final core::String* #t200 = "x" in let final core::double* #t201 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:248:34: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+            /*@target=double.+*/ += getNum();
+                                 ^" in super.{self::Base::[]}(#t200).{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t202 = super.{self::Base::[]=}(#t200, #t201) in #t201;
+    core::double* v10 = let final core::String* #t203 = "x" in let final core::double* #t204 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:250:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    var /*@ type=double* */ v10 = /*@target=double.+*/ ++super
+                                                       ^" in super.{self::Base::[]}(#t203).{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t205 = super.{self::Base::[]=}(#t203, #t204) in #t204;
+    core::double* v11 = let final core::String* #t206 = "x" in let final core::double* #t207 = super.{self::Base::[]}(#t206) in let final void #t208 = super.{self::Base::[]=}(#t206, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:254:36: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+        ['x'] /*@target=double.+*/ ++;
+                                   ^" in #t207.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*) in #t207;
+  }
+}
+abstract class Test8 extends self::Base<core::double*, core::num*> {
+  synthetic constructor •() → self::Test8*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int* v1 = let final core::String* #t209 = "x" in let final core::int* #t210 = self::getInt() in let final void #t211 = super.{self::Base::[]=}(#t209, #t210) in #t210;
+    core::num* v2 = let final core::String* #t212 = "x" in let final core::num* #t213 = self::getNum() in let final void #t214 = super.{self::Base::[]=}(#t212, #t213) in #t213;
+    core::double* v3 = let final core::String* #t215 = "x" in let final core::double* #t216 = self::getDouble() in let final void #t217 = super.{self::Base::[]=}(#t215, #t216) in #t216;
+    core::num* v4 = let final core::String* #t218 = "x" in let final core::double* #t219 = super.{self::Base::[]}(#t218) in #t219 == null ?{core::num*} let final core::int* #t220 = self::getInt() in let final void #t221 = super.{self::Base::[]=}(#t218, #t220) in #t220 : #t219;
+    core::num* v5 = let final core::String* #t222 = "x" in let final core::double* #t223 = super.{self::Base::[]}(#t222) in #t223 == null ?{core::num*} let final core::num* #t224 = self::getNum() in let final void #t225 = super.{self::Base::[]=}(#t222, #t224) in #t224 : #t223;
+    core::double* v6 = let final core::String* #t226 = "x" in let final core::double* #t227 = super.{self::Base::[]}(#t226) in #t227 == null ?{core::double*} let final core::double* #t228 = self::getDouble() in let final void #t229 = super.{self::Base::[]=}(#t226, #t228) in #t228 : #t227;
+    core::double* v7 = let final core::String* #t230 = "x" in let final core::double* #t231 = super.{self::Base::[]}(#t230).{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t232 = super.{self::Base::[]=}(#t230, #t231) in #t231;
+    core::double* v8 = let final core::String* #t233 = "x" in let final core::double* #t234 = super.{self::Base::[]}(#t233).{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t235 = super.{self::Base::[]=}(#t233, #t234) in #t234;
+    core::double* v9 = let final core::String* #t236 = "x" in let final core::double* #t237 = super.{self::Base::[]}(#t236).{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t238 = super.{self::Base::[]=}(#t236, #t237) in #t237;
+    core::double* v10 = let final core::String* #t239 = "x" in let final core::double* #t240 = super.{self::Base::[]}(#t239).{core::double::+}(1){(core::num*) →* core::double*} in let final void #t241 = super.{self::Base::[]=}(#t239, #t240) in #t240;
+    core::double* v11 = let final core::String* #t242 = "x" in let final core::double* #t243 = super.{self::Base::[]}(#t242) in let final void #t244 = super.{self::Base::[]=}(#t242, #t243.{core::double::+}(1){(core::num*) →* core::double*}) in #t243;
+  }
+}
+abstract class Test9 extends self::Base<core::double*, core::double*> {
+  synthetic constructor •() → self::Test9*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::num* v2 = let final core::String* #t245 = "x" in let final core::num* #t246 = self::getNum() as{TypeError} core::double* in let final void #t247 = super.{self::Base::[]=}(#t245, #t246) in #t246;
+    core::double* v3 = let final core::String* #t248 = "x" in let final core::double* #t249 = self::getDouble() in let final void #t250 = super.{self::Base::[]=}(#t248, #t249) in #t249;
+    core::num* v5 = let final core::String* #t251 = "x" in let final core::double* #t252 = super.{self::Base::[]}(#t251) in #t252 == null ?{core::num*} let final core::num* #t253 = self::getNum() as{TypeError} core::double* in let final void #t254 = super.{self::Base::[]=}(#t251, #t253) in #t253 : #t252;
+    core::double* v6 = let final core::String* #t255 = "x" in let final core::double* #t256 = super.{self::Base::[]}(#t255) in #t256 == null ?{core::double*} let final core::double* #t257 = self::getDouble() in let final void #t258 = super.{self::Base::[]=}(#t255, #t257) in #t257 : #t256;
+    core::double* v7 = let final core::String* #t259 = "x" in let final core::double* #t260 = super.{self::Base::[]}(#t259).{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t261 = super.{self::Base::[]=}(#t259, #t260) in #t260;
+    core::double* v8 = let final core::String* #t262 = "x" in let final core::double* #t263 = super.{self::Base::[]}(#t262).{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t264 = super.{self::Base::[]=}(#t262, #t263) in #t263;
+    core::double* v9 = let final core::String* #t265 = "x" in let final core::double* #t266 = super.{self::Base::[]}(#t265).{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t267 = super.{self::Base::[]=}(#t265, #t266) in #t266;
+    core::double* v10 = let final core::String* #t268 = "x" in let final core::double* #t269 = super.{self::Base::[]}(#t268).{core::double::+}(1){(core::num*) →* core::double*} in let final void #t270 = super.{self::Base::[]=}(#t268, #t269) in #t269;
+    core::double* v11 = let final core::String* #t271 = "x" in let final core::double* #t272 = super.{self::Base::[]}(#t271) in let final void #t273 = super.{self::Base::[]=}(#t271, #t272.{core::double::+}(1){(core::num*) →* core::double*}) in #t272;
+  }
+}
+static method getInt() → core::int*
+  return 0;
+static method getNum() → core::num*
+  return 0;
+static method getDouble() → core::double*
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.weak.modular.expect
new file mode 100644
index 0000000..0202be1
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.weak.modular.expect
@@ -0,0 +1,89 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Index extends core::Object {
+  synthetic constructor •() → self::Index*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  synthetic constructor •() → self::Test*
+    : super core::Object::•()
+    ;
+  operator [](self::Index* i) → self::B*
+    return null;
+  operator []=(self::Index* i, self::B* v) → void {}
+  method test() → void {
+    this.{self::Test::[]=}(self::f<self::Index*>(), self::f<self::B*>()){(self::Index*, self::B*) →* void};
+    let final self::Index* #t1 = self::f<self::Index*>() in this.{self::Test::[]}(#t1){(self::Index*) →* self::B*} == null ?{self::B*} this.{self::Test::[]=}(#t1, self::f<self::B*>()){(self::Index*, self::B*) →* void} : null;
+    let final self::Index* #t2 = self::f<self::Index*>() in this.{self::Test::[]=}(#t2, this.{self::Test::[]}(#t2){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*){(self::Index*, self::B*) →* void};
+    let final self::Index* #t3 = self::f<self::Index*>() in this.{self::Test::[]=}(#t3, this.{self::Test::[]}(#t3){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*}){(self::Index*, self::B*) →* void};
+    let final self::Index* #t4 = self::f<self::Index*>() in this.{self::Test::[]=}(#t4, this.{self::Test::[]}(#t4){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*}){(self::Index*, self::B*) →* void};
+    let final self::Index* #t5 = self::f<self::Index*>() in let final self::B* #t6 = this.{self::Test::[]}(#t5){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t7 = this.{self::Test::[]=}(#t5, #t6){(self::Index*, self::B*) →* void} in #t6;
+    let final self::Index* #t8 = self::f<self::Index*>() in this.{self::Test::[]=}(#t8, this.{self::Test::[]}(#t8){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void};
+    self::B* v1 = let final self::Index* #t9 = self::f<self::Index*>() in let final self::B* #t10 = self::f<self::B*>() in let final void #t11 = this.{self::Test::[]=}(#t9, #t10){(self::Index*, self::B*) →* void} in #t10;
+    self::B* v2 = let final self::Index* #t12 = self::f<self::Index*>() in let final self::B* #t13 = this.{self::Test::[]}(#t12){(self::Index*) →* self::B*} in #t13 == null ?{self::B*} let final self::B* #t14 = self::f<self::B*>() in let final void #t15 = this.{self::Test::[]=}(#t12, #t14){(self::Index*, self::B*) →* void} in #t14 : #t13;
+    self::A* v3 = let final self::Index* #t16 = self::f<self::Index*>() in let final self::A* #t17 = this.{self::Test::[]}(#t16){(self::Index*) →* self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t18 = this.{self::Test::[]=}(#t16, #t17){(self::Index*, self::B*) →* void} in #t17;
+    self::B* v4 = let final self::Index* #t19 = self::f<self::Index*>() in let final self::B* #t20 = this.{self::Test::[]}(#t19){(self::Index*) →* self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t21 = this.{self::Test::[]=}(#t19, #t20){(self::Index*, self::B*) →* void} in #t20;
+    self::C* v5 = let final self::Index* #t22 = self::f<self::Index*>() in let final self::C* #t23 = this.{self::Test::[]}(#t22){(self::Index*) →* self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t24 = this.{self::Test::[]=}(#t22, #t23){(self::Index*, self::B*) →* void} in #t23;
+    self::B* v6 = let final self::Index* #t25 = self::f<self::Index*>() in let final self::B* #t26 = this.{self::Test::[]}(#t25){(self::Index*) →* self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t27 = this.{self::Test::[]=}(#t25, #t26){(self::Index*, self::B*) →* void} in #t26;
+    self::B* v7 = let final self::Index* #t28 = self::f<self::Index*>() in let final self::B* #t29 = this.{self::Test::[]}(#t28){(self::Index*) →* self::B*} in let final void #t30 = this.{self::Test::[]=}(#t28, #t29.{self::B::-}(1){(core::int*) →* self::B*}){(self::Index*, self::B*) →* void} in #t29;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..99a0822
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.weak.modular.expect
@@ -0,0 +1,311 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:109:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+//         /*@target=num.+*/ += getInt();
+//                           ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:119:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+//     var /*@ type=int* */ v10 = /*@target=num.+*/ ++this
+//                                                  ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:124:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+//         /*@target=num.+*/ ++;
+//                           ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:264:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//         /*@target=double.+*/ += getInt();
+//                              ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:268:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//         /*@target=double.+*/ += getNum();
+//                              ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:270:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//     var /*@ type=double* */ v10 = /*@target=double.+*/ ++this
+//                                                        ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:275:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//         /*@target=double.+*/ ++;
+//                              ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Test1 extends core::Object {
+  synthetic constructor •() → self::Test1*
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String* s) → core::int*;
+  abstract operator []=(core::String* s, core::int* v) → void;
+  method test() → void {
+    core::int* v1 = let final core::String* #t1 = "x" in let final core::int* #t2 = self::getInt() in let final void #t3 = this.{self::Test1::[]=}(#t1, #t2){(core::String*, core::int*) →* void} in #t2;
+    core::num* v2 = let final core::String* #t4 = "x" in let final core::num* #t5 = self::getNum() as{TypeError} core::int* in let final void #t6 = this.{self::Test1::[]=}(#t4, #t5){(core::String*, core::int*) →* void} in #t5;
+    core::int* v4 = let final core::String* #t7 = "x" in let final core::int* #t8 = this.{self::Test1::[]}(#t7){(core::String*) →* core::int*} in #t8 == null ?{core::int*} let final core::int* #t9 = self::getInt() in let final void #t10 = this.{self::Test1::[]=}(#t7, #t9){(core::String*, core::int*) →* void} in #t9 : #t8;
+    core::num* v5 = let final core::String* #t11 = "x" in let final core::int* #t12 = this.{self::Test1::[]}(#t11){(core::String*) →* core::int*} in #t12 == null ?{core::num*} let final core::num* #t13 = self::getNum() as{TypeError} core::int* in let final void #t14 = this.{self::Test1::[]=}(#t11, #t13){(core::String*, core::int*) →* void} in #t13 : #t12;
+    core::int* v7 = let final core::String* #t15 = "x" in let final core::int* #t16 = this.{self::Test1::[]}(#t15){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t17 = this.{self::Test1::[]=}(#t15, #t16){(core::String*, core::int*) →* void} in #t16;
+    core::num* v8 = let final core::String* #t18 = "x" in let final core::num* #t19 = this.{self::Test1::[]}(#t18){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t20 = this.{self::Test1::[]=}(#t18, #t19){(core::String*, core::int*) →* void} in #t19;
+    core::int* v10 = let final core::String* #t21 = "x" in let final core::int* #t22 = this.{self::Test1::[]}(#t21){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t23 = this.{self::Test1::[]=}(#t21, #t22){(core::String*, core::int*) →* void} in #t22;
+    core::int* v11 = let final core::String* #t24 = "x" in let final core::int* #t25 = this.{self::Test1::[]}(#t24){(core::String*) →* core::int*} in let final void #t26 = this.{self::Test1::[]=}(#t24, #t25.{core::num::+}(1){(core::num*) →* core::int*}){(core::String*, core::int*) →* void} in #t25;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Test2 extends core::Object {
+  synthetic constructor •() → self::Test2*
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String* s) → core::int*;
+  abstract operator []=(core::String* s, core::num* v) → void;
+  method test() → void {
+    core::int* v1 = let final core::String* #t27 = "x" in let final core::int* #t28 = self::getInt() in let final void #t29 = this.{self::Test2::[]=}(#t27, #t28){(core::String*, core::num*) →* void} in #t28;
+    core::num* v2 = let final core::String* #t30 = "x" in let final core::num* #t31 = self::getNum() in let final void #t32 = this.{self::Test2::[]=}(#t30, #t31){(core::String*, core::num*) →* void} in #t31;
+    core::double* v3 = let final core::String* #t33 = "x" in let final core::double* #t34 = self::getDouble() in let final void #t35 = this.{self::Test2::[]=}(#t33, #t34){(core::String*, core::num*) →* void} in #t34;
+    core::int* v4 = let final core::String* #t36 = "x" in let final core::int* #t37 = this.{self::Test2::[]}(#t36){(core::String*) →* core::int*} in #t37 == null ?{core::int*} let final core::int* #t38 = self::getInt() in let final void #t39 = this.{self::Test2::[]=}(#t36, #t38){(core::String*, core::num*) →* void} in #t38 : #t37;
+    core::num* v5 = let final core::String* #t40 = "x" in let final core::int* #t41 = this.{self::Test2::[]}(#t40){(core::String*) →* core::int*} in #t41 == null ?{core::num*} let final core::num* #t42 = self::getNum() in let final void #t43 = this.{self::Test2::[]=}(#t40, #t42){(core::String*, core::num*) →* void} in #t42 : #t41;
+    core::num* v6 = let final core::String* #t44 = "x" in let final core::int* #t45 = this.{self::Test2::[]}(#t44){(core::String*) →* core::int*} in #t45 == null ?{core::num*} let final core::double* #t46 = self::getDouble() in let final void #t47 = this.{self::Test2::[]=}(#t44, #t46){(core::String*, core::num*) →* void} in #t46 : #t45;
+    core::int* v7 = let final core::String* #t48 = "x" in let final core::int* #t49 = this.{self::Test2::[]}(#t48){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t50 = this.{self::Test2::[]=}(#t48, #t49){(core::String*, core::num*) →* void} in #t49;
+    core::num* v8 = let final core::String* #t51 = "x" in let final core::num* #t52 = this.{self::Test2::[]}(#t51){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t53 = this.{self::Test2::[]=}(#t51, #t52){(core::String*, core::num*) →* void} in #t52;
+    core::double* v9 = let final core::String* #t54 = "x" in let final core::double* #t55 = this.{self::Test2::[]}(#t54){(core::String*) →* core::int*}.{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t56 = this.{self::Test2::[]=}(#t54, #t55){(core::String*, core::num*) →* void} in #t55;
+    core::int* v10 = let final core::String* #t57 = "x" in let final core::int* #t58 = this.{self::Test2::[]}(#t57){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t59 = this.{self::Test2::[]=}(#t57, #t58){(core::String*, core::num*) →* void} in #t58;
+    core::int* v11 = let final core::String* #t60 = "x" in let final core::int* #t61 = this.{self::Test2::[]}(#t60){(core::String*) →* core::int*} in let final void #t62 = this.{self::Test2::[]=}(#t60, #t61.{core::num::+}(1){(core::num*) →* core::int*}){(core::String*, core::num*) →* void} in #t61;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Test3 extends core::Object {
+  synthetic constructor •() → self::Test3*
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String* s) → core::int*;
+  abstract operator []=(core::String* s, core::double* v) → void;
+  method test() → void {
+    core::num* v2 = let final core::String* #t63 = "x" in let final core::num* #t64 = self::getNum() as{TypeError} core::double* in let final void #t65 = this.{self::Test3::[]=}(#t63, #t64){(core::String*, core::double*) →* void} in #t64;
+    core::double* v3 = let final core::String* #t66 = "x" in let final core::double* #t67 = self::getDouble() in let final void #t68 = this.{self::Test3::[]=}(#t66, #t67){(core::String*, core::double*) →* void} in #t67;
+    core::num* v5 = let final core::String* #t69 = "x" in let final core::int* #t70 = this.{self::Test3::[]}(#t69){(core::String*) →* core::int*} in #t70 == null ?{core::num*} let final core::num* #t71 = self::getNum() as{TypeError} core::double* in let final void #t72 = this.{self::Test3::[]=}(#t69, #t71){(core::String*, core::double*) →* void} in #t71 : #t70;
+    core::num* v6 = let final core::String* #t73 = "x" in let final core::int* #t74 = this.{self::Test3::[]}(#t73){(core::String*) →* core::int*} in #t74 == null ?{core::num*} let final core::double* #t75 = self::getDouble() in let final void #t76 = this.{self::Test3::[]=}(#t73, #t75){(core::String*, core::double*) →* void} in #t75 : #t74;
+    core::int* v7 = let final core::String* #t77 = "x" in let final core::int* #t78 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:109:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+        /*@target=num.+*/ += getInt();
+                          ^" in this.{self::Test3::[]}(#t77){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t79 = this.{self::Test3::[]=}(#t77, #t78){(core::String*, core::double*) →* void} in #t78;
+    core::num* v8 = let final core::String* #t80 = "x" in let final core::num* #t81 = this.{self::Test3::[]}(#t80){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t82 = this.{self::Test3::[]=}(#t80, #t81){(core::String*, core::double*) →* void} in #t81;
+    core::double* v9 = let final core::String* #t83 = "x" in let final core::double* #t84 = this.{self::Test3::[]}(#t83){(core::String*) →* core::int*}.{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t85 = this.{self::Test3::[]=}(#t83, #t84){(core::String*, core::double*) →* void} in #t84;
+    core::int* v10 = let final core::String* #t86 = "x" in let final core::int* #t87 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:119:50: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+    var /*@ type=int* */ v10 = /*@target=num.+*/ ++this
+                                                 ^" in this.{self::Test3::[]}(#t86){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t88 = this.{self::Test3::[]=}(#t86, #t87){(core::String*, core::double*) →* void} in #t87;
+    core::int* v11 = let final core::String* #t89 = "x" in let final core::int* #t90 = this.{self::Test3::[]}(#t89){(core::String*) →* core::int*} in let final void #t91 = this.{self::Test3::[]=}(#t89, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:124:27: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+        /*@target=num.+*/ ++;
+                          ^" in #t90.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t90;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Test4 extends core::Object {
+  synthetic constructor •() → self::Test4*
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String* s) → core::num*;
+  abstract operator []=(core::String* s, core::int* v) → void;
+  method test() → void {
+    core::int* v1 = let final core::String* #t92 = "x" in let final core::int* #t93 = self::getInt() in let final void #t94 = this.{self::Test4::[]=}(#t92, #t93){(core::String*, core::int*) →* void} in #t93;
+    core::num* v2 = let final core::String* #t95 = "x" in let final core::num* #t96 = self::getNum() as{TypeError} core::int* in let final void #t97 = this.{self::Test4::[]=}(#t95, #t96){(core::String*, core::int*) →* void} in #t96;
+    core::num* v4 = let final core::String* #t98 = "x" in let final core::num* #t99 = this.{self::Test4::[]}(#t98){(core::String*) →* core::num*} in #t99 == null ?{core::num*} let final core::int* #t100 = self::getInt() in let final void #t101 = this.{self::Test4::[]=}(#t98, #t100){(core::String*, core::int*) →* void} in #t100 : #t99;
+    core::num* v5 = let final core::String* #t102 = "x" in let final core::num* #t103 = this.{self::Test4::[]}(#t102){(core::String*) →* core::num*} in #t103 == null ?{core::num*} let final core::num* #t104 = self::getNum() as{TypeError} core::int* in let final void #t105 = this.{self::Test4::[]=}(#t102, #t104){(core::String*, core::int*) →* void} in #t104 : #t103;
+    core::num* v7 = let final core::String* #t106 = "x" in let final core::num* #t107 = this.{self::Test4::[]}(#t106){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t108 = this.{self::Test4::[]=}(#t106, #t107){(core::String*, core::int*) →* void} in #t107;
+    core::num* v8 = let final core::String* #t109 = "x" in let final core::num* #t110 = this.{self::Test4::[]}(#t109){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t111 = this.{self::Test4::[]=}(#t109, #t110){(core::String*, core::int*) →* void} in #t110;
+    core::num* v10 = let final core::String* #t112 = "x" in let final core::num* #t113 = this.{self::Test4::[]}(#t112){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t114 = this.{self::Test4::[]=}(#t112, #t113){(core::String*, core::int*) →* void} in #t113;
+    core::num* v11 = let final core::String* #t115 = "x" in let final core::num* #t116 = this.{self::Test4::[]}(#t115){(core::String*) →* core::num*} in let final void #t117 = this.{self::Test4::[]=}(#t115, #t116.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t116;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Test5 extends core::Object {
+  synthetic constructor •() → self::Test5*
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String* s) → core::num*;
+  abstract operator []=(core::String* s, core::num* v) → void;
+  method test() → void {
+    core::int* v1 = let final core::String* #t118 = "x" in let final core::int* #t119 = self::getInt() in let final void #t120 = this.{self::Test5::[]=}(#t118, #t119){(core::String*, core::num*) →* void} in #t119;
+    core::num* v2 = let final core::String* #t121 = "x" in let final core::num* #t122 = self::getNum() in let final void #t123 = this.{self::Test5::[]=}(#t121, #t122){(core::String*, core::num*) →* void} in #t122;
+    core::double* v3 = let final core::String* #t124 = "x" in let final core::double* #t125 = self::getDouble() in let final void #t126 = this.{self::Test5::[]=}(#t124, #t125){(core::String*, core::num*) →* void} in #t125;
+    core::num* v4 = let final core::String* #t127 = "x" in let final core::num* #t128 = this.{self::Test5::[]}(#t127){(core::String*) →* core::num*} in #t128 == null ?{core::num*} let final core::int* #t129 = self::getInt() in let final void #t130 = this.{self::Test5::[]=}(#t127, #t129){(core::String*, core::num*) →* void} in #t129 : #t128;
+    core::num* v5 = let final core::String* #t131 = "x" in let final core::num* #t132 = this.{self::Test5::[]}(#t131){(core::String*) →* core::num*} in #t132 == null ?{core::num*} let final core::num* #t133 = self::getNum() in let final void #t134 = this.{self::Test5::[]=}(#t131, #t133){(core::String*, core::num*) →* void} in #t133 : #t132;
+    core::num* v6 = let final core::String* #t135 = "x" in let final core::num* #t136 = this.{self::Test5::[]}(#t135){(core::String*) →* core::num*} in #t136 == null ?{core::num*} let final core::double* #t137 = self::getDouble() in let final void #t138 = this.{self::Test5::[]=}(#t135, #t137){(core::String*, core::num*) →* void} in #t137 : #t136;
+    core::num* v7 = let final core::String* #t139 = "x" in let final core::num* #t140 = this.{self::Test5::[]}(#t139){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t141 = this.{self::Test5::[]=}(#t139, #t140){(core::String*, core::num*) →* void} in #t140;
+    core::num* v8 = let final core::String* #t142 = "x" in let final core::num* #t143 = this.{self::Test5::[]}(#t142){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t144 = this.{self::Test5::[]=}(#t142, #t143){(core::String*, core::num*) →* void} in #t143;
+    core::num* v9 = let final core::String* #t145 = "x" in let final core::num* #t146 = this.{self::Test5::[]}(#t145){(core::String*) →* core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t147 = this.{self::Test5::[]=}(#t145, #t146){(core::String*, core::num*) →* void} in #t146;
+    core::num* v10 = let final core::String* #t148 = "x" in let final core::num* #t149 = this.{self::Test5::[]}(#t148){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t150 = this.{self::Test5::[]=}(#t148, #t149){(core::String*, core::num*) →* void} in #t149;
+    core::num* v11 = let final core::String* #t151 = "x" in let final core::num* #t152 = this.{self::Test5::[]}(#t151){(core::String*) →* core::num*} in let final void #t153 = this.{self::Test5::[]=}(#t151, #t152.{core::num::+}(1){(core::num*) →* core::num*}){(core::String*, core::num*) →* void} in #t152;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Test6 extends core::Object {
+  synthetic constructor •() → self::Test6*
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String* s) → core::num*;
+  abstract operator []=(core::String* s, core::double* v) → void;
+  method test() → void {
+    core::num* v2 = let final core::String* #t154 = "x" in let final core::num* #t155 = self::getNum() as{TypeError} core::double* in let final void #t156 = this.{self::Test6::[]=}(#t154, #t155){(core::String*, core::double*) →* void} in #t155;
+    core::double* v3 = let final core::String* #t157 = "x" in let final core::double* #t158 = self::getDouble() in let final void #t159 = this.{self::Test6::[]=}(#t157, #t158){(core::String*, core::double*) →* void} in #t158;
+    core::num* v5 = let final core::String* #t160 = "x" in let final core::num* #t161 = this.{self::Test6::[]}(#t160){(core::String*) →* core::num*} in #t161 == null ?{core::num*} let final core::num* #t162 = self::getNum() as{TypeError} core::double* in let final void #t163 = this.{self::Test6::[]=}(#t160, #t162){(core::String*, core::double*) →* void} in #t162 : #t161;
+    core::num* v6 = let final core::String* #t164 = "x" in let final core::num* #t165 = this.{self::Test6::[]}(#t164){(core::String*) →* core::num*} in #t165 == null ?{core::num*} let final core::double* #t166 = self::getDouble() in let final void #t167 = this.{self::Test6::[]=}(#t164, #t166){(core::String*, core::double*) →* void} in #t166 : #t165;
+    core::num* v7 = let final core::String* #t168 = "x" in let final core::num* #t169 = this.{self::Test6::[]}(#t168){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t170 = this.{self::Test6::[]=}(#t168, #t169){(core::String*, core::double*) →* void} in #t169;
+    core::num* v8 = let final core::String* #t171 = "x" in let final core::num* #t172 = this.{self::Test6::[]}(#t171){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t173 = this.{self::Test6::[]=}(#t171, #t172){(core::String*, core::double*) →* void} in #t172;
+    core::num* v9 = let final core::String* #t174 = "x" in let final core::num* #t175 = this.{self::Test6::[]}(#t174){(core::String*) →* core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t176 = this.{self::Test6::[]=}(#t174, #t175){(core::String*, core::double*) →* void} in #t175;
+    core::num* v10 = let final core::String* #t177 = "x" in let final core::num* #t178 = this.{self::Test6::[]}(#t177){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t179 = this.{self::Test6::[]=}(#t177, #t178){(core::String*, core::double*) →* void} in #t178;
+    core::num* v11 = let final core::String* #t180 = "x" in let final core::num* #t181 = this.{self::Test6::[]}(#t180){(core::String*) →* core::num*} in let final void #t182 = this.{self::Test6::[]=}(#t180, #t181.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t181;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Test7 extends core::Object {
+  synthetic constructor •() → self::Test7*
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String* s) → core::double*;
+  abstract operator []=(core::String* s, core::int* v) → void;
+  method test() → void {
+    core::int* v1 = let final core::String* #t183 = "x" in let final core::int* #t184 = self::getInt() in let final void #t185 = this.{self::Test7::[]=}(#t183, #t184){(core::String*, core::int*) →* void} in #t184;
+    core::num* v2 = let final core::String* #t186 = "x" in let final core::num* #t187 = self::getNum() as{TypeError} core::int* in let final void #t188 = this.{self::Test7::[]=}(#t186, #t187){(core::String*, core::int*) →* void} in #t187;
+    core::num* v4 = let final core::String* #t189 = "x" in let final core::double* #t190 = this.{self::Test7::[]}(#t189){(core::String*) →* core::double*} in #t190 == null ?{core::num*} let final core::int* #t191 = self::getInt() in let final void #t192 = this.{self::Test7::[]=}(#t189, #t191){(core::String*, core::int*) →* void} in #t191 : #t190;
+    core::num* v5 = let final core::String* #t193 = "x" in let final core::double* #t194 = this.{self::Test7::[]}(#t193){(core::String*) →* core::double*} in #t194 == null ?{core::num*} let final core::num* #t195 = self::getNum() as{TypeError} core::int* in let final void #t196 = this.{self::Test7::[]=}(#t193, #t195){(core::String*, core::int*) →* void} in #t195 : #t194;
+    core::double* v7 = let final core::String* #t197 = "x" in let final core::double* #t198 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:264:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+        /*@target=double.+*/ += getInt();
+                             ^" in this.{self::Test7::[]}(#t197){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t199 = this.{self::Test7::[]=}(#t197, #t198){(core::String*, core::int*) →* void} in #t198;
+    core::double* v8 = let final core::String* #t200 = "x" in let final core::double* #t201 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:268:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+        /*@target=double.+*/ += getNum();
+                             ^" in this.{self::Test7::[]}(#t200){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t202 = this.{self::Test7::[]=}(#t200, #t201){(core::String*, core::int*) →* void} in #t201;
+    core::double* v10 = let final core::String* #t203 = "x" in let final core::double* #t204 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:270:56: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+    var /*@ type=double* */ v10 = /*@target=double.+*/ ++this
+                                                       ^" in this.{self::Test7::[]}(#t203){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t205 = this.{self::Test7::[]=}(#t203, #t204){(core::String*, core::int*) →* void} in #t204;
+    core::double* v11 = let final core::String* #t206 = "x" in let final core::double* #t207 = this.{self::Test7::[]}(#t206){(core::String*) →* core::double*} in let final void #t208 = this.{self::Test7::[]=}(#t206, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:275:30: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+        /*@target=double.+*/ ++;
+                             ^" in #t207.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t207;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Test8 extends core::Object {
+  synthetic constructor •() → self::Test8*
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String* s) → core::double*;
+  abstract operator []=(core::String* s, core::num* v) → void;
+  method test() → void {
+    core::int* v1 = let final core::String* #t209 = "x" in let final core::int* #t210 = self::getInt() in let final void #t211 = this.{self::Test8::[]=}(#t209, #t210){(core::String*, core::num*) →* void} in #t210;
+    core::num* v2 = let final core::String* #t212 = "x" in let final core::num* #t213 = self::getNum() in let final void #t214 = this.{self::Test8::[]=}(#t212, #t213){(core::String*, core::num*) →* void} in #t213;
+    core::double* v3 = let final core::String* #t215 = "x" in let final core::double* #t216 = self::getDouble() in let final void #t217 = this.{self::Test8::[]=}(#t215, #t216){(core::String*, core::num*) →* void} in #t216;
+    core::num* v4 = let final core::String* #t218 = "x" in let final core::double* #t219 = this.{self::Test8::[]}(#t218){(core::String*) →* core::double*} in #t219 == null ?{core::num*} let final core::int* #t220 = self::getInt() in let final void #t221 = this.{self::Test8::[]=}(#t218, #t220){(core::String*, core::num*) →* void} in #t220 : #t219;
+    core::num* v5 = let final core::String* #t222 = "x" in let final core::double* #t223 = this.{self::Test8::[]}(#t222){(core::String*) →* core::double*} in #t223 == null ?{core::num*} let final core::num* #t224 = self::getNum() in let final void #t225 = this.{self::Test8::[]=}(#t222, #t224){(core::String*, core::num*) →* void} in #t224 : #t223;
+    core::double* v6 = let final core::String* #t226 = "x" in let final core::double* #t227 = this.{self::Test8::[]}(#t226){(core::String*) →* core::double*} in #t227 == null ?{core::double*} let final core::double* #t228 = self::getDouble() in let final void #t229 = this.{self::Test8::[]=}(#t226, #t228){(core::String*, core::num*) →* void} in #t228 : #t227;
+    core::double* v7 = let final core::String* #t230 = "x" in let final core::double* #t231 = this.{self::Test8::[]}(#t230){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t232 = this.{self::Test8::[]=}(#t230, #t231){(core::String*, core::num*) →* void} in #t231;
+    core::double* v8 = let final core::String* #t233 = "x" in let final core::double* #t234 = this.{self::Test8::[]}(#t233){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t235 = this.{self::Test8::[]=}(#t233, #t234){(core::String*, core::num*) →* void} in #t234;
+    core::double* v9 = let final core::String* #t236 = "x" in let final core::double* #t237 = this.{self::Test8::[]}(#t236){(core::String*) →* core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t238 = this.{self::Test8::[]=}(#t236, #t237){(core::String*, core::num*) →* void} in #t237;
+    core::double* v10 = let final core::String* #t239 = "x" in let final core::double* #t240 = this.{self::Test8::[]}(#t239){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t241 = this.{self::Test8::[]=}(#t239, #t240){(core::String*, core::num*) →* void} in #t240;
+    core::double* v11 = let final core::String* #t242 = "x" in let final core::double* #t243 = this.{self::Test8::[]}(#t242){(core::String*) →* core::double*} in let final void #t244 = this.{self::Test8::[]=}(#t242, #t243.{core::double::+}(1){(core::num*) →* core::double*}){(core::String*, core::num*) →* void} in #t243;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Test9 extends core::Object {
+  synthetic constructor •() → self::Test9*
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String* s) → core::double*;
+  abstract operator []=(core::String* s, core::double* v) → void;
+  method test() → void {
+    core::num* v2 = let final core::String* #t245 = "x" in let final core::num* #t246 = self::getNum() as{TypeError} core::double* in let final void #t247 = this.{self::Test9::[]=}(#t245, #t246){(core::String*, core::double*) →* void} in #t246;
+    core::double* v3 = let final core::String* #t248 = "x" in let final core::double* #t249 = self::getDouble() in let final void #t250 = this.{self::Test9::[]=}(#t248, #t249){(core::String*, core::double*) →* void} in #t249;
+    core::num* v5 = let final core::String* #t251 = "x" in let final core::double* #t252 = this.{self::Test9::[]}(#t251){(core::String*) →* core::double*} in #t252 == null ?{core::num*} let final core::num* #t253 = self::getNum() as{TypeError} core::double* in let final void #t254 = this.{self::Test9::[]=}(#t251, #t253){(core::String*, core::double*) →* void} in #t253 : #t252;
+    core::double* v6 = let final core::String* #t255 = "x" in let final core::double* #t256 = this.{self::Test9::[]}(#t255){(core::String*) →* core::double*} in #t256 == null ?{core::double*} let final core::double* #t257 = self::getDouble() in let final void #t258 = this.{self::Test9::[]=}(#t255, #t257){(core::String*, core::double*) →* void} in #t257 : #t256;
+    core::double* v7 = let final core::String* #t259 = "x" in let final core::double* #t260 = this.{self::Test9::[]}(#t259){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t261 = this.{self::Test9::[]=}(#t259, #t260){(core::String*, core::double*) →* void} in #t260;
+    core::double* v8 = let final core::String* #t262 = "x" in let final core::double* #t263 = this.{self::Test9::[]}(#t262){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t264 = this.{self::Test9::[]=}(#t262, #t263){(core::String*, core::double*) →* void} in #t263;
+    core::double* v9 = let final core::String* #t265 = "x" in let final core::double* #t266 = this.{self::Test9::[]}(#t265){(core::String*) →* core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t267 = this.{self::Test9::[]=}(#t265, #t266){(core::String*, core::double*) →* void} in #t266;
+    core::double* v10 = let final core::String* #t268 = "x" in let final core::double* #t269 = this.{self::Test9::[]}(#t268){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t270 = this.{self::Test9::[]=}(#t268, #t269){(core::String*, core::double*) →* void} in #t269;
+    core::double* v11 = let final core::String* #t271 = "x" in let final core::double* #t272 = this.{self::Test9::[]}(#t271){(core::String*) →* core::double*} in let final void #t273 = this.{self::Test9::[]=}(#t271, #t272.{core::double::+}(1){(core::num*) →* core::double*}){(core::String*, core::double*) →* void} in #t272;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method getInt() → core::int*
+  return 0;
+static method getNum() → core::num*
+  return 0;
+static method getDouble() → core::double*
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..895c644
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.modular.expect
@@ -0,0 +1,175 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:90:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+//       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
+//                                                                          ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:102:25: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+//       /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
+//                         ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:105:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+//       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
+//                                                                          ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:211:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
+//                                                                             ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:215:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
+//                                                                             ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:219:28: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//       /*@target=double.+*/ ++t
+//                            ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:223:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//       t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ ++;
+//                                                                             ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Test<T extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Test<self::Test::T*, self::Test::U*>*
+    : super core::Object::•()
+    ;
+  abstract operator [](core::String* s) → self::Test::T*;
+  abstract operator []=(core::String* s, covariant-by-class self::Test::U* v) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method getInt() → core::int*
+  return 0;
+static method getNum() → core::num*
+  return 0;
+static method getDouble() → core::double*
+  return 0.0;
+static method test1(self::Test<core::int*, core::int*>* t) → void {
+  core::int* v1 = let final self::Test<core::int*, core::int*>* #t1 = t in let final core::String* #t2 = "x" in let final core::int* #t3 = self::getInt() in let final void #t4 = #t1.{self::Test::[]=}(#t2, #t3){(core::String*, core::int*) →* void} in #t3;
+  core::num* v2 = let final self::Test<core::int*, core::int*>* #t5 = t in let final core::String* #t6 = "x" in let final core::num* #t7 = self::getNum() as{TypeError} core::int* in let final void #t8 = #t5.{self::Test::[]=}(#t6, #t7){(core::String*, core::int*) →* void} in #t7;
+  core::int* v4 = let final self::Test<core::int*, core::int*>* #t9 = t in let final core::String* #t10 = "x" in let final core::int* #t11 = #t9.{self::Test::[]}(#t10){(core::String*) →* core::int*} in #t11 == null ?{core::int*} let final core::int* #t12 = self::getInt() in let final void #t13 = #t9.{self::Test::[]=}(#t10, #t12){(core::String*, core::int*) →* void} in #t12 : #t11;
+  core::num* v5 = let final self::Test<core::int*, core::int*>* #t14 = t in let final core::String* #t15 = "x" in let final core::int* #t16 = #t14.{self::Test::[]}(#t15){(core::String*) →* core::int*} in #t16 == null ?{core::num*} let final core::num* #t17 = self::getNum() as{TypeError} core::int* in let final void #t18 = #t14.{self::Test::[]=}(#t15, #t17){(core::String*, core::int*) →* void} in #t17 : #t16;
+  core::int* v7 = let final self::Test<core::int*, core::int*>* #t19 = t in let final core::String* #t20 = "x" in let final core::int* #t21 = #t19.{self::Test::[]}(#t20){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t22 = #t19.{self::Test::[]=}(#t20, #t21){(core::String*, core::int*) →* void} in #t21;
+  core::num* v8 = let final self::Test<core::int*, core::int*>* #t23 = t in let final core::String* #t24 = "x" in let final core::num* #t25 = #t23.{self::Test::[]}(#t24){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t26 = #t23.{self::Test::[]=}(#t24, #t25){(core::String*, core::int*) →* void} in #t25;
+  core::int* v10 = let final self::Test<core::int*, core::int*>* #t27 = t in let final core::String* #t28 = "x" in let final core::int* #t29 = #t27.{self::Test::[]}(#t28){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t30 = #t27.{self::Test::[]=}(#t28, #t29){(core::String*, core::int*) →* void} in #t29;
+  core::int* v11 = let final self::Test<core::int*, core::int*>* #t31 = t in let final core::String* #t32 = "x" in let final core::int* #t33 = #t31.{self::Test::[]}(#t32){(core::String*) →* core::int*} in let final void #t34 = #t31.{self::Test::[]=}(#t32, #t33.{core::num::+}(1){(core::num*) →* core::int*}){(core::String*, core::int*) →* void} in #t33;
+}
+static method test2(self::Test<core::int*, core::num*>* t) → void {
+  core::int* v1 = let final self::Test<core::int*, core::num*>* #t35 = t in let final core::String* #t36 = "x" in let final core::int* #t37 = self::getInt() in let final void #t38 = #t35.{self::Test::[]=}(#t36, #t37){(core::String*, core::num*) →* void} in #t37;
+  core::num* v2 = let final self::Test<core::int*, core::num*>* #t39 = t in let final core::String* #t40 = "x" in let final core::num* #t41 = self::getNum() in let final void #t42 = #t39.{self::Test::[]=}(#t40, #t41){(core::String*, core::num*) →* void} in #t41;
+  core::double* v3 = let final self::Test<core::int*, core::num*>* #t43 = t in let final core::String* #t44 = "x" in let final core::double* #t45 = self::getDouble() in let final void #t46 = #t43.{self::Test::[]=}(#t44, #t45){(core::String*, core::num*) →* void} in #t45;
+  core::int* v4 = let final self::Test<core::int*, core::num*>* #t47 = t in let final core::String* #t48 = "x" in let final core::int* #t49 = #t47.{self::Test::[]}(#t48){(core::String*) →* core::int*} in #t49 == null ?{core::int*} let final core::int* #t50 = self::getInt() in let final void #t51 = #t47.{self::Test::[]=}(#t48, #t50){(core::String*, core::num*) →* void} in #t50 : #t49;
+  core::num* v5 = let final self::Test<core::int*, core::num*>* #t52 = t in let final core::String* #t53 = "x" in let final core::int* #t54 = #t52.{self::Test::[]}(#t53){(core::String*) →* core::int*} in #t54 == null ?{core::num*} let final core::num* #t55 = self::getNum() in let final void #t56 = #t52.{self::Test::[]=}(#t53, #t55){(core::String*, core::num*) →* void} in #t55 : #t54;
+  core::num* v6 = let final self::Test<core::int*, core::num*>* #t57 = t in let final core::String* #t58 = "x" in let final core::int* #t59 = #t57.{self::Test::[]}(#t58){(core::String*) →* core::int*} in #t59 == null ?{core::num*} let final core::double* #t60 = self::getDouble() in let final void #t61 = #t57.{self::Test::[]=}(#t58, #t60){(core::String*, core::num*) →* void} in #t60 : #t59;
+  core::int* v7 = let final self::Test<core::int*, core::num*>* #t62 = t in let final core::String* #t63 = "x" in let final core::int* #t64 = #t62.{self::Test::[]}(#t63){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t65 = #t62.{self::Test::[]=}(#t63, #t64){(core::String*, core::num*) →* void} in #t64;
+  core::num* v8 = let final self::Test<core::int*, core::num*>* #t66 = t in let final core::String* #t67 = "x" in let final core::num* #t68 = #t66.{self::Test::[]}(#t67){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t69 = #t66.{self::Test::[]=}(#t67, #t68){(core::String*, core::num*) →* void} in #t68;
+  core::double* v9 = let final self::Test<core::int*, core::num*>* #t70 = t in let final core::String* #t71 = "x" in let final core::double* #t72 = #t70.{self::Test::[]}(#t71){(core::String*) →* core::int*}.{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t73 = #t70.{self::Test::[]=}(#t71, #t72){(core::String*, core::num*) →* void} in #t72;
+  core::int* v10 = let final self::Test<core::int*, core::num*>* #t74 = t in let final core::String* #t75 = "x" in let final core::int* #t76 = #t74.{self::Test::[]}(#t75){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t77 = #t74.{self::Test::[]=}(#t75, #t76){(core::String*, core::num*) →* void} in #t76;
+  core::int* v11 = let final self::Test<core::int*, core::num*>* #t78 = t in let final core::String* #t79 = "x" in let final core::int* #t80 = #t78.{self::Test::[]}(#t79){(core::String*) →* core::int*} in let final void #t81 = #t78.{self::Test::[]=}(#t79, #t80.{core::num::+}(1){(core::num*) →* core::int*}){(core::String*, core::num*) →* void} in #t80;
+}
+static method test3(self::Test<core::int*, core::double*>* t) → void {
+  core::num* v2 = let final self::Test<core::int*, core::double*>* #t82 = t in let final core::String* #t83 = "x" in let final core::num* #t84 = self::getNum() as{TypeError} core::double* in let final void #t85 = #t82.{self::Test::[]=}(#t83, #t84){(core::String*, core::double*) →* void} in #t84;
+  core::double* v3 = let final self::Test<core::int*, core::double*>* #t86 = t in let final core::String* #t87 = "x" in let final core::double* #t88 = self::getDouble() in let final void #t89 = #t86.{self::Test::[]=}(#t87, #t88){(core::String*, core::double*) →* void} in #t88;
+  core::num* v5 = let final self::Test<core::int*, core::double*>* #t90 = t in let final core::String* #t91 = "x" in let final core::int* #t92 = #t90.{self::Test::[]}(#t91){(core::String*) →* core::int*} in #t92 == null ?{core::num*} let final core::num* #t93 = self::getNum() as{TypeError} core::double* in let final void #t94 = #t90.{self::Test::[]=}(#t91, #t93){(core::String*, core::double*) →* void} in #t93 : #t92;
+  core::num* v6 = let final self::Test<core::int*, core::double*>* #t95 = t in let final core::String* #t96 = "x" in let final core::int* #t97 = #t95.{self::Test::[]}(#t96){(core::String*) →* core::int*} in #t97 == null ?{core::num*} let final core::double* #t98 = self::getDouble() in let final void #t99 = #t95.{self::Test::[]=}(#t96, #t98){(core::String*, core::double*) →* void} in #t98 : #t97;
+  core::int* v7 = let final self::Test<core::int*, core::double*>* #t100 = t in let final core::String* #t101 = "x" in let final core::int* #t102 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:90:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ +=
+                                                                         ^" in #t100.{self::Test::[]}(#t101){(core::String*) →* core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t103 = #t100.{self::Test::[]=}(#t101, #t102){(core::String*, core::double*) →* void} in #t102;
+  core::num* v8 = let final self::Test<core::int*, core::double*>* #t104 = t in let final core::String* #t105 = "x" in let final core::num* #t106 = #t104.{self::Test::[]}(#t105){(core::String*) →* core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t107 = #t104.{self::Test::[]=}(#t105, #t106){(core::String*, core::double*) →* void} in #t106;
+  core::double* v9 = let final self::Test<core::int*, core::double*>* #t108 = t in let final core::String* #t109 = "x" in let final core::double* #t110 = #t108.{self::Test::[]}(#t109){(core::String*) →* core::int*}.{core::num::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t111 = #t108.{self::Test::[]=}(#t109, #t110){(core::String*, core::double*) →* void} in #t110;
+  core::int* v10 = let final self::Test<core::int*, core::double*>* #t112 = t in let final core::String* #t113 = "x" in let final core::int* #t114 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:102:25: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+      /*@target=num.+*/ ++t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'];
+                        ^" in #t112.{self::Test::[]}(#t113){(core::String*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double* in let final void #t115 = #t112.{self::Test::[]=}(#t113, #t114){(core::String*, core::double*) →* void} in #t114;
+  core::int* v11 = let final self::Test<core::int*, core::double*>* #t116 = t in let final core::String* #t117 = "x" in let final core::int* #t118 = #t116.{self::Test::[]}(#t117){(core::String*) →* core::int*} in let final void #t119 = #t116.{self::Test::[]=}(#t117, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:105:74: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=num.+*/ ++;
+                                                                         ^" in #t118.{core::num::+}(1){(core::num*) →* core::int*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t118;
+}
+static method test4(self::Test<core::num*, core::int*>* t) → void {
+  core::int* v1 = let final self::Test<core::num*, core::int*>* #t120 = t in let final core::String* #t121 = "x" in let final core::int* #t122 = self::getInt() in let final void #t123 = #t120.{self::Test::[]=}(#t121, #t122){(core::String*, core::int*) →* void} in #t122;
+  core::num* v2 = let final self::Test<core::num*, core::int*>* #t124 = t in let final core::String* #t125 = "x" in let final core::num* #t126 = self::getNum() as{TypeError} core::int* in let final void #t127 = #t124.{self::Test::[]=}(#t125, #t126){(core::String*, core::int*) →* void} in #t126;
+  core::num* v4 = let final self::Test<core::num*, core::int*>* #t128 = t in let final core::String* #t129 = "x" in let final core::num* #t130 = #t128.{self::Test::[]}(#t129){(core::String*) →* core::num*} in #t130 == null ?{core::num*} let final core::int* #t131 = self::getInt() in let final void #t132 = #t128.{self::Test::[]=}(#t129, #t131){(core::String*, core::int*) →* void} in #t131 : #t130;
+  core::num* v5 = let final self::Test<core::num*, core::int*>* #t133 = t in let final core::String* #t134 = "x" in let final core::num* #t135 = #t133.{self::Test::[]}(#t134){(core::String*) →* core::num*} in #t135 == null ?{core::num*} let final core::num* #t136 = self::getNum() as{TypeError} core::int* in let final void #t137 = #t133.{self::Test::[]=}(#t134, #t136){(core::String*, core::int*) →* void} in #t136 : #t135;
+  core::num* v7 = let final self::Test<core::num*, core::int*>* #t138 = t in let final core::String* #t139 = "x" in let final core::num* #t140 = #t138.{self::Test::[]}(#t139){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t141 = #t138.{self::Test::[]=}(#t139, #t140){(core::String*, core::int*) →* void} in #t140;
+  core::num* v8 = let final self::Test<core::num*, core::int*>* #t142 = t in let final core::String* #t143 = "x" in let final core::num* #t144 = #t142.{self::Test::[]}(#t143){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t145 = #t142.{self::Test::[]=}(#t143, #t144){(core::String*, core::int*) →* void} in #t144;
+  core::num* v10 = let final self::Test<core::num*, core::int*>* #t146 = t in let final core::String* #t147 = "x" in let final core::num* #t148 = #t146.{self::Test::[]}(#t147){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t149 = #t146.{self::Test::[]=}(#t147, #t148){(core::String*, core::int*) →* void} in #t148;
+  core::num* v11 = let final self::Test<core::num*, core::int*>* #t150 = t in let final core::String* #t151 = "x" in let final core::num* #t152 = #t150.{self::Test::[]}(#t151){(core::String*) →* core::num*} in let final void #t153 = #t150.{self::Test::[]=}(#t151, #t152.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t152;
+}
+static method test5(self::Test<core::num*, core::num*>* t) → void {
+  core::int* v1 = let final self::Test<core::num*, core::num*>* #t154 = t in let final core::String* #t155 = "x" in let final core::int* #t156 = self::getInt() in let final void #t157 = #t154.{self::Test::[]=}(#t155, #t156){(core::String*, core::num*) →* void} in #t156;
+  core::num* v2 = let final self::Test<core::num*, core::num*>* #t158 = t in let final core::String* #t159 = "x" in let final core::num* #t160 = self::getNum() in let final void #t161 = #t158.{self::Test::[]=}(#t159, #t160){(core::String*, core::num*) →* void} in #t160;
+  core::double* v3 = let final self::Test<core::num*, core::num*>* #t162 = t in let final core::String* #t163 = "x" in let final core::double* #t164 = self::getDouble() in let final void #t165 = #t162.{self::Test::[]=}(#t163, #t164){(core::String*, core::num*) →* void} in #t164;
+  core::num* v4 = let final self::Test<core::num*, core::num*>* #t166 = t in let final core::String* #t167 = "x" in let final core::num* #t168 = #t166.{self::Test::[]}(#t167){(core::String*) →* core::num*} in #t168 == null ?{core::num*} let final core::int* #t169 = self::getInt() in let final void #t170 = #t166.{self::Test::[]=}(#t167, #t169){(core::String*, core::num*) →* void} in #t169 : #t168;
+  core::num* v5 = let final self::Test<core::num*, core::num*>* #t171 = t in let final core::String* #t172 = "x" in let final core::num* #t173 = #t171.{self::Test::[]}(#t172){(core::String*) →* core::num*} in #t173 == null ?{core::num*} let final core::num* #t174 = self::getNum() in let final void #t175 = #t171.{self::Test::[]=}(#t172, #t174){(core::String*, core::num*) →* void} in #t174 : #t173;
+  core::num* v6 = let final self::Test<core::num*, core::num*>* #t176 = t in let final core::String* #t177 = "x" in let final core::num* #t178 = #t176.{self::Test::[]}(#t177){(core::String*) →* core::num*} in #t178 == null ?{core::num*} let final core::double* #t179 = self::getDouble() in let final void #t180 = #t176.{self::Test::[]=}(#t177, #t179){(core::String*, core::num*) →* void} in #t179 : #t178;
+  core::num* v7 = let final self::Test<core::num*, core::num*>* #t181 = t in let final core::String* #t182 = "x" in let final core::num* #t183 = #t181.{self::Test::[]}(#t182){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t184 = #t181.{self::Test::[]=}(#t182, #t183){(core::String*, core::num*) →* void} in #t183;
+  core::num* v8 = let final self::Test<core::num*, core::num*>* #t185 = t in let final core::String* #t186 = "x" in let final core::num* #t187 = #t185.{self::Test::[]}(#t186){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t188 = #t185.{self::Test::[]=}(#t186, #t187){(core::String*, core::num*) →* void} in #t187;
+  core::num* v9 = let final self::Test<core::num*, core::num*>* #t189 = t in let final core::String* #t190 = "x" in let final core::num* #t191 = #t189.{self::Test::[]}(#t190){(core::String*) →* core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t192 = #t189.{self::Test::[]=}(#t190, #t191){(core::String*, core::num*) →* void} in #t191;
+  core::num* v10 = let final self::Test<core::num*, core::num*>* #t193 = t in let final core::String* #t194 = "x" in let final core::num* #t195 = #t193.{self::Test::[]}(#t194){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t196 = #t193.{self::Test::[]=}(#t194, #t195){(core::String*, core::num*) →* void} in #t195;
+  core::num* v11 = let final self::Test<core::num*, core::num*>* #t197 = t in let final core::String* #t198 = "x" in let final core::num* #t199 = #t197.{self::Test::[]}(#t198){(core::String*) →* core::num*} in let final void #t200 = #t197.{self::Test::[]=}(#t198, #t199.{core::num::+}(1){(core::num*) →* core::num*}){(core::String*, core::num*) →* void} in #t199;
+}
+static method test6(self::Test<core::num*, core::double*>* t) → void {
+  core::num* v2 = let final self::Test<core::num*, core::double*>* #t201 = t in let final core::String* #t202 = "x" in let final core::num* #t203 = self::getNum() as{TypeError} core::double* in let final void #t204 = #t201.{self::Test::[]=}(#t202, #t203){(core::String*, core::double*) →* void} in #t203;
+  core::double* v3 = let final self::Test<core::num*, core::double*>* #t205 = t in let final core::String* #t206 = "x" in let final core::double* #t207 = self::getDouble() in let final void #t208 = #t205.{self::Test::[]=}(#t206, #t207){(core::String*, core::double*) →* void} in #t207;
+  core::num* v5 = let final self::Test<core::num*, core::double*>* #t209 = t in let final core::String* #t210 = "x" in let final core::num* #t211 = #t209.{self::Test::[]}(#t210){(core::String*) →* core::num*} in #t211 == null ?{core::num*} let final core::num* #t212 = self::getNum() as{TypeError} core::double* in let final void #t213 = #t209.{self::Test::[]=}(#t210, #t212){(core::String*, core::double*) →* void} in #t212 : #t211;
+  core::num* v6 = let final self::Test<core::num*, core::double*>* #t214 = t in let final core::String* #t215 = "x" in let final core::num* #t216 = #t214.{self::Test::[]}(#t215){(core::String*) →* core::num*} in #t216 == null ?{core::num*} let final core::double* #t217 = self::getDouble() in let final void #t218 = #t214.{self::Test::[]=}(#t215, #t217){(core::String*, core::double*) →* void} in #t217 : #t216;
+  core::num* v7 = let final self::Test<core::num*, core::double*>* #t219 = t in let final core::String* #t220 = "x" in let final core::num* #t221 = #t219.{self::Test::[]}(#t220){(core::String*) →* core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t222 = #t219.{self::Test::[]=}(#t220, #t221){(core::String*, core::double*) →* void} in #t221;
+  core::num* v8 = let final self::Test<core::num*, core::double*>* #t223 = t in let final core::String* #t224 = "x" in let final core::num* #t225 = #t223.{self::Test::[]}(#t224){(core::String*) →* core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t226 = #t223.{self::Test::[]=}(#t224, #t225){(core::String*, core::double*) →* void} in #t225;
+  core::num* v9 = let final self::Test<core::num*, core::double*>* #t227 = t in let final core::String* #t228 = "x" in let final core::num* #t229 = #t227.{self::Test::[]}(#t228){(core::String*) →* core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t230 = #t227.{self::Test::[]=}(#t228, #t229){(core::String*, core::double*) →* void} in #t229;
+  core::num* v10 = let final self::Test<core::num*, core::double*>* #t231 = t in let final core::String* #t232 = "x" in let final core::num* #t233 = #t231.{self::Test::[]}(#t232){(core::String*) →* core::num*}.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double* in let final void #t234 = #t231.{self::Test::[]=}(#t232, #t233){(core::String*, core::double*) →* void} in #t233;
+  core::num* v11 = let final self::Test<core::num*, core::double*>* #t235 = t in let final core::String* #t236 = "x" in let final core::num* #t237 = #t235.{self::Test::[]}(#t236){(core::String*) →* core::num*} in let final void #t238 = #t235.{self::Test::[]=}(#t236, #t237.{core::num::+}(1){(core::num*) →* core::num*} as{TypeError} core::double*){(core::String*, core::double*) →* void} in #t237;
+}
+static method test7(self::Test<core::double*, core::int*>* t) → void {
+  core::int* v1 = let final self::Test<core::double*, core::int*>* #t239 = t in let final core::String* #t240 = "x" in let final core::int* #t241 = self::getInt() in let final void #t242 = #t239.{self::Test::[]=}(#t240, #t241){(core::String*, core::int*) →* void} in #t241;
+  core::num* v2 = let final self::Test<core::double*, core::int*>* #t243 = t in let final core::String* #t244 = "x" in let final core::num* #t245 = self::getNum() as{TypeError} core::int* in let final void #t246 = #t243.{self::Test::[]=}(#t244, #t245){(core::String*, core::int*) →* void} in #t245;
+  core::num* v4 = let final self::Test<core::double*, core::int*>* #t247 = t in let final core::String* #t248 = "x" in let final core::double* #t249 = #t247.{self::Test::[]}(#t248){(core::String*) →* core::double*} in #t249 == null ?{core::num*} let final core::int* #t250 = self::getInt() in let final void #t251 = #t247.{self::Test::[]=}(#t248, #t250){(core::String*, core::int*) →* void} in #t250 : #t249;
+  core::num* v5 = let final self::Test<core::double*, core::int*>* #t252 = t in let final core::String* #t253 = "x" in let final core::double* #t254 = #t252.{self::Test::[]}(#t253){(core::String*) →* core::double*} in #t254 == null ?{core::num*} let final core::num* #t255 = self::getNum() as{TypeError} core::int* in let final void #t256 = #t252.{self::Test::[]=}(#t253, #t255){(core::String*, core::int*) →* void} in #t255 : #t254;
+  core::double* v7 = let final self::Test<core::double*, core::int*>* #t257 = t in let final core::String* #t258 = "x" in let final core::double* #t259 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:211:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
+                                                                            ^" in #t257.{self::Test::[]}(#t258){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t260 = #t257.{self::Test::[]=}(#t258, #t259){(core::String*, core::int*) →* void} in #t259;
+  core::double* v8 = let final self::Test<core::double*, core::int*>* #t261 = t in let final core::String* #t262 = "x" in let final core::double* #t263 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:215:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ +=
+                                                                            ^" in #t261.{self::Test::[]}(#t262){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t264 = #t261.{self::Test::[]=}(#t262, #t263){(core::String*, core::int*) →* void} in #t263;
+  core::double* v10 = let final self::Test<core::double*, core::int*>* #t265 = t in let final core::String* #t266 = "x" in let final core::double* #t267 = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:219:28: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+      /*@target=double.+*/ ++t
+                           ^" in #t265.{self::Test::[]}(#t266){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int* in let final void #t268 = #t265.{self::Test::[]=}(#t266, #t267){(core::String*, core::int*) →* void} in #t267;
+  core::double* v11 = let final self::Test<core::double*, core::int*>* #t269 = t in let final core::String* #t270 = "x" in let final core::double* #t271 = #t269.{self::Test::[]}(#t270){(core::String*) →* core::double*} in let final void #t272 = #t269.{self::Test::[]=}(#t270, invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:223:77: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+      t /*@target=Test.[]*/ /*@target=Test.[]=*/ ['x'] /*@target=double.+*/ ++;
+                                                                            ^" in #t271.{core::double::+}(1){(core::num*) →* core::double*} as{TypeError} core::int*){(core::String*, core::int*) →* void} in #t271;
+}
+static method test8(self::Test<core::double*, core::num*>* t) → void {
+  core::int* v1 = let final self::Test<core::double*, core::num*>* #t273 = t in let final core::String* #t274 = "x" in let final core::int* #t275 = self::getInt() in let final void #t276 = #t273.{self::Test::[]=}(#t274, #t275){(core::String*, core::num*) →* void} in #t275;
+  core::num* v2 = let final self::Test<core::double*, core::num*>* #t277 = t in let final core::String* #t278 = "x" in let final core::num* #t279 = self::getNum() in let final void #t280 = #t277.{self::Test::[]=}(#t278, #t279){(core::String*, core::num*) →* void} in #t279;
+  core::double* v3 = let final self::Test<core::double*, core::num*>* #t281 = t in let final core::String* #t282 = "x" in let final core::double* #t283 = self::getDouble() in let final void #t284 = #t281.{self::Test::[]=}(#t282, #t283){(core::String*, core::num*) →* void} in #t283;
+  core::num* v4 = let final self::Test<core::double*, core::num*>* #t285 = t in let final core::String* #t286 = "x" in let final core::double* #t287 = #t285.{self::Test::[]}(#t286){(core::String*) →* core::double*} in #t287 == null ?{core::num*} let final core::int* #t288 = self::getInt() in let final void #t289 = #t285.{self::Test::[]=}(#t286, #t288){(core::String*, core::num*) →* void} in #t288 : #t287;
+  core::num* v5 = let final self::Test<core::double*, core::num*>* #t290 = t in let final core::String* #t291 = "x" in let final core::double* #t292 = #t290.{self::Test::[]}(#t291){(core::String*) →* core::double*} in #t292 == null ?{core::num*} let final core::num* #t293 = self::getNum() in let final void #t294 = #t290.{self::Test::[]=}(#t291, #t293){(core::String*, core::num*) →* void} in #t293 : #t292;
+  core::double* v6 = let final self::Test<core::double*, core::num*>* #t295 = t in let final core::String* #t296 = "x" in let final core::double* #t297 = #t295.{self::Test::[]}(#t296){(core::String*) →* core::double*} in #t297 == null ?{core::double*} let final core::double* #t298 = self::getDouble() in let final void #t299 = #t295.{self::Test::[]=}(#t296, #t298){(core::String*, core::num*) →* void} in #t298 : #t297;
+  core::double* v7 = let final self::Test<core::double*, core::num*>* #t300 = t in let final core::String* #t301 = "x" in let final core::double* #t302 = #t300.{self::Test::[]}(#t301){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t303 = #t300.{self::Test::[]=}(#t301, #t302){(core::String*, core::num*) →* void} in #t302;
+  core::double* v8 = let final self::Test<core::double*, core::num*>* #t304 = t in let final core::String* #t305 = "x" in let final core::double* #t306 = #t304.{self::Test::[]}(#t305){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t307 = #t304.{self::Test::[]=}(#t305, #t306){(core::String*, core::num*) →* void} in #t306;
+  core::double* v9 = let final self::Test<core::double*, core::num*>* #t308 = t in let final core::String* #t309 = "x" in let final core::double* #t310 = #t308.{self::Test::[]}(#t309){(core::String*) →* core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t311 = #t308.{self::Test::[]=}(#t309, #t310){(core::String*, core::num*) →* void} in #t310;
+  core::double* v10 = let final self::Test<core::double*, core::num*>* #t312 = t in let final core::String* #t313 = "x" in let final core::double* #t314 = #t312.{self::Test::[]}(#t313){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t315 = #t312.{self::Test::[]=}(#t313, #t314){(core::String*, core::num*) →* void} in #t314;
+  core::double* v11 = let final self::Test<core::double*, core::num*>* #t316 = t in let final core::String* #t317 = "x" in let final core::double* #t318 = #t316.{self::Test::[]}(#t317){(core::String*) →* core::double*} in let final void #t319 = #t316.{self::Test::[]=}(#t317, #t318.{core::double::+}(1){(core::num*) →* core::double*}){(core::String*, core::num*) →* void} in #t318;
+}
+static method test9(self::Test<core::double*, core::double*>* t) → void {
+  core::num* v2 = let final self::Test<core::double*, core::double*>* #t320 = t in let final core::String* #t321 = "x" in let final core::num* #t322 = self::getNum() as{TypeError} core::double* in let final void #t323 = #t320.{self::Test::[]=}(#t321, #t322){(core::String*, core::double*) →* void} in #t322;
+  core::double* v3 = let final self::Test<core::double*, core::double*>* #t324 = t in let final core::String* #t325 = "x" in let final core::double* #t326 = self::getDouble() in let final void #t327 = #t324.{self::Test::[]=}(#t325, #t326){(core::String*, core::double*) →* void} in #t326;
+  core::num* v5 = let final self::Test<core::double*, core::double*>* #t328 = t in let final core::String* #t329 = "x" in let final core::double* #t330 = #t328.{self::Test::[]}(#t329){(core::String*) →* core::double*} in #t330 == null ?{core::num*} let final core::num* #t331 = self::getNum() as{TypeError} core::double* in let final void #t332 = #t328.{self::Test::[]=}(#t329, #t331){(core::String*, core::double*) →* void} in #t331 : #t330;
+  core::double* v6 = let final self::Test<core::double*, core::double*>* #t333 = t in let final core::String* #t334 = "x" in let final core::double* #t335 = #t333.{self::Test::[]}(#t334){(core::String*) →* core::double*} in #t335 == null ?{core::double*} let final core::double* #t336 = self::getDouble() in let final void #t337 = #t333.{self::Test::[]=}(#t334, #t336){(core::String*, core::double*) →* void} in #t336 : #t335;
+  core::double* v7 = let final self::Test<core::double*, core::double*>* #t338 = t in let final core::String* #t339 = "x" in let final core::double* #t340 = #t338.{self::Test::[]}(#t339){(core::String*) →* core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t341 = #t338.{self::Test::[]=}(#t339, #t340){(core::String*, core::double*) →* void} in #t340;
+  core::double* v8 = let final self::Test<core::double*, core::double*>* #t342 = t in let final core::String* #t343 = "x" in let final core::double* #t344 = #t342.{self::Test::[]}(#t343){(core::String*) →* core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t345 = #t342.{self::Test::[]=}(#t343, #t344){(core::String*, core::double*) →* void} in #t344;
+  core::double* v9 = let final self::Test<core::double*, core::double*>* #t346 = t in let final core::String* #t347 = "x" in let final core::double* #t348 = #t346.{self::Test::[]}(#t347){(core::String*) →* core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t349 = #t346.{self::Test::[]=}(#t347, #t348){(core::String*, core::double*) →* void} in #t348;
+  core::double* v10 = let final self::Test<core::double*, core::double*>* #t350 = t in let final core::String* #t351 = "x" in let final core::double* #t352 = #t350.{self::Test::[]}(#t351){(core::String*) →* core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t353 = #t350.{self::Test::[]=}(#t351, #t352){(core::String*, core::double*) →* void} in #t352;
+  core::double* v11 = let final self::Test<core::double*, core::double*>* #t354 = t in let final core::String* #t355 = "x" in let final core::double* #t356 = #t354.{self::Test::[]}(#t355){(core::String*) →* core::double*} in let final void #t357 = #t354.{self::Test::[]=}(#t355, #t356.{core::double::+}(1){(core::num*) →* core::double*}){(core::String*, core::double*) →* void} in #t356;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.weak.modular.expect
new file mode 100644
index 0000000..5bdc052
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method test() → void {
+  self::B* local;
+  local = self::f<self::B*>();
+  local == null ?{self::B*} local = self::f<self::B*>() : null;
+  local = local.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  local = local.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  local = local.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  local = local.{self::B::-}(1){(core::int*) →* self::B*};
+  local = local.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v1 = local = self::f<self::B*>();
+  self::B* v2 = let final self::B* #t1 = local in #t1 == null ?{self::B*} local = self::f<self::B*>() : #t1;
+  self::A* v3 = local = local.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = local = local.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = local = local.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = local = local.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t2 = local in let final self::B* #t3 = local = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..9e55829
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local_upwards.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method getInt() → core::int*
+  return 0;
+static method getNum() → core::num*
+  return 0;
+static method getDouble() → core::double*
+  return 0.0;
+static method test1(core::int* t) → void {
+  core::int* v1 = t = self::getInt();
+  core::num* v2 = t = self::getNum() as{TypeError} core::int*;
+  core::int* v4 = let final core::int* #t1 = t in #t1 == null ?{core::int*} t = self::getInt() : #t1;
+  core::num* v5 = let final core::int* #t2 = t in #t2 == null ?{core::num*} t = self::getNum() as{TypeError} core::int* : #t2;
+  core::int* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+  core::num* v8 = t = t.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int*;
+  core::int* v10 = t = t.{core::num::+}(1){(core::num*) →* core::int*};
+  core::int* v11 = let final core::int* #t3 = t in let final core::int* #t4 = t = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3;
+}
+static method test2(core::num* t) → void {
+  core::int* v1 = t = self::getInt();
+  core::num* v2 = t = self::getNum();
+  core::double* v3 = t = self::getDouble();
+  core::num* v4 = let final core::num* #t5 = t in #t5 == null ?{core::num*} t = self::getInt() : #t5;
+  core::num* v5 = let final core::num* #t6 = t in #t6 == null ?{core::num*} t = self::getNum() : #t6;
+  core::num* v6 = let final core::num* #t7 = t in #t7 == null ?{core::num*} t = self::getDouble() : #t7;
+  core::num* v7 = t = t.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+  core::num* v8 = t = t.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+  core::num* v9 = t = t.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+  core::num* v10 = t = t.{core::num::+}(1){(core::num*) →* core::num*};
+  core::num* v11 = let final core::num* #t8 = t in let final core::num* #t9 = t = #t8.{core::num::+}(1){(core::num*) →* core::num*} in #t8;
+}
+static method test3(core::double* t) → void {
+  core::num* v2 = t = self::getNum() as{TypeError} core::double*;
+  core::double* v3 = t = self::getDouble();
+  core::num* v5 = let final core::double* #t10 = t in #t10 == null ?{core::num*} t = self::getNum() as{TypeError} core::double* : #t10;
+  core::double* v6 = let final core::double* #t11 = t in #t11 == null ?{core::double*} t = self::getDouble() : #t11;
+  core::double* v7 = t = t.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+  core::double* v8 = t = t.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+  core::double* v9 = t = t.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+  core::double* v10 = t = t.{core::double::+}(1){(core::num*) →* core::double*};
+  core::double* v11 = let final core::double* #t12 = t in let final core::double* #t13 = t = #t12.{core::double::+}(1){(core::num*) →* core::double*} in #t12;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.modular.expect
new file mode 100644
index 0000000..6ae0089
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* f = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* v_assign = new self::A::•().{self::A::f} = 1;
+static field core::int* v_plus = let final self::A* #t1 = new self::A::•() in #t1.{self::A::f} = #t1.{self::A::f}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+static field core::int* v_minus = let final self::A* #t2 = new self::A::•() in #t2.{self::A::f} = #t2.{self::A::f}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
+static field core::int* v_multiply = let final self::A* #t3 = new self::A::•() in #t3.{self::A::f} = #t3.{self::A::f}{core::int*}.{core::num::*}(1){(core::num*) →* core::int*};
+static field core::int* v_prefix_pp = let final self::A* #t4 = new self::A::•() in #t4.{self::A::f} = #t4.{self::A::f}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+static field core::int* v_prefix_mm = let final self::A* #t5 = new self::A::•() in #t5.{self::A::f} = #t5.{self::A::f}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
+static field core::int* v_postfix_pp = let final self::A* #t6 = new self::A::•() in let final core::int* #t7 = #t6.{self::A::f}{core::int*} in let final core::int* #t8 = #t6.{self::A::f} = #t7.{core::num::+}(1){(core::num*) →* core::int*} in #t7;
+static field core::int* v_postfix_mm = let final self::A* #t9 = new self::A::•() in let final core::int* #t10 = #t9.{self::A::f}{core::int*} in let final core::int* #t11 = #t9.{self::A::f} = #t10.{core::num::-}(1){(core::num*) →* core::int*} in #t10;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.modular.expect
new file mode 100644
index 0000000..1bf4996
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.weak.modular.expect
@@ -0,0 +1,79 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:36: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+// var v_prefix_pp = (/*@target=A.+*/ ++new /*@ type=B* */ B()
+//                                    ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:36: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+// var v_prefix_mm = (/*@target=A.-*/ --new /*@ type=B* */ B()
+//                                    ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:40: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+//     /*@ type=int* */ a /*@target=A.+*/ ++);
+//                                        ^
+//
+// pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:43: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+//     /*@ type=double* */ a /*@target=A.-*/ --);
+//                                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator +(dynamic other) → core::int*
+    return 1;
+  operator -(dynamic other) → core::double*
+    return 2.0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  field self::A* a = null;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::int* v_prefix_pp = let final self::B* #t1 = new self::B::•() in #t1.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:36: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+ - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+var v_prefix_pp = (/*@target=A.+*/ ++new /*@ type=B* */ B()
+                                   ^" in #t1.{self::B::a}{self::A*}.{self::A::+}(1){(dynamic) →* core::int*} as{TypeError} self::A*;
+static field core::double* v_prefix_mm = let final self::B* #t2 = new self::B::•() in #t2.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:36: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+ - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+var v_prefix_mm = (/*@target=A.-*/ --new /*@ type=B* */ B()
+                                   ^" in #t2.{self::B::a}{self::A*}.{self::A::-}(1){(dynamic) →* core::double*} as{TypeError} self::A*;
+static field self::A* v_postfix_pp = let final self::B* #t3 = new self::B::•() in let final self::A* #t4 = #t3.{self::B::a}{self::A*} in let final core::int* #t5 = #t3.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:23:40: Error: A value of type 'int' can't be assigned to a variable of type 'A'.
+ - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+    /*@ type=int* */ a /*@target=A.+*/ ++);
+                                       ^" in #t4.{self::A::+}(1){(dynamic) →* core::int*} as{TypeError} self::A* in #t4;
+static field self::A* v_postfix_mm = let final self::B* #t6 = new self::B::•() in let final self::A* #t7 = #t6.{self::B::a}{self::A*} in let final core::double* #t8 = #t6.{self::B::a} = invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:26:43: Error: A value of type 'double' can't be assigned to a variable of type 'A'.
+ - 'A' is from 'pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart'.
+    /*@ type=double* */ a /*@target=A.-*/ --);
+                                          ^" in #t7.{self::A::-}(1){(dynamic) →* core::double*} as{TypeError} self::A* in #t7;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.weak.modular.expect
new file mode 100644
index 0000000..2e41284
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.weak.modular.expect
@@ -0,0 +1,72 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B* member = null;
+  synthetic constructor •() → self::Test*
+    : super core::Object::•()
+    ;
+  static method test(self::Test* t) → void {
+    t.{self::Test::member} = self::f<self::B*>();
+    let final self::Test* #t1 = t in #t1.{self::Test::member}{self::B*} == null ?{self::B*} #t1.{self::Test::member} = self::f<self::B*>() : null;
+    let final self::Test* #t2 = t in #t2.{self::Test::member} = #t2.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    let final self::Test* #t3 = t in #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    let final self::Test* #t4 = t in #t4.{self::Test::member} = #t4.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    let final self::Test* #t5 = t in #t5.{self::Test::member} = #t5.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    let final self::Test* #t6 = t in #t6.{self::Test::member} = #t6.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v1 = t.{self::Test::member} = self::f<self::B*>();
+    self::B* v2 = let final self::Test* #t7 = t in let final self::B* #t8 = #t7.{self::Test::member}{self::B*} in #t8 == null ?{self::B*} #t7.{self::Test::member} = self::f<self::B*>() : #t8;
+    self::A* v3 = let final self::Test* #t9 = t in #t9.{self::Test::member} = #t9.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = let final self::Test* #t10 = t in #t10.{self::Test::member} = #t10.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = let final self::Test* #t11 = t in #t11.{self::Test::member} = #t11.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = let final self::Test* #t12 = t in #t12.{self::Test::member} = #t12.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::Test* #t13 = t in let final self::B* #t14 = #t13.{self::Test::member}{self::B*} in let final self::B* #t15 = #t13.{self::Test::member} = #t14.{self::B::-}(1){(core::int*) →* self::B*} in #t14;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.weak.modular.expect
new file mode 100644
index 0000000..681f9aa
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.weak.modular.expect
@@ -0,0 +1,72 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class Test extends core::Object {
+  field self::B* member = null;
+  synthetic constructor •() → self::Test*
+    : super core::Object::•()
+    ;
+  static method test(self::Test* t) → void {
+    let final self::Test* #t1 = t in #t1 == null ?{self::B*} null : #t1.{self::Test::member} = self::f<self::B*>();
+    let final self::Test* #t2 = t in #t2 == null ?{self::B*} null : #t2.{self::Test::member}{self::B*} == null ?{self::B*} #t2.{self::Test::member} = self::f<self::B*>() : null;
+    let final self::Test* #t3 = t in #t3 == null ?{self::A*} null : #t3.{self::Test::member} = #t3.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    let final self::Test* #t4 = t in #t4 == null ?{self::B*} null : #t4.{self::Test::member} = #t4.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    let final self::Test* #t5 = t in #t5 == null ?{self::C*} null : #t5.{self::Test::member} = #t5.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    let final self::Test* #t6 = t in #t6 == null ?{self::B*} null : let final self::B* #t7 = #t6.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t8 = #t6.{self::Test::member} = #t7 in #t7;
+    let final self::Test* #t9 = t in #t9 == null ?{self::B*} null : #t9.{self::Test::member} = #t9.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v1 = let final self::Test* #t10 = t in #t10 == null ?{self::B*} null : #t10.{self::Test::member} = self::f<self::B*>();
+    self::B* v2 = let final self::Test* #t11 = t in #t11 == null ?{self::B*} null : let final self::B* #t12 = #t11.{self::Test::member}{self::B*} in #t12 == null ?{self::B*} #t11.{self::Test::member} = self::f<self::B*>() : #t12;
+    self::A* v3 = let final self::Test* #t13 = t in #t13 == null ?{self::A*} null : let final self::A* #t14 = #t13.{self::Test::member}{self::B*}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B* in let final void #t15 = #t13.{self::Test::member} = #t14 in #t14;
+    self::B* v4 = let final self::Test* #t16 = t in #t16 == null ?{self::B*} null : let final self::B* #t17 = #t16.{self::Test::member}{self::B*}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*} in let final void #t18 = #t16.{self::Test::member} = #t17 in #t17;
+    self::C* v5 = let final self::Test* #t19 = t in #t19 == null ?{self::C*} null : let final self::C* #t20 = #t19.{self::Test::member}{self::B*}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*} in let final void #t21 = #t19.{self::Test::member} = #t20 in #t20;
+    self::B* v6 = let final self::Test* #t22 = t in #t22 == null ?{self::B*} null : let final self::B* #t23 = #t22.{self::Test::member}{self::B*}.{self::B::-}(1){(core::int*) →* self::B*} in let final void #t24 = #t22.{self::Test::member} = #t23 in #t23;
+    self::B* v7 = let final self::Test* #t25 = t in #t25 == null ?{self::B*} null : let final self::B* #t26 = #t25.{self::Test::member}{self::B*} in let final void #t27 = #t25.{self::Test::member} = #t26.{self::B::-}(1){(core::int*) →* self::B*} in #t26;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..1e360b8
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.weak.modular.expect
@@ -0,0 +1,93 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int* prop = null;
+  synthetic constructor •() → self::Test1*
+    : super core::Object::•()
+    ;
+  static method test(self::Test1* t) → void {
+    core::int* v1 = let final self::Test1* #t1 = t in #t1 == null ?{core::int*} null : #t1.{self::Test1::prop} = self::getInt();
+    core::num* v2 = let final self::Test1* #t2 = t in #t2 == null ?{core::num*} null : #t2.{self::Test1::prop} = self::getNum() as{TypeError} core::int*;
+    core::int* v4 = let final self::Test1* #t3 = t in #t3 == null ?{core::int*} null : let final core::int* #t4 = #t3.{self::Test1::prop}{core::int*} in #t4 == null ?{core::int*} #t3.{self::Test1::prop} = self::getInt() : #t4;
+    core::num* v5 = let final self::Test1* #t5 = t in #t5 == null ?{core::num*} null : let final core::int* #t6 = #t5.{self::Test1::prop}{core::int*} in #t6 == null ?{core::num*} #t5.{self::Test1::prop} = self::getNum() as{TypeError} core::int* : #t6;
+    core::int* v7 = let final self::Test1* #t7 = t in #t7 == null ?{core::int*} null : let final core::int* #t8 = #t7.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*} in let final void #t9 = #t7.{self::Test1::prop} = #t8 in #t8;
+    core::num* v8 = let final self::Test1* #t10 = t in #t10 == null ?{core::num*} null : let final core::num* #t11 = #t10.{self::Test1::prop}{core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int* in let final void #t12 = #t10.{self::Test1::prop} = #t11 in #t11;
+    core::int* v10 = let final self::Test1* #t13 = t in #t13 == null ?{core::int*} null : let final core::int* #t14 = #t13.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t15 = #t13.{self::Test1::prop} = #t14 in #t14;
+    core::int* v11 = let final self::Test1* #t16 = t in #t16 == null ?{core::int*} null : let final core::int* #t17 = #t16.{self::Test1::prop}{core::int*} in let final void #t18 = #t16.{self::Test1::prop} = #t17.{core::num::+}(1){(core::num*) →* core::int*} in #t17;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test2 extends core::Object {
+  field core::num* prop = null;
+  synthetic constructor •() → self::Test2*
+    : super core::Object::•()
+    ;
+  static method test(self::Test2* t) → void {
+    core::int* v1 = let final self::Test2* #t19 = t in #t19 == null ?{core::int*} null : #t19.{self::Test2::prop} = self::getInt();
+    core::num* v2 = let final self::Test2* #t20 = t in #t20 == null ?{core::num*} null : #t20.{self::Test2::prop} = self::getNum();
+    core::double* v3 = let final self::Test2* #t21 = t in #t21 == null ?{core::double*} null : #t21.{self::Test2::prop} = self::getDouble();
+    core::num* v4 = let final self::Test2* #t22 = t in #t22 == null ?{core::num*} null : let final core::num* #t23 = #t22.{self::Test2::prop}{core::num*} in #t23 == null ?{core::num*} #t22.{self::Test2::prop} = self::getInt() : #t23;
+    core::num* v5 = let final self::Test2* #t24 = t in #t24 == null ?{core::num*} null : let final core::num* #t25 = #t24.{self::Test2::prop}{core::num*} in #t25 == null ?{core::num*} #t24.{self::Test2::prop} = self::getNum() : #t25;
+    core::num* v6 = let final self::Test2* #t26 = t in #t26 == null ?{core::num*} null : let final core::num* #t27 = #t26.{self::Test2::prop}{core::num*} in #t27 == null ?{core::num*} #t26.{self::Test2::prop} = self::getDouble() : #t27;
+    core::num* v7 = let final self::Test2* #t28 = t in #t28 == null ?{core::num*} null : let final core::num* #t29 = #t28.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*} in let final void #t30 = #t28.{self::Test2::prop} = #t29 in #t29;
+    core::num* v8 = let final self::Test2* #t31 = t in #t31 == null ?{core::num*} null : let final core::num* #t32 = #t31.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} in let final void #t33 = #t31.{self::Test2::prop} = #t32 in #t32;
+    core::num* v9 = let final self::Test2* #t34 = t in #t34 == null ?{core::num*} null : let final core::num* #t35 = #t34.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*} in let final void #t36 = #t34.{self::Test2::prop} = #t35 in #t35;
+    core::num* v10 = let final self::Test2* #t37 = t in #t37 == null ?{core::num*} null : let final core::num* #t38 = #t37.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*} in let final void #t39 = #t37.{self::Test2::prop} = #t38 in #t38;
+    core::num* v11 = let final self::Test2* #t40 = t in #t40 == null ?{core::num*} null : let final core::num* #t41 = #t40.{self::Test2::prop}{core::num*} in let final void #t42 = #t40.{self::Test2::prop} = #t41.{core::num::+}(1){(core::num*) →* core::num*} in #t41;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test3 extends core::Object {
+  field core::double* prop = null;
+  synthetic constructor •() → self::Test3*
+    : super core::Object::•()
+    ;
+  static method test3(self::Test3* t) → void {
+    core::num* v2 = let final self::Test3* #t43 = t in #t43 == null ?{core::num*} null : #t43.{self::Test3::prop} = self::getNum() as{TypeError} core::double*;
+    core::double* v3 = let final self::Test3* #t44 = t in #t44 == null ?{core::double*} null : #t44.{self::Test3::prop} = self::getDouble();
+    core::num* v5 = let final self::Test3* #t45 = t in #t45 == null ?{core::num*} null : let final core::double* #t46 = #t45.{self::Test3::prop}{core::double*} in #t46 == null ?{core::num*} #t45.{self::Test3::prop} = self::getNum() as{TypeError} core::double* : #t46;
+    core::double* v6 = let final self::Test3* #t47 = t in #t47 == null ?{core::double*} null : let final core::double* #t48 = #t47.{self::Test3::prop}{core::double*} in #t48 == null ?{core::double*} #t47.{self::Test3::prop} = self::getDouble() : #t48;
+    core::double* v7 = let final self::Test3* #t49 = t in #t49 == null ?{core::double*} null : let final core::double* #t50 = #t49.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*} in let final void #t51 = #t49.{self::Test3::prop} = #t50 in #t50;
+    core::double* v8 = let final self::Test3* #t52 = t in #t52 == null ?{core::double*} null : let final core::double* #t53 = #t52.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*} in let final void #t54 = #t52.{self::Test3::prop} = #t53 in #t53;
+    core::double* v9 = let final self::Test3* #t55 = t in #t55 == null ?{core::double*} null : let final core::double* #t56 = #t55.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*} in let final void #t57 = #t55.{self::Test3::prop} = #t56 in #t56;
+    core::double* v10 = let final self::Test3* #t58 = t in #t58 == null ?{core::double*} null : let final core::double* #t59 = #t58.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*} in let final void #t60 = #t58.{self::Test3::prop} = #t59 in #t59;
+    core::double* v11 = let final self::Test3* #t61 = t in #t61 == null ?{core::double*} null : let final core::double* #t62 = #t61.{self::Test3::prop}{core::double*} in let final void #t63 = #t61.{self::Test3::prop} = #t62.{core::double::+}(1){(core::num*) →* core::double*} in #t62;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method getInt() → core::int*
+  return 0;
+static method getNum() → core::num*
+  return 0;
+static method getDouble() → core::double*
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.weak.modular.expect
new file mode 100644
index 0000000..28b3433
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.weak.modular.expect
@@ -0,0 +1,77 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class Base extends core::Object {
+  field self::B* member = null;
+  synthetic constructor •() → self::Base*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test extends self::Base {
+  synthetic constructor •() → self::Test*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    super.{self::Base::member} = self::f<self::B*>();
+    super.{self::Base::member} == null ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : null;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
+    super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v1 = super.{self::Base::member} = self::f<self::B*>();
+    self::B* v2 = let final self::B* #t1 = super.{self::Base::member} in #t1 == null ?{self::B*} super.{self::Base::member} = self::f<self::B*>() : #t1;
+    self::A* v3 = super.{self::Base::member} = super.{self::Base::member}.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+    self::B* v4 = super.{self::Base::member} = super.{self::Base::member}.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+    self::C* v5 = super.{self::Base::member} = super.{self::Base::member}.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+    self::B* v6 = super.{self::Base::member} = super.{self::Base::member}.{self::B::-}(1){(core::int*) →* self::B*};
+    self::B* v7 = let final self::B* #t2 = super.{self::Base::member} in let final self::B* #t3 = super.{self::Base::member} = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
+  }
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..4dec3f9
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.weak.modular.expect
@@ -0,0 +1,78 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  field core::int* intProp = null;
+  field core::num* numProp = null;
+  field core::double* doubleProp = null;
+  synthetic constructor •() → self::Base*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test1 extends self::Base {
+  synthetic constructor •() → self::Test1*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int* v1 = super.{self::Base::intProp} = self::getInt();
+    core::num* v2 = super.{self::Base::intProp} = self::getNum() as{TypeError} core::int*;
+    core::int* v4 = let final core::int* #t1 = super.{self::Base::intProp} in #t1 == null ?{core::int*} super.{self::Base::intProp} = self::getInt() : #t1;
+    core::num* v5 = let final core::int* #t2 = super.{self::Base::intProp} in #t2 == null ?{core::num*} super.{self::Base::intProp} = self::getNum() as{TypeError} core::int* : #t2;
+    core::int* v7 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::num* v8 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int*;
+    core::int* v10 = super.{self::Base::intProp} = super.{self::Base::intProp}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final core::int* #t3 = super.{self::Base::intProp} in let final core::int* #t4 = super.{self::Base::intProp} = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3;
+  }
+}
+class Test2 extends self::Base {
+  synthetic constructor •() → self::Test2*
+    : super self::Base::•()
+    ;
+  method test() → void {
+    core::int* v1 = super.{self::Base::numProp} = self::getInt();
+    core::num* v2 = super.{self::Base::numProp} = self::getNum();
+    core::double* v3 = super.{self::Base::numProp} = self::getDouble();
+    core::num* v4 = let final core::num* #t5 = super.{self::Base::numProp} in #t5 == null ?{core::num*} super.{self::Base::numProp} = self::getInt() : #t5;
+    core::num* v5 = let final core::num* #t6 = super.{self::Base::numProp} in #t6 == null ?{core::num*} super.{self::Base::numProp} = self::getNum() : #t6;
+    core::num* v6 = let final core::num* #t7 = super.{self::Base::numProp} in #t7 == null ?{core::num*} super.{self::Base::numProp} = self::getDouble() : #t7;
+    core::num* v7 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = super.{self::Base::numProp} = super.{self::Base::numProp}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final core::num* #t8 = super.{self::Base::numProp} in let final core::num* #t9 = super.{self::Base::numProp} = #t8.{core::num::+}(1){(core::num*) →* core::num*} in #t8;
+  }
+}
+class Test3 extends self::Base {
+  synthetic constructor •() → self::Test3*
+    : super self::Base::•()
+    ;
+  method test3() → void {
+    core::num* v2 = super.{self::Base::doubleProp} = self::getNum() as{TypeError} core::double*;
+    core::double* v3 = super.{self::Base::doubleProp} = self::getDouble();
+    core::num* v5 = let final core::double* #t10 = super.{self::Base::doubleProp} in #t10 == null ?{core::num*} super.{self::Base::doubleProp} = self::getNum() as{TypeError} core::double* : #t10;
+    core::double* v6 = let final core::double* #t11 = super.{self::Base::doubleProp} in #t11 == null ?{core::double*} super.{self::Base::doubleProp} = self::getDouble() : #t11;
+    core::double* v7 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = super.{self::Base::doubleProp} = super.{self::Base::doubleProp}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final core::double* #t12 = super.{self::Base::doubleProp} in let final core::double* #t13 = super.{self::Base::doubleProp} = #t12.{core::double::+}(1){(core::num*) →* core::double*} in #t12;
+  }
+}
+static method getInt() → core::int*
+  return 0;
+static method getNum() → core::num*
+  return 0;
+static method getDouble() → core::double*
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..f994d28
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.weak.modular.expect
@@ -0,0 +1,93 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Test1 extends core::Object {
+  field core::int* prop = null;
+  synthetic constructor •() → self::Test1*
+    : super core::Object::•()
+    ;
+  static method test(self::Test1* t) → void {
+    core::int* v1 = t.{self::Test1::prop} = self::getInt();
+    core::num* v2 = t.{self::Test1::prop} = self::getNum() as{TypeError} core::int*;
+    core::int* v4 = let final self::Test1* #t1 = t in let final core::int* #t2 = #t1.{self::Test1::prop}{core::int*} in #t2 == null ?{core::int*} #t1.{self::Test1::prop} = self::getInt() : #t2;
+    core::num* v5 = let final self::Test1* #t3 = t in let final core::int* #t4 = #t3.{self::Test1::prop}{core::int*} in #t4 == null ?{core::num*} #t3.{self::Test1::prop} = self::getNum() as{TypeError} core::int* : #t4;
+    core::int* v7 = let final self::Test1* #t5 = t in #t5.{self::Test1::prop} = #t5.{self::Test1::prop}{core::int*}.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+    core::num* v8 = let final self::Test1* #t6 = t in #t6.{self::Test1::prop} = #t6.{self::Test1::prop}{core::int*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int*;
+    core::int* v10 = let final self::Test1* #t7 = t in #t7.{self::Test1::prop} = #t7.{self::Test1::prop}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+    core::int* v11 = let final self::Test1* #t8 = t in let final core::int* #t9 = #t8.{self::Test1::prop}{core::int*} in let final core::int* #t10 = #t8.{self::Test1::prop} = #t9.{core::num::+}(1){(core::num*) →* core::int*} in #t9;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test2 extends core::Object {
+  field core::num* prop = null;
+  synthetic constructor •() → self::Test2*
+    : super core::Object::•()
+    ;
+  static method test(self::Test2* t) → void {
+    core::int* v1 = t.{self::Test2::prop} = self::getInt();
+    core::num* v2 = t.{self::Test2::prop} = self::getNum();
+    core::double* v3 = t.{self::Test2::prop} = self::getDouble();
+    core::num* v4 = let final self::Test2* #t11 = t in let final core::num* #t12 = #t11.{self::Test2::prop}{core::num*} in #t12 == null ?{core::num*} #t11.{self::Test2::prop} = self::getInt() : #t12;
+    core::num* v5 = let final self::Test2* #t13 = t in let final core::num* #t14 = #t13.{self::Test2::prop}{core::num*} in #t14 == null ?{core::num*} #t13.{self::Test2::prop} = self::getNum() : #t14;
+    core::num* v6 = let final self::Test2* #t15 = t in let final core::num* #t16 = #t15.{self::Test2::prop}{core::num*} in #t16 == null ?{core::num*} #t15.{self::Test2::prop} = self::getDouble() : #t16;
+    core::num* v7 = let final self::Test2* #t17 = t in #t17.{self::Test2::prop} = #t17.{self::Test2::prop}{core::num*}.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+    core::num* v8 = let final self::Test2* #t18 = t in #t18.{self::Test2::prop} = #t18.{self::Test2::prop}{core::num*}.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+    core::num* v9 = let final self::Test2* #t19 = t in #t19.{self::Test2::prop} = #t19.{self::Test2::prop}{core::num*}.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+    core::num* v10 = let final self::Test2* #t20 = t in #t20.{self::Test2::prop} = #t20.{self::Test2::prop}{core::num*}.{core::num::+}(1){(core::num*) →* core::num*};
+    core::num* v11 = let final self::Test2* #t21 = t in let final core::num* #t22 = #t21.{self::Test2::prop}{core::num*} in let final core::num* #t23 = #t21.{self::Test2::prop} = #t22.{core::num::+}(1){(core::num*) →* core::num*} in #t22;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Test3 extends core::Object {
+  field core::double* prop = null;
+  synthetic constructor •() → self::Test3*
+    : super core::Object::•()
+    ;
+  static method test3(self::Test3* t) → void {
+    core::num* v2 = t.{self::Test3::prop} = self::getNum() as{TypeError} core::double*;
+    core::double* v3 = t.{self::Test3::prop} = self::getDouble();
+    core::num* v5 = let final self::Test3* #t24 = t in let final core::double* #t25 = #t24.{self::Test3::prop}{core::double*} in #t25 == null ?{core::num*} #t24.{self::Test3::prop} = self::getNum() as{TypeError} core::double* : #t25;
+    core::double* v6 = let final self::Test3* #t26 = t in let final core::double* #t27 = #t26.{self::Test3::prop}{core::double*} in #t27 == null ?{core::double*} #t26.{self::Test3::prop} = self::getDouble() : #t27;
+    core::double* v7 = let final self::Test3* #t28 = t in #t28.{self::Test3::prop} = #t28.{self::Test3::prop}{core::double*}.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+    core::double* v8 = let final self::Test3* #t29 = t in #t29.{self::Test3::prop} = #t29.{self::Test3::prop}{core::double*}.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+    core::double* v9 = let final self::Test3* #t30 = t in #t30.{self::Test3::prop} = #t30.{self::Test3::prop}{core::double*}.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+    core::double* v10 = let final self::Test3* #t31 = t in #t31.{self::Test3::prop} = #t31.{self::Test3::prop}{core::double*}.{core::double::+}(1){(core::num*) →* core::double*};
+    core::double* v11 = let final self::Test3* #t32 = t in let final core::double* #t33 = #t32.{self::Test3::prop}{core::double*} in let final core::double* #t34 = #t32.{self::Test3::prop} = #t33.{core::double::+}(1){(core::num*) →* core::double*} in #t33;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method getInt() → core::int*
+  return 0;
+static method getNum() → core::num*
+  return 0;
+static method getDouble() → core::double*
+  return 0.0;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.modular.expect
new file mode 100644
index 0000000..e2c5e19
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* f = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::A* a = new self::A::•();
+static field core::int* b = self::a.{self::A::f} = 1;
+static field core::int* c = 0;
+static field core::int* d = self::c = 1;
+static method main() → dynamic {
+  self::a;
+  self::b;
+  self::c;
+  self::d;
+}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.weak.modular.expect
new file mode 100644
index 0000000..090413f
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  static field self::B* staticVariable = null;
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(self::C* v) → self::A*
+    return null;
+  operator -(core::int* i) → self::B*
+    return null;
+  operator *(self::B* v) → self::B*
+    return null;
+  operator &(self::A* v) → self::C*
+    return null;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+static field self::B* topLevelVariable;
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method test_topLevelVariable() → void {
+  self::topLevelVariable = self::f<self::B*>();
+  self::topLevelVariable == null ?{self::B*} self::topLevelVariable = self::f<self::B*>() : null;
+  self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v1 = self::topLevelVariable = self::f<self::B*>();
+  self::B* v2 = let final self::B* #t1 = self::topLevelVariable in #t1 == null ?{self::B*} self::topLevelVariable = self::f<self::B*>() : #t1;
+  self::A* v3 = self::topLevelVariable = self::topLevelVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = self::topLevelVariable = self::topLevelVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = self::topLevelVariable = self::topLevelVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = self::topLevelVariable = self::topLevelVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t2 = self::topLevelVariable in let final self::B* #t3 = self::topLevelVariable = #t2.{self::B::-}(1){(core::int*) →* self::B*} in #t2;
+}
+static method test_staticVariable() → void {
+  self::B::staticVariable = self::f<self::B*>();
+  self::B::staticVariable == null ?{self::B*} self::B::staticVariable = self::f<self::B*>() : null;
+  self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v1 = self::B::staticVariable = self::f<self::B*>();
+  self::B* v2 = let final self::B* #t4 = self::B::staticVariable in #t4 == null ?{self::B*} self::B::staticVariable = self::f<self::B*>() : #t4;
+  self::A* v3 = self::B::staticVariable = self::B::staticVariable.{self::B::+}(self::f<self::C*>()){(self::C*) →* self::A*} as{TypeError} self::B*;
+  self::B* v4 = self::B::staticVariable = self::B::staticVariable.{self::B::*}(self::f<self::B*>()){(self::B*) →* self::B*};
+  self::C* v5 = self::B::staticVariable = self::B::staticVariable.{self::B::&}(self::f<self::A*>()){(self::A*) →* self::C*};
+  self::B* v6 = self::B::staticVariable = self::B::staticVariable.{self::B::-}(1){(core::int*) →* self::B*};
+  self::B* v7 = let final self::B* #t5 = self::B::staticVariable in let final self::B* #t6 = self::B::staticVariable = #t5.{self::B::-}(1){(core::int*) →* self::B*} in #t5;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart.weak.modular.expect
new file mode 100644
index 0000000..ae43fd0
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static_upwards.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::int* topLevelInt;
+static field core::num* topLevelNum;
+static field core::double* topLevelDouble;
+static method getInt() → core::int*
+  return 0;
+static method getNum() → core::num*
+  return 0;
+static method getDouble() → core::double*
+  return 0.0;
+static method test1() → void {
+  core::int* v1 = self::topLevelInt = self::getInt();
+  core::num* v2 = self::topLevelInt = self::getNum() as{TypeError} core::int*;
+  core::int* v4 = let final core::int* #t1 = self::topLevelInt in #t1 == null ?{core::int*} self::topLevelInt = self::getInt() : #t1;
+  core::num* v5 = let final core::int* #t2 = self::topLevelInt in #t2 == null ?{core::num*} self::topLevelInt = self::getNum() as{TypeError} core::int* : #t2;
+  core::int* v7 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getInt()){(core::num*) →* core::int*};
+  core::num* v8 = self::topLevelInt = self::topLevelInt.{core::num::+}(self::getNum()){(core::num*) →* core::num*} as{TypeError} core::int*;
+  core::int* v10 = self::topLevelInt = self::topLevelInt.{core::num::+}(1){(core::num*) →* core::int*};
+  core::int* v11 = let final core::int* #t3 = self::topLevelInt in let final core::int* #t4 = self::topLevelInt = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3;
+}
+static method test2() → void {
+  core::int* v1 = self::topLevelNum = self::getInt();
+  core::num* v2 = self::topLevelNum = self::getNum();
+  core::double* v3 = self::topLevelNum = self::getDouble();
+  core::num* v4 = let final core::num* #t5 = self::topLevelNum in #t5 == null ?{core::num*} self::topLevelNum = self::getInt() : #t5;
+  core::num* v5 = let final core::num* #t6 = self::topLevelNum in #t6 == null ?{core::num*} self::topLevelNum = self::getNum() : #t6;
+  core::num* v6 = let final core::num* #t7 = self::topLevelNum in #t7 == null ?{core::num*} self::topLevelNum = self::getDouble() : #t7;
+  core::num* v7 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getInt()){(core::num*) →* core::num*};
+  core::num* v8 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getNum()){(core::num*) →* core::num*};
+  core::num* v9 = self::topLevelNum = self::topLevelNum.{core::num::+}(self::getDouble()){(core::num*) →* core::num*};
+  core::num* v10 = self::topLevelNum = self::topLevelNum.{core::num::+}(1){(core::num*) →* core::num*};
+  core::num* v11 = let final core::num* #t8 = self::topLevelNum in let final core::num* #t9 = self::topLevelNum = #t8.{core::num::+}(1){(core::num*) →* core::num*} in #t8;
+}
+static method test3() → void {
+  core::num* v2 = self::topLevelDouble = self::getNum() as{TypeError} core::double*;
+  core::double* v3 = self::topLevelDouble = self::getDouble();
+  core::num* v5 = let final core::double* #t10 = self::topLevelDouble in #t10 == null ?{core::num*} self::topLevelDouble = self::getNum() as{TypeError} core::double* : #t10;
+  core::double* v6 = let final core::double* #t11 = self::topLevelDouble in #t11 == null ?{core::double*} self::topLevelDouble = self::getDouble() : #t11;
+  core::double* v7 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getInt()){(core::num*) →* core::double*};
+  core::double* v8 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getNum()){(core::num*) →* core::double*};
+  core::double* v9 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(self::getDouble()){(core::num*) →* core::double*};
+  core::double* v10 = self::topLevelDouble = self::topLevelDouble.{core::double::+}(1){(core::num*) →* core::double*};
+  core::double* v11 = let final core::double* #t12 = self::topLevelDouble in let final core::double* #t13 = self::topLevelDouble = #t12.{core::double::+}(1){(core::num*) →* core::double*} in #t12;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.modular.expect
new file mode 100644
index 0000000..871301b
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:16:7: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var x;
+//       ^
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Context: This is one of the overridden members.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Context: This is one of the overridden members.
+//   void set x(double value);
+//            ^
+//
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Error: The type 'int' of the getter 'A.x' is not assignable to the type 'double' of the setter 'A.x'.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Context: This is the declaration of the setter 'A.x'.
+//   void set x(double value);
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::int*;
+  abstract set x(core::double* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  field invalid-type x = null;
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.modular.expect
new file mode 100644
index 0000000..497e214
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.weak.modular.expect
@@ -0,0 +1,61 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:16:7: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var x;
+//       ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:6:9: Context: This is one of the overridden members.
+//   A get x;
+//         ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:7:12: Context: This is one of the overridden members.
+//   void set x(B value);
+//            ^
+//
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:17:7: Error: Can't infer a type for 'y' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var y;
+//       ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:9:9: Context: This is one of the overridden members.
+//   B get y;
+//         ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:10:12: Context: This is one of the overridden members.
+//   void set y(A value);
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract get x() → self::A*;
+  abstract set x(self::B* value) → void;
+  abstract get y() → self::B*;
+  abstract set y(self::A* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  field invalid-type x = null;
+  field invalid-type y = null;
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..6282349
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.weak.modular.expect
@@ -0,0 +1,47 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:19:7: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var x;
+//       ^
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:13:11: Context: This is one of the overridden members.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:9:12: Context: This is one of the overridden members.
+//   void set x(num value);
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract set x(core::num* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  abstract get x() → core::int*;
+}
+class C extends self::B {
+  field invalid-type x = null;
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..001d19d
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.weak.modular.expect
@@ -0,0 +1,47 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:19:7: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var x;
+//       ^
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:9:11: Context: This is one of the overridden members.
+//   num get x;
+//           ^
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:13:12: Context: This is one of the overridden members.
+//   void set x(int value);
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract get x() → core::num*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  abstract set x(core::int* value) → void;
+}
+class C extends self::B {
+  field invalid-type x = null;
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.modular.expect
new file mode 100644
index 0000000..ea950c6
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field self::B* b = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get c() → self::C*
+    return null;
+  set c(self::C* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+}
+static field self::A* a = new self::A::•();
+static field self::C* x = self::a.{self::A::b}{self::B*}.{self::B::c}{self::C*};
+static field self::C* y = let final self::B* #t1 = self::a.{self::A::b}{self::B*} in let final self::C* #t2 = #t1.{self::B::c}{self::C*} in #t2 == null ?{self::C*} #t1.{self::B::c} = new self::D::•() : #t2;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.modular.expect
new file mode 100644
index 0000000..b174194
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field self::B* b = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  field self::C* c = null;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+}
+static field self::A* a = new self::A::•();
+static field self::C* x = self::a.{self::A::b}{self::B*}.{self::B::c}{self::C*};
+static field self::C* y = let final self::B* #t1 = self::a.{self::A::b}{self::B*} in let final self::C* #t2 = #t1.{self::B::c}{self::C*} in #t2 == null ?{self::C*} #t1.{self::B::c} = new self::D::•() : #t2;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.modular.expect
new file mode 100644
index 0000000..21df0fc
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:11:7: Error: Can't infer the type of 'b': circularity found during type inference.
+// Specify the type explicitly.
+//   var b = /*@ returnType=() ->* invalid-type */ () => x;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field invalid-type b = () → () →* invalid-type => self::x;
+  field () →* () →* invalid-type c = () → () →* invalid-type => self::x;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::A* a = new self::A::•();
+static field () →* invalid-type x = () → invalid-type => self::a.{self::A::b}{invalid-type};
+static field () →* () →* () →* invalid-type y = () → () →* () →* invalid-type => self::a.{self::A::c}{() →* () →* invalid-type};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.modular.expect
new file mode 100644
index 0000000..2b05154
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_logical.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* x = self::f<core::bool*>() || self::f<core::bool*>();
+static field core::bool* y = self::f<core::bool*>() && self::f<core::bool*>();
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method test() → void {
+  core::bool* x = self::f<core::bool*>() || self::f<core::bool*>();
+  core::bool* y = self::f<core::bool*>() && self::f<core::bool*>();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.modular.expect
new file mode 100644
index 0000000..18cf625
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method f() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  method f() → void {}
+}
+static field void x = new self::C::•().{self::C::f}(){() →* void};
+static method main() → dynamic {
+  self::x;
+}
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..3faad32
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:13: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// var x = i = s;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::int* i;
+static field core::String* s;
+static field core::String* x = self::i = invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:13: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+var x = i = s;
+            ^" in self::s as{TypeError} core::int*;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.modular.expect
new file mode 100644
index 0000000..30af47a
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<Null>* x = <Null>[null];
+static method main() → dynamic {
+  self::x;
+}
diff --git a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.modular.expect
new file mode 100644
index 0000000..c5b6db9
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::Map<Null, Null>* x = <Null, Null>{null: null};
+static method main() → dynamic {
+  self::x;
+}
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.modular.expect
new file mode 100644
index 0000000..35f8118
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.weak.modular.expect
@@ -0,0 +1,89 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class I1 extends core::Object {
+  synthetic constructor •() → self::I1*
+    : super core::Object::•()
+    ;
+  abstract method f(core::int* i) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I2 extends core::Object {
+  synthetic constructor •() → self::I2*
+    : super core::Object::•()
+    ;
+  abstract method f(core::Object* o) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends core::Object implements self::I1, self::I2 {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature method f(core::Object* o) → void; -> self::I2::f
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method f(core::Object* o) → void {}
+}
+abstract class E extends core::Object implements self::I2, self::I1 {
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F extends self::E {
+  synthetic constructor •() → self::F*
+    : super self::E::•()
+    ;
+  method f(core::Object* o) → void {}
+}
+static method g1(self::C* c) → void {
+  c.{self::C::f}("hi"){(core::Object*) →* void};
+}
+static method g2(self::E* e) → void {
+  e.{self::I2::f}("hi"){(core::Object*) →* void};
+}
+static method main() → dynamic {
+  self::g1(new self::D::•());
+  self::g2(new self::F::•());
+}
diff --git a/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.modular.expect
new file mode 100644
index 0000000..fa63c03
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/null_aware_property_get.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  method method<T extends core::Object* = dynamic>() → self::Class::method::T*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::Class* c;
+  () →* core::num* f = let final self::Class* #t1 = c in #t1 == null ?{() →* core::num*} null : #t1.{self::Class::method}{<T extends core::Object* = dynamic>() →* T*}<core::num*>;
+}
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.modular.expect
new file mode 100644
index 0000000..facdace
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.weak.modular.expect
@@ -0,0 +1,137 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/property_assign_combiner.dart:29:9: Error: The type 'A' of the getter 'G.target' is not assignable to the type 'B' of the setter 'G.target'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/property_assign_combiner.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/inference_new/property_assign_combiner.dart'.
+//   A get target => null;
+//         ^^^^^^
+// pkg/front_end/testcases/inference_new/property_assign_combiner.dart:31:12: Context: This is the declaration of the setter 'G.target'.
+//   void set target(B value) {}
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator +(core::int* value) → self::C*
+    return null;
+  operator *(self::D* value) → self::C*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  operator +(core::int* value) → self::E*
+    return null;
+  operator *(self::F* value) → self::E*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E extends core::Object {
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F extends core::Object {
+  synthetic constructor •() → self::F*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class G extends core::Object {
+  synthetic constructor •() → self::G*
+    : super core::Object::•()
+    ;
+  get target() → self::A*
+    return null;
+  set target(self::B* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method test1(self::G* g) → void {
+  let final self::G* #t1 = g in #t1.{self::G::target} = #t1.{self::G::target}{self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
+  self::C* x = let final self::G* #t2 = g in #t2.{self::G::target} = #t2.{self::G::target}{self::A*}.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
+}
+static method test2(self::G* g) → void {
+  let final self::G* #t3 = g in #t3.{self::G::target} = #t3.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
+  self::C* x = let final self::G* #t4 = g in #t4.{self::G::target} = #t4.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
+}
+static method test3(self::G* g) → void {
+  let final self::G* #t5 = g in #t5.{self::G::target} = #t5.{self::G::target}{self::A*}.{self::A::+}(1){(core::int*) →* self::C*};
+  self::A* x = let final self::G* #t6 = g in let final self::A* #t7 = #t6.{self::G::target}{self::A*} in let final self::C* #t8 = #t6.{self::G::target} = #t7.{self::A::+}(1){(core::int*) →* self::C*} in #t7;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.modular.expect
new file mode 100644
index 0000000..d52af61
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int* field = 0;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  get getter() → core::int*
+    return 0;
+  method function() → core::int*
+    return 0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C* c = new self::C::•();
+static field core::int* field_ref = self::c.{self::C::field}{core::int*};
+static field core::int* getter_ref = self::c.{self::C::getter}{core::int*};
+static field () →* core::int* function_ref = self::c.{self::C::function}{() →* core::int*};
+static field core::List<core::int*>* field_ref_list = <core::int*>[self::c.{self::C::field}{core::int*}];
+static field core::List<core::int*>* getter_ref_list = <core::int*>[self::c.{self::C::getter}{core::int*}];
+static field core::List<() →* core::int*>* function_ref_list = <() →* core::int*>[self::c.{self::C::function}{() →* core::int*}];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.modular.expect
new file mode 100644
index 0000000..0c920ee
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.weak.modular.expect
@@ -0,0 +1,122 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/static_assign_combiner.dart:28:7: Error: The type 'A' of the getter 'target' is not assignable to the type 'B' of the setter 'target'.
+//  - 'A' is from 'pkg/front_end/testcases/inference_new/static_assign_combiner.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/inference_new/static_assign_combiner.dart'.
+// A get target => null;
+//       ^^^^^^
+// pkg/front_end/testcases/inference_new/static_assign_combiner.dart:30:10: Context: This is the declaration of the setter 'target'.
+// void set target(B value) {}
+//          ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator +(core::int* value) → self::C*
+    return null;
+  operator *(self::D* value) → self::C*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  operator +(core::int* value) → self::E*
+    return null;
+  operator *(self::F* value) → self::E*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E extends core::Object {
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F extends core::Object {
+  synthetic constructor •() → self::F*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static get target() → self::A*
+  return null;
+static set target(self::B* value) → void {}
+static method test1() → void {
+  self::target = self::target.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
+  self::C* x = self::target = self::target.{self::A::*}(self::f<self::D*>()){(self::D*) →* self::C*};
+}
+static method test2() → void {
+  self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
+  self::C* x = self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
+}
+static method test3() → void {
+  self::target = self::target.{self::A::+}(1){(core::int*) →* self::C*};
+  self::A* x = let final self::A* #t1 = self::target in let final self::C* #t2 = self::target = #t1.{self::A::+}(1){(core::int*) →* self::C*} in #t1;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.modular.expect
new file mode 100644
index 0000000..276a1c2
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/strongly_connected_component.dart:17:5: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+// var x = /*@ returnType=() ->* invalid-type */ () => f() ? y : z;
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field invalid-type x = () → () →* invalid-type => self::f() ?{() →* invalid-type} self::y : self::z;
+static field () →* invalid-type y = () → invalid-type => self::x;
+static field () →* invalid-type z = () → invalid-type => self::x;
+static method f() → core::bool*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.modular.expect
new file mode 100644
index 0000000..2910dae
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/super_index_get.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  operator [](core::int* x) → core::num*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  operator [](core::Object* x) → core::int*
+    return null;
+  method h() → void {
+    core::num* x = super.{self::B::[]}(self::f<core::int*>());
+  }
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.modular.expect
new file mode 100644
index 0000000..b2841e6
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class D<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E<T extends core::Object* = dynamic> extends self::D<self::E::T*> {
+  synthetic constructor •() → self::E<self::E::T*>*
+    : super self::D::•()
+    ;
+}
+class B<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  operator [](covariant-by-class self::E<self::B::T*>* x) → self::D<self::B::T*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
+  synthetic constructor •() → self::C<self::C::U*>*
+    : super self::B::•()
+    ;
+  operator [](covariant-by-class core::Object* x) → self::E<asy::Future<self::C::U*>*>*
+    return null;
+  method h() → void {
+    self::D<asy::Future<self::C::U*>*>* x = super.{self::B::[]}(self::f<self::E<asy::Future<self::C::U*>*>*>());
+  }
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/switch.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/switch.dart.weak.modular.expect
new file mode 100644
index 0000000..6e55000
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/switch.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method test(self::C<core::int*>* x) → void {
+  #L1:
+  switch(x) {
+    #L2:
+    case #C1:
+      {
+        core::int* y = 0;
+        break #L1;
+      }
+    #L3:
+    default:
+      {
+        core::int* y = 0;
+        break #L1;
+      }
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::C<core::int*> {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///switch.dart:
+- C. (from org-dartlang-testcase:///switch.dart:11:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.modular.expect
new file mode 100644
index 0000000..69cac39
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.weak.modular.expect
@@ -0,0 +1,104 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+abstract class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract method foo() → self::A*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class E extends core::Object {
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  abstract method foo() → self::B*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class F extends core::Object {
+  synthetic constructor •() → self::F*
+    : super core::Object::•()
+    ;
+  abstract method foo() → core::Object*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class G extends core::Object implements self::D, self::E, self::F {
+  synthetic constructor •() → self::G*
+    : super core::Object::•()
+    ;
+  abstract member-signature method foo() → self::B*; -> self::E::foo
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class H extends self::G {
+  synthetic constructor •() → self::H*
+    : super self::G::•()
+    ;
+  method foo() → self::C*
+    return new self::C::•();
+}
+static field self::B* x = self::bar().{self::G::foo}(){() →* self::B*};
+static method bar() → self::G*
+  return new self::H::•();
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.modular.expect
new file mode 100644
index 0000000..26fdda1
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+  return 1;
+}){(() →* core::int*) →* core::List<core::int*>*};
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+  return <self::f::T*>[g(){() →* self::f::T*}];
+static method main() → dynamic {
+  self::v;
+}
+
+constants  {
+  #C1 = static-tearoff self::f
+}
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.modular.expect
new file mode 100644
index 0000000..26fdda1
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int*>* v = #C1<core::int*>(() → core::int* {
+  return 1;
+}){(() →* core::int*) →* core::List<core::int*>*};
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+  return <self::f::T*>[g(){() →* self::f::T*}];
+static method main() → dynamic {
+  self::v;
+}
+
+constants  {
+  #C1 = static-tearoff self::f
+}
diff --git a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.modular.expect
new file mode 100644
index 0000000..96e59b9
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field void y = self::run<void>(#C1);
+static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T* {
+  core::print("running");
+  self::run::T* t = f(){() →* self::run::T*};
+  core::print("done running");
+  return t;
+}
+static method printRunning() → void {
+  core::print("running");
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::printRunning
+}
diff --git a/pkg/front_end/testcases/inference_new/while_loop.dart.weak.modular.expect b/pkg/front_end/testcases/inference_new/while_loop.dart.weak.modular.expect
new file mode 100644
index 0000000..7469e19
--- /dev/null
+++ b/pkg/front_end/testcases/inference_new/while_loop.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object* = dynamic>() → self::f::T*
+  return null;
+static method test() → void {
+  while (self::f<core::bool*>()) {
+    core::int* x = 0;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.modular.expect
new file mode 100644
index 0000000..336e446
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.weak.modular.expect
@@ -0,0 +1,52 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<X extends self::B<self::D::X*, self::D::Y*>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y*>* = self::C<dynamic, dynamic>*, Z extends (self::D::Y*) →* self::D::X* = (Null) →* self::B<dynamic, dynamic>*, W extends core::num*> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X*, self::D::Y*, self::D::Z*, self::D::W*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, (Null) →* self::B<dynamic, dynamic>*, core::num*>* d;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.modular.expect
new file mode 100644
index 0000000..7de5b6d
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+import "dart:collection";
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    col::LinkedListEntry<col::LinkedListEntry<dynamic>>* bar;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  col::LinkedListEntry<col::LinkedListEntry<dynamic>>* bar;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.modular.expect
new file mode 100644
index 0000000..ff8c02f
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    core::List<self::A<core::num*>*>* a = <self::A<core::num*>*>[];
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::List<self::A<core::num*>*>* a = <self::A<core::num*>*>[];
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.modular.expect
new file mode 100644
index 0000000..186472b
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<U extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::U*>*
+    : super core::Object::•()
+    ;
+  method fun() → dynamic {
+    core::List<self::A<self::B::U*>*>* foo = <self::A<self::B::U*>*>[];
+    core::List<self::A<core::num*>*>* bar = <self::A<core::num*>*>[];
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.modular.expect
new file mode 100644
index 0000000..28c2e96
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    core::Map<self::A<core::num*>*, self::A<core::num*>*>* a = <self::A<core::num*>*, self::A<core::num*>*>{};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::Map<self::A<core::num*>*, self::A<core::num*>*>* a = <self::A<core::num*>*, self::A<core::num*>*>{};
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..5aa8724
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+import "dart:collection";
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method fun() → dynamic {
+    self::A<dynamic>* a;
+    col::DoubleLinkedQueue<dynamic>* c;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::A<dynamic>* a;
+  col::DoubleLinkedQueue<dynamic>* c;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.modular.expect
new file mode 100644
index 0000000..9b5f2f8
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends self::A<self::A::T*>* = self::A<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    self::A<self::A<dynamic>*>* a;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::A<self::A<dynamic>*>* a;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.modular.expect
new file mode 100644
index 0000000..19c0496
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    core::List<(core::num*) →* dynamic>* a = <(core::num*) →* dynamic>[];
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::List<(core::num*) →* dynamic>* a = <(core::num*) →* dynamic>[];
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.modular.expect
new file mode 100644
index 0000000..cf2c35d
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+class B<U extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::U*>*
+    : super core::Object::•()
+    ;
+  method fun() → dynamic {
+    core::List<(self::B::U*) →* dynamic>* foo = <(self::B::U*) →* dynamic>[];
+    core::List<(core::num*) →* dynamic>* bar = <(core::num*) →* dynamic>[];
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::List<(core::num*) →* dynamic>* bar = <(core::num*) →* dynamic>[];
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.modular.expect
new file mode 100644
index 0000000..82bfe94
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    core::Map<(core::num*) →* dynamic, (core::num*) →* dynamic>* a = <(core::num*) →* dynamic, (core::num*) →* dynamic>{};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::Map<(core::num*) →* dynamic, (core::num*) →* dynamic>* a = <(core::num*) →* dynamic, (core::num*) →* dynamic>{};
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..f6435f7
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    (dynamic) →* dynamic a;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  (dynamic) →* dynamic a;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.modular.expect
new file mode 100644
index 0000000..d4a97aa
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef B<contravariant U extends (U*) →* dynamic = (dynamic) →* dynamic> = (U*) →* dynamic;
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    ((dynamic) →* dynamic) →* dynamic b;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  ((dynamic) →* dynamic) →* dynamic b;
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.modular.expect
new file mode 100644
index 0000000..98dbd20
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C<X extends core::num*, Y extends (self::C::X*) →* void = (Null) →* void> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C<core::num*, (Null) →* void>* c;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.modular.expect
new file mode 100644
index 0000000..a7c105a
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C<X extends core::num*, Y extends (self::C::X*) →* void = (Null) →* void> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::List<self::C<core::num*, (Null) →* void>*>* lc = <self::C<core::num*, (Null) →* void>*>[];
+static field core::Map<self::C<core::num*, (Null) →* void>*, self::C<core::num*, (Null) →* void>*>* mc = <self::C<core::num*, (Null) →* void>*, self::C<core::num*, (Null) →* void>*>{};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.modular.expect
new file mode 100644
index 0000000..e4ecd94
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class D<X extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void, Y extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E<X extends (self::E::X*) →* void = (Null) →* void> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::D<(Null, Null) →* void, (Null, Null) →* void>* d;
+static field self::E<(Null) →* void>* e;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.modular.expect
new file mode 100644
index 0000000..eaaf4d5
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class D<X extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void, Y extends (self::D::X*, self::D::Y*) →* void = (Null, Null) →* void> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E<X extends (self::E::X*) →* void = (Null) →* void> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::List<self::D<(Null, Null) →* void, (Null, Null) →* void>*>* ld = <self::D<(Null, Null) →* void, (Null, Null) →* void>*>[];
+static field core::Map<self::D<(Null, Null) →* void, (Null, Null) →* void>*, self::D<(Null, Null) →* void, (Null, Null) →* void>*>* md = <self::D<(Null, Null) →* void, (Null, Null) →* void>*, self::D<(Null, Null) →* void, (Null, Null) →* void>*>{};
+static field core::List<self::E<(Null) →* void>*>* le = <self::E<(Null) →* void>*>[];
+static field core::Map<self::E<(Null) →* void>*, self::E<(Null) →* void>*>* me = <self::E<(Null) →* void>*, self::E<(Null) →* void>*>{};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.modular.expect
new file mode 100644
index 0000000..5fa1f9e
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.weak.modular.expect
@@ -0,0 +1,84 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = self::A<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<X extends core::num*, Y extends self::A<self::D::X*>* = self::A<core::num*>*> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F<X extends core::num*, Y extends () →* self::F::X* = () →* core::num*> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X*, self::F::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C<dynamic, self::A<dynamic>*>* c;
+static field self::D<core::num*, self::A<core::num*>*>* d;
+static field self::E<dynamic, () →* dynamic>* e;
+static field self::F<core::num*, () →* core::num*>* f;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.modular.expect
new file mode 100644
index 0000000..6957306
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.weak.modular.expect
@@ -0,0 +1,88 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = self::A<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<X extends core::num*, Y extends self::A<self::D::X*>* = self::A<core::num*>*> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F<X extends core::num*, Y extends () →* self::F::X* = () →* core::num*> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X*, self::F::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::List<self::C<dynamic, self::A<dynamic>*>*>* lc = <self::C<dynamic, self::A<dynamic>*>*>[];
+static field core::Map<self::C<dynamic, self::A<dynamic>*>*, self::C<dynamic, self::A<dynamic>*>*>* mc = <self::C<dynamic, self::A<dynamic>*>*, self::C<dynamic, self::A<dynamic>*>*>{};
+static field core::List<self::D<core::num*, self::A<core::num*>*>*>* ld = <self::D<core::num*, self::A<core::num*>*>*>[];
+static field core::Map<self::D<core::num*, self::A<core::num*>*>*, self::D<core::num*, self::A<core::num*>*>*>* md = <self::D<core::num*, self::A<core::num*>*>*, self::D<core::num*, self::A<core::num*>*>*>{};
+static field core::List<self::E<dynamic, () →* dynamic>*>* le = <self::E<dynamic, () →* dynamic>*>[];
+static field core::Map<self::E<dynamic, () →* dynamic>*, self::E<dynamic, () →* dynamic>*>* me = <self::E<dynamic, () →* dynamic>*, self::E<dynamic, () →* dynamic>*>{};
+static field core::List<self::F<core::num*, () →* core::num*>*>* lf = <self::F<core::num*, () →* core::num*>*>[];
+static field core::Map<self::F<core::num*, () →* core::num*>*, self::F<core::num*, () →* core::num*>*>* mf = <self::F<core::num*, () →* core::num*>*, self::F<core::num*, () →* core::num*>*>{};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.modular.expect
new file mode 100644
index 0000000..e5e5db0
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.weak.modular.expect
@@ -0,0 +1,83 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<X extends self::B<self::D::X*, self::D::Y*>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y*>* = self::C<dynamic, dynamic>*> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E<X extends self::B<self::E::X*, self::E::Y*>* = self::B<dynamic, dynamic>*, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F<X extends () →* self::F::X* = () →* dynamic> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>* d;
+static field self::E<self::B<dynamic, dynamic>*, () →* dynamic>* e;
+static field self::F<() →* dynamic>* f;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.modular.expect
new file mode 100644
index 0000000..b532365
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.weak.modular.expect
@@ -0,0 +1,86 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<X extends self::B<self::D::X*, self::D::Y*>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y*>* = self::C<dynamic, dynamic>*> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E<X extends self::B<self::E::X*, self::E::Y*>* = self::B<dynamic, dynamic>*, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F<X extends () →* self::F::X* = () →* dynamic> extends core::Object {
+  synthetic constructor •() → self::F<self::F::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::List<self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>* ld = <self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>[];
+static field core::Map<self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>* md = <self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>{};
+static field core::List<self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>* le = <self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>[];
+static field core::Map<self::E<self::B<dynamic, dynamic>*, () →* dynamic>*, self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>* me = <self::E<self::B<dynamic, dynamic>*, () →* dynamic>*, self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>{};
+static field core::List<self::F<() →* dynamic>*>* lf = <self::F<() →* dynamic>*>[];
+static field core::Map<self::F<() →* dynamic>*, self::F<() →* dynamic>*>* mf = <self::F<() →* dynamic>*, self::F<() →* dynamic>*>{};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.modular.expect
new file mode 100644
index 0000000..e5f74ce
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.weak.modular.expect
@@ -0,0 +1,52 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<X extends core::Object* = dynamic, Y extends (self::C::X*) →* self::C::X* = (Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<X extends core::num*, Y extends (self::D::X*) →* self::D::X* = (Null) →* core::num*> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C<dynamic, (Null) →* dynamic>* c;
+static field self::D<core::num*, (Null) →* core::num*>* d;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.modular.expect
new file mode 100644
index 0000000..2cf489e
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.weak.modular.expect
@@ -0,0 +1,54 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<X extends core::Object* = dynamic, Y extends (self::C::X*) →* self::C::X* = (Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<X extends core::num*, Y extends (self::D::X*) →* self::D::X* = (Null) →* core::num*> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::List<self::C<dynamic, (Null) →* dynamic>*>* lc = <self::C<dynamic, (Null) →* dynamic>*>[];
+static field core::Map<self::C<dynamic, (Null) →* dynamic>*, self::C<dynamic, (Null) →* dynamic>*>* mc = <self::C<dynamic, (Null) →* dynamic>*, self::C<dynamic, (Null) →* dynamic>*>{};
+static field core::List<self::D<core::num*, (Null) →* core::num*>*>* ld = <self::D<core::num*, (Null) →* core::num*>*>[];
+static field core::Map<self::D<core::num*, (Null) →* core::num*>*, self::D<core::num*, (Null) →* core::num*>*>* md = <self::D<core::num*, (Null) →* core::num*>*, self::D<core::num*, (Null) →* core::num*>*>{};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.modular.expect
new file mode 100644
index 0000000..175fa49
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+import "dart:collection" as col;
+
+import "dart:collection";
+
+static field col::LinkedListEntry<col::LinkedListEntry<dynamic>>* y;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..5da171e
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::A<core::num*>* a = new self::A::•<core::num*>();
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..13d0abf
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::A::•<core::num*>();
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.modular.expect
new file mode 100644
index 0000000..f971b81
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends core::num*, S extends core::List<self::B::T*>* = core::List<core::num*>*> extends self::A<self::B::T*> {
+  constructor •([self::B::T* x = #C1]) → self::B<self::B::T*, self::B::S*>*
+    : super self::A::•() {}
+}
+static method main() → dynamic {
+  self::B<core::num*, core::List<core::num*>*>* x;
+  self::B<core::int*, core::List<core::int*>*>* y = new self::B::•<core::int*, core::List<core::int*>*>(3);
+  self::A<core::int*>* z = new self::B::•<core::int*, core::List<core::int*>*>();
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.modular.expect
new file mode 100644
index 0000000..7c188466
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Inferred type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<T>' of the type variable 'T' on 'B'.
+//  - 'Comparable' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// var y = new B();
+//             ^
+// pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:9:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<T extends Comparable<T>> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class B<T extends core::Comparable<self::B::T*>* = core::Comparable<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::B<core::Comparable<dynamic>*>* y = new self::B::•<core::Comparable<dynamic>*>();
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.modular.expect
new file mode 100644
index 0000000..e04675b
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method foo(self::A<core::num*>* a) → dynamic
+    return null;
+  method bar() → self::A<core::num*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.modular.expect
new file mode 100644
index 0000000..f1af679
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::List<self::A<core::num*>*>* a = <self::A<core::num*>*>[];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.modular.expect
new file mode 100644
index 0000000..a42b37a
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<S extends core::Object* = dynamic> extends core::Object {
+  final field core::List<self::A<self::B::S*>*>* foo = <self::A<self::B::S*>*>[];
+  final field core::List<self::A<core::num*>*>* bar = <self::A<core::num*>*>[];
+  synthetic constructor •() → self::B<self::B::S*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.modular.expect
new file mode 100644
index 0000000..e2fc6ab
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::Map<self::A<core::num*>*, self::A<core::num*>*>* a = <self::A<core::num*>*, self::A<core::num*>*>{};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.modular.expect
new file mode 100644
index 0000000..1576c98
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.weak.modular.expect
@@ -0,0 +1,170 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:9: Error: Type 'T' is a bound of itself via 'U', 'Y', 'Z'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+// class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<X extends self::A<self::D::X*>* = self::A<dynamic>*, Y extends self::A<self::D::Y*>* = self::A<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E<W extends self::B<self::E::W*, self::E::X*>* = self::B<dynamic, dynamic>*, X extends self::C<self::E::W*, self::E::X*>* = self::C<dynamic, dynamic>*, Y extends self::B<self::E::Y*, self::E::Z*>* = self::B<dynamic, dynamic>*, Z extends self::C<self::E::Y*, self::E::Z*>* = self::C<dynamic, dynamic>*> extends core::Object {
+  synthetic constructor •() → self::E<self::E::W*, self::E::X*, self::E::Y*, self::E::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F<V extends core::num*, W extends self::B<self::F::W*, self::F::X*>* = self::B<dynamic, dynamic>*, X extends self::C<self::F::W*, self::F::X*>* = self::C<dynamic, dynamic>*, Y extends self::B<self::F::W*, self::F::X*>* = self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, Z extends self::C<self::F::Y*, self::F::Z*>* = self::C<self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, dynamic>*> extends core::Object {
+  synthetic constructor •() → self::F<self::F::V*, self::F::W*, self::F::X*, self::F::Y*, self::F::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class G<V extends core::num*, W extends self::B<self::G::V*, self::G::X*>* = self::B<core::num*, dynamic>*, X extends self::C<self::G::W*, self::G::V*>* = self::C<dynamic, core::num*>*, Y extends self::B<self::G::W*, self::G::X*>* = self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, Z extends self::C<self::G::Y*, self::G::Z*>* = self::C<self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, dynamic>*> extends core::Object {
+  synthetic constructor •() → self::G<self::G::V*, self::G::W*, self::G::X*, self::G::Y*, self::G::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class H<S extends self::A<self::H::S*>* = self::A<dynamic>*, T extends self::B<self::H::T*, self::H::U*>* = self::B<dynamic, dynamic>*, U extends self::C<self::H::T*, self::H::U*>* = self::C<dynamic, dynamic>*, V extends self::A<self::H::V*>* = self::A<dynamic>*, W extends self::H::S* = self::A<dynamic>*, X extends self::H::T* = self::B<dynamic, dynamic>*, Y extends self::H::U* = self::C<dynamic, dynamic>*, Z extends self::H::V* = self::A<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::H<self::H::S*, self::H::T*, self::H::U*, self::H::V*, self::H::W*, self::H::X*, self::H::Y*, self::H::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class I<T extends invalid-type, U extends self::I::Y* = invalid-type, V extends (self::I::W*) →* dynamic = (Null) →* dynamic, W extends (self::I::X*) →* dynamic = (Null) →* dynamic, X extends (self::I::V*) →* dynamic = (Null) →* dynamic, Y extends self::I::Z* = invalid-type, Z extends self::I::T* = invalid-type> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T*, self::I::U*, self::I::V*, self::I::W*, self::I::X*, self::I::Y*, self::I::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class J<S extends (self::J::U*) →* self::J::T* = (Null) →* dynamic, T extends (self::J::S*) →* self::J::U* = (Null) →* dynamic, U extends (self::J::T*) →* self::J::S* = (Null) →* dynamic, V extends self::J::W* = dynamic, W extends self::J::X* = dynamic, X extends (self::J::V*) →* self::J::Y* = (Null) →* dynamic, Y extends self::J::Z* = dynamic, Z extends self::J::X* = dynamic> extends core::Object {
+  synthetic constructor •() → self::J<self::J::S*, self::J::T*, self::J::U*, self::J::V*, self::J::W*, self::J::X*, self::J::Y*, self::J::Z*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::D<self::A<dynamic>*, self::A<dynamic>*>* d;
+static field self::E<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>* e;
+static field self::F<core::num*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::C<self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, dynamic>*>* f;
+static field self::G<core::num*, self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*, self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, self::C<self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, dynamic>*>* g;
+static field self::H<self::A<dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::A<dynamic>*, self::A<dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::A<dynamic>*>* h;
+static field self::I<invalid-type, invalid-type, (Null) →* dynamic, (Null) →* dynamic, (Null) →* dynamic, invalid-type, invalid-type>* i;
+static field self::J<(Null) →* dynamic, (Null) →* dynamic, (Null) →* dynamic, dynamic, dynamic, (Null) →* dynamic, dynamic, dynamic>* j;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.modular.expect
new file mode 100644
index 0000000..381fd70
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.weak.modular.expect
@@ -0,0 +1,164 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C1<X extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic, Y extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::C1<self::C1::X*, self::C1::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C2<X extends (self::C2::Y*) →* self::C2::X* = (Null) →* dynamic, Y extends (self::C2::X*) →* self::C2::Y* = (Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::C2<self::C2::X*, self::C2::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C3<X extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic, Y extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::C3<self::C3::X*, self::C3::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C4<X extends (self::C4::X*, self::C4::Y*) →* self::C4::X* = (Null, Null) →* dynamic, Y extends (self::C4::X*, self::C4::Y*) →* self::C4::Y* = (Null, Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::C4<self::C4::X*, self::C4::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D1<X extends self::B<self::D1::X*, self::D1::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D1::Y*) →* self::D1::X* = (Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::D1<self::D1::X*, self::D1::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D2<X extends self::B<self::D2::X*, self::D2::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D2::X*) →* self::D2::Y* = (Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::D2<self::D2::X*, self::D2::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D3<X extends self::B<self::D3::X*, self::D3::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D3::X*, self::D3::Y*) →* self::D3::X* = (Null, Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::D3<self::D3::X*, self::D3::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D4<X extends self::B<self::D4::X*, self::D4::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D4::X*, self::D4::Y*) →* self::D4::Y* = (Null, Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::D4<self::D4::X*, self::D4::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E<X extends (self::E::X*) →* self::E::X* = (Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C1<(Null) →* dynamic, (Null) →* dynamic>* c1;
+static field self::C2<(Null) →* dynamic, (Null) →* dynamic>* c2;
+static field self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>* c3;
+static field self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>* c4;
+static field self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>* d1;
+static field self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>* d2;
+static field self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>* d3;
+static field self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>* d4;
+static field self::E<(Null) →* dynamic>* e;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.modular.expect
new file mode 100644
index 0000000..57e2111
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.weak.modular.expect
@@ -0,0 +1,173 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class B<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C1<X extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic, Y extends (self::C1::Y*) →* self::C1::X* = (Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::C1<self::C1::X*, self::C1::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C2<X extends (self::C2::Y*) →* self::C2::X* = (Null) →* dynamic, Y extends (self::C2::X*) →* self::C2::Y* = (Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::C2<self::C2::X*, self::C2::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C3<X extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic, Y extends (self::C3::X*, self::C3::Y*) →* self::C3::X* = (Null, Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::C3<self::C3::X*, self::C3::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C4<X extends (self::C4::X*, self::C4::Y*) →* self::C4::X* = (Null, Null) →* dynamic, Y extends (self::C4::X*, self::C4::Y*) →* self::C4::Y* = (Null, Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::C4<self::C4::X*, self::C4::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D1<X extends self::B<self::D1::X*, self::D1::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D1::Y*) →* self::D1::X* = (Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::D1<self::D1::X*, self::D1::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D2<X extends self::B<self::D2::X*, self::D2::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D2::X*) →* self::D2::Y* = (Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::D2<self::D2::X*, self::D2::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D3<X extends self::B<self::D3::X*, self::D3::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D3::X*, self::D3::Y*) →* self::D3::X* = (Null, Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::D3<self::D3::X*, self::D3::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D4<X extends self::B<self::D4::X*, self::D4::Y*>* = self::B<dynamic, dynamic>*, Y extends (self::D4::X*, self::D4::Y*) →* self::D4::Y* = (Null, Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::D4<self::D4::X*, self::D4::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E<X extends (self::E::X*) →* self::E::X* = (Null) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::E<self::E::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::List<self::C1<(Null) →* dynamic, (Null) →* dynamic>*>* lc1 = <self::C1<(Null) →* dynamic, (Null) →* dynamic>*>[];
+static field core::Map<self::C1<(Null) →* dynamic, (Null) →* dynamic>*, self::C1<(Null) →* dynamic, (Null) →* dynamic>*>* mc1 = <self::C1<(Null) →* dynamic, (Null) →* dynamic>*, self::C1<(Null) →* dynamic, (Null) →* dynamic>*>{};
+static field core::List<self::C2<(Null) →* dynamic, (Null) →* dynamic>*>* lc2 = <self::C2<(Null) →* dynamic, (Null) →* dynamic>*>[];
+static field core::Map<self::C2<(Null) →* dynamic, (Null) →* dynamic>*, self::C2<(Null) →* dynamic, (Null) →* dynamic>*>* mc2 = <self::C2<(Null) →* dynamic, (Null) →* dynamic>*, self::C2<(Null) →* dynamic, (Null) →* dynamic>*>{};
+static field core::List<self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* lc3 = <self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>[];
+static field core::Map<self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* mc3 = <self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C3<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>{};
+static field core::List<self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* lc4 = <self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>[];
+static field core::Map<self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>* mc4 = <self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*, self::C4<(Null, Null) →* dynamic, (Null, Null) →* dynamic>*>{};
+static field core::List<self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* ld1 = <self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>[];
+static field core::Map<self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* md1 = <self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D1<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>{};
+static field core::List<self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* ld2 = <self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>[];
+static field core::Map<self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>* md2 = <self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*, self::D2<self::B<dynamic, dynamic>*, (Null) →* dynamic>*>{};
+static field core::List<self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* ld3 = <self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>[];
+static field core::Map<self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* md3 = <self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D3<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>{};
+static field core::List<self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* ld4 = <self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>[];
+static field core::Map<self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>* md4 = <self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*, self::D4<self::B<dynamic, dynamic>*, (Null, Null) →* dynamic>*>{};
+static field core::List<self::E<(Null) →* dynamic>*>* le = <self::E<(Null) →* dynamic>*>[];
+static field core::Map<self::E<(Null) →* dynamic>*, self::E<(Null) →* dynamic>*>* me = <self::E<(Null) →* dynamic>*, self::E<(Null) →* dynamic>*>{};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.modular.expect
new file mode 100644
index 0000000..c15ea34
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart:12:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+// class B<TypeU extends A> {}
+//         ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart:10:16: Context: Bound of this variable references variable 'TypeT' from the same declaration.
+// class A<TypeT, TypeS extends TypeT> {}
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<TypeT extends core::Object* = dynamic, TypeS extends self::A::TypeT* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::TypeT*, self::A::TypeS*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<TypeU extends self::A<dynamic, dynamic>* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::TypeU*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<TypeV extends self::B<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::C<self::C::TypeV*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::C<self::B<dynamic>*>* c;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.modular.expect
new file mode 100644
index 0000000..a052bc5
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.weak.modular.expect
@@ -0,0 +1,47 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart:11:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+// class B<TypeU extends A> {}
+//         ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart:9:16: Context: Bound of this variable references variable 'TypeT' from the same declaration.
+// class A<TypeT, TypeS extends TypeT> {}
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<TypeT extends core::Object* = dynamic, TypeS extends self::A::TypeT* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::TypeT*, self::A::TypeS*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<TypeU extends self::A<dynamic, dynamic>* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::TypeU*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::B<dynamic>* b;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.modular.expect
new file mode 100644
index 0000000..a8be06f
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:9:12: Error: Type variables can't have generic function types in their bounds.
+// class Hest<TypeX extends Fisk> {}
+//            ^^^^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+// typedef Fisk = void Function<TypeY extends Hest>();
+//         ^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
+// typedef Fisk = void Function<TypeY extends Hest>();
+//                              ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
+// class Hest<TypeX extends Fisk> {}
+//            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Fisk = <TypeY extends core::Object* = dynamic>() →* void;
+class Hest<TypeX extends <TypeY extends core::Object* = dynamic>() →* void = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.modular.expect
new file mode 100644
index 0000000..1adc8bcb
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:10:14: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+// typedef void Fisk<TypeY extends Hest>();
+//              ^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:10:19: Context: Bound of this variable references raw type 'Hest'.
+// typedef void Fisk<TypeY extends Hest>();
+//                   ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:8:12: Context: Bound of this variable references raw type 'Fisk'.
+// class Hest<TypeX extends Fisk> {}
+//            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Fisk<unrelated TypeY extends core::Object* = dynamic> = () →* void;
+class Hest<TypeX extends () →* void> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.modular.expect
new file mode 100644
index 0000000..a6180cf
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart:8:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+// Try providing type arguments to 'Hest' here.
+// class Hest<TypeX extends Hest> {}
+//            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.modular.expect
new file mode 100644
index 0000000..3cc0758
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart:8:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+// Try providing type arguments to 'Hest' here.
+// class Hest<TypeX extends Hest, TypeY extends Hest> {}
+//            ^^^^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart:8:32: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+// Try providing type arguments to 'Hest' here.
+// class Hest<TypeX extends Hest, TypeY extends Hest> {}
+//                                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends core::Object* = dynamic, TypeY extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX*, self::Hest::TypeY*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.modular.expect
new file mode 100644
index 0000000..637253f
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart:9:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+// Try providing type arguments to 'Hest' here.
+// class Hest<TypeX extends Map<Hest, Hest>> {}
+//            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.modular.expect
new file mode 100644
index 0000000..f205aa6
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Fisk<TypeY extends self::Hest<self::Hest<core::Object*>*>*> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.modular.expect
new file mode 100644
index 0000000..340e597
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.weak.modular.expect
@@ -0,0 +1,54 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Hest, TypeZ extends Hest> {}
+//            ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:9:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:11:32: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Hest, TypeZ extends Hest> {}
+//                                ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:9:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic, TypeZ extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*, self::Fisk::TypeZ*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.modular.expect
new file mode 100644
index 0000000..5f8978b
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart:15:12: Error: Generic type 'LinkedListEntry' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'LinkedListEntry' here.
+// class Hest<X extends LinkedListEntry> {}
+//            ^
+//
+import self as self;
+import "dart:collection" as col;
+import "dart:core" as core;
+
+import "dart:collection";
+
+class Hest<X extends col::LinkedListEntry<col::LinkedListEntry<dynamic>>* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.modular.expect
new file mode 100644
index 0000000..74416db
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart:11:12: Error: Type variables can't have generic function types in their bounds.
+// class Fisk<TypeY extends Function<TypeZ extends Hest<Null>>(TypeZ)> {}
+//            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Fisk<TypeY extends <TypeZ extends self::Hest<Null>* = dynamic>(TypeZ*) →* dynamic = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.modular.expect
new file mode 100644
index 0000000..e411b58
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:12:15: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Naebdyr<TypeZ extends Map<Hest, Fisk>> {}
+//               ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:8:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:12:15: Error: Generic type 'Fisk' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Fisk' here.
+// class Naebdyr<TypeZ extends Map<Hest, Fisk>> {}
+//               ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:10:12: Context: Bound of this variable references variable 'TypeY' from the same declaration.
+// class Fisk<TypeY extends Fisk<TypeY>> {}
+//            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY*>* = self::Fisk<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Naebdyr<TypeZ extends core::Map<self::Hest<self::Hest<dynamic>*>*, self::Fisk<self::Fisk<dynamic>*>*>* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.modular.expect
new file mode 100644
index 0000000..0124e15
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:11:7: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+// class Hest<TypeX extends lib.Hest> {}
+//       ^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:11:12: Context: Bound of this variable references raw type 'Hest'.
+// class Hest<TypeX extends lib.Hest> {}
+//            ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle_lib.dart:16:12: Context: Bound of this variable references raw type 'Hest'.
+// class Hest<TypeY extends lib.Hest> {}
+//            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle_lib.dart" as lib;
+
+class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+library non_simple_many_libs_same_name_cycle_lib;
+import self as self2;
+import "non_simple_many_libs_same_name_cycle.dart" as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle.dart" as lib;
+
+class Hest<TypeY extends self::Hest<dynamic>*> extends core::Object {
+  synthetic constructor •() → self2::Hest<self2::Hest::TypeY*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.modular.expect
new file mode 100644
index 0000000..28d37ca
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Map<Hest, Hest>> {}
+//            ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart:9:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Fisk<TypeY extends core::Map<self::Hest<self::Hest<dynamic>*>*, self::Hest<self::Hest<dynamic>*>*>* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.modular.expect
new file mode 100644
index 0000000..34ba795
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.weak.modular.expect
@@ -0,0 +1,61 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Hest> {}
+//            ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart:9:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Naebdyr<TypeZ extends self::Fisk<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.modular.expect
new file mode 100644
index 0000000..5334658
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart:12:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Hest> {}
+//            ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart:10:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+//            ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Hest<TypeX extends self::Hest<self::Hest::TypeX*>* = self::Hest<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..8000a5e
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+import "dart:collection";
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method foo() → self::A<dynamic>*
+    return null;
+  method baz() → col::DoubleLinkedQueue<dynamic>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::A<dynamic>* a;
+static field col::DoubleLinkedQueue<dynamic>* c;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..97505bc
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends self::A<core::num*>*> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..5ec3988
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Comparable<self::A::X*>* = core::Comparable<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<Y extends self::A<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::B<self::B::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.modular.expect
new file mode 100644
index 0000000..a0f95a2
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends self::A<self::A::T*>* = self::A<dynamic>*> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::A<self::A<dynamic>*>* a;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.modular.expect
new file mode 100644
index 0000000..fbb18cb
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class X<T extends self::B*> extends core::Object {
+  synthetic constructor •() → self::X<self::X::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Y extends self::X<self::B*> {
+  synthetic constructor •() → self::Y*
+    : super self::X::•()
+    ;
+}
+static method main() → void {
+  exp::Expect::isTrue(new self::Y::•() is self::X<self::B*>*);
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.modular.expect
new file mode 100644
index 0000000..1e4c90a
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method foo((core::num*) →* dynamic a) → dynamic
+    return null;
+  method bar() → (core::num*) →* dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.modular.expect
new file mode 100644
index 0000000..954f38c
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+static field core::List<(core::num*) →* dynamic>* a = <(core::num*) →* dynamic>[];
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.modular.expect
new file mode 100644
index 0000000..8f09136
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+class B<S extends core::Object* = dynamic> extends core::Object {
+  final field core::List<(self::B::S*) →* dynamic>* foo = <(self::B::S*) →* dynamic>[];
+  final field core::List<(core::num*) →* dynamic>* bar = <(core::num*) →* dynamic>[];
+  synthetic constructor •() → self::B<self::B::S*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.modular.expect
new file mode 100644
index 0000000..0914a2c
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+static field core::Map<(core::num*) →* dynamic, (core::num*) →* dynamic>* a = <(core::num*) →* dynamic, (core::num*) →* dynamic>{};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..900d197
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method foo() → (dynamic) →* dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field (dynamic) →* dynamic a;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..f32d1b22
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<contravariant T extends core::num*> = (T*) →* dynamic;
+class B<T extends (core::num*) →* dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.modular.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.modular.expect
new file mode 100644
index 0000000..4280623
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef B<contravariant S extends (S*) →* dynamic = (dynamic) →* dynamic> = (S*) →* dynamic;
+static field ((dynamic) →* dynamic) →* dynamic b;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/compound.dart.weak.modular.expect
new file mode 100644
index 0000000..eb987a6
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
+//   local += 0;
+//   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method main() → dynamic {
+  lowered core::int? #local1;
+  lowered core::bool #local1#isSet = false;
+  function #local1#get() → core::int
+    return #local1#isSet ?{core::int} #local1{core::int} : throw new _in::LateError::localNI("local1");
+  function #local1#set(core::int #t1) → dynamic {
+    #local1#isSet = true;
+    return #local1 = #t1;
+  }
+  #local1#set(0){(core::int) → dynamic};
+  self::expect(0, #local1#get(){() → core::int});
+  #local1#set(#local1#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
+  self::expect(2, #local1#get(){() → core::int});
+  lowered core::int? #local2;
+  lowered core::bool #local2#isSet = false;
+  function #local2#get() → core::int {
+    if(!#local2#isSet) {
+      #local2 = 1;
+      #local2#isSet = true;
+    }
+    return #local2{core::int};
+  }
+  function #local2#set(core::int #t2) → dynamic {
+    #local2#isSet = true;
+    return #local2 = #t2;
+  }
+  self::expect(1, #local2#get(){() → core::int});
+  #local2#set(#local2#get(){() → core::int}.{core::num::+}(2){(core::num) → core::int}){(core::int) → dynamic};
+  self::expect(3, #local2#get(){() → core::int});
+}
+static method error() → dynamic {
+  lowered final core::int? #local;
+  lowered core::bool #local#isSet = false;
+  function #local#get() → core::int
+    return #local#isSet ?{core::int} #local{core::int} : throw new _in::LateError::localNI("local");
+  function #local#set(core::int #t3) → dynamic
+    if(#local#isSet)
+      throw new _in::LateError::localAI("local");
+    else {
+      #local#isSet = true;
+      return #local = #t3;
+    }
+  #local#set(invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Late variable 'local' without initializer is definitely unassigned.
+  local += 0;
+  ^^^^^" in #local#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.weak.modular.expect
new file mode 100644
index 0000000..c2ac0b9
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.weak.modular.expect
@@ -0,0 +1,65 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/covariant_late_field.dart:19:31: Error: The parameter 'value' of the method 'C.invariantField' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'A.invariantField'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void set invariantField(int value) {} // error
+//                               ^
+// pkg/front_end/testcases/late_lowering/covariant_late_field.dart:6:12: Context: This is the overridden method ('invariantField').
+//   late num invariantField;
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class A extends core::Object {
+  field core::num? _#A#invariantField = null;
+  field core::bool _#A#invariantField#isSet = false;
+  field core::num? _#A#covariantField = null;
+  field core::bool _#A#covariantField#isSet = false;
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  get invariantField() → core::num
+    return this.{self::A::_#A#invariantField#isSet}{core::bool} ?{core::num} let final core::num? #t1 = this.{self::A::_#A#invariantField}{core::num?} in #t1{core::num} : throw new _in::LateError::fieldNI("invariantField");
+  set invariantField(core::num #t2) → void {
+    this.{self::A::_#A#invariantField#isSet} = true;
+    this.{self::A::_#A#invariantField} = #t2;
+  }
+  get covariantField() → core::num
+    return this.{self::A::_#A#covariantField#isSet}{core::bool} ?{core::num} let final core::num? #t3 = this.{self::A::_#A#covariantField}{core::num?} in #t3{core::num} : throw new _in::LateError::fieldNI("covariantField");
+  set covariantField(covariant-by-declaration core::num #t4) → void {
+    this.{self::A::_#A#covariantField#isSet} = true;
+    this.{self::A::_#A#covariantField} = #t4;
+  }
+}
+abstract class B extends core::Object implements self::A {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  abstract get invariantField() → core::num;
+  abstract set invariantField(core::num value) → void;
+  abstract get covariantField() → core::num;
+  abstract set covariantField(covariant-by-declaration core::num value) → void;
+}
+abstract class C extends core::Object implements self::A {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  abstract get invariantField() → core::int;
+  set invariantField(core::int value) → void {}
+  abstract get covariantField() → core::int;
+  set covariantField(covariant-by-declaration core::int value) → void {}
+}
+abstract class D extends core::Object implements self::A {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+  abstract get invariantField() → core::int;
+  set invariantField(covariant-by-declaration core::int value) → void {}
+  abstract get covariantField() → core::int;
+  set covariantField(covariant-by-declaration core::int value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.modular.expect
new file mode 100644
index 0000000..28154dd
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.modular.expect
@@ -0,0 +1,299 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → Null fieldDirect = <T extends core::Object? = dynamic>(T% value) → Null {
+  lowered final T? #local2;
+  lowered core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
+  function #local2#set(T% #t1) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateError::localAI("local2");
+    else {
+      #local2#isSet = true;
+      return #local2 = #t1;
+    }
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
+  function #local4#get() → core::int
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
+  function #local4#set(core::int #t2) → dynamic
+    if(#local4#isSet)
+      throw new _in::LateError::localAI("local4");
+    else {
+      #local4#isSet = true;
+      return #local4 = #t2;
+    }
+  lowered final FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
+  function #local6#get() → FutureOr<core::int>
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+  function #local6#set(FutureOr<core::int>#t3) → dynamic
+    if(#local6#isSet)
+      throw new _in::LateError::localAI("local6");
+    else {
+      #local6#isSet = true;
+      return #local6 = #t3;
+    }
+  #local2#set(value){(T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Late final variable '#local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^^" in #local2#set(value){(T%) → dynamic};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Late final variable '#local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Late final variable '#local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
+  lowered final T? #local2;
+  lowered core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
+  function #local2#set(T% #t4) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateError::localAI("local2");
+    else {
+      #local2#isSet = true;
+      return #local2 = #t4;
+    }
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
+  function #local4#get() → core::int
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
+  function #local4#set(core::int #t5) → dynamic
+    if(#local4#isSet)
+      throw new _in::LateError::localAI("local4");
+    else {
+      #local4#isSet = true;
+      return #local4 = #t5;
+    }
+  lowered final FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
+  function #local6#get() → FutureOr<core::int>
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+  function #local6#set(FutureOr<core::int>#t6) → dynamic
+    if(#local6#isSet)
+      throw new _in::LateError::localAI("local6");
+    else {
+      #local6#isSet = true;
+      return #local6 = #t6;
+    }
+  if(b) {
+    #local2#set(value){(T%) → dynamic};
+    #local4#set(0){(core::int) → dynamic};
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
+  }
+  #local2#set(value){(T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Late final variable '#local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^^" in #local2#set(value){(T%) → dynamic};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Late final variable '#local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Late final variable '#local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
+};
+static field () → Null fieldCompound = () → Null {
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
+  function #local4#get() → core::int
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
+  function #local4#set(core::int #t7) → dynamic
+    if(#local4#isSet)
+      throw new _in::LateError::localAI("local4");
+    else {
+      #local4#isSet = true;
+      return #local4 = #t7;
+    }
+  #local4#set(0){(core::int) → dynamic};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Late final variable '#local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  lowered final self::methodDirect::T? #local2;
+  lowered core::bool #local2#isSet = false;
+  function #local2#get() → self::methodDirect::T%
+    return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
+  function #local2#set(self::methodDirect::T% #t8) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateError::localAI("local2");
+    else {
+      #local2#isSet = true;
+      return #local2 = #t8;
+    }
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
+  function #local4#get() → core::int
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
+  function #local4#set(core::int #t9) → dynamic
+    if(#local4#isSet)
+      throw new _in::LateError::localAI("local4");
+    else {
+      #local4#isSet = true;
+      return #local4 = #t9;
+    }
+  lowered final FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
+  function #local6#get() → FutureOr<core::int>
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+  function #local6#set(FutureOr<core::int>#t10) → dynamic
+    if(#local6#isSet)
+      throw new _in::LateError::localAI("local6");
+    else {
+      #local6#isSet = true;
+      return #local6 = #t10;
+    }
+  #local2#set(value){(self::methodDirect::T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Late final variable '#local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^^" in #local2#set(value){(self::methodDirect::T%) → dynamic};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Late final variable '#local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Late final variable '#local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  lowered final self::methodConditional::T? #local2;
+  lowered core::bool #local2#isSet = false;
+  function #local2#get() → self::methodConditional::T%
+    return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
+  function #local2#set(self::methodConditional::T% #t11) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateError::localAI("local2");
+    else {
+      #local2#isSet = true;
+      return #local2 = #t11;
+    }
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
+  function #local4#get() → core::int
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
+  function #local4#set(core::int #t12) → dynamic
+    if(#local4#isSet)
+      throw new _in::LateError::localAI("local4");
+    else {
+      #local4#isSet = true;
+      return #local4 = #t12;
+    }
+  lowered final FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
+  function #local6#get() → FutureOr<core::int>
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+  function #local6#set(FutureOr<core::int>#t13) → dynamic
+    if(#local6#isSet)
+      throw new _in::LateError::localAI("local6");
+    else {
+      #local6#isSet = true;
+      return #local6 = #t13;
+    }
+  if(b) {
+    #local2#set(value){(self::methodConditional::T%) → dynamic};
+    #local4#set(0){(core::int) → dynamic};
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
+  }
+  #local2#set(value){(self::methodConditional::T%) → dynamic};
+  #local4#set(0){(core::int) → dynamic};
+  #local6#set(0){(FutureOr<core::int>) → dynamic};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Late final variable '#local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^^" in #local2#set(value){(self::methodConditional::T%) → dynamic};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Late final variable '#local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^^" in #local4#set(0){(core::int) → dynamic};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Late final variable '#local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^^" in #local6#set(0){(FutureOr<core::int>) → dynamic};
+}
+static method methodCompound() → dynamic {
+  lowered final core::int? #local4;
+  lowered core::bool #local4#isSet = false;
+  function #local4#get() → core::int
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
+  function #local4#set(core::int #t14) → dynamic
+    if(#local4#isSet)
+      throw new _in::LateError::localAI("local4");
+    else {
+      #local4#isSet = true;
+      return #local4 = #t14;
+    }
+  #local4#set(0){(core::int) → dynamic};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Late final variable '#local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^^" in #local4#set(#local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.modular.expect
new file mode 100644
index 0000000..5589982
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.modular.expect
@@ -0,0 +1,383 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → Null fieldDirect = <T extends core::Object? = dynamic>(T% value) → Null {
+  T% local1;
+  lowered T? #local2;
+  lowered core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
+  function #local2#set(T% #t1) → dynamic {
+    #local2#isSet = true;
+    return #local2 = #t1;
+  }
+  core::int local3;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
+  function #local4#get() → core::int
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
+  function #local4#set(core::int #t2) → dynamic {
+    #local4#isSet = true;
+    return #local4 = #t2;
+  }
+  FutureOr<core::int>local5;
+  lowered FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
+  function #local6#get() → FutureOr<core::int>
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+  function #local6#set(FutureOr<core::int>#t3) → dynamic {
+    #local6#isSet = true;
+    return #local6 = #t3;
+  }
+  lowered T? #local7;
+  lowered core::bool #local7#isSet = false;
+  function #local7#get() → T% {
+    if(!#local7#isSet) {
+      #local7 = value;
+      #local7#isSet = true;
+    }
+    return #local7{T%};
+  }
+  function #local7#set(T% #t4) → dynamic {
+    #local7#isSet = true;
+    return #local7 = #t4;
+  }
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in #local2#get(){() → T%};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in #local4#get(){() → core::int};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → T%};
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
+  T% local1;
+  lowered T? #local2;
+  lowered core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} #local2{T%} : throw new _in::LateError::localNI("local2");
+  function #local2#set(T% #t5) → dynamic {
+    #local2#isSet = true;
+    return #local2 = #t5;
+  }
+  core::int local3;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
+  function #local4#get() → core::int
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
+  function #local4#set(core::int #t6) → dynamic {
+    #local4#isSet = true;
+    return #local4 = #t6;
+  }
+  FutureOr<core::int>local5;
+  lowered FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
+  function #local6#get() → FutureOr<core::int>
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+  function #local6#set(FutureOr<core::int>#t7) → dynamic {
+    #local6#isSet = true;
+    return #local6 = #t7;
+  }
+  lowered T? #local7;
+  lowered core::bool #local7#isSet = false;
+  function #local7#get() → T% {
+    if(!#local7#isSet) {
+      #local7 = value;
+      #local7#isSet = true;
+    }
+    return #local7{T%};
+  }
+  function #local7#set(T% #t8) → dynamic {
+    #local7#isSet = true;
+    return #local7 = #t8;
+  }
+  if(b) {
+    local1 = value;
+    #local2#set(value){(T%) → dynamic};
+    local3 = 0;
+    #local4#set(0){(core::int) → dynamic};
+    local5 = 0;
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
+    #local7#get(){() → T%};
+  }
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  #local2#get(){() → T%};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  #local4#get(){() → core::int};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → T%};
+};
+static field () → Null fieldCompound = () → Null {
+  core::int local3;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
+  function #local4#get() → core::int
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
+  function #local4#set(core::int #t9) → dynamic {
+    #local4#isSet = true;
+    return #local4 = #t9;
+  }
+  local3 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  #local4#set(invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  self::methodDirect::T% local1;
+  lowered self::methodDirect::T? #local2;
+  lowered core::bool #local2#isSet = false;
+  function #local2#get() → self::methodDirect::T%
+    return #local2#isSet ?{self::methodDirect::T%} #local2{self::methodDirect::T%} : throw new _in::LateError::localNI("local2");
+  function #local2#set(self::methodDirect::T% #t10) → dynamic {
+    #local2#isSet = true;
+    return #local2 = #t10;
+  }
+  core::int local3;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
+  function #local4#get() → core::int
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
+  function #local4#set(core::int #t11) → dynamic {
+    #local4#isSet = true;
+    return #local4 = #t11;
+  }
+  FutureOr<core::int>local5;
+  lowered FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
+  function #local6#get() → FutureOr<core::int>
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+  function #local6#set(FutureOr<core::int>#t12) → dynamic {
+    #local6#isSet = true;
+    return #local6 = #t12;
+  }
+  lowered self::methodDirect::T? #local7;
+  lowered core::bool #local7#isSet = false;
+  function #local7#get() → self::methodDirect::T% {
+    if(!#local7#isSet) {
+      #local7 = value;
+      #local7#isSet = true;
+    }
+    return #local7{self::methodDirect::T%};
+  }
+  function #local7#set(self::methodDirect::T% #t13) → dynamic {
+    #local7#isSet = true;
+    return #local7 = #t13;
+  }
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in #local2#get(){() → self::methodDirect::T%};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in #local4#get(){() → core::int};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → self::methodDirect::T%};
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  self::methodConditional::T% local1;
+  lowered self::methodConditional::T? #local2;
+  lowered core::bool #local2#isSet = false;
+  function #local2#get() → self::methodConditional::T%
+    return #local2#isSet ?{self::methodConditional::T%} #local2{self::methodConditional::T%} : throw new _in::LateError::localNI("local2");
+  function #local2#set(self::methodConditional::T% #t14) → dynamic {
+    #local2#isSet = true;
+    return #local2 = #t14;
+  }
+  core::int local3;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
+  function #local4#get() → core::int
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
+  function #local4#set(core::int #t15) → dynamic {
+    #local4#isSet = true;
+    return #local4 = #t15;
+  }
+  FutureOr<core::int>local5;
+  lowered FutureOr<core::int>? #local6;
+  lowered core::bool #local6#isSet = false;
+  function #local6#get() → FutureOr<core::int>
+    return #local6#isSet ?{FutureOr<core::int>} #local6{FutureOr<core::int>} : throw new _in::LateError::localNI("local6");
+  function #local6#set(FutureOr<core::int>#t16) → dynamic {
+    #local6#isSet = true;
+    return #local6 = #t16;
+  }
+  lowered self::methodConditional::T? #local7;
+  lowered core::bool #local7#isSet = false;
+  function #local7#get() → self::methodConditional::T% {
+    if(!#local7#isSet) {
+      #local7 = value;
+      #local7#isSet = true;
+    }
+    return #local7{self::methodConditional::T%};
+  }
+  function #local7#set(self::methodConditional::T% #t17) → dynamic {
+    #local7#isSet = true;
+    return #local7 = #t17;
+  }
+  if(b) {
+    local1 = value;
+    #local2#set(value){(self::methodConditional::T%) → dynamic};
+    local3 = 0;
+    #local4#set(0){(core::int) → dynamic};
+    local5 = 0;
+    #local6#set(0){(FutureOr<core::int>) → dynamic};
+    #local7#set(value){(self::methodConditional::T%) → dynamic};
+  }
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  #local2#get(){() → self::methodConditional::T%};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  #local4#get(){() → core::int};
+  invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  #local6#get(){() → FutureOr<core::int>};
+  #local7#get(){() → self::methodConditional::T%};
+}
+static method methodCompound() → dynamic {
+  core::int local3;
+  lowered core::int? #local4;
+  lowered core::bool #local4#isSet = false;
+  function #local4#get() → core::int
+    return #local4#isSet ?{core::int} #local4{core::int} : throw new _in::LateError::localNI("local4");
+  function #local4#set(core::int #t18) → dynamic {
+    #local4#isSet = true;
+    return #local4 = #t18;
+  }
+  local3 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  #local4#set(invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#get(){() → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int) → dynamic};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.modular.expect
new file mode 100644
index 0000000..12210ba
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.modular.expect
@@ -0,0 +1,151 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:12: Error: The type 'int?' of the inherited getter 'B1.property6' is not a subtype of the type 'int' of the setter 'B2.property6'.
+//   void set property6(int i); // error
+//            ^^^^^^^^^
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:20:19: Context: This is the declaration of the getter 'B1.property6'.
+//   late final int? property6;
+//                   ^^^^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:26: Error: The parameter 'i' of the method 'B2.property6' has type 'int', which does not match the corresponding type, 'int?', in the overridden method, 'B1.property6'.
+// Change to a supertype of 'int?', or, for a covariant parameter, a subtype.
+//   void set property6(int i); // error
+//                          ^
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:20:19: Context: This is the overridden method ('property6').
+//   late final int? property6;
+//                   ^
+//
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+//   int? get property6; // error
+//            ^^^^^^^^^
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:40:12: Context: This is the declaration of the setter 'C1.property6'.
+//   late int property6;
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
+// Change to a subtype of 'int'.
+//   int? get property6; // error
+//            ^
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:40:12: Context: This is the overridden method ('property6').
+//   late int property6;
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class A extends core::Object {
+  field core::int? _#A#property4 = null;
+  field core::bool _#A#property4#isSet = false;
+  field core::int? _#A#property5 = null;
+  field core::bool _#A#property5#isSet = false;
+  field core::int? _#A#property6 = null;
+  field core::bool _#A#property6#isSet = false;
+  constructor •(core::int property4, core::int? property5, core::int property6) → self::A
+    : self::A::_#A#property4#isSet = true, self::A::_#A#property4 = property4, self::A::_#A#property5#isSet = true, self::A::_#A#property5 = property5, self::A::_#A#property6#isSet = true, self::A::_#A#property6 = property6, super core::Object::•()
+    ;
+  get property4() → core::int
+    return this.{self::A::_#A#property4#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#property4}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("property4");
+  set property4(core::int #t2) → void {
+    this.{self::A::_#A#property4#isSet} = true;
+    this.{self::A::_#A#property4} = #t2;
+  }
+  get property5() → core::int?
+    return this.{self::A::_#A#property5#isSet}{core::bool} ?{core::int?} this.{self::A::_#A#property5}{core::int?} : throw new _in::LateError::fieldNI("property5");
+  set property5(core::int? #t3) → void {
+    this.{self::A::_#A#property5#isSet} = true;
+    this.{self::A::_#A#property5} = #t3;
+  }
+  get property6() → core::int
+    return this.{self::A::_#A#property6#isSet}{core::bool} ?{core::int} let final core::int? #t4 = this.{self::A::_#A#property6}{core::int?} in #t4{core::int} : throw new _in::LateError::fieldNI("property6");
+  set property6(covariant-by-declaration core::int #t5) → void {
+    this.{self::A::_#A#property6#isSet} = true;
+    this.{self::A::_#A#property6} = #t5;
+  }
+}
+abstract class B1 extends core::Object {
+  field core::int? _#B1#property4 = null;
+  field core::bool _#B1#property4#isSet = false;
+  field core::int? _#B1#property5 = null;
+  field core::bool _#B1#property5#isSet = false;
+  field core::int? _#B1#property6 = null;
+  field core::bool _#B1#property6#isSet = false;
+  constructor •(core::int property4, core::int property5, core::int? property6) → self::B1
+    : self::B1::_#B1#property4#isSet = true, self::B1::_#B1#property4 = property4, self::B1::_#B1#property5#isSet = true, self::B1::_#B1#property5 = property5, self::B1::_#B1#property6#isSet = true, self::B1::_#B1#property6 = property6, super core::Object::•()
+    ;
+  get property4() → core::int
+    return this.{self::B1::_#B1#property4#isSet}{core::bool} ?{core::int} let final core::int? #t6 = this.{self::B1::_#B1#property4}{core::int?} in #t6{core::int} : throw new _in::LateError::fieldNI("property4");
+  set property4(core::int #t7) → void
+    if(this.{self::B1::_#B1#property4#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("property4");
+    else {
+      this.{self::B1::_#B1#property4#isSet} = true;
+      this.{self::B1::_#B1#property4} = #t7;
+    }
+  get property5() → core::int
+    return this.{self::B1::_#B1#property5#isSet}{core::bool} ?{core::int} let final core::int? #t8 = this.{self::B1::_#B1#property5}{core::int?} in #t8{core::int} : throw new _in::LateError::fieldNI("property5");
+  set property5(core::int #t9) → void
+    if(this.{self::B1::_#B1#property5#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("property5");
+    else {
+      this.{self::B1::_#B1#property5#isSet} = true;
+      this.{self::B1::_#B1#property5} = #t9;
+    }
+  get property6() → core::int?
+    return this.{self::B1::_#B1#property6#isSet}{core::bool} ?{core::int?} this.{self::B1::_#B1#property6}{core::int?} : throw new _in::LateError::fieldNI("property6");
+  set property6(core::int? #t10) → void
+    if(this.{self::B1::_#B1#property6#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("property6");
+    else {
+      this.{self::B1::_#B1#property6#isSet} = true;
+      this.{self::B1::_#B1#property6} = #t10;
+    }
+}
+abstract class B2 extends core::Object implements self::B1 {
+  synthetic constructor •() → self::B2
+    : super core::Object::•()
+    ;
+  abstract set property4(core::int i) → void;
+  abstract set property5(core::int? i) → void;
+  abstract set property6(core::int i) → void;
+}
+abstract class C1 extends core::Object {
+  field core::int? _#C1#property4 = null;
+  field core::bool _#C1#property4#isSet = false;
+  field core::int? _#C1#property5 = null;
+  field core::bool _#C1#property5#isSet = false;
+  field core::int? _#C1#property6 = null;
+  field core::bool _#C1#property6#isSet = false;
+  constructor •(core::int property4, core::int property5, core::int property6) → self::C1
+    : self::C1::_#C1#property4#isSet = true, self::C1::_#C1#property4 = property4, self::C1::_#C1#property5#isSet = true, self::C1::_#C1#property5 = property5, self::C1::_#C1#property6#isSet = true, self::C1::_#C1#property6 = property6, super core::Object::•()
+    ;
+  get property4() → core::int
+    return this.{self::C1::_#C1#property4#isSet}{core::bool} ?{core::int} let final core::int? #t11 = this.{self::C1::_#C1#property4}{core::int?} in #t11{core::int} : throw new _in::LateError::fieldNI("property4");
+  set property4(core::int #t12) → void {
+    this.{self::C1::_#C1#property4#isSet} = true;
+    this.{self::C1::_#C1#property4} = #t12;
+  }
+  get property5() → core::int
+    return this.{self::C1::_#C1#property5#isSet}{core::bool} ?{core::int} let final core::int? #t13 = this.{self::C1::_#C1#property5}{core::int?} in #t13{core::int} : throw new _in::LateError::fieldNI("property5");
+  set property5(core::int #t14) → void {
+    this.{self::C1::_#C1#property5#isSet} = true;
+    this.{self::C1::_#C1#property5} = #t14;
+  }
+  get property6() → core::int
+    return this.{self::C1::_#C1#property6#isSet}{core::bool} ?{core::int} let final core::int? #t15 = this.{self::C1::_#C1#property6}{core::int?} in #t15{core::int} : throw new _in::LateError::fieldNI("property6");
+  set property6(core::int #t16) → void {
+    this.{self::C1::_#C1#property6#isSet} = true;
+    this.{self::C1::_#C1#property6} = #t16;
+  }
+}
+abstract class C2 extends core::Object implements self::C1 {
+  synthetic constructor •() → self::C2
+    : super core::Object::•()
+    ;
+  abstract get property4() → core::int;
+  abstract get property5() → core::int;
+  abstract get property6() → core::int?;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.modular.expect
new file mode 100644
index 0000000..6d53db1
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  return t;
+static method main() → dynamic {
+  lowered core::int? #local;
+  lowered core::bool #local#isSet = false;
+  function #local#get() → core::int
+    return #local#isSet ?{core::int} #local{core::int} : throw new _in::LateError::localNI("local");
+  function #local#set(core::int #t1) → dynamic {
+    #local#isSet = true;
+    return #local = #t1;
+  }
+  #local#set(self::f<core::int>(0)){(core::int) → dynamic};
+}
diff --git a/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.weak.modular.expect
new file mode 100644
index 0000000..f6de289
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/infer_late_field_type.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class A extends core::Object {
+  field core::int? field = null;
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object implements self::A {
+  field core::int? _#B#field = null;
+  field core::bool _#B#field#isSet = false;
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  get field() → core::int?
+    return this.{self::B::_#B#field#isSet}{core::bool} ?{core::int?} this.{self::B::_#B#field}{core::int?} : throw new _in::LateError::fieldNI("field");
+  set field(core::int? #t1) → void {
+    this.{self::B::_#B#field#isSet} = true;
+    this.{self::B::_#B#field} = #t1;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.weak.modular.expect
new file mode 100644
index 0000000..fdfbb02
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/initializer_rewrite.dart.weak.modular.expect
@@ -0,0 +1,107 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class extends core::Object {
+  static field core::int nonNullableStaticFieldReads = 0;
+  static field core::int? _#nonNullableStaticField = null;
+  static field core::bool _#nonNullableStaticField#isSet = false;
+  static field core::int nullableStaticFieldReads = 0;
+  static field core::int? _#nullableStaticField = null;
+  static field core::bool _#nullableStaticField#isSet = false;
+  field core::int nonNullableInstanceFieldReads = 0;
+  field core::int? _#Class#nonNullableInstanceField = null;
+  field core::bool _#Class#nonNullableInstanceField#isSet = false;
+  field core::int nullableInstanceFieldReads = 0;
+  field core::int? _#Class#nullableInstanceField = null;
+  field core::bool _#Class#nullableInstanceField#isSet = false;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  static get nonNullableStaticField() → core::int {
+    if(!self::Class::_#nonNullableStaticField#isSet) {
+      final core::int #t1 = (let final core::int #t2 = self::Class::nonNullableStaticFieldReads in let final core::int #t3 = self::Class::nonNullableStaticFieldReads = #t2.{core::num::+}(1){(core::num) → core::int} in #t2) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nonNullableStaticField.{core::num::+}(1){(core::num) → core::int} : 0;
+      if(self::Class::_#nonNullableStaticField#isSet)
+        throw new _in::LateError::fieldADI("nonNullableStaticField");
+      self::Class::_#nonNullableStaticField = #t1;
+      self::Class::_#nonNullableStaticField#isSet = true;
+    }
+    return let final core::int? #t4 = self::Class::_#nonNullableStaticField in #t4{core::int};
+  }
+  static get nullableStaticField() → core::int? {
+    if(!self::Class::_#nullableStaticField#isSet) {
+      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1){(core::num) → core::int} in #t6) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nullableStaticField.{core::Object::hashCode}{core::int} : 0;
+      if(self::Class::_#nullableStaticField#isSet)
+        throw new _in::LateError::fieldADI("nullableStaticField");
+      self::Class::_#nullableStaticField = #t5;
+      self::Class::_#nullableStaticField#isSet = true;
+    }
+    return self::Class::_#nullableStaticField;
+  }
+  get nonNullableInstanceField() → core::int {
+    if(!this.{self::Class::_#Class#nonNullableInstanceField#isSet}{core::bool}) {
+      final core::int #t8 = (let final core::int #t9 = this.{self::Class::nonNullableInstanceFieldReads}{core::int} in let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads} = #t9.{core::num::+}(1){(core::num) → core::int} in #t9) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} this.{self::Class::nonNullableInstanceField}{core::int}.{core::num::+}(1){(core::num) → core::int} : 0;
+      if(this.{self::Class::_#Class#nonNullableInstanceField#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("nonNullableInstanceField");
+      this.{self::Class::_#Class#nonNullableInstanceField} = #t8;
+      this.{self::Class::_#Class#nonNullableInstanceField#isSet} = true;
+    }
+    return let final core::int? #t11 = this.{self::Class::_#Class#nonNullableInstanceField}{core::int?} in #t11{core::int};
+  }
+  get nullableInstanceField() → core::int? {
+    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool}) {
+      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads}{core::int} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1){(core::num) → core::int} in #t13) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} this.{self::Class::nullableInstanceField}{core::int?}.{core::Object::hashCode}{core::int} : 0;
+      if(this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("nullableInstanceField");
+      this.{self::Class::_#Class#nullableInstanceField} = #t12;
+      this.{self::Class::_#Class#nullableInstanceField#isSet} = true;
+    }
+    return this.{self::Class::_#Class#nullableInstanceField}{core::int?};
+  }
+}
+static field core::int nonNullableTopLevelFieldReads = 0;
+static field core::int? _#nonNullableTopLevelField = null;
+static field core::bool _#nonNullableTopLevelField#isSet = false;
+static field core::int nullableTopLevelFieldReads = 0;
+static field core::int? _#nullableTopLevelField = null;
+static field core::bool _#nullableTopLevelField#isSet = false;
+static get nonNullableTopLevelField() → core::int {
+  if(!self::_#nonNullableTopLevelField#isSet) {
+    final core::int #t15 = (let final core::int #t16 = self::nonNullableTopLevelFieldReads in let final core::int #t17 = self::nonNullableTopLevelFieldReads = #t16.{core::num::+}(1){(core::num) → core::int} in #t16) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nonNullableTopLevelField.{core::num::+}(1){(core::num) → core::int} : 0;
+    if(self::_#nonNullableTopLevelField#isSet)
+      throw new _in::LateError::fieldADI("nonNullableTopLevelField");
+    self::_#nonNullableTopLevelField = #t15;
+    self::_#nonNullableTopLevelField#isSet = true;
+  }
+  return let final core::int? #t18 = self::_#nonNullableTopLevelField in #t18{core::int};
+}
+static get nullableTopLevelField() → core::int? {
+  if(!self::_#nullableTopLevelField#isSet) {
+    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1){(core::num) → core::int} in #t20) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nullableTopLevelField.{core::Object::hashCode}{core::int} : 0;
+    if(self::_#nullableTopLevelField#isSet)
+      throw new _in::LateError::fieldADI("nullableTopLevelField");
+    self::_#nullableTopLevelField = #t19;
+    self::_#nullableTopLevelField#isSet = true;
+  }
+  return self::_#nullableTopLevelField;
+}
+static method main() → void {
+  self::throws(() → core::int => self::nonNullableTopLevelField, "Read nonNullableTopLevelField");
+  self::throws(() → core::int? => self::nullableTopLevelField, "Read nullableTopLevelField");
+  self::throws(() → core::int => self::Class::nonNullableStaticField, "Read nonNullableStaticField");
+  self::throws(() → core::int? => self::Class::nullableStaticField, "Read nullableStaticField");
+  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}{core::int}, "Read nonNullableInstanceField");
+  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}{core::int?}, "Read nullableInstanceField");
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..c72d69f
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/initializer_rewrite_from_opt_out.dart.weak.modular.expect
@@ -0,0 +1,117 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "initializer_rewrite_from_opt_out_lib.dart" as ini;
+import "dart:_internal" as _in;
+
+import "org-dartlang-testcase:///initializer_rewrite_from_opt_out_lib.dart";
+
+class Class extends core::Object {
+  static field core::int nonNullableStaticFieldReads = 0;
+  static field core::int? _#nonNullableStaticField = null;
+  static field core::bool _#nonNullableStaticField#isSet = false;
+  static field core::int nullableStaticFieldReads = 0;
+  static field core::int? _#nullableStaticField = null;
+  static field core::bool _#nullableStaticField#isSet = false;
+  field core::int nonNullableInstanceFieldReads = 0;
+  field core::int? _#Class#nonNullableInstanceField = null;
+  field core::bool _#Class#nonNullableInstanceField#isSet = false;
+  field core::int nullableInstanceFieldReads = 0;
+  field core::int? _#Class#nullableInstanceField = null;
+  field core::bool _#Class#nullableInstanceField#isSet = false;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  static get nonNullableStaticField() → core::int {
+    if(!self::Class::_#nonNullableStaticField#isSet) {
+      final core::int #t1 = (let final core::int #t2 = self::Class::nonNullableStaticFieldReads in let final core::int #t3 = self::Class::nonNullableStaticFieldReads = #t2.{core::num::+}(1){(core::num) → core::int} in #t2) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int*} self::Class::nonNullableStaticField : ini::computeInitialValue();
+      if(self::Class::_#nonNullableStaticField#isSet)
+        throw new _in::LateError::fieldADI("nonNullableStaticField");
+      self::Class::_#nonNullableStaticField = #t1;
+      self::Class::_#nonNullableStaticField#isSet = true;
+    }
+    return let final core::int? #t4 = self::Class::_#nonNullableStaticField in #t4{core::int};
+  }
+  static get nullableStaticField() → core::int? {
+    if(!self::Class::_#nullableStaticField#isSet) {
+      final core::int? #t5 = (let final core::int #t6 = self::Class::nullableStaticFieldReads in let final core::int #t7 = self::Class::nullableStaticFieldReads = #t6.{core::num::+}(1){(core::num) → core::int} in #t6) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int?} self::Class::nullableStaticField : ini::computeInitialValue();
+      if(self::Class::_#nullableStaticField#isSet)
+        throw new _in::LateError::fieldADI("nullableStaticField");
+      self::Class::_#nullableStaticField = #t5;
+      self::Class::_#nullableStaticField#isSet = true;
+    }
+    return self::Class::_#nullableStaticField;
+  }
+  get nonNullableInstanceField() → core::int {
+    if(!this.{self::Class::_#Class#nonNullableInstanceField#isSet}{core::bool}) {
+      final core::int #t8 = (let final core::int #t9 = this.{self::Class::nonNullableInstanceFieldReads}{core::int} in let final core::int #t10 = this.{self::Class::nonNullableInstanceFieldReads} = #t9.{core::num::+}(1){(core::num) → core::int} in #t9) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int*} this.{self::Class::nonNullableInstanceField}{core::int} : ini::computeInitialValue();
+      if(this.{self::Class::_#Class#nonNullableInstanceField#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("nonNullableInstanceField");
+      this.{self::Class::_#Class#nonNullableInstanceField} = #t8;
+      this.{self::Class::_#Class#nonNullableInstanceField#isSet} = true;
+    }
+    return let final core::int? #t11 = this.{self::Class::_#Class#nonNullableInstanceField}{core::int?} in #t11{core::int};
+  }
+  get nullableInstanceField() → core::int? {
+    if(!this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool}) {
+      final core::int? #t12 = (let final core::int #t13 = this.{self::Class::nullableInstanceFieldReads}{core::int} in let final core::int #t14 = this.{self::Class::nullableInstanceFieldReads} = #t13.{core::num::+}(1){(core::num) → core::int} in #t13) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int?} this.{self::Class::nullableInstanceField}{core::int?} : ini::computeInitialValue();
+      if(this.{self::Class::_#Class#nullableInstanceField#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("nullableInstanceField");
+      this.{self::Class::_#Class#nullableInstanceField} = #t12;
+      this.{self::Class::_#Class#nullableInstanceField#isSet} = true;
+    }
+    return this.{self::Class::_#Class#nullableInstanceField}{core::int?};
+  }
+}
+static field core::int nonNullableTopLevelFieldReads = 0;
+static field core::int? _#nonNullableTopLevelField = null;
+static field core::bool _#nonNullableTopLevelField#isSet = false;
+static field core::int nullableTopLevelFieldReads = 0;
+static field core::int? _#nullableTopLevelField = null;
+static field core::bool _#nullableTopLevelField#isSet = false;
+static get nonNullableTopLevelField() → core::int {
+  if(!self::_#nonNullableTopLevelField#isSet) {
+    final core::int #t15 = (let final core::int #t16 = self::nonNullableTopLevelFieldReads in let final core::int #t17 = self::nonNullableTopLevelFieldReads = #t16.{core::num::+}(1){(core::num) → core::int} in #t16) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int*} self::nonNullableTopLevelField : ini::computeInitialValue();
+    if(self::_#nonNullableTopLevelField#isSet)
+      throw new _in::LateError::fieldADI("nonNullableTopLevelField");
+    self::_#nonNullableTopLevelField = #t15;
+    self::_#nonNullableTopLevelField#isSet = true;
+  }
+  return let final core::int? #t18 = self::_#nonNullableTopLevelField in #t18{core::int};
+}
+static get nullableTopLevelField() → core::int? {
+  if(!self::_#nullableTopLevelField#isSet) {
+    final core::int? #t19 = (let final core::int #t20 = self::nullableTopLevelFieldReads in let final core::int #t21 = self::nullableTopLevelFieldReads = #t20.{core::num::+}(1){(core::num) → core::int} in #t20) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int?} self::nullableTopLevelField : ini::computeInitialValue();
+    if(self::_#nullableTopLevelField#isSet)
+      throw new _in::LateError::fieldADI("nullableTopLevelField");
+    self::_#nullableTopLevelField = #t19;
+    self::_#nullableTopLevelField#isSet = true;
+  }
+  return self::_#nullableTopLevelField;
+}
+static method main() → void {
+  self::throws(() → core::int => self::nonNullableTopLevelField, "Read nonNullableTopLevelField");
+  self::throws(() → core::int? => self::nullableTopLevelField, "Read nullableTopLevelField");
+  self::throws(() → core::int => self::Class::nonNullableStaticField, "Read nonNullableStaticField");
+  self::throws(() → core::int? => self::Class::nullableStaticField, "Read nullableStaticField");
+  self::throws(() → core::int => new self::Class::•().{self::Class::nonNullableInstanceField}{core::int}, "Read nonNullableInstanceField");
+  self::throws(() → core::int? => new self::Class::•().{self::Class::nullableInstanceField}{core::int?}, "Read nullableInstanceField");
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
+
+library;
+import self as ini;
+import "dart:core" as core;
+
+static method computeInitialValue() → core::int*
+  return null;
diff --git a/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.modular.expect
new file mode 100644
index 0000000..75e0cf4
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/injected_late_field_checks/main.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "dart:test";
+
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+
+@#C1
+class Class extends core::Object {
+  field core::int? _#Class#foo = null /* from org-dartlang-testcase:///patch_lib.dart */;
+  field core::bool _#Class#foo#isSet = false /* from org-dartlang-testcase:///patch_lib.dart */;
+  constructor bar() → self2::Class
+    : super core::Object::•()
+    ;
+  constructor baz(core::int foo) → self2::Class
+    : self2::Class::_#Class#foo#isSet = true, self2::Class::_#Class#foo = foo, super core::Object::•()
+    ;
+  get /* from org-dartlang-testcase:///patch_lib.dart */ foo() → core::int
+    return this.{self2::Class::_#Class#foo#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self2::Class::_#Class#foo}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("foo");
+  set /* from org-dartlang-testcase:///patch_lib.dart */ foo(core::int #t2) → void {
+    this.{self2::Class::_#Class#foo#isSet} = true;
+    this.{self2::Class::_#Class#foo} = #t2;
+  }
+}
+
+constants  {
+  #C1 = _in::_Patch {}
+}
diff --git a/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..ccb0618
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/instance_field_with_initializer.dart.weak.modular.expect
@@ -0,0 +1,102 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? _#Class#field = null;
+  field core::bool _#Class#field#isSet = false;
+  constructor constructor1() → self::Class
+    : super core::Object::•()
+    ;
+  constructor constructor2(core::int field) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
+    ;
+  constructor constructor3(core::int value) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+  constructor constructor4([core::int field = #C1]) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
+    ;
+  get field() → core::int {
+    if(!this.{self::Class::_#Class#field#isSet}{core::bool}) {
+      this.{self::Class::_#Class#field} = 10;
+      this.{self::Class::_#Class#field#isSet} = true;
+    }
+    return let final core::int? #t1 = this.{self::Class::_#Class#field}{core::int?} in #t1{core::int};
+  }
+  set field(core::int #t2) → void {
+    this.{self::Class::_#Class#field#isSet} = true;
+    this.{self::Class::_#Class#field} = #t2;
+  }
+}
+class Subclass extends self::Class {
+  constructor constructor1() → self::Subclass
+    : super self::Class::constructor1()
+    ;
+  constructor constructor2(core::int value) → self::Subclass
+    : super self::Class::constructor2(value)
+    ;
+  constructor constructor3(core::int value) → self::Subclass
+    : super self::Class::constructor3(value)
+    ;
+  constructor constructor4([core::int value = #C2]) → self::Subclass
+    : super self::Class::constructor4(value)
+    ;
+}
+static method test1() → dynamic {
+  self::Class c1 = new self::Class::constructor1();
+  self::expect(10, c1.{self::Class::field}{core::int});
+  c1.{self::Class::field} = 16;
+  self::expect(16, c1.{self::Class::field}{core::int});
+  self::Class c2 = new self::Class::constructor2(42);
+  self::expect(42, c2.{self::Class::field}{core::int});
+  c2.{self::Class::field} = 43;
+  self::expect(43, c2.{self::Class::field}{core::int});
+  self::Class c3 = new self::Class::constructor3(87);
+  self::expect(88, c3.{self::Class::field}{core::int});
+  c3.{self::Class::field} = 89;
+  self::expect(89, c3.{self::Class::field}{core::int});
+  self::Class c4 = new self::Class::constructor4();
+  self::expect(42, c4.{self::Class::field}{core::int});
+  c4.{self::Class::field} = 43;
+  self::expect(43, c4.{self::Class::field}{core::int});
+  self::Class c5 = new self::Class::constructor4(123);
+  self::expect(123, c5.{self::Class::field}{core::int});
+  c5.{self::Class::field} = 124;
+  self::expect(124, c5.{self::Class::field}{core::int});
+}
+static method test2() → dynamic {
+  self::Subclass c1 = new self::Subclass::constructor1();
+  self::expect(10, c1.{self::Class::field}{core::int});
+  c1.{self::Class::field} = 16;
+  self::expect(16, c1.{self::Class::field}{core::int});
+  self::Subclass c2 = new self::Subclass::constructor2(42);
+  self::expect(42, c2.{self::Class::field}{core::int});
+  c2.{self::Class::field} = 43;
+  self::expect(43, c2.{self::Class::field}{core::int});
+  self::Subclass c3 = new self::Subclass::constructor3(87);
+  self::expect(88, c3.{self::Class::field}{core::int});
+  c3.{self::Class::field} = 89;
+  self::expect(89, c3.{self::Class::field}{core::int});
+  self::Subclass c4 = new self::Subclass::constructor4();
+  self::expect(87, c4.{self::Class::field}{core::int});
+  c4.{self::Class::field} = 88;
+  self::expect(88, c4.{self::Class::field}{core::int});
+  self::Subclass c5 = new self::Subclass::constructor4(123);
+  self::expect(123, c5.{self::Class::field}{core::int});
+  c5.{self::Class::field} = 124;
+  self::expect(124, c5.{self::Class::field}{core::int});
+}
+static method main() → dynamic {
+  self::test1();
+  self::test2();
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+  #C2 = 87
+}
diff --git a/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..b2fdacb
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/instance_field_without_initializer.dart.weak.modular.expect
@@ -0,0 +1,109 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class extends core::Object {
+  field core::int? _#Class#field = null;
+  field core::bool _#Class#field#isSet = false;
+  constructor constructor1() → self::Class
+    : super core::Object::•()
+    ;
+  constructor constructor2(core::int field) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
+    ;
+  constructor constructor3(core::int value) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+  constructor constructor4([core::int field = #C1]) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
+    ;
+  get field() → core::int
+    return this.{self::Class::_#Class#field#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::Class::_#Class#field}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("field");
+  set field(core::int #t2) → void {
+    this.{self::Class::_#Class#field#isSet} = true;
+    this.{self::Class::_#Class#field} = #t2;
+  }
+}
+class Subclass extends self::Class {
+  constructor constructor1() → self::Subclass
+    : super self::Class::constructor1()
+    ;
+  constructor constructor2(core::int value) → self::Subclass
+    : super self::Class::constructor2(value)
+    ;
+  constructor constructor3(core::int value) → self::Subclass
+    : super self::Class::constructor3(value)
+    ;
+  constructor constructor4([core::int value = #C2]) → self::Subclass
+    : super self::Class::constructor4(value)
+    ;
+}
+static method test1() → dynamic {
+  self::Class c1 = new self::Class::constructor1();
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class.field");
+  c1.{self::Class::field} = 16;
+  self::expect(16, c1.{self::Class::field}{core::int});
+  self::Class c2 = new self::Class::constructor2(42);
+  self::expect(42, c2.{self::Class::field}{core::int});
+  c2.{self::Class::field} = 43;
+  self::expect(43, c2.{self::Class::field}{core::int});
+  self::Class c3 = new self::Class::constructor3(87);
+  self::expect(88, c3.{self::Class::field}{core::int});
+  c3.{self::Class::field} = 89;
+  self::expect(89, c3.{self::Class::field}{core::int});
+  self::Class c4 = new self::Class::constructor4();
+  self::expect(42, c4.{self::Class::field}{core::int});
+  c4.{self::Class::field} = 43;
+  self::expect(43, c4.{self::Class::field}{core::int});
+  self::Class c5 = new self::Class::constructor4(123);
+  self::expect(123, c5.{self::Class::field}{core::int});
+  c5.{self::Class::field} = 124;
+  self::expect(124, c5.{self::Class::field}{core::int});
+}
+static method test2() → dynamic {
+  self::Subclass c1 = new self::Subclass::constructor1();
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class.field");
+  c1.{self::Class::field} = 16;
+  self::expect(16, c1.{self::Class::field}{core::int});
+  self::Subclass c2 = new self::Subclass::constructor2(42);
+  self::expect(42, c2.{self::Class::field}{core::int});
+  c2.{self::Class::field} = 43;
+  self::expect(43, c2.{self::Class::field}{core::int});
+  self::Subclass c3 = new self::Subclass::constructor3(87);
+  self::expect(88, c3.{self::Class::field}{core::int});
+  c3.{self::Class::field} = 89;
+  self::expect(89, c3.{self::Class::field}{core::int});
+  self::Subclass c4 = new self::Subclass::constructor4();
+  self::expect(87, c4.{self::Class::field}{core::int});
+  c4.{self::Class::field} = 88;
+  self::expect(88, c4.{self::Class::field}{core::int});
+  self::Subclass c5 = new self::Subclass::constructor4(123);
+  self::expect(123, c5.{self::Class::field}{core::int});
+  c5.{self::Class::field} = 124;
+  self::expect(124, c5.{self::Class::field}{core::int});
+}
+static method main() → dynamic {
+  self::test1();
+  self::test2();
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
+
+constants  {
+  #C1 = 42
+  #C2 = 87
+}
diff --git a/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..463e342
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/instance_final_field_without_initializer.dart.weak.modular.expect
@@ -0,0 +1,114 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class extends core::Object {
+  field core::int? _#Class#field = null;
+  field core::bool _#Class#field#isSet = false;
+  constructor constructor1() → self::Class
+    : super core::Object::•()
+    ;
+  constructor constructor2(core::int field) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
+    ;
+  constructor constructor3(core::int value) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+  constructor constructor4([core::int field = #C1]) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
+    ;
+  get field() → core::int
+    return this.{self::Class::_#Class#field#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::Class::_#Class#field}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("field");
+  set field(core::int #t2) → void
+    if(this.{self::Class::_#Class#field#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("field");
+    else {
+      this.{self::Class::_#Class#field#isSet} = true;
+      this.{self::Class::_#Class#field} = #t2;
+    }
+}
+class Subclass extends self::Class {
+  constructor constructor1() → self::Subclass
+    : super self::Class::constructor1()
+    ;
+  constructor constructor2(core::int value) → self::Subclass
+    : super self::Class::constructor2(value)
+    ;
+  constructor constructor3(core::int value) → self::Subclass
+    : super self::Class::constructor3(value)
+    ;
+  constructor constructor4([core::int value = #C2]) → self::Subclass
+    : super self::Class::constructor4(value)
+    ;
+}
+static method test1() → dynamic {
+  self::Class c1 = new self::Class::constructor1();
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class.field");
+  c1.{self::Class::field} = 16;
+  self::expect(16, c1.{self::Class::field}{core::int});
+  self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
+  self::Class c2 = new self::Class::constructor2(42);
+  self::expect(42, c2.{self::Class::field}{core::int});
+  self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
+  self::Class c3 = new self::Class::constructor3(87);
+  self::expect(88, c3.{self::Class::field}{core::int});
+  self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
+  self::Class c4 = new self::Class::constructor4();
+  self::expect(42, c4.{self::Class::field}{core::int});
+  self::throws(() → core::int => c4.{self::Class::field} = 43, "Write value to initialized Class.field");
+  self::Class c5 = new self::Class::constructor4(123);
+  self::expect(123, c5.{self::Class::field}{core::int});
+  self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
+  self::Class c6 = new self::Class::constructor1();
+  c6.{self::Class::field} = 32;
+  self::expect(32, c6.{self::Class::field}{core::int});
+  self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
+}
+static method test2() → dynamic {
+  self::Subclass c1 = new self::Subclass::constructor1();
+  self::throws(() → core::int => c1.{self::Class::field}{core::int}, "Read value from uninitialized Class1.field");
+  c1.{self::Class::field} = 16;
+  self::expect(16, c1.{self::Class::field}{core::int});
+  self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
+  self::Subclass c2 = new self::Subclass::constructor2(42);
+  self::expect(42, c2.{self::Class::field}{core::int});
+  self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
+  self::Subclass c3 = new self::Subclass::constructor3(87);
+  self::expect(88, c3.{self::Class::field}{core::int});
+  self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
+  self::Subclass c4 = new self::Subclass::constructor4();
+  self::expect(87, c4.{self::Class::field}{core::int});
+  self::throws(() → core::int => c4.{self::Class::field} = 88, "Write value to initialized Class.field");
+  self::Subclass c5 = new self::Subclass::constructor4(123);
+  self::expect(123, c5.{self::Class::field}{core::int});
+  self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
+  self::Subclass c6 = new self::Subclass::constructor1();
+  c6.{self::Class::field} = 32;
+  self::expect(32, c6.{self::Class::field}{core::int});
+  self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
+}
+static method main() → dynamic {
+  self::test1();
+  self::test2();
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
+
+constants  {
+  #C1 = 42
+  #C2 = 87
+}
diff --git a/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..5a147d7
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/instance_nullable_field_with_initializer.dart.weak.modular.expect
@@ -0,0 +1,104 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? _#Class#field = null;
+  field core::bool _#Class#field#isSet = false;
+  constructor constructor1() → self::Class
+    : super core::Object::•()
+    ;
+  constructor constructor2(core::int? field) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
+    ;
+  constructor constructor3(core::int value) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+  constructor constructor4([core::int? field = #C1]) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
+    ;
+  get field() → core::int? {
+    if(!this.{self::Class::_#Class#field#isSet}{core::bool}) {
+      this.{self::Class::_#Class#field} = self::initField();
+      this.{self::Class::_#Class#field#isSet} = true;
+    }
+    return this.{self::Class::_#Class#field}{core::int?};
+  }
+  set field(core::int? #t1) → void {
+    this.{self::Class::_#Class#field#isSet} = true;
+    this.{self::Class::_#Class#field} = #t1;
+  }
+}
+class Subclass extends self::Class {
+  constructor constructor1() → self::Subclass
+    : super self::Class::constructor1()
+    ;
+  constructor constructor2(core::int value) → self::Subclass
+    : super self::Class::constructor2(value)
+    ;
+  constructor constructor3(core::int value) → self::Subclass
+    : super self::Class::constructor3(value)
+    ;
+  constructor constructor4([core::int value = #C2]) → self::Subclass
+    : super self::Class::constructor4(value)
+    ;
+}
+static method initField() → core::int?
+  return 10;
+static method test1() → dynamic {
+  self::Class c1 = new self::Class::constructor1();
+  self::expect(10, c1.{self::Class::field}{core::int?});
+  c1.{self::Class::field} = 16;
+  self::expect(16, c1.{self::Class::field}{core::int?});
+  self::Class c2 = new self::Class::constructor2(42);
+  self::expect(42, c2.{self::Class::field}{core::int?});
+  c2.{self::Class::field} = 43;
+  self::expect(43, c2.{self::Class::field}{core::int?});
+  self::Class c3 = new self::Class::constructor3(87);
+  self::expect(88, c3.{self::Class::field}{core::int?});
+  c3.{self::Class::field} = 89;
+  self::expect(89, c3.{self::Class::field}{core::int?});
+  self::Class c4 = new self::Class::constructor4();
+  self::expect(42, c4.{self::Class::field}{core::int?});
+  c4.{self::Class::field} = 43;
+  self::expect(43, c4.{self::Class::field}{core::int?});
+  self::Class c5 = new self::Class::constructor4(123);
+  self::expect(123, c5.{self::Class::field}{core::int?});
+  c5.{self::Class::field} = 124;
+  self::expect(124, c5.{self::Class::field}{core::int?});
+}
+static method test2() → dynamic {
+  self::Subclass c1 = new self::Subclass::constructor1();
+  self::expect(10, c1.{self::Class::field}{core::int?});
+  c1.{self::Class::field} = 16;
+  self::expect(16, c1.{self::Class::field}{core::int?});
+  self::Subclass c2 = new self::Subclass::constructor2(42);
+  self::expect(42, c2.{self::Class::field}{core::int?});
+  c2.{self::Class::field} = 43;
+  self::expect(43, c2.{self::Class::field}{core::int?});
+  self::Subclass c3 = new self::Subclass::constructor3(87);
+  self::expect(88, c3.{self::Class::field}{core::int?});
+  c3.{self::Class::field} = 89;
+  self::expect(89, c3.{self::Class::field}{core::int?});
+  self::Subclass c4 = new self::Subclass::constructor4();
+  self::expect(87, c4.{self::Class::field}{core::int?});
+  c4.{self::Class::field} = 88;
+  self::expect(88, c4.{self::Class::field}{core::int?});
+  self::Subclass c5 = new self::Subclass::constructor4(123);
+  self::expect(123, c5.{self::Class::field}{core::int?});
+  c5.{self::Class::field} = 124;
+  self::expect(124, c5.{self::Class::field}{core::int?});
+}
+static method main() → dynamic {
+  self::test1();
+  self::test2();
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+  #C2 = 87
+}
diff --git a/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..58f7272
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/instance_nullable_field_without_initializer.dart.weak.modular.expect
@@ -0,0 +1,109 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class extends core::Object {
+  field core::int? _#Class#field = null;
+  field core::bool _#Class#field#isSet = false;
+  constructor constructor1() → self::Class
+    : super core::Object::•()
+    ;
+  constructor constructor2(core::int? field) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
+    ;
+  constructor constructor3(core::int value) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+  constructor constructor4([core::int? field = #C1]) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
+    ;
+  get field() → core::int?
+    return this.{self::Class::_#Class#field#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#field}{core::int?} : throw new _in::LateError::fieldNI("field");
+  set field(core::int? #t1) → void {
+    this.{self::Class::_#Class#field#isSet} = true;
+    this.{self::Class::_#Class#field} = #t1;
+  }
+}
+class Subclass extends self::Class {
+  constructor constructor1() → self::Subclass
+    : super self::Class::constructor1()
+    ;
+  constructor constructor2(core::int value) → self::Subclass
+    : super self::Class::constructor2(value)
+    ;
+  constructor constructor3(core::int value) → self::Subclass
+    : super self::Class::constructor3(value)
+    ;
+  constructor constructor4([core::int value = #C2]) → self::Subclass
+    : super self::Class::constructor4(value)
+    ;
+}
+static method test1() → dynamic {
+  self::Class c1 = new self::Class::constructor1();
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class.field");
+  c1.{self::Class::field} = 16;
+  self::expect(16, c1.{self::Class::field}{core::int?});
+  self::Class c2 = new self::Class::constructor2(42);
+  self::expect(42, c2.{self::Class::field}{core::int?});
+  c2.{self::Class::field} = 43;
+  self::expect(43, c2.{self::Class::field}{core::int?});
+  self::Class c3 = new self::Class::constructor3(87);
+  self::expect(88, c3.{self::Class::field}{core::int?});
+  c3.{self::Class::field} = 89;
+  self::expect(89, c3.{self::Class::field}{core::int?});
+  self::Class c4 = new self::Class::constructor4();
+  self::expect(42, c4.{self::Class::field}{core::int?});
+  c4.{self::Class::field} = 43;
+  self::expect(43, c4.{self::Class::field}{core::int?});
+  self::Class c5 = new self::Class::constructor4(123);
+  self::expect(123, c5.{self::Class::field}{core::int?});
+  c5.{self::Class::field} = 124;
+  self::expect(124, c5.{self::Class::field}{core::int?});
+}
+static method test2() → dynamic {
+  self::Subclass c1 = new self::Subclass::constructor1();
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class.field");
+  c1.{self::Class::field} = 16;
+  self::expect(16, c1.{self::Class::field}{core::int?});
+  self::Subclass c2 = new self::Subclass::constructor2(42);
+  self::expect(42, c2.{self::Class::field}{core::int?});
+  c2.{self::Class::field} = 43;
+  self::expect(43, c2.{self::Class::field}{core::int?});
+  self::Subclass c3 = new self::Subclass::constructor3(87);
+  self::expect(88, c3.{self::Class::field}{core::int?});
+  c3.{self::Class::field} = 89;
+  self::expect(89, c3.{self::Class::field}{core::int?});
+  self::Subclass c4 = new self::Subclass::constructor4();
+  self::expect(87, c4.{self::Class::field}{core::int?});
+  c4.{self::Class::field} = 88;
+  self::expect(88, c4.{self::Class::field}{core::int?});
+  self::Subclass c5 = new self::Subclass::constructor4(123);
+  self::expect(123, c5.{self::Class::field}{core::int?});
+  c5.{self::Class::field} = 124;
+  self::expect(124, c5.{self::Class::field}{core::int?});
+}
+static method main() → dynamic {
+  self::test1();
+  self::test2();
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
+
+constants  {
+  #C1 = 42
+  #C2 = 87
+}
diff --git a/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..8bbbcaf
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/instance_nullable_final_field_without_initializer.dart.weak.modular.expect
@@ -0,0 +1,114 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class extends core::Object {
+  field core::int? _#Class#field = null;
+  field core::bool _#Class#field#isSet = false;
+  constructor constructor1() → self::Class
+    : super core::Object::•()
+    ;
+  constructor constructor2(core::int? field) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
+    ;
+  constructor constructor3(core::int value) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = value.{core::num::+}(1){(core::num) → core::int}, super core::Object::•()
+    ;
+  constructor constructor4([core::int? field = #C1]) → self::Class
+    : self::Class::_#Class#field#isSet = true, self::Class::_#Class#field = field, super core::Object::•()
+    ;
+  get field() → core::int?
+    return this.{self::Class::_#Class#field#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#field}{core::int?} : throw new _in::LateError::fieldNI("field");
+  set field(core::int? #t1) → void
+    if(this.{self::Class::_#Class#field#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("field");
+    else {
+      this.{self::Class::_#Class#field#isSet} = true;
+      this.{self::Class::_#Class#field} = #t1;
+    }
+}
+class Subclass extends self::Class {
+  constructor constructor1() → self::Subclass
+    : super self::Class::constructor1()
+    ;
+  constructor constructor2(core::int value) → self::Subclass
+    : super self::Class::constructor2(value)
+    ;
+  constructor constructor3(core::int value) → self::Subclass
+    : super self::Class::constructor3(value)
+    ;
+  constructor constructor4([core::int value = #C2]) → self::Subclass
+    : super self::Class::constructor4(value)
+    ;
+}
+static method test1() → dynamic {
+  self::Class c1 = new self::Class::constructor1();
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class.field");
+  c1.{self::Class::field} = 16;
+  self::expect(16, c1.{self::Class::field}{core::int?});
+  self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
+  self::Class c2 = new self::Class::constructor2(42);
+  self::expect(42, c2.{self::Class::field}{core::int?});
+  self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
+  self::Class c3 = new self::Class::constructor3(87);
+  self::expect(88, c3.{self::Class::field}{core::int?});
+  self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
+  self::Class c4 = new self::Class::constructor4();
+  self::expect(42, c4.{self::Class::field}{core::int?});
+  self::throws(() → core::int => c4.{self::Class::field} = 43, "Write value to initialized Class.field");
+  self::Class c5 = new self::Class::constructor4(123);
+  self::expect(123, c5.{self::Class::field}{core::int?});
+  self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
+  self::Class c6 = new self::Class::constructor1();
+  c6.{self::Class::field} = 32;
+  self::expect(32, c6.{self::Class::field}{core::int?});
+  self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
+}
+static method test2() → dynamic {
+  self::Subclass c1 = new self::Subclass::constructor1();
+  self::throws(() → core::int? => c1.{self::Class::field}{core::int?}, "Read value from uninitialized Class1.field");
+  c1.{self::Class::field} = 16;
+  self::expect(16, c1.{self::Class::field}{core::int?});
+  self::throws(() → core::int => c1.{self::Class::field} = 17, "Write value to initialized Class.field");
+  self::Subclass c2 = new self::Subclass::constructor2(42);
+  self::expect(42, c2.{self::Class::field}{core::int?});
+  self::throws(() → core::int => c2.{self::Class::field} = 43, "Write value to initialized Class.field");
+  self::Subclass c3 = new self::Subclass::constructor3(87);
+  self::expect(88, c3.{self::Class::field}{core::int?});
+  self::throws(() → core::int => c3.{self::Class::field} = 89, "Write value to initialized Class.field");
+  self::Subclass c4 = new self::Subclass::constructor4();
+  self::expect(87, c4.{self::Class::field}{core::int?});
+  self::throws(() → core::int => c4.{self::Class::field} = 88, "Write value to initialized Class.field");
+  self::Subclass c5 = new self::Subclass::constructor4(123);
+  self::expect(123, c5.{self::Class::field}{core::int?});
+  self::throws(() → core::int => c5.{self::Class::field} = 124, "Write value to initialized Class.field");
+  self::Subclass c6 = new self::Subclass::constructor1();
+  c6.{self::Class::field} = 32;
+  self::expect(32, c6.{self::Class::field}{core::int?});
+  self::throws(() → core::int => c6.{self::Class::field} = 32, "Write value to initialized Class.field");
+}
+static method main() → dynamic {
+  self::test1();
+  self::test2();
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
+
+constants  {
+  #C1 = 42
+  #C2 = 87
+}
diff --git a/pkg/front_end/testcases/late_lowering/issue40093.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/issue40093.dart.weak.modular.expect
new file mode 100644
index 0000000..fe10901
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue40093.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/issue40093.dart:6:8: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+//   for (late int i = 0; i < 10; ++i) {
+//        ^^^^
+//
+// pkg/front_end/testcases/late_lowering/issue40093.dart:9:8: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+//   for (late int i in <int>[]) {
+//        ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method error() → dynamic {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    core::print(i);
+  }
+  for (core::int i in <core::int>[]) {
+    core::print(i);
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/issue40373.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/issue40373.dart.weak.modular.expect
new file mode 100644
index 0000000..32f6e7c
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue40373.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class C extends core::Object {
+  field core::num pi = 3.14;
+  field core::num? _#C#p1 = null;
+  field core::bool _#C#p1#isSet = false;
+  field core::num? _#C#p2 = null;
+  field core::bool _#C#p2#isSet = false;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  get p1() → core::num {
+    if(!this.{self::C::_#C#p1#isSet}{core::bool}) {
+      this.{self::C::_#C#p1} = this.{self::C::pi}{core::num};
+      this.{self::C::_#C#p1#isSet} = true;
+    }
+    return let final core::num? #t1 = this.{self::C::_#C#p1}{core::num?} in #t1{core::num};
+  }
+  set p1(core::num #t2) → void {
+    this.{self::C::_#C#p1#isSet} = true;
+    this.{self::C::_#C#p1} = #t2;
+  }
+  get p2() → core::num {
+    if(!this.{self::C::_#C#p2#isSet}{core::bool}) {
+      final core::num #t3 = this.{self::C::pi}{core::num};
+      if(this.{self::C::_#C#p2#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("p2");
+      this.{self::C::_#C#p2} = #t3;
+      this.{self::C::_#C#p2#isSet} = true;
+    }
+    return let final core::num? #t4 = this.{self::C::_#C#p2}{core::num?} in #t4{core::num};
+  }
+}
+static method main() → dynamic {
+  self::expect(3.14, new self::C::•().{self::C::p1}{core::num});
+  self::expect(3.14, new self::C::•().{self::C::p2}{core::num});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.modular.expect
new file mode 100644
index 0000000..149d652
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue40373b.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class C extends core::Object {
+  static field dynamic _#s = null;
+  static field core::bool _#s#isSet = false;
+  field dynamic _#C#v = null;
+  field core::bool _#C#v#isSet = false;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  static get s() → dynamic
+    return self::C::_#s#isSet ?{dynamic} self::C::_#s : throw new _in::LateError::fieldNI("s");
+  static set s(dynamic #t1) → void
+    if(self::C::_#s#isSet)
+      throw new _in::LateError::fieldAI("s");
+    else {
+      self::C::_#s#isSet = true;
+      self::C::_#s = #t1;
+    }
+  get v() → dynamic
+    return this.{self::C::_#C#v#isSet}{core::bool} ?{dynamic} this.{self::C::_#C#v}{dynamic} : throw new _in::LateError::fieldNI("v");
+  set v(dynamic #t2) → void
+    if(this.{self::C::_#C#v#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("v");
+    else {
+      this.{self::C::_#C#v#isSet} = true;
+      this.{self::C::_#C#v} = #t2;
+    }
+}
+static field dynamic _#g = null;
+static field core::bool _#g#isSet = false;
+static get g() → dynamic
+  return self::_#g#isSet ?{dynamic} self::_#g : throw new _in::LateError::fieldNI("g");
+static set g(dynamic #t3) → void
+  if(self::_#g#isSet)
+    throw new _in::LateError::fieldAI("g");
+  else {
+    self::_#g#isSet = true;
+    self::_#g = #t3;
+  }
+static method main() → dynamic {
+  lowered final dynamic #l;
+  lowered core::bool #l#isSet = false;
+  function #l#get() → dynamic
+    return #l#isSet ?{dynamic} #l : throw new _in::LateError::localNI("l");
+  function #l#set(dynamic #t4) → dynamic
+    if(#l#isSet)
+      throw new _in::LateError::localAI("l");
+    else {
+      #l#isSet = true;
+      return #l = #t4;
+    }
+  self::g = "Lily";
+  self::C::s = "was";
+  self::C c = new self::C::•();
+  c.{self::C::v} = "here";
+  #l#set("Run, Forrest, run"){(dynamic) → dynamic};
+  self::expect("Lily", self::g);
+  self::expect("was", self::C::s);
+  self::expect("here", c.{self::C::v}{dynamic});
+  self::expect("Run, Forrest, run", #l#get(){() → dynamic});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.modular.expect
new file mode 100644
index 0000000..e8923f9
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  abstract method baz() → self::A::T%;
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
+  method foo() → dynamic {
+    lowered self::A::T? #value;
+    lowered core::bool #value#isSet = false;
+    function #value#get() → self::A::T%
+      return #value#isSet ?{self::A::T%} #value{self::A::T%} : throw new _in::LateError::localNI("value");
+    function #value#set(self::A::T% #t1) → dynamic {
+      #value#isSet = true;
+      return #value = #t1;
+    }
+    () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get(){() → self::A::T%}){(self::A::T%) → dynamic};
+    (() → Null {
+      #value#set(this.{self::A::baz}(){() → self::A::T%}){(self::A::T%) → dynamic};
+    })(){() → Null};
+    return result;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.modular.expect
new file mode 100644
index 0000000..a37d11f
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class C extends core::Object {
+  field core::int? _#C#x = null;
+  field core::bool _#C#x#isSet = false;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  get x() → core::int
+    return this.{self::C::_#C#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::C::_#C#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+  set x(covariant-by-declaration core::int #t2) → void
+    if(this.{self::C::_#C#x#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("x");
+    else {
+      this.{self::C::_#C#x#isSet} = true;
+      this.{self::C::_#C#x} = #t2;
+    }
+}
+class D extends self::C {
+  synthetic constructor •() → self::D
+    : super self::C::•()
+    ;
+  set x(covariant-by-declaration core::num value) → void {
+    super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
+  }
+}
+static method main() → dynamic {
+  new self::D::•().{self::D::x} = 3.14;
+}
diff --git a/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.weak.modular.expect
new file mode 100644
index 0000000..c3f8ab3
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue41436/issue41436.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:test" as test;
+
+import "dart:test";
+
+static method main() → dynamic {
+  test::A a;
+}
+
+library /*isNonNullableByDefault*/;
+import self as test;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class A extends core::Object {
+  field core::int? _#A#x = null;
+  field core::bool _#A#x#isSet = false;
+  synthetic constructor •() → test::A
+    : super core::Object::•()
+    ;
+  get x() → core::int
+    return this.{test::A::_#A#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{test::A::_#A#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+  set x(core::int #t2) → void {
+    this.{test::A::_#A#x#isSet} = true;
+    this.{test::A::_#A#x} = #t2;
+  }
+}
+class _B extends core::Object implements test::A {
+  field core::int x = 3;
+  synthetic constructor •() → test::_B
+    : super core::Object::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/late_lowering/issue41436b.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/issue41436b.dart.weak.modular.expect
new file mode 100644
index 0000000..0c45d0a
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue41436b.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class A extends core::Object {
+  field core::int? _#A#x = null;
+  field core::bool _#A#x#isSet = false;
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  get x() → core::int
+    return this.{self::A::_#A#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+  set x(core::int #t2) → void {
+    this.{self::A::_#A#x#isSet} = true;
+    this.{self::A::_#A#x} = #t2;
+  }
+}
+class _B extends core::Object implements self::A {
+  field core::int x = 3;
+  synthetic constructor •() → self::_B
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  self::A a;
+}
diff --git a/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.modular.expect
new file mode 100644
index 0000000..4a82ef6
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue41436c/issue41436c.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "issue41436c_lib.dart" as iss;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue41436c_lib.dart";
+
+class C extends iss::B {
+  synthetic constructor •() → self::C
+    : super iss::B::•()
+    ;
+  no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x#isSet() → core::bool
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  no-such-method-forwarder get /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x() → core::int?
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+  no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x#isSet(core::bool value) → void
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
+  no-such-method-forwarder set /* from org-dartlang-testcase:///issue41436c_lib.dart */ _#A#x(core::int? value) → void
+    return this.{core::Object::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
+}
+static method main() → dynamic {
+  new self::C::•();
+}
+
+constants  {
+  #C1 = #org-dartlang-testcase:///issue41436c.dart::_#A#x#isSet
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+  #C5 = #org-dartlang-testcase:///issue41436c.dart::_#A#x
+  #C6 = #org-dartlang-testcase:///issue41436c.dart::_#A#x#isSet=
+  #C7 = #org-dartlang-testcase:///issue41436c.dart::_#A#x=
+}
diff --git a/pkg/front_end/testcases/late_lowering/issue41922.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/issue41922.dart.weak.modular.expect
new file mode 100644
index 0000000..f4abe91
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue41922.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::String? _#s = null;
+  static field core::bool _#s#isSet = false;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  static get s() → core::String? {
+    if(!self::C::_#s#isSet) {
+      self::C::_#s = self::init("lateValue");
+      self::C::_#s#isSet = true;
+    }
+    return self::C::_#s;
+  }
+  static set s(core::String? #t1) → void {
+    self::C::_#s#isSet = true;
+    self::C::_#s = #t1;
+  }
+}
+static field core::bool _called = false;
+static method init(core::String val) → core::String {
+  if(!self::_called) {
+    self::_called = true;
+    throw core::Exception::•();
+  }
+  return val;
+}
+static method main() → dynamic {
+  self::throws(() → void {
+    self::C::s;
+  });
+  self::expect("lateValue", self::C::s);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → void f) → dynamic {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object _) {
+    return;
+  }
+  throw "Expected exception";
+}
diff --git a/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.modular.expect
new file mode 100644
index 0000000..16c8e79
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A::T? _#A#x = null;
+  field core::bool _#A#x#isSet = false;
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  get x() → self::A::T%
+    return this.{self::A::_#A#x#isSet}{core::bool} ?{self::A::T%} let final self::A::T? #t1 = this.{self::A::_#A#x}{self::A::T?} in #t1{self::A::T%} : throw new _in::LateError::fieldNI("x");
+  set x(covariant-by-class self::A::T% #t2) → void {
+    this.{self::A::_#A#x#isSet} = true;
+    this.{self::A::_#A#x} = #t2;
+  }
+}
+class B<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::B::T? _y = null;
+  synthetic constructor •() → self::B<self::B::T%>
+    : super core::Object::•()
+    ;
+  get y() → self::B::T?
+    return this.{self::B::_y}{self::B::T?};
+  set y(covariant-by-class self::B::T? val) → void {
+    this.{self::B::_y} = val;
+  }
+}
+static method main() → dynamic {
+  self::A<core::num> a = new self::A::•<core::int>();
+  self::expect(42, a.{self::A::x} = 42);
+  self::throws(() → void => a.{self::A::x} = 0.5);
+  self::B<core::num> b = new self::B::•<core::int>();
+  self::expect(42, b.{self::B::y} = 42);
+  self::throws(() → void => b.{self::B::y} = 0.5);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → void f) → dynamic {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object _) {
+    return;
+  }
+  throw "Expected exception";
+}
diff --git a/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.modular.expect
new file mode 100644
index 0000000..57a90e0
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue44372.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method main(core::List<core::String> args) → dynamic {
+  lowered () →? core::int #recursiveInitLocal;
+  lowered core::bool #recursiveInitLocal#isSet = false;
+  function #recursiveInitLocal#get() → () → core::int
+    return #recursiveInitLocal#isSet ?{() → core::int} #recursiveInitLocal{() → core::int} : throw new _in::LateError::localNI("recursiveInitLocal");
+  function #recursiveInitLocal#set(() → core::int #t1) → dynamic {
+    #recursiveInitLocal#isSet = true;
+    return #recursiveInitLocal = #t1;
+  }
+  lowered final core::int? #local;
+  lowered core::bool #local#isSet = false;
+  function #local#get() → core::int {
+    if(!#local#isSet) {
+      final core::int #t2 = #recursiveInitLocal#get(){() → () → core::int}(){() → core::int};
+      if(#local#isSet)
+        throw new _in::LateError::localADI("local");
+      #local = #t2;
+      #local#isSet = true;
+    }
+    return #local{core::int};
+  }
+  core::bool doRecursiveInitLocal = true;
+  #recursiveInitLocal#set(() → core::int {
+    core::print("Executing initializer");
+    if(doRecursiveInitLocal) {
+      doRecursiveInitLocal = false;
+      core::print("Trigger recursive initialization");
+      core::int val = #local#get(){() → core::int};
+      core::print("Final local has value ${val}");
+      core::print("Returning 4 from initializer");
+      return 4;
+    }
+    core::print("Returning 3 from initializer");
+    return 3;
+  }){(() → core::int) → dynamic};
+  self::throws(() → Null {
+    core::int val = #local#get(){() → core::int};
+    core::print("Final local has value ${val}");
+  }, "Read local");
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.modular.expect
new file mode 100644
index 0000000..784ff0c
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.modular.expect
@@ -0,0 +1,277 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Annotation extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::Annotation
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  field core::int? _#A#instanceField = null;
+  field core::bool _#A#instanceField#isSet = false;
+  field core::int? _#A#finalInstanceField = null;
+  field core::bool _#A#finalInstanceField#isSet = false;
+  field core::int? _#A#finalInstanceFieldWithInitializer = null;
+  field core::bool _#A#finalInstanceFieldWithInitializer#isSet = false;
+  field core::num? _#A#covariantInstanceField = null;
+  field core::bool _#A#covariantInstanceField#isSet = false;
+  static field core::int? _#staticField = null;
+  static field core::bool _#staticField#isSet = false;
+  static field core::int? _#finalStaticField = null;
+  static field core::bool _#finalStaticField#isSet = false;
+  static field core::int? _#finalStaticFieldWithInitializer = null;
+  static field core::bool _#finalStaticFieldWithInitializer#isSet = false;
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  @#C1
+  get instanceField() → core::int
+    return this.{self::A::_#A#instanceField#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#instanceField}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("instanceField");
+  @#C1
+  set instanceField(core::int #t2) → void {
+    this.{self::A::_#A#instanceField#isSet} = true;
+    this.{self::A::_#A#instanceField} = #t2;
+  }
+  @#C1
+  get finalInstanceField() → core::int
+    return this.{self::A::_#A#finalInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t3 = this.{self::A::_#A#finalInstanceField}{core::int?} in #t3{core::int} : throw new _in::LateError::fieldNI("finalInstanceField");
+  @#C1
+  set finalInstanceField(core::int #t4) → void
+    if(this.{self::A::_#A#finalInstanceField#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("finalInstanceField");
+    else {
+      this.{self::A::_#A#finalInstanceField#isSet} = true;
+      this.{self::A::_#A#finalInstanceField} = #t4;
+    }
+  @#C1
+  get finalInstanceFieldWithInitializer() → core::int {
+    if(!this.{self::A::_#A#finalInstanceFieldWithInitializer#isSet}{core::bool}) {
+      final core::int #t5 = 0;
+      if(this.{self::A::_#A#finalInstanceFieldWithInitializer#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("finalInstanceFieldWithInitializer");
+      this.{self::A::_#A#finalInstanceFieldWithInitializer} = #t5;
+      this.{self::A::_#A#finalInstanceFieldWithInitializer#isSet} = true;
+    }
+    return let final core::int? #t6 = this.{self::A::_#A#finalInstanceFieldWithInitializer}{core::int?} in #t6{core::int};
+  }
+  @#C1
+  get covariantInstanceField() → core::num
+    return this.{self::A::_#A#covariantInstanceField#isSet}{core::bool} ?{core::num} let final core::num? #t7 = this.{self::A::_#A#covariantInstanceField}{core::num?} in #t7{core::num} : throw new _in::LateError::fieldNI("covariantInstanceField");
+  @#C1
+  set covariantInstanceField(covariant-by-declaration core::num #t8) → void {
+    this.{self::A::_#A#covariantInstanceField#isSet} = true;
+    this.{self::A::_#A#covariantInstanceField} = #t8;
+  }
+  @#C1
+  static get staticField() → core::int
+    return self::A::_#staticField#isSet ?{core::int} let final core::int? #t9 = self::A::_#staticField in #t9{core::int} : throw new _in::LateError::fieldNI("staticField");
+  @#C1
+  static set staticField(core::int #t10) → void {
+    self::A::_#staticField#isSet = true;
+    self::A::_#staticField = #t10;
+  }
+  @#C1
+  static get finalStaticField() → core::int
+    return self::A::_#finalStaticField#isSet ?{core::int} let final core::int? #t11 = self::A::_#finalStaticField in #t11{core::int} : throw new _in::LateError::fieldNI("finalStaticField");
+  @#C1
+  static set finalStaticField(core::int #t12) → void
+    if(self::A::_#finalStaticField#isSet)
+      throw new _in::LateError::fieldAI("finalStaticField");
+    else {
+      self::A::_#finalStaticField#isSet = true;
+      self::A::_#finalStaticField = #t12;
+    }
+  @#C1
+  static get finalStaticFieldWithInitializer() → core::int {
+    if(!self::A::_#finalStaticFieldWithInitializer#isSet) {
+      final core::int #t13 = 0;
+      if(self::A::_#finalStaticFieldWithInitializer#isSet)
+        throw new _in::LateError::fieldADI("finalStaticFieldWithInitializer");
+      self::A::_#finalStaticFieldWithInitializer = #t13;
+      self::A::_#finalStaticFieldWithInitializer#isSet = true;
+    }
+    return let final core::int? #t14 = self::A::_#finalStaticFieldWithInitializer in #t14{core::int};
+  }
+}
+abstract class B extends core::Object /*isMixinDeclaration*/  {
+  field core::int? _#B#instanceField = null;
+  field core::bool _#B#instanceField#isSet = false;
+  field core::int? _#B#finalInstanceField = null;
+  field core::bool _#B#finalInstanceField#isSet = false;
+  field core::int? _#B#finalInstanceFieldWithInitializer = null;
+  field core::bool _#B#finalInstanceFieldWithInitializer#isSet = false;
+  field core::num? _#B#covariantInstanceField = null;
+  field core::bool _#B#covariantInstanceField#isSet = false;
+  static field core::int? _#staticField = null;
+  static field core::bool _#staticField#isSet = false;
+  static field core::int? _#finalStaticField = null;
+  static field core::bool _#finalStaticField#isSet = false;
+  static field core::int? _#finalStaticFieldWithInitializer = null;
+  static field core::bool _#finalStaticFieldWithInitializer#isSet = false;
+  @#C1
+  get instanceField() → core::int
+    return this.{self::B::_#B#instanceField#isSet}{core::bool} ?{core::int} let final core::int? #t15 = this.{self::B::_#B#instanceField}{core::int?} in #t15{core::int} : throw new _in::LateError::fieldNI("instanceField");
+  @#C1
+  set instanceField(core::int #t16) → void {
+    this.{self::B::_#B#instanceField#isSet} = true;
+    this.{self::B::_#B#instanceField} = #t16;
+  }
+  @#C1
+  get finalInstanceField() → core::int
+    return this.{self::B::_#B#finalInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t17 = this.{self::B::_#B#finalInstanceField}{core::int?} in #t17{core::int} : throw new _in::LateError::fieldNI("finalInstanceField");
+  @#C1
+  set finalInstanceField(core::int #t18) → void
+    if(this.{self::B::_#B#finalInstanceField#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("finalInstanceField");
+    else {
+      this.{self::B::_#B#finalInstanceField#isSet} = true;
+      this.{self::B::_#B#finalInstanceField} = #t18;
+    }
+  @#C1
+  get finalInstanceFieldWithInitializer() → core::int {
+    if(!this.{self::B::_#B#finalInstanceFieldWithInitializer#isSet}{core::bool}) {
+      final core::int #t19 = 0;
+      if(this.{self::B::_#B#finalInstanceFieldWithInitializer#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("finalInstanceFieldWithInitializer");
+      this.{self::B::_#B#finalInstanceFieldWithInitializer} = #t19;
+      this.{self::B::_#B#finalInstanceFieldWithInitializer#isSet} = true;
+    }
+    return let final core::int? #t20 = this.{self::B::_#B#finalInstanceFieldWithInitializer}{core::int?} in #t20{core::int};
+  }
+  @#C1
+  get covariantInstanceField() → core::num
+    return this.{self::B::_#B#covariantInstanceField#isSet}{core::bool} ?{core::num} let final core::num? #t21 = this.{self::B::_#B#covariantInstanceField}{core::num?} in #t21{core::num} : throw new _in::LateError::fieldNI("covariantInstanceField");
+  @#C1
+  set covariantInstanceField(covariant-by-declaration core::num #t22) → void {
+    this.{self::B::_#B#covariantInstanceField#isSet} = true;
+    this.{self::B::_#B#covariantInstanceField} = #t22;
+  }
+  @#C1
+  static get staticField() → core::int
+    return self::B::_#staticField#isSet ?{core::int} let final core::int? #t23 = self::B::_#staticField in #t23{core::int} : throw new _in::LateError::fieldNI("staticField");
+  @#C1
+  static set staticField(core::int #t24) → void {
+    self::B::_#staticField#isSet = true;
+    self::B::_#staticField = #t24;
+  }
+  @#C1
+  static get finalStaticField() → core::int
+    return self::B::_#finalStaticField#isSet ?{core::int} let final core::int? #t25 = self::B::_#finalStaticField in #t25{core::int} : throw new _in::LateError::fieldNI("finalStaticField");
+  @#C1
+  static set finalStaticField(core::int #t26) → void
+    if(self::B::_#finalStaticField#isSet)
+      throw new _in::LateError::fieldAI("finalStaticField");
+    else {
+      self::B::_#finalStaticField#isSet = true;
+      self::B::_#finalStaticField = #t26;
+    }
+  @#C1
+  static get finalStaticFieldWithInitializer() → core::int {
+    if(!self::B::_#finalStaticFieldWithInitializer#isSet) {
+      final core::int #t27 = 0;
+      if(self::B::_#finalStaticFieldWithInitializer#isSet)
+        throw new _in::LateError::fieldADI("finalStaticFieldWithInitializer");
+      self::B::_#finalStaticFieldWithInitializer = #t27;
+      self::B::_#finalStaticFieldWithInitializer#isSet = true;
+    }
+    return let final core::int? #t28 = self::B::_#finalStaticFieldWithInitializer in #t28{core::int};
+  }
+}
+extension Extension on self::A {
+  static field extensionStaticField = self::_#Extension|extensionStaticField;
+  static field extensionStaticField = self::_#Extension|extensionStaticField#isSet;
+  static get extensionStaticField = get self::Extension|extensionStaticField;
+  static set extensionStaticField = set self::Extension|extensionStaticField;
+  static field finalExtensionStaticField = self::_#Extension|finalExtensionStaticField;
+  static field finalExtensionStaticField = self::_#Extension|finalExtensionStaticField#isSet;
+  static get finalExtensionStaticField = get self::Extension|finalExtensionStaticField;
+  static set finalExtensionStaticField = set self::Extension|finalExtensionStaticField;
+  static field finalExtensionStaticFieldWithInitializer = self::_#Extension|finalExtensionStaticFieldWithInitializer;
+  static field finalExtensionStaticFieldWithInitializer = self::_#Extension|finalExtensionStaticFieldWithInitializer#isSet;
+  static get finalExtensionStaticFieldWithInitializer = get self::Extension|finalExtensionStaticFieldWithInitializer;
+}
+static field core::int? _#topLevelField = null;
+static field core::bool _#topLevelField#isSet = false;
+static field core::int? _#finalTopLevelField = null;
+static field core::bool _#finalTopLevelField#isSet = false;
+static field core::int? _#finalTopLevelFieldWithInitializer = null;
+static field core::bool _#finalTopLevelFieldWithInitializer#isSet = false;
+static field core::int? _#Extension|extensionStaticField = null;
+static field core::bool _#Extension|extensionStaticField#isSet = false;
+static field core::int? _#Extension|finalExtensionStaticField = null;
+static field core::bool _#Extension|finalExtensionStaticField#isSet = false;
+static field core::int? _#Extension|finalExtensionStaticFieldWithInitializer = null;
+static field core::bool _#Extension|finalExtensionStaticFieldWithInitializer#isSet = false;
+@#C1
+static get topLevelField() → core::int
+  return self::_#topLevelField#isSet ?{core::int} let final core::int? #t29 = self::_#topLevelField in #t29{core::int} : throw new _in::LateError::fieldNI("topLevelField");
+@#C1
+static set topLevelField(core::int #t30) → void {
+  self::_#topLevelField#isSet = true;
+  self::_#topLevelField = #t30;
+}
+@#C1
+static get finalTopLevelField() → core::int
+  return self::_#finalTopLevelField#isSet ?{core::int} let final core::int? #t31 = self::_#finalTopLevelField in #t31{core::int} : throw new _in::LateError::fieldNI("finalTopLevelField");
+@#C1
+static set finalTopLevelField(core::int #t32) → void
+  if(self::_#finalTopLevelField#isSet)
+    throw new _in::LateError::fieldAI("finalTopLevelField");
+  else {
+    self::_#finalTopLevelField#isSet = true;
+    self::_#finalTopLevelField = #t32;
+  }
+@#C1
+static get finalTopLevelFieldWithInitializer() → core::int {
+  if(!self::_#finalTopLevelFieldWithInitializer#isSet) {
+    final core::int #t33 = 0;
+    if(self::_#finalTopLevelFieldWithInitializer#isSet)
+      throw new _in::LateError::fieldADI("finalTopLevelFieldWithInitializer");
+    self::_#finalTopLevelFieldWithInitializer = #t33;
+    self::_#finalTopLevelFieldWithInitializer#isSet = true;
+  }
+  return let final core::int? #t34 = self::_#finalTopLevelFieldWithInitializer in #t34{core::int};
+}
+@#C1
+static get Extension|extensionStaticField() → core::int
+  return self::_#Extension|extensionStaticField#isSet ?{core::int} let final core::int? #t35 = self::_#Extension|extensionStaticField in #t35{core::int} : throw new _in::LateError::fieldNI("extensionStaticField");
+@#C1
+static set Extension|extensionStaticField(core::int #t36) → void {
+  self::_#Extension|extensionStaticField#isSet = true;
+  self::_#Extension|extensionStaticField = #t36;
+}
+@#C1
+static get Extension|finalExtensionStaticField() → core::int
+  return self::_#Extension|finalExtensionStaticField#isSet ?{core::int} let final core::int? #t37 = self::_#Extension|finalExtensionStaticField in #t37{core::int} : throw new _in::LateError::fieldNI("finalExtensionStaticField");
+@#C1
+static set Extension|finalExtensionStaticField(core::int #t38) → void
+  if(self::_#Extension|finalExtensionStaticField#isSet)
+    throw new _in::LateError::fieldAI("finalExtensionStaticField");
+  else {
+    self::_#Extension|finalExtensionStaticField#isSet = true;
+    self::_#Extension|finalExtensionStaticField = #t38;
+  }
+@#C1
+static get Extension|finalExtensionStaticFieldWithInitializer() → core::int {
+  if(!self::_#Extension|finalExtensionStaticFieldWithInitializer#isSet) {
+    final core::int #t39 = 0;
+    if(self::_#Extension|finalExtensionStaticFieldWithInitializer#isSet)
+      throw new _in::LateError::fieldADI("finalExtensionStaticFieldWithInitializer");
+    self::_#Extension|finalExtensionStaticFieldWithInitializer = #t39;
+    self::_#Extension|finalExtensionStaticFieldWithInitializer#isSet = true;
+  }
+  return let final core::int? #t40 = self::_#Extension|finalExtensionStaticFieldWithInitializer in #t40{core::int};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Annotation {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///late_annotations.dart:
+- Annotation. (from org-dartlang-testcase:///late_annotations.dart:6:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/late_lowering/late_field_inference.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_field_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..bb1a104
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_field_inference.dart.weak.modular.expect
@@ -0,0 +1,101 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int? _#A#nonNullableInstanceField = null;
+  field core::bool _#A#nonNullableInstanceField#isSet = false;
+  field core::int? _#A#nullableInstanceField = null;
+  field core::bool _#A#nullableInstanceField#isSet = false;
+  static field core::int? _#nonNullableStaticField = null;
+  static field core::bool _#nonNullableStaticField#isSet = false;
+  static field core::int? _#nullableStaticField = null;
+  static field core::bool _#nullableStaticField#isSet = false;
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  get nonNullableInstanceField() → core::int {
+    if(!this.{self::A::_#A#nonNullableInstanceField#isSet}{core::bool}) {
+      this.{self::A::_#A#nonNullableInstanceField} = 0;
+      this.{self::A::_#A#nonNullableInstanceField#isSet} = true;
+    }
+    return let final core::int? #t1 = this.{self::A::_#A#nonNullableInstanceField}{core::int?} in #t1{core::int};
+  }
+  set nonNullableInstanceField(core::int #t2) → void {
+    this.{self::A::_#A#nonNullableInstanceField#isSet} = true;
+    this.{self::A::_#A#nonNullableInstanceField} = #t2;
+  }
+  get nullableInstanceField() → core::int? {
+    if(!this.{self::A::_#A#nullableInstanceField#isSet}{core::bool}) {
+      this.{self::A::_#A#nullableInstanceField} = self::method();
+      this.{self::A::_#A#nullableInstanceField#isSet} = true;
+    }
+    return this.{self::A::_#A#nullableInstanceField}{core::int?};
+  }
+  set nullableInstanceField(core::int? #t3) → void {
+    this.{self::A::_#A#nullableInstanceField#isSet} = true;
+    this.{self::A::_#A#nullableInstanceField} = #t3;
+  }
+  static get nonNullableStaticField() → core::int {
+    if(!self::A::_#nonNullableStaticField#isSet) {
+      self::A::_#nonNullableStaticField = 0;
+      self::A::_#nonNullableStaticField#isSet = true;
+    }
+    return let final core::int? #t4 = self::A::_#nonNullableStaticField in #t4{core::int};
+  }
+  static set nonNullableStaticField(core::int #t5) → void {
+    self::A::_#nonNullableStaticField#isSet = true;
+    self::A::_#nonNullableStaticField = #t5;
+  }
+  static get nullableStaticField() → core::int? {
+    if(!self::A::_#nullableStaticField#isSet) {
+      self::A::_#nullableStaticField = self::method();
+      self::A::_#nullableStaticField#isSet = true;
+    }
+    return self::A::_#nullableStaticField;
+  }
+  static set nullableStaticField(core::int? #t6) → void {
+    self::A::_#nullableStaticField#isSet = true;
+    self::A::_#nullableStaticField = #t6;
+  }
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  get nonNullableInstanceField() → core::int
+    return 0;
+  set nonNullableInstanceField(core::int value) → void {}
+  get nullableInstanceField() → core::int?
+    return 0;
+  set nullableInstanceField(core::int? value) → void {}
+}
+static field core::int? _#nonNullableTopLevelField = null;
+static field core::bool _#nonNullableTopLevelField#isSet = false;
+static field core::int? _#nullableTopLevelField = null;
+static field core::bool _#nullableTopLevelField#isSet = false;
+static method method() → core::int?
+  return null;
+static get nonNullableTopLevelField() → core::int {
+  if(!self::_#nonNullableTopLevelField#isSet) {
+    self::_#nonNullableTopLevelField = 0;
+    self::_#nonNullableTopLevelField#isSet = true;
+  }
+  return let final core::int? #t7 = self::_#nonNullableTopLevelField in #t7{core::int};
+}
+static set nonNullableTopLevelField(core::int #t8) → void {
+  self::_#nonNullableTopLevelField#isSet = true;
+  self::_#nonNullableTopLevelField = #t8;
+}
+static get nullableTopLevelField() → core::int? {
+  if(!self::_#nullableTopLevelField#isSet) {
+    self::_#nullableTopLevelField = self::method();
+    self::_#nullableTopLevelField#isSet = true;
+  }
+  return self::_#nullableTopLevelField;
+}
+static set nullableTopLevelField(core::int? #t9) → void {
+  self::_#nullableTopLevelField#isSet = true;
+  self::_#nullableTopLevelField = #t9;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..8d1c620
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.modular.expect
@@ -0,0 +1,163 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  static field core::int? _#lateStaticField1 = null;
+  static field core::bool _#lateStaticField1#isSet = false;
+  static field core::int? _#lateStaticField2 = null;
+  static field core::bool _#lateStaticField2#isSet = false;
+  field core::int? _#Class#lateInstanceField = null;
+  field core::bool _#Class#lateInstanceField#isSet = false;
+  final field self::Class::T% field;
+  covariant-by-class field self::Class::T? _#Class#lateGenericField1 = null;
+  field core::bool _#Class#lateGenericField1#isSet = false;
+  covariant-by-class field self::Class::T? _#Class#lateGenericField2 = null;
+  field core::bool _#Class#lateGenericField2#isSet = false;
+  constructor •(self::Class::T% field) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  static get lateStaticField1() → core::int {
+    if(!self::Class::_#lateStaticField1#isSet) {
+      self::Class::_#lateStaticField1 = 87;
+      self::Class::_#lateStaticField1#isSet = true;
+    }
+    return let final core::int? #t1 = self::Class::_#lateStaticField1 in #t1{core::int};
+  }
+  static set lateStaticField1(core::int #t2) → void {
+    self::Class::_#lateStaticField1#isSet = true;
+    self::Class::_#lateStaticField1 = #t2;
+  }
+  static get lateStaticField2() → core::int {
+    if(!self::Class::_#lateStaticField2#isSet) {
+      self::Class::_#lateStaticField2 = 42;
+      self::Class::_#lateStaticField2#isSet = true;
+    }
+    return let final core::int? #t3 = self::Class::_#lateStaticField2 in #t3{core::int};
+  }
+  static set lateStaticField2(core::int #t4) → void {
+    self::Class::_#lateStaticField2#isSet = true;
+    self::Class::_#lateStaticField2 = #t4;
+  }
+  static method staticMethod() → dynamic {
+    self::expect(42, self::Class::lateStaticField2);
+    self::Class::lateStaticField2 = 43;
+    self::expect(43, self::Class::lateStaticField2);
+  }
+  get lateInstanceField() → core::int {
+    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateInstanceField} = 16;
+      this.{self::Class::_#Class#lateInstanceField#isSet} = true;
+    }
+    return let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t5{core::int};
+  }
+  set lateInstanceField(core::int #t6) → void {
+    this.{self::Class::_#Class#lateInstanceField#isSet} = true;
+    this.{self::Class::_#Class#lateInstanceField} = #t6;
+  }
+  get lateGenericField1() → self::Class::T% {
+    if(!this.{self::Class::_#Class#lateGenericField1#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateGenericField1} = this.{self::Class::field}{self::Class::T%};
+      this.{self::Class::_#Class#lateGenericField1#isSet} = true;
+    }
+    return let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericField1}{self::Class::T?} in #t7{self::Class::T%};
+  }
+  set lateGenericField1(covariant-by-class self::Class::T% #t8) → void {
+    this.{self::Class::_#Class#lateGenericField1#isSet} = true;
+    this.{self::Class::_#Class#lateGenericField1} = #t8;
+  }
+  get lateGenericField2() → self::Class::T% {
+    if(!this.{self::Class::_#Class#lateGenericField2#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateGenericField2} = this.{self::Class::field}{self::Class::T%};
+      this.{self::Class::_#Class#lateGenericField2#isSet} = true;
+    }
+    return let final self::Class::T? #t9 = this.{self::Class::_#Class#lateGenericField2}{self::Class::T?} in #t9{self::Class::T%};
+  }
+  set lateGenericField2(covariant-by-class self::Class::T% #t10) → void {
+    this.{self::Class::_#Class#lateGenericField2#isSet} = true;
+    this.{self::Class::_#Class#lateGenericField2} = #t10;
+  }
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic {
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
+    this.{self::Class::lateInstanceField} = 17;
+    self::expect(17, this.{self::Class::lateInstanceField}{core::int});
+    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericField1}{self::Class::T%});
+    this.{self::Class::lateGenericField1} = value;
+    self::expect(value, this.{self::Class::lateGenericField1}{self::Class::T%});
+    this.{self::Class::lateGenericField2} = value;
+    self::expect(value, this.{self::Class::lateGenericField2}{self::Class::T%});
+  }
+}
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
+  static field lateExtensionField1 = self::_#Extension|lateExtensionField1;
+  static field lateExtensionField1 = self::_#Extension|lateExtensionField1#isSet;
+  static get lateExtensionField1 = get self::Extension|lateExtensionField1;
+  static set lateExtensionField1 = set self::Extension|lateExtensionField1;
+  static field lateExtensionField2 = self::_#Extension|lateExtensionField2;
+  static field lateExtensionField2 = self::_#Extension|lateExtensionField2#isSet;
+  static get lateExtensionField2 = get self::Extension|lateExtensionField2;
+  static set lateExtensionField2 = set self::Extension|lateExtensionField2;
+  static method staticMethod = self::Extension|staticMethod;
+}
+static field core::int? _#lateTopLevelField1 = null;
+static field core::bool _#lateTopLevelField1#isSet = false;
+static field core::int? _#Extension|lateExtensionField1 = null;
+static field core::bool _#Extension|lateExtensionField1#isSet = false;
+static field core::int? _#Extension|lateExtensionField2 = null;
+static field core::bool _#Extension|lateExtensionField2#isSet = false;
+static get lateTopLevelField1() → core::int {
+  if(!self::_#lateTopLevelField1#isSet) {
+    self::_#lateTopLevelField1 = 123;
+    self::_#lateTopLevelField1#isSet = true;
+  }
+  return let final core::int? #t11 = self::_#lateTopLevelField1 in #t11{core::int};
+}
+static set lateTopLevelField1(core::int #t12) → void {
+  self::_#lateTopLevelField1#isSet = true;
+  self::_#lateTopLevelField1 = #t12;
+}
+static get Extension|lateExtensionField1() → core::int {
+  if(!self::_#Extension|lateExtensionField1#isSet) {
+    self::_#Extension|lateExtensionField1 = 87;
+    self::_#Extension|lateExtensionField1#isSet = true;
+  }
+  return let final core::int? #t13 = self::_#Extension|lateExtensionField1 in #t13{core::int};
+}
+static set Extension|lateExtensionField1(core::int #t14) → void {
+  self::_#Extension|lateExtensionField1#isSet = true;
+  self::_#Extension|lateExtensionField1 = #t14;
+}
+static get Extension|lateExtensionField2() → core::int {
+  if(!self::_#Extension|lateExtensionField2#isSet) {
+    self::_#Extension|lateExtensionField2 = 42;
+    self::_#Extension|lateExtensionField2#isSet = true;
+  }
+  return let final core::int? #t15 = self::_#Extension|lateExtensionField2 in #t15{core::int};
+}
+static set Extension|lateExtensionField2(core::int #t16) → void {
+  self::_#Extension|lateExtensionField2#isSet = true;
+  self::_#Extension|lateExtensionField2 = #t16;
+}
+static method Extension|staticMethod() → dynamic {
+  self::expect(42, self::Extension|lateExtensionField2);
+  self::Extension|lateExtensionField2 = 43;
+  self::expect(43, self::Extension|lateExtensionField2);
+}
+static method main() → dynamic {
+  self::expect(123, self::lateTopLevelField1);
+  self::lateTopLevelField1 = 124;
+  self::expect(124, self::lateTopLevelField1);
+  self::expect(87, self::Class::lateStaticField1);
+  self::Class::lateStaticField1 = 88;
+  self::expect(88, self::Class::lateStaticField1);
+  self::Class::staticMethod();
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(42){(core::int) → dynamic};
+  self::expect(87, self::Extension|lateExtensionField1);
+  self::Extension|lateExtensionField1 = 88;
+  self::expect(88, self::Extension|lateExtensionField1);
+  self::Extension|staticMethod();
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..9734ddb
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.modular.expect
@@ -0,0 +1,131 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  static field core::int? _#lateStaticField1 = null;
+  static field core::bool _#lateStaticField1#isSet = false;
+  static field core::int? _#lateStaticField2 = null;
+  static field core::bool _#lateStaticField2#isSet = false;
+  field core::int? _#Class#lateInstanceField = null;
+  field core::bool _#Class#lateInstanceField#isSet = false;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField = null;
+  field core::bool _#Class#lateGenericInstanceField#isSet = false;
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  static get lateStaticField1() → core::int
+    return self::Class::_#lateStaticField1#isSet ?{core::int} let final core::int? #t1 = self::Class::_#lateStaticField1 in #t1{core::int} : throw new _in::LateError::fieldNI("lateStaticField1");
+  static set lateStaticField1(core::int #t2) → void {
+    self::Class::_#lateStaticField1#isSet = true;
+    self::Class::_#lateStaticField1 = #t2;
+  }
+  static get lateStaticField2() → core::int
+    return self::Class::_#lateStaticField2#isSet ?{core::int} let final core::int? #t3 = self::Class::_#lateStaticField2 in #t3{core::int} : throw new _in::LateError::fieldNI("lateStaticField2");
+  static set lateStaticField2(core::int #t4) → void {
+    self::Class::_#lateStaticField2#isSet = true;
+    self::Class::_#lateStaticField2 = #t4;
+  }
+  static method staticMethod() → dynamic {
+    self::throws(() → core::int => self::Class::lateStaticField2, "Read value from uninitialized Class.lateStaticField2");
+    self::Class::lateStaticField2 = 42;
+    self::expect(42, self::Class::lateStaticField2);
+  }
+  get lateInstanceField() → core::int
+    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t5{core::int} : throw new _in::LateError::fieldNI("lateInstanceField");
+  set lateInstanceField(core::int #t6) → void {
+    this.{self::Class::_#Class#lateInstanceField#isSet} = true;
+    this.{self::Class::_#Class#lateInstanceField} = #t6;
+  }
+  get lateGenericInstanceField() → self::Class::T%
+    return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T%} let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} in #t7{self::Class::T%} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
+  set lateGenericInstanceField(covariant-by-class self::Class::T% #t8) → void {
+    this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
+    this.{self::Class::_#Class#lateGenericInstanceField} = #t8;
+  }
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic {
+    self::throws(() → core::int => this.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
+    this.{self::Class::lateInstanceField} = 16;
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
+    self::throws(() → self::Class::T% => this.{self::Class::lateGenericInstanceField}{self::Class::T%}, "Read value from uninitialized Class.lateGenericInstanceField");
+    this.{self::Class::lateGenericInstanceField} = value;
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T%});
+  }
+}
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
+  static field lateExtensionField1 = self::_#Extension|lateExtensionField1;
+  static field lateExtensionField1 = self::_#Extension|lateExtensionField1#isSet;
+  static get lateExtensionField1 = get self::Extension|lateExtensionField1;
+  static set lateExtensionField1 = set self::Extension|lateExtensionField1;
+  static field lateExtensionField2 = self::_#Extension|lateExtensionField2;
+  static field lateExtensionField2 = self::_#Extension|lateExtensionField2#isSet;
+  static get lateExtensionField2 = get self::Extension|lateExtensionField2;
+  static set lateExtensionField2 = set self::Extension|lateExtensionField2;
+  static method staticMethod = self::Extension|staticMethod;
+}
+static field core::int? _#lateTopLevelField = null;
+static field core::bool _#lateTopLevelField#isSet = false;
+static field core::int? _#Extension|lateExtensionField1 = null;
+static field core::bool _#Extension|lateExtensionField1#isSet = false;
+static field core::int? _#Extension|lateExtensionField2 = null;
+static field core::bool _#Extension|lateExtensionField2#isSet = false;
+static get lateTopLevelField() → core::int
+  return self::_#lateTopLevelField#isSet ?{core::int} let final core::int? #t9 = self::_#lateTopLevelField in #t9{core::int} : throw new _in::LateError::fieldNI("lateTopLevelField");
+static set lateTopLevelField(core::int #t10) → void {
+  self::_#lateTopLevelField#isSet = true;
+  self::_#lateTopLevelField = #t10;
+}
+static get Extension|lateExtensionField1() → core::int
+  return self::_#Extension|lateExtensionField1#isSet ?{core::int} let final core::int? #t11 = self::_#Extension|lateExtensionField1 in #t11{core::int} : throw new _in::LateError::fieldNI("lateExtensionField1");
+static set Extension|lateExtensionField1(core::int #t12) → void {
+  self::_#Extension|lateExtensionField1#isSet = true;
+  self::_#Extension|lateExtensionField1 = #t12;
+}
+static get Extension|lateExtensionField2() → core::int
+  return self::_#Extension|lateExtensionField2#isSet ?{core::int} let final core::int? #t13 = self::_#Extension|lateExtensionField2 in #t13{core::int} : throw new _in::LateError::fieldNI("lateExtensionField2");
+static set Extension|lateExtensionField2(core::int #t14) → void {
+  self::_#Extension|lateExtensionField2#isSet = true;
+  self::_#Extension|lateExtensionField2 = #t14;
+}
+static method Extension|staticMethod() → dynamic {
+  self::throws(() → core::int => self::Extension|lateExtensionField2, "Read value from uninitialized Class.lateExtensionField2");
+  self::Extension|lateExtensionField2 = 42;
+  self::expect(42, self::Extension|lateExtensionField2);
+}
+static method main() → dynamic {
+  self::throws(() → core::int => self::lateTopLevelField, "Read value from uninitialized lateTopLevelField");
+  self::lateTopLevelField = 123;
+  self::expect(123, self::lateTopLevelField);
+  self::throws(() → core::int => self::Class::lateStaticField1, "Read value from uninitialized Class.lateStaticField1");
+  self::Class::lateStaticField1 = 87;
+  self::expect(87, self::Class::lateStaticField1);
+  self::Class::staticMethod();
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(0){(core::int) → dynamic};
+  self::Class<core::int> c = new self::Class::•<core::int>();
+  self::throws(() → core::int => c.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
+  c.{self::Class::lateInstanceField} = 16;
+  self::expect(16, c.{self::Class::lateInstanceField}{core::int});
+  self::throws(() → core::int => c.{self::Class::lateGenericInstanceField}{core::int}, "Read value from uninitialized Class.lateGenericInstanceField");
+  c.{self::Class::lateGenericInstanceField} = 0;
+  self::expect(0, c.{self::Class::lateGenericInstanceField}{core::int});
+  self::throws(() → core::int => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
+  self::Extension|lateExtensionField1 = 87;
+  self::expect(87, self::Extension|lateExtensionField1);
+  self::Extension|staticMethod();
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..35715d5
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.modular.expect
@@ -0,0 +1,198 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class B extends core::Object {
+  final field core::int x;
+  constructor •(core::int x) → self::B
+    : self::B::x = x, super core::Object::•()
+    ;
+}
+class C extends self::B {
+  field core::int? _#C#y = null;
+  field core::bool _#C#y#isSet = false;
+  constructor •(core::int x) → self::C
+    : super self::B::•(x)
+    ;
+  get y() → core::int {
+    if(!this.{self::C::_#C#y#isSet}{core::bool}) {
+      final core::int #t1 = this.{self::B::x}{core::int}.{core::num::+}(1){(core::num) → core::int};
+      if(this.{self::C::_#C#y#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("y");
+      this.{self::C::_#C#y} = #t1;
+      this.{self::C::_#C#y#isSet} = true;
+    }
+    return let final core::int? #t2 = this.{self::C::_#C#y}{core::int?} in #t2{core::int};
+  }
+  method method() → dynamic
+    return this.{self::B::x}{core::int};
+}
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  static field core::int? lateStaticField1Init = null;
+  static field core::int? _#lateStaticField1 = null;
+  static field core::bool _#lateStaticField1#isSet = false;
+  static field core::int? lateStaticField2Init = null;
+  static field core::int? _#lateStaticField2 = null;
+  static field core::bool _#lateStaticField2#isSet = false;
+  field core::int? lateInstanceFieldInit = null;
+  field core::int? _#Class#lateInstanceField = null;
+  field core::bool _#Class#lateInstanceField#isSet = false;
+  covariant-by-class field self::Class::T? lateGenericFieldInit = null;
+  final field self::Class::T% field;
+  field self::Class::T? _#Class#lateGenericField = null;
+  field core::bool _#Class#lateGenericField#isSet = false;
+  constructor •(self::Class::T% field) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  static method initLateStaticField1(core::int value) → core::int {
+    return self::Class::lateStaticField1Init = value;
+  }
+  static get lateStaticField1() → core::int {
+    if(!self::Class::_#lateStaticField1#isSet) {
+      final core::int #t3 = self::Class::initLateStaticField1(87);
+      if(self::Class::_#lateStaticField1#isSet)
+        throw new _in::LateError::fieldADI("lateStaticField1");
+      self::Class::_#lateStaticField1 = #t3;
+      self::Class::_#lateStaticField1#isSet = true;
+    }
+    return let final core::int? #t4 = self::Class::_#lateStaticField1 in #t4{core::int};
+  }
+  static method initLateStaticField2(core::int value) → core::int {
+    return self::Class::lateStaticField2Init = value;
+  }
+  static get lateStaticField2() → core::int {
+    if(!self::Class::_#lateStaticField2#isSet) {
+      final core::int #t5 = self::Class::initLateStaticField2(42);
+      if(self::Class::_#lateStaticField2#isSet)
+        throw new _in::LateError::fieldADI("lateStaticField2");
+      self::Class::_#lateStaticField2 = #t5;
+      self::Class::_#lateStaticField2#isSet = true;
+    }
+    return let final core::int? #t6 = self::Class::_#lateStaticField2 in #t6{core::int};
+  }
+  static method staticMethod() → dynamic {
+    self::expect(null, self::Class::lateStaticField2Init);
+    self::expect(42, self::Class::lateStaticField2);
+    self::expect(42, self::Class::lateStaticField2Init);
+  }
+  method initLateInstanceField(core::int value) → core::int {
+    return this.{self::Class::lateInstanceFieldInit} = value;
+  }
+  get lateInstanceField() → core::int {
+    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
+      final core::int #t7 = this.{self::Class::initLateInstanceField}(16){(core::int) → core::int};
+      if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("lateInstanceField");
+      this.{self::Class::_#Class#lateInstanceField} = #t7;
+      this.{self::Class::_#Class#lateInstanceField#isSet} = true;
+    }
+    return let final core::int? #t8 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t8{core::int};
+  }
+  method initLateGenericField(covariant-by-class self::Class::T% value) → self::Class::T% {
+    return this.{self::Class::lateGenericFieldInit} = value;
+  }
+  get lateGenericField() → self::Class::T% {
+    if(!this.{self::Class::_#Class#lateGenericField#isSet}{core::bool}) {
+      final self::Class::T% #t9 = this.{self::Class::initLateGenericField}(this.{self::Class::field}{self::Class::T%}){(self::Class::T%) → self::Class::T%};
+      if(this.{self::Class::_#Class#lateGenericField#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("lateGenericField");
+      this.{self::Class::_#Class#lateGenericField} = #t9;
+      this.{self::Class::_#Class#lateGenericField#isSet} = true;
+    }
+    return let final self::Class::T? #t10 = this.{self::Class::_#Class#lateGenericField}{self::Class::T?} in #t10{self::Class::T%};
+  }
+  method instanceMethod() → dynamic {
+    self::expect(null, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
+    self::expect(16, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(null, this.{self::Class::lateGenericFieldInit}{self::Class::T?});
+    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericField}{self::Class::T%});
+    self::expect(this.{self::Class::field}{self::Class::T%}, this.{self::Class::lateGenericFieldInit}{self::Class::T?});
+  }
+}
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
+  static field lateExtensionField1Init = self::Extension|lateExtensionField1Init;
+  static method initLateExtensionField1 = self::Extension|initLateExtensionField1;
+  static field lateExtensionField1 = self::_#Extension|lateExtensionField1;
+  static field lateExtensionField1 = self::_#Extension|lateExtensionField1#isSet;
+  static get lateExtensionField1 = get self::Extension|lateExtensionField1;
+  static field lateExtensionField2Init = self::Extension|lateExtensionField2Init;
+  static method initLateExtensionField2 = self::Extension|initLateExtensionField2;
+  static field lateExtensionField2 = self::_#Extension|lateExtensionField2;
+  static field lateExtensionField2 = self::_#Extension|lateExtensionField2#isSet;
+  static get lateExtensionField2 = get self::Extension|lateExtensionField2;
+  static method staticMethod = self::Extension|staticMethod;
+}
+static field core::int? lateTopLevelField1Init;
+static field core::int? _#lateTopLevelField1 = null;
+static field core::bool _#lateTopLevelField1#isSet = false;
+static field core::int? Extension|lateExtensionField1Init;
+static field core::int? _#Extension|lateExtensionField1 = null;
+static field core::bool _#Extension|lateExtensionField1#isSet = false;
+static field core::int? Extension|lateExtensionField2Init;
+static field core::int? _#Extension|lateExtensionField2 = null;
+static field core::bool _#Extension|lateExtensionField2#isSet = false;
+static method initLateTopLevelField1(core::int value) → core::int {
+  return self::lateTopLevelField1Init = value;
+}
+static get lateTopLevelField1() → core::int {
+  if(!self::_#lateTopLevelField1#isSet) {
+    final core::int #t11 = self::initLateTopLevelField1(123);
+    if(self::_#lateTopLevelField1#isSet)
+      throw new _in::LateError::fieldADI("lateTopLevelField1");
+    self::_#lateTopLevelField1 = #t11;
+    self::_#lateTopLevelField1#isSet = true;
+  }
+  return let final core::int? #t12 = self::_#lateTopLevelField1 in #t12{core::int};
+}
+static method Extension|initLateExtensionField1(core::int value) → core::int {
+  return self::Extension|lateExtensionField1Init = value;
+}
+static get Extension|lateExtensionField1() → core::int {
+  if(!self::_#Extension|lateExtensionField1#isSet) {
+    final core::int #t13 = self::Extension|initLateExtensionField1(87);
+    if(self::_#Extension|lateExtensionField1#isSet)
+      throw new _in::LateError::fieldADI("lateExtensionField1");
+    self::_#Extension|lateExtensionField1 = #t13;
+    self::_#Extension|lateExtensionField1#isSet = true;
+  }
+  return let final core::int? #t14 = self::_#Extension|lateExtensionField1 in #t14{core::int};
+}
+static method Extension|initLateExtensionField2(core::int value) → core::int {
+  return self::Extension|lateExtensionField2Init = value;
+}
+static get Extension|lateExtensionField2() → core::int {
+  if(!self::_#Extension|lateExtensionField2#isSet) {
+    final core::int #t15 = self::Extension|initLateExtensionField2(42);
+    if(self::_#Extension|lateExtensionField2#isSet)
+      throw new _in::LateError::fieldADI("lateExtensionField2");
+    self::_#Extension|lateExtensionField2 = #t15;
+    self::_#Extension|lateExtensionField2#isSet = true;
+  }
+  return let final core::int? #t16 = self::_#Extension|lateExtensionField2 in #t16{core::int};
+}
+static method Extension|staticMethod() → dynamic {
+  self::expect(null, self::Extension|lateExtensionField2Init);
+  self::expect(42, self::Extension|lateExtensionField2);
+  self::expect(42, self::Extension|lateExtensionField2Init);
+}
+static method main() → dynamic {
+  self::expect(null, self::lateTopLevelField1Init);
+  self::expect(123, self::lateTopLevelField1);
+  self::expect(123, self::lateTopLevelField1Init);
+  self::expect(null, self::Class::lateStaticField1Init);
+  self::expect(87, self::Class::lateStaticField1);
+  self::expect(87, self::Class::lateStaticField1Init);
+  self::Class::staticMethod();
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(){() → dynamic};
+  self::expect(null, self::Extension|lateExtensionField1Init);
+  self::expect(87, self::Extension|lateExtensionField1);
+  self::expect(87, self::Extension|lateExtensionField1Init);
+  self::Extension|staticMethod();
+  self::expect(2, new self::C::•(1).{self::C::y}{core::int});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..f0429db
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_final_field_without_initializer.dart.weak.modular.expect
@@ -0,0 +1,137 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class extends core::Object {
+  static field core::int? _#lateStaticField1 = null;
+  static field core::bool _#lateStaticField1#isSet = false;
+  static field core::int? _#lateStaticField2 = null;
+  static field core::bool _#lateStaticField2#isSet = false;
+  field core::int? _#Class#lateInstanceField = null;
+  field core::bool _#Class#lateInstanceField#isSet = false;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  static get lateStaticField1() → core::int
+    return self::Class::_#lateStaticField1#isSet ?{core::int} let final core::int? #t1 = self::Class::_#lateStaticField1 in #t1{core::int} : throw new _in::LateError::fieldNI("lateStaticField1");
+  static set lateStaticField1(core::int #t2) → void
+    if(self::Class::_#lateStaticField1#isSet)
+      throw new _in::LateError::fieldAI("lateStaticField1");
+    else {
+      self::Class::_#lateStaticField1#isSet = true;
+      self::Class::_#lateStaticField1 = #t2;
+    }
+  static get lateStaticField2() → core::int
+    return self::Class::_#lateStaticField2#isSet ?{core::int} let final core::int? #t3 = self::Class::_#lateStaticField2 in #t3{core::int} : throw new _in::LateError::fieldNI("lateStaticField2");
+  static set lateStaticField2(core::int #t4) → void
+    if(self::Class::_#lateStaticField2#isSet)
+      throw new _in::LateError::fieldAI("lateStaticField2");
+    else {
+      self::Class::_#lateStaticField2#isSet = true;
+      self::Class::_#lateStaticField2 = #t4;
+    }
+  static method staticMethod() → dynamic {
+    self::throws(() → core::int => self::Class::lateStaticField2, "Read value from uninitialized Class.lateStaticField2");
+    self::Class::lateStaticField2 = 42;
+    self::expect(42, self::Class::lateStaticField2);
+    self::throws(() → core::int => self::Class::lateStaticField2 = 43, "Write value to initialized Class.lateStaticField2");
+  }
+  get lateInstanceField() → core::int
+    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t5 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t5{core::int} : throw new _in::LateError::fieldNI("lateInstanceField");
+  set lateInstanceField(core::int #t6) → void
+    if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("lateInstanceField");
+    else {
+      this.{self::Class::_#Class#lateInstanceField#isSet} = true;
+      this.{self::Class::_#Class#lateInstanceField} = #t6;
+    }
+  method instanceMethod() → dynamic {
+    self::throws(() → core::int => this.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
+    this.{self::Class::lateInstanceField} = 16;
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int});
+    self::throws(() → core::int => this.{self::Class::lateInstanceField} = 17, "Write value to initialized Class.lateInstanceField");
+  }
+}
+extension Extension on self::Class {
+  static field lateExtensionField1 = self::_#Extension|lateExtensionField1;
+  static field lateExtensionField1 = self::_#Extension|lateExtensionField1#isSet;
+  static get lateExtensionField1 = get self::Extension|lateExtensionField1;
+  static set lateExtensionField1 = set self::Extension|lateExtensionField1;
+  static field lateExtensionField2 = self::_#Extension|lateExtensionField2;
+  static field lateExtensionField2 = self::_#Extension|lateExtensionField2#isSet;
+  static get lateExtensionField2 = get self::Extension|lateExtensionField2;
+  static set lateExtensionField2 = set self::Extension|lateExtensionField2;
+  static method staticMethod = self::Extension|staticMethod;
+}
+static field core::int? _#lateTopLevelField = null;
+static field core::bool _#lateTopLevelField#isSet = false;
+static field core::int? _#Extension|lateExtensionField1 = null;
+static field core::bool _#Extension|lateExtensionField1#isSet = false;
+static field core::int? _#Extension|lateExtensionField2 = null;
+static field core::bool _#Extension|lateExtensionField2#isSet = false;
+static get lateTopLevelField() → core::int
+  return self::_#lateTopLevelField#isSet ?{core::int} let final core::int? #t7 = self::_#lateTopLevelField in #t7{core::int} : throw new _in::LateError::fieldNI("lateTopLevelField");
+static set lateTopLevelField(core::int #t8) → void
+  if(self::_#lateTopLevelField#isSet)
+    throw new _in::LateError::fieldAI("lateTopLevelField");
+  else {
+    self::_#lateTopLevelField#isSet = true;
+    self::_#lateTopLevelField = #t8;
+  }
+static get Extension|lateExtensionField1() → core::int
+  return self::_#Extension|lateExtensionField1#isSet ?{core::int} let final core::int? #t9 = self::_#Extension|lateExtensionField1 in #t9{core::int} : throw new _in::LateError::fieldNI("lateExtensionField1");
+static set Extension|lateExtensionField1(core::int #t10) → void
+  if(self::_#Extension|lateExtensionField1#isSet)
+    throw new _in::LateError::fieldAI("lateExtensionField1");
+  else {
+    self::_#Extension|lateExtensionField1#isSet = true;
+    self::_#Extension|lateExtensionField1 = #t10;
+  }
+static get Extension|lateExtensionField2() → core::int
+  return self::_#Extension|lateExtensionField2#isSet ?{core::int} let final core::int? #t11 = self::_#Extension|lateExtensionField2 in #t11{core::int} : throw new _in::LateError::fieldNI("lateExtensionField2");
+static set Extension|lateExtensionField2(core::int #t12) → void
+  if(self::_#Extension|lateExtensionField2#isSet)
+    throw new _in::LateError::fieldAI("lateExtensionField2");
+  else {
+    self::_#Extension|lateExtensionField2#isSet = true;
+    self::_#Extension|lateExtensionField2 = #t12;
+  }
+static method Extension|staticMethod() → dynamic {
+  self::throws(() → core::int => self::Extension|lateExtensionField2, "Read value from uninitialized Class.lateExtensionField2");
+  self::Extension|lateExtensionField2 = 42;
+  self::expect(42, self::Extension|lateExtensionField2);
+  self::throws(() → core::int => self::Extension|lateExtensionField2 = 43, "Write value to initialized Class.lateExtensionField2");
+}
+static method main() → dynamic {
+  self::throws(() → core::int => self::lateTopLevelField, "Read value from uninitialized lateTopLevelField");
+  self::lateTopLevelField = 123;
+  self::expect(123, self::lateTopLevelField);
+  self::throws(() → core::int => self::lateTopLevelField = 124, "Write value to initialized lateTopLevelField");
+  self::throws(() → core::int => self::Class::lateStaticField1, "Read value from uninitialized Class.lateStaticField1");
+  self::Class::lateStaticField1 = 87;
+  self::expect(87, self::Class::lateStaticField1);
+  self::throws(() → core::int => self::Class::lateStaticField1 = 88, "Write value to initialized Class.lateStaticField1");
+  self::Class::staticMethod();
+  new self::Class::•().{self::Class::instanceMethod}(){() → dynamic};
+  self::throws(() → core::int => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
+  self::Extension|lateExtensionField1 = 87;
+  self::expect(87, self::Extension|lateExtensionField1);
+  self::throws(() → core::int => self::Extension|lateExtensionField1 = 88, "Write value to initialized Extension.lateExtensionField1");
+  self::Extension|staticMethod();
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..49e5b26
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_with_initializer.dart.weak.modular.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method main() → dynamic {
+  core::int? lateLocalInit;
+  function initLateLocal(core::int value) → core::int {
+    return lateLocalInit = value;
+  }
+  lowered final core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
+  function #lateLocal#get() → core::int {
+    if(!#lateLocal#isSet) {
+      final core::int #t1 = initLateLocal(123){(core::int) → core::int};
+      if(#lateLocal#isSet)
+        throw new _in::LateError::localADI("lateLocal");
+      #lateLocal = #t1;
+      #lateLocal#isSet = true;
+    }
+    return #lateLocal{core::int};
+  }
+  self::expect(null, lateLocalInit);
+  self::expect(123, #lateLocal#get(){() → core::int});
+  self::expect(123, lateLocalInit);
+  function local<T extends core::Object? = dynamic>(T% value) → Null {
+    T? lateGenericLocalInit;
+    function initLateGenericLocal(T% value) → T% {
+      return lateGenericLocalInit = value;
+    }
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
+    function #lateGenericLocal#get() → T% {
+      if(!#lateGenericLocal#isSet) {
+        final T% #t2 = initLateGenericLocal(value){(T%) → T%};
+        if(#lateGenericLocal#isSet)
+          throw new _in::LateError::localADI("lateGenericLocal");
+        #lateGenericLocal = #t2;
+        #lateGenericLocal#isSet = true;
+      }
+      return #lateGenericLocal{T%};
+    }
+    self::expect(null, lateGenericLocalInit);
+    self::expect(value, #lateGenericLocal#get(){() → T%});
+    self::expect(value, lateGenericLocalInit);
+  }
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(42){(core::int?) → Null};
+  local<core::int>(42){(core::int) → Null};
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..6050d9e
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method main() → dynamic {
+  core::bool b = (() → core::bool => false)(){() → core::bool};
+  lowered final core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
+  function #lateLocal#get() → core::int
+    return #lateLocal#isSet ?{core::int} #lateLocal{core::int} : throw new _in::LateError::localNI("lateLocal");
+  function #lateLocal#set(core::int #t1) → dynamic
+    if(#lateLocal#isSet)
+      throw new _in::LateError::localAI("lateLocal");
+    else {
+      #lateLocal#isSet = true;
+      return #lateLocal = #t1;
+    }
+  if(b) {
+    #lateLocal#set(123){(core::int) → dynamic};
+  }
+  self::throws(() → core::int => #lateLocal#get(){() → core::int}, "Read value from uninitialized lateLocal");
+  if(!b) {
+    self::expect(123, #lateLocal#set(123){(core::int) → dynamic});
+    self::expect(123, #lateLocal#get(){() → core::int});
+  }
+  self::throws(() → core::int => #lateLocal#set(124){(core::int) → dynamic}, "Write value to initialized lateLocal");
+  function local<T extends core::Object? = dynamic>(T% value) → Null {
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
+    function #lateGenericLocal#get() → T%
+      return #lateGenericLocal#isSet ?{T%} #lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
+    function #lateGenericLocal#set(T% #t2) → dynamic
+      if(#lateGenericLocal#isSet)
+        throw new _in::LateError::localAI("lateGenericLocal");
+      else {
+        #lateGenericLocal#isSet = true;
+        return #lateGenericLocal = #t2;
+      }
+    if(b) {
+      #lateGenericLocal#set(value){(T%) → dynamic};
+    }
+    self::throws(() → T% => #lateGenericLocal#get(){() → T%}, "Read value from uninitialized lateGenericLocal");
+    if(!b) {
+      self::expect(value, #lateGenericLocal#set(value){(T%) → dynamic});
+      self::expect(value, #lateGenericLocal#get(){() → T%});
+    }
+    self::throws(() → T% => #lateGenericLocal#set(value){(T%) → dynamic}, "Write value to initialized lateGenericLocal");
+  }
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(42){(core::int?) → Null};
+  local<core::int>(42){(core::int) → Null};
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..0b29db8
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.modular.expect
@@ -0,0 +1,174 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  static field core::int? lateStaticField1Init = null;
+  static field core::int? _#lateStaticField1 = null;
+  static field core::bool _#lateStaticField1#isSet = false;
+  static field core::int? lateStaticField2Init = null;
+  static field core::int? _#lateStaticField2 = null;
+  static field core::bool _#lateStaticField2#isSet = false;
+  field core::int? lateInstanceFieldInit = null;
+  field core::int? _#Class#lateInstanceField = null;
+  field core::bool _#Class#lateInstanceField#isSet = false;
+  covariant-by-class field self::Class::T? lateGenericInstanceFieldInit = null;
+  final field self::Class::T? field;
+  field self::Class::T? _#Class#lateGenericInstanceField = null;
+  field core::bool _#Class#lateGenericInstanceField#isSet = false;
+  constructor •(self::Class::T? field) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  static method initLateStaticField1(core::int value) → core::int? {
+    return self::Class::lateStaticField1Init = value;
+  }
+  static get lateStaticField1() → core::int? {
+    if(!self::Class::_#lateStaticField1#isSet) {
+      final core::int? #t1 = self::Class::initLateStaticField1(87);
+      if(self::Class::_#lateStaticField1#isSet)
+        throw new _in::LateError::fieldADI("lateStaticField1");
+      self::Class::_#lateStaticField1 = #t1;
+      self::Class::_#lateStaticField1#isSet = true;
+    }
+    return self::Class::_#lateStaticField1;
+  }
+  static method initLateStaticField2(core::int value) → core::int? {
+    return self::Class::lateStaticField2Init = value;
+  }
+  static get lateStaticField2() → core::int? {
+    if(!self::Class::_#lateStaticField2#isSet) {
+      final core::int? #t2 = self::Class::initLateStaticField2(42);
+      if(self::Class::_#lateStaticField2#isSet)
+        throw new _in::LateError::fieldADI("lateStaticField2");
+      self::Class::_#lateStaticField2 = #t2;
+      self::Class::_#lateStaticField2#isSet = true;
+    }
+    return self::Class::_#lateStaticField2;
+  }
+  static method staticMethod() → dynamic {
+    self::expect(null, self::Class::lateStaticField2Init);
+    self::expect(42, self::Class::lateStaticField2);
+    self::expect(42, self::Class::lateStaticField2Init);
+  }
+  method initLateInstanceField(core::int value) → core::int? {
+    return this.{self::Class::lateInstanceFieldInit} = value;
+  }
+  get lateInstanceField() → core::int? {
+    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
+      final core::int? #t3 = this.{self::Class::initLateInstanceField}(16){(core::int) → core::int?};
+      if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("lateInstanceField");
+      this.{self::Class::_#Class#lateInstanceField} = #t3;
+      this.{self::Class::_#Class#lateInstanceField#isSet} = true;
+    }
+    return this.{self::Class::_#Class#lateInstanceField}{core::int?};
+  }
+  method initLateGenericInstanceField(covariant-by-class self::Class::T? value) → self::Class::T? {
+    return this.{self::Class::lateGenericInstanceFieldInit} = value;
+  }
+  get lateGenericInstanceField() → self::Class::T? {
+    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool}) {
+      final self::Class::T? #t4 = this.{self::Class::initLateGenericInstanceField}(this.{self::Class::field}{self::Class::T?}){(self::Class::T?) → self::Class::T?};
+      if(this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("lateGenericInstanceField");
+      this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
+      this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
+    }
+    return this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?};
+  }
+  method instanceMethod() → dynamic {
+    self::expect(null, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
+    self::expect(16, this.{self::Class::lateInstanceFieldInit}{core::int?});
+    self::expect(null, this.{self::Class::lateGenericInstanceFieldInit}{self::Class::T?});
+    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
+    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceFieldInit}{self::Class::T?});
+  }
+}
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
+  static field lateExtensionField1Init = self::Extension|lateExtensionField1Init;
+  static method initLateExtensionField1 = self::Extension|initLateExtensionField1;
+  static field lateExtensionField1 = self::_#Extension|lateExtensionField1;
+  static field lateExtensionField1 = self::_#Extension|lateExtensionField1#isSet;
+  static get lateExtensionField1 = get self::Extension|lateExtensionField1;
+  static field lateExtensionField2Init = self::Extension|lateExtensionField2Init;
+  static method initLateExtensionField2 = self::Extension|initLateExtensionField2;
+  static field lateExtensionField2 = self::_#Extension|lateExtensionField2;
+  static field lateExtensionField2 = self::_#Extension|lateExtensionField2#isSet;
+  static get lateExtensionField2 = get self::Extension|lateExtensionField2;
+  static method staticMethod = self::Extension|staticMethod;
+}
+static field core::int? lateTopLevelField1Init;
+static field core::int? _#lateTopLevelField1 = null;
+static field core::bool _#lateTopLevelField1#isSet = false;
+static field core::int? Extension|lateExtensionField1Init;
+static field core::int? _#Extension|lateExtensionField1 = null;
+static field core::bool _#Extension|lateExtensionField1#isSet = false;
+static field core::int? Extension|lateExtensionField2Init;
+static field core::int? _#Extension|lateExtensionField2 = null;
+static field core::bool _#Extension|lateExtensionField2#isSet = false;
+static method initLateTopLevelField1(core::int value) → core::int? {
+  return self::lateTopLevelField1Init = value;
+}
+static get lateTopLevelField1() → core::int? {
+  if(!self::_#lateTopLevelField1#isSet) {
+    final core::int? #t5 = self::initLateTopLevelField1(123);
+    if(self::_#lateTopLevelField1#isSet)
+      throw new _in::LateError::fieldADI("lateTopLevelField1");
+    self::_#lateTopLevelField1 = #t5;
+    self::_#lateTopLevelField1#isSet = true;
+  }
+  return self::_#lateTopLevelField1;
+}
+static method Extension|initLateExtensionField1(core::int value) → core::int? {
+  return self::Extension|lateExtensionField1Init = value;
+}
+static get Extension|lateExtensionField1() → core::int? {
+  if(!self::_#Extension|lateExtensionField1#isSet) {
+    final core::int? #t6 = self::Extension|initLateExtensionField1(87);
+    if(self::_#Extension|lateExtensionField1#isSet)
+      throw new _in::LateError::fieldADI("lateExtensionField1");
+    self::_#Extension|lateExtensionField1 = #t6;
+    self::_#Extension|lateExtensionField1#isSet = true;
+  }
+  return self::_#Extension|lateExtensionField1;
+}
+static method Extension|initLateExtensionField2(core::int value) → core::int? {
+  return self::Extension|lateExtensionField2Init = value;
+}
+static get Extension|lateExtensionField2() → core::int? {
+  if(!self::_#Extension|lateExtensionField2#isSet) {
+    final core::int? #t7 = self::Extension|initLateExtensionField2(42);
+    if(self::_#Extension|lateExtensionField2#isSet)
+      throw new _in::LateError::fieldADI("lateExtensionField2");
+    self::_#Extension|lateExtensionField2 = #t7;
+    self::_#Extension|lateExtensionField2#isSet = true;
+  }
+  return self::_#Extension|lateExtensionField2;
+}
+static method Extension|staticMethod() → dynamic {
+  self::expect(null, self::Extension|lateExtensionField2Init);
+  self::expect(42, self::Extension|lateExtensionField2);
+  self::expect(42, self::Extension|lateExtensionField2Init);
+}
+static method main() → dynamic {
+  self::expect(null, self::lateTopLevelField1Init);
+  self::expect(123, self::lateTopLevelField1);
+  self::expect(123, self::lateTopLevelField1Init);
+  self::expect(null, self::Class::lateStaticField1Init);
+  self::expect(87, self::Class::lateStaticField1);
+  self::expect(87, self::Class::lateStaticField1Init);
+  self::Class::staticMethod();
+  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}(){() → dynamic};
+  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}(){() → dynamic};
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(){() → dynamic};
+  self::expect(null, self::Extension|lateExtensionField1Init);
+  self::expect(87, self::Extension|lateExtensionField1);
+  self::expect(87, self::Extension|lateExtensionField1Init);
+  self::Extension|staticMethod();
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..ce6ed76
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.modular.expect
@@ -0,0 +1,154 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  static field core::int? _#lateStaticField1 = null;
+  static field core::bool _#lateStaticField1#isSet = false;
+  static field core::int? _#lateStaticField2 = null;
+  static field core::bool _#lateStaticField2#isSet = false;
+  field core::int? _#Class#lateInstanceField = null;
+  field core::bool _#Class#lateInstanceField#isSet = false;
+  field self::Class::T? _#Class#lateGenericInstanceField = null;
+  field core::bool _#Class#lateGenericInstanceField#isSet = false;
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  static get lateStaticField1() → core::int?
+    return self::Class::_#lateStaticField1#isSet ?{core::int?} self::Class::_#lateStaticField1 : throw new _in::LateError::fieldNI("lateStaticField1");
+  static set lateStaticField1(core::int? #t1) → void
+    if(self::Class::_#lateStaticField1#isSet)
+      throw new _in::LateError::fieldAI("lateStaticField1");
+    else {
+      self::Class::_#lateStaticField1#isSet = true;
+      self::Class::_#lateStaticField1 = #t1;
+    }
+  static get lateStaticField2() → core::int?
+    return self::Class::_#lateStaticField2#isSet ?{core::int?} self::Class::_#lateStaticField2 : throw new _in::LateError::fieldNI("lateStaticField2");
+  static set lateStaticField2(core::int? #t2) → void
+    if(self::Class::_#lateStaticField2#isSet)
+      throw new _in::LateError::fieldAI("lateStaticField2");
+    else {
+      self::Class::_#lateStaticField2#isSet = true;
+      self::Class::_#lateStaticField2 = #t2;
+    }
+  static method staticMethod() → dynamic {
+    self::throws(() → core::int? => self::Class::lateStaticField2, "Read value from uninitialized Class.lateStaticField2");
+    self::Class::lateStaticField2 = 42;
+    self::expect(42, self::Class::lateStaticField2);
+    self::throws(() → core::int => self::Class::lateStaticField2 = 43, "Write value to initialized Class.lateStaticField2");
+  }
+  get lateInstanceField() → core::int?
+    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#lateInstanceField}{core::int?} : throw new _in::LateError::fieldNI("lateInstanceField");
+  set lateInstanceField(core::int? #t3) → void
+    if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("lateInstanceField");
+    else {
+      this.{self::Class::_#Class#lateInstanceField#isSet} = true;
+      this.{self::Class::_#Class#lateInstanceField} = #t3;
+    }
+  get lateGenericInstanceField() → self::Class::T?
+    return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
+  set lateGenericInstanceField(self::Class::T? #t4) → void
+    if(this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("lateGenericInstanceField");
+    else {
+      this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
+      this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
+    }
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic {
+    self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
+    this.{self::Class::lateInstanceField} = 16;
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
+    self::throws(() → core::int => this.{self::Class::lateInstanceField} = 17, "Write value to initialized Class.lateInstanceField");
+    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}{self::Class::T?}, "Read value from uninitialized Class.lateGenericInstanceField");
+    this.{self::Class::lateGenericInstanceField} = value;
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
+    self::throws(() → self::Class::T% => this.{self::Class::lateGenericInstanceField} = value, "Write value to initialized Class.lateGenericInstanceField");
+  }
+}
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
+  static field lateExtensionField1 = self::_#Extension|lateExtensionField1;
+  static field lateExtensionField1 = self::_#Extension|lateExtensionField1#isSet;
+  static get lateExtensionField1 = get self::Extension|lateExtensionField1;
+  static set lateExtensionField1 = set self::Extension|lateExtensionField1;
+  static field lateExtensionField2 = self::_#Extension|lateExtensionField2;
+  static field lateExtensionField2 = self::_#Extension|lateExtensionField2#isSet;
+  static get lateExtensionField2 = get self::Extension|lateExtensionField2;
+  static set lateExtensionField2 = set self::Extension|lateExtensionField2;
+  static method staticMethod = self::Extension|staticMethod;
+}
+static field core::int? _#lateTopLevelField = null;
+static field core::bool _#lateTopLevelField#isSet = false;
+static field core::int? _#Extension|lateExtensionField1 = null;
+static field core::bool _#Extension|lateExtensionField1#isSet = false;
+static field core::int? _#Extension|lateExtensionField2 = null;
+static field core::bool _#Extension|lateExtensionField2#isSet = false;
+static get lateTopLevelField() → core::int?
+  return self::_#lateTopLevelField#isSet ?{core::int?} self::_#lateTopLevelField : throw new _in::LateError::fieldNI("lateTopLevelField");
+static set lateTopLevelField(core::int? #t5) → void
+  if(self::_#lateTopLevelField#isSet)
+    throw new _in::LateError::fieldAI("lateTopLevelField");
+  else {
+    self::_#lateTopLevelField#isSet = true;
+    self::_#lateTopLevelField = #t5;
+  }
+static get Extension|lateExtensionField1() → core::int?
+  return self::_#Extension|lateExtensionField1#isSet ?{core::int?} self::_#Extension|lateExtensionField1 : throw new _in::LateError::fieldNI("lateExtensionField1");
+static set Extension|lateExtensionField1(core::int? #t6) → void
+  if(self::_#Extension|lateExtensionField1#isSet)
+    throw new _in::LateError::fieldAI("lateExtensionField1");
+  else {
+    self::_#Extension|lateExtensionField1#isSet = true;
+    self::_#Extension|lateExtensionField1 = #t6;
+  }
+static get Extension|lateExtensionField2() → core::int?
+  return self::_#Extension|lateExtensionField2#isSet ?{core::int?} self::_#Extension|lateExtensionField2 : throw new _in::LateError::fieldNI("lateExtensionField2");
+static set Extension|lateExtensionField2(core::int? #t7) → void
+  if(self::_#Extension|lateExtensionField2#isSet)
+    throw new _in::LateError::fieldAI("lateExtensionField2");
+  else {
+    self::_#Extension|lateExtensionField2#isSet = true;
+    self::_#Extension|lateExtensionField2 = #t7;
+  }
+static method Extension|staticMethod() → dynamic {
+  self::throws(() → core::int? => self::Extension|lateExtensionField2, "Read value from uninitialized Class.lateExtensionField2");
+  self::Extension|lateExtensionField2 = 42;
+  self::expect(42, self::Extension|lateExtensionField2);
+  self::throws(() → core::int => self::Extension|lateExtensionField2 = 43, "Write value to initialized Class.lateExtensionField2");
+}
+static method main() → dynamic {
+  self::throws(() → core::int? => self::lateTopLevelField, "Read value from uninitialized lateTopLevelField");
+  self::lateTopLevelField = 123;
+  self::expect(123, self::lateTopLevelField);
+  self::throws(() → core::int => self::lateTopLevelField = 124, "Write value to initialized lateTopLevelField");
+  self::throws(() → core::int? => self::Class::lateStaticField1, "Read value from uninitialized Class.lateStaticField1");
+  self::Class::lateStaticField1 = 87;
+  self::expect(87, self::Class::lateStaticField1);
+  self::throws(() → core::int => self::Class::lateStaticField1 = 88, "Write value to initialized Class.lateStaticField1");
+  self::Class::staticMethod();
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(0){(core::int) → dynamic};
+  self::throws(() → core::int? => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
+  self::Extension|lateExtensionField1 = 87;
+  self::expect(87, self::Extension|lateExtensionField1);
+  self::throws(() → core::int => self::Extension|lateExtensionField1 = 88, "Write value to initialized Extension.lateExtensionField1");
+  self::Extension|staticMethod();
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..9d9501d
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_with_initializer.dart.weak.modular.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method main() → dynamic {
+  core::int? lateLocalInit;
+  function initLateLocal(core::int? value) → core::int? {
+    return lateLocalInit = value;
+  }
+  lowered final core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
+  function #lateLocal#get() → core::int? {
+    if(!#lateLocal#isSet) {
+      final core::int? #t1 = initLateLocal(123){(core::int?) → core::int?};
+      if(#lateLocal#isSet)
+        throw new _in::LateError::localADI("lateLocal");
+      #lateLocal = #t1;
+      #lateLocal#isSet = true;
+    }
+    return #lateLocal;
+  }
+  self::expect(null, lateLocalInit);
+  self::expect(123, #lateLocal#get(){() → core::int?});
+  self::expect(123, lateLocalInit);
+  function local<T extends core::Object? = dynamic>(T? value) → Null {
+    T? lateGenericLocalInit;
+    function initLateGenericLocal(T? value) → T? {
+      return lateGenericLocalInit = value;
+    }
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
+    function #lateGenericLocal#get() → T? {
+      if(!#lateGenericLocal#isSet) {
+        final T? #t2 = initLateGenericLocal(value){(T?) → T?};
+        if(#lateGenericLocal#isSet)
+          throw new _in::LateError::localADI("lateGenericLocal");
+        #lateGenericLocal = #t2;
+        #lateGenericLocal#isSet = true;
+      }
+      return #lateGenericLocal;
+    }
+    self::expect(null, lateGenericLocalInit);
+    self::expect(value, #lateGenericLocal#get(){() → T?});
+    self::expect(value, lateGenericLocalInit);
+  }
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(42){(core::int?) → Null};
+  local<core::int>(42){(core::int?) → Null};
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..751ada1
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_local_without_initializer.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method main() → dynamic {
+  lowered final core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
+  function #lateLocal#get() → core::int?
+    return #lateLocal#isSet ?{core::int?} #lateLocal : throw new _in::LateError::localNI("lateLocal");
+  function #lateLocal#set(core::int? #t1) → dynamic
+    if(#lateLocal#isSet)
+      throw new _in::LateError::localAI("lateLocal");
+    else {
+      #lateLocal#isSet = true;
+      return #lateLocal = #t1;
+    }
+  self::throws(() → core::int? => #lateLocal#get(){() → core::int?}, "Read value from uninitialized lateLocal");
+  if(1 =={core::num::==}{(core::Object) → core::bool} 1) {
+    self::expect(123, #lateLocal#set(123){(core::int?) → dynamic});
+  }
+  self::expect(123, #lateLocal#get(){() → core::int?});
+  self::throws(() → core::int => #lateLocal#set(124){(core::int?) → dynamic}, "Write value to initialized lateLocal");
+  function local<T extends core::Object? = dynamic>(T? value) → Null {
+    lowered final T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
+    function #lateGenericLocal#get() → T?
+      return #lateGenericLocal#isSet ?{T?} #lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
+    function #lateGenericLocal#set(T? #t2) → dynamic
+      if(#lateGenericLocal#isSet)
+        throw new _in::LateError::localAI("lateGenericLocal");
+      else {
+        #lateGenericLocal#isSet = true;
+        return #lateGenericLocal = #t2;
+      }
+    self::throws(() → T? => #lateGenericLocal#get(){() → T?}, "Read value from uninitialized lateGenericLocal");
+    if(1 =={core::num::==}{(core::Object) → core::bool} 1) {
+      self::expect(value, #lateGenericLocal#set(value){(T?) → dynamic});
+    }
+    self::expect(value, #lateGenericLocal#get(){() → T?});
+    self::throws(() → T? => #lateGenericLocal#set(value){(T?) → dynamic}, "Write value to initialized lateGenericLocal");
+  }
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(0){(core::int?) → Null};
+  local<core::int>(null){(core::int?) → Null};
+  local<core::int>(0){(core::int?) → Null};
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.modular.expect
new file mode 100644
index 0000000..b358ead
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.modular.expect
@@ -0,0 +1,185 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+import "dart:async";
+
+class C<T extends core::Object? = dynamic> extends core::Object {
+  field FutureOr<dynamic>? _#C#field1 = null;
+  field core::bool _#C#field1#isSet = false;
+  field FutureOr<dynamic>? _#C#field2 = null;
+  field core::bool _#C#field2#isSet = false;
+  covariant-by-class field FutureOr<self::C::T%>? _#C#field3 = null;
+  field core::bool _#C#field3#isSet = false;
+  covariant-by-class field FutureOr<self::C::T?>? _#C#field4 = null;
+  field core::bool _#C#field4#isSet = false;
+  covariant-by-class field FutureOr<self::C::T?>? _#C#field5 = null;
+  field core::bool _#C#field5#isSet = false;
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  get field1() → FutureOr<dynamic>
+    return this.{self::C::_#C#field1#isSet}{core::bool} ?{FutureOr<dynamic>} this.{self::C::_#C#field1}{FutureOr<dynamic>?} : throw new _in::LateError::fieldNI("field1");
+  set field1(FutureOr<dynamic>#t1) → void {
+    this.{self::C::_#C#field1#isSet} = true;
+    this.{self::C::_#C#field1} = #t1;
+  }
+  get field2() → FutureOr<dynamic>?
+    return this.{self::C::_#C#field2#isSet}{core::bool} ?{FutureOr<dynamic>?} this.{self::C::_#C#field2}{FutureOr<dynamic>?} : throw new _in::LateError::fieldNI("field2");
+  set field2(FutureOr<dynamic>? #t2) → void {
+    this.{self::C::_#C#field2#isSet} = true;
+    this.{self::C::_#C#field2} = #t2;
+  }
+  get field3() → FutureOr<self::C::T%>
+    return this.{self::C::_#C#field3#isSet}{core::bool} ?{FutureOr<self::C::T%>} let final FutureOr<self::C::T%>? #t3 = this.{self::C::_#C#field3}{FutureOr<self::C::T%>?} in #t3{FutureOr<self::C::T%>} : throw new _in::LateError::fieldNI("field3");
+  set field3(covariant-by-class FutureOr<self::C::T%>#t4) → void {
+    this.{self::C::_#C#field3#isSet} = true;
+    this.{self::C::_#C#field3} = #t4;
+  }
+  get field4() → FutureOr<self::C::T?>
+    return this.{self::C::_#C#field4#isSet}{core::bool} ?{FutureOr<self::C::T?>} this.{self::C::_#C#field4}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field4");
+  set field4(covariant-by-class FutureOr<self::C::T?>#t5) → void {
+    this.{self::C::_#C#field4#isSet} = true;
+    this.{self::C::_#C#field4} = #t5;
+  }
+  get field5() → FutureOr<self::C::T?>?
+    return this.{self::C::_#C#field5#isSet}{core::bool} ?{FutureOr<self::C::T?>?} this.{self::C::_#C#field5}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field5");
+  set field5(covariant-by-class FutureOr<self::C::T?>? #t6) → void {
+    this.{self::C::_#C#field5#isSet} = true;
+    this.{self::C::_#C#field5} = #t6;
+  }
+  method method() → dynamic {
+    lowered FutureOr<dynamic>? #local1;
+    lowered core::bool #local1#isSet = false;
+    function #local1#get() → FutureOr<dynamic>
+      return #local1#isSet ?{FutureOr<dynamic>} #local1 : throw new _in::LateError::localNI("local1");
+    function #local1#set(FutureOr<dynamic>#t7) → dynamic {
+      #local1#isSet = true;
+      return #local1 = #t7;
+    }
+    lowered FutureOr<dynamic>? #local2;
+    lowered core::bool #local2#isSet = false;
+    function #local2#get() → FutureOr<dynamic>?
+      return #local2#isSet ?{FutureOr<dynamic>?} #local2 : throw new _in::LateError::localNI("local2");
+    function #local2#set(FutureOr<dynamic>? #t8) → dynamic {
+      #local2#isSet = true;
+      return #local2 = #t8;
+    }
+    lowered FutureOr<self::C::T%>? #local3;
+    lowered core::bool #local3#isSet = false;
+    function #local3#get() → FutureOr<self::C::T%>
+      return #local3#isSet ?{FutureOr<self::C::T%>} #local3{FutureOr<self::C::T%>} : throw new _in::LateError::localNI("local3");
+    function #local3#set(FutureOr<self::C::T%>#t9) → dynamic {
+      #local3#isSet = true;
+      return #local3 = #t9;
+    }
+    lowered FutureOr<self::C::T?>? #local4;
+    lowered core::bool #local4#isSet = false;
+    function #local4#get() → FutureOr<self::C::T?>
+      return #local4#isSet ?{FutureOr<self::C::T?>} #local4 : throw new _in::LateError::localNI("local4");
+    function #local4#set(FutureOr<self::C::T?>#t10) → dynamic {
+      #local4#isSet = true;
+      return #local4 = #t10;
+    }
+    lowered FutureOr<self::C::T?>? #local5;
+    lowered core::bool #local5#isSet = false;
+    function #local5#get() → FutureOr<self::C::T?>?
+      return #local5#isSet ?{FutureOr<self::C::T?>?} #local5 : throw new _in::LateError::localNI("local5");
+    function #local5#set(FutureOr<self::C::T?>? #t11) → dynamic {
+      #local5#isSet = true;
+      return #local5 = #t11;
+    }
+  }
+}
+static field FutureOr<dynamic>? _#field1 = null;
+static field core::bool _#field1#isSet = false;
+static field FutureOr<dynamic>? _#field2 = null;
+static field core::bool _#field2#isSet = false;
+static field FutureOr<dynamic>? _#field3 = null;
+static field core::bool _#field3#isSet = false;
+static field FutureOr<core::int>? _#field4 = null;
+static field core::bool _#field4#isSet = false;
+static field FutureOr<core::int?>? _#field5 = null;
+static field core::bool _#field5#isSet = false;
+static field FutureOr<core::int?>? _#field6 = null;
+static field core::bool _#field6#isSet = false;
+static method method1() → FutureOr<dynamic>
+  return null;
+static method method2() → FutureOr<dynamic>?
+  return null;
+static method method3() → FutureOr<dynamic>
+  return null;
+static method method4() → FutureOr<core::int>
+  return 0;
+static method method5() → FutureOr<core::int?>
+  return null;
+static method method6() → FutureOr<core::int?>?
+  return null;
+static get field1() → FutureOr<dynamic> {
+  if(!self::_#field1#isSet) {
+    self::_#field1 = self::method1();
+    self::_#field1#isSet = true;
+  }
+  return self::_#field1;
+}
+static set field1(FutureOr<dynamic>#t12) → void {
+  self::_#field1#isSet = true;
+  self::_#field1 = #t12;
+}
+static get field2() → FutureOr<dynamic>? {
+  if(!self::_#field2#isSet) {
+    self::_#field2 = self::method2();
+    self::_#field2#isSet = true;
+  }
+  return self::_#field2;
+}
+static set field2(FutureOr<dynamic>? #t13) → void {
+  self::_#field2#isSet = true;
+  self::_#field2 = #t13;
+}
+static get field3() → FutureOr<dynamic> {
+  if(!self::_#field3#isSet) {
+    self::_#field3 = self::method3();
+    self::_#field3#isSet = true;
+  }
+  return self::_#field3;
+}
+static set field3(FutureOr<dynamic>#t14) → void {
+  self::_#field3#isSet = true;
+  self::_#field3 = #t14;
+}
+static get field4() → FutureOr<core::int> {
+  if(!self::_#field4#isSet) {
+    self::_#field4 = self::method4();
+    self::_#field4#isSet = true;
+  }
+  return let final FutureOr<core::int>? #t15 = self::_#field4 in #t15{FutureOr<core::int>};
+}
+static set field4(FutureOr<core::int>#t16) → void {
+  self::_#field4#isSet = true;
+  self::_#field4 = #t16;
+}
+static get field5() → FutureOr<core::int?> {
+  if(!self::_#field5#isSet) {
+    self::_#field5 = self::method5();
+    self::_#field5#isSet = true;
+  }
+  return self::_#field5;
+}
+static set field5(FutureOr<core::int?>#t17) → void {
+  self::_#field5#isSet = true;
+  self::_#field5 = #t17;
+}
+static get field6() → FutureOr<core::int?>? {
+  if(!self::_#field6#isSet) {
+    self::_#field6 = self::method6();
+    self::_#field6#isSet = true;
+  }
+  return self::_#field6;
+}
+static set field6(FutureOr<core::int?>? #t18) → void {
+  self::_#field6#isSet = true;
+  self::_#field6 = #t18;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..caa8e52
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_local_with_initializer.dart.weak.modular.expect
@@ -0,0 +1,47 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  lowered core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
+  function #lateLocal#get() → core::int {
+    if(!#lateLocal#isSet) {
+      #lateLocal = 123;
+      #lateLocal#isSet = true;
+    }
+    return #lateLocal{core::int};
+  }
+  function #lateLocal#set(core::int #t1) → dynamic {
+    #lateLocal#isSet = true;
+    return #lateLocal = #t1;
+  }
+  self::expect(123, #lateLocal#get(){() → core::int});
+  self::expect(124, #lateLocal#set(124){(core::int) → dynamic});
+  self::expect(124, #lateLocal#get(){() → core::int});
+  function local<T extends core::Object? = dynamic>(T% value1, T% value2) → Null {
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
+    function #lateGenericLocal#get() → T% {
+      if(!#lateGenericLocal#isSet) {
+        #lateGenericLocal = value1;
+        #lateGenericLocal#isSet = true;
+      }
+      return #lateGenericLocal{T%};
+    }
+    function #lateGenericLocal#set(T% #t2) → dynamic {
+      #lateGenericLocal#isSet = true;
+      return #lateGenericLocal = #t2;
+    }
+    self::expect(value1, #lateGenericLocal#get(){() → T%});
+    self::expect(value2, #lateGenericLocal#set(value2){(T%) → dynamic});
+    self::expect(value2, #lateGenericLocal#get(){() → T%});
+  }
+  local<core::int?>(null, 0){(core::int?, core::int?) → Null};
+  local<core::int?>(0, null){(core::int?, core::int?) → Null};
+  local<core::int>(0, 42){(core::int, core::int) → Null};
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..c6c3b91
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_local_without_initializer.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method main() → dynamic {
+  lowered core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
+  function #lateLocal#get() → core::int
+    return #lateLocal#isSet ?{core::int} #lateLocal{core::int} : throw new _in::LateError::localNI("lateLocal");
+  function #lateLocal#set(core::int #t1) → dynamic {
+    #lateLocal#isSet = true;
+    return #lateLocal = #t1;
+  }
+  self::throws(() → core::int => #lateLocal#get(){() → core::int}, "Read value from uninitialized lateLocal");
+  self::expect(123, #lateLocal#set(123){(core::int) → dynamic});
+  self::expect(123, #lateLocal#get(){() → core::int});
+  function local<T extends core::Object? = dynamic>(T% value) → Null {
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
+    function #lateGenericLocal#get() → T%
+      return #lateGenericLocal#isSet ?{T%} #lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
+    function #lateGenericLocal#set(T% #t2) → dynamic {
+      #lateGenericLocal#isSet = true;
+      return #lateGenericLocal = #t2;
+    }
+    self::throws(() → T% => #lateGenericLocal#get(){() → T%}, "Read value from uninitialized lateGenericLocal");
+    self::expect(value, #lateGenericLocal#set(value){(T%) → dynamic});
+    self::expect(value, #lateGenericLocal#get(){() → T%});
+  }
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(0){(core::int?) → Null};
+  local<core::int>(0){(core::int) → Null};
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.modular.expect
new file mode 100644
index 0000000..4c7909a
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_lowering_bitmasks.dart.weak.modular.expect
@@ -0,0 +1,233 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class extends core::Object {
+  static field core::int? _#uninitializedNonFinalStaticField = null;
+  static field core::bool _#uninitializedNonFinalStaticField#isSet = false;
+  static field core::int? _#uninitializedFinalStaticField = null;
+  static field core::bool _#uninitializedFinalStaticField#isSet = false;
+  static field core::int? _#initializedNonFinalStaticField = null;
+  static field core::bool _#initializedNonFinalStaticField#isSet = false;
+  static field core::int? _#initializedFinalStaticField = null;
+  static field core::bool _#initializedFinalStaticField#isSet = false;
+  field core::int? _#Class#uninitializedNonFinalInstanceField = null;
+  field core::bool _#Class#uninitializedNonFinalInstanceField#isSet = false;
+  field core::int? _#Class#uninitializedFinalInstanceField = null;
+  field core::bool _#Class#uninitializedFinalInstanceField#isSet = false;
+  field core::int? _#Class#initializedNonFinalInstanceField = null;
+  field core::bool _#Class#initializedNonFinalInstanceField#isSet = false;
+  field core::int? _#Class#initializedFinalInstanceField = null;
+  field core::bool _#Class#initializedFinalInstanceField#isSet = false;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  static get uninitializedNonFinalStaticField() → core::int
+    return self::Class::_#uninitializedNonFinalStaticField#isSet ?{core::int} let final core::int? #t1 = self::Class::_#uninitializedNonFinalStaticField in #t1{core::int} : throw new _in::LateError::fieldNI("uninitializedNonFinalStaticField");
+  static set uninitializedNonFinalStaticField(core::int #t2) → void {
+    self::Class::_#uninitializedNonFinalStaticField#isSet = true;
+    self::Class::_#uninitializedNonFinalStaticField = #t2;
+  }
+  static get uninitializedFinalStaticField() → core::int
+    return self::Class::_#uninitializedFinalStaticField#isSet ?{core::int} let final core::int? #t3 = self::Class::_#uninitializedFinalStaticField in #t3{core::int} : throw new _in::LateError::fieldNI("uninitializedFinalStaticField");
+  static set uninitializedFinalStaticField(core::int #t4) → void
+    if(self::Class::_#uninitializedFinalStaticField#isSet)
+      throw new _in::LateError::fieldAI("uninitializedFinalStaticField");
+    else {
+      self::Class::_#uninitializedFinalStaticField#isSet = true;
+      self::Class::_#uninitializedFinalStaticField = #t4;
+    }
+  static get initializedNonFinalStaticField() → core::int {
+    if(!self::Class::_#initializedNonFinalStaticField#isSet) {
+      self::Class::_#initializedNonFinalStaticField = 0;
+      self::Class::_#initializedNonFinalStaticField#isSet = true;
+    }
+    return let final core::int? #t5 = self::Class::_#initializedNonFinalStaticField in #t5{core::int};
+  }
+  static set initializedNonFinalStaticField(core::int #t6) → void {
+    self::Class::_#initializedNonFinalStaticField#isSet = true;
+    self::Class::_#initializedNonFinalStaticField = #t6;
+  }
+  static get initializedFinalStaticField() → core::int {
+    if(!self::Class::_#initializedFinalStaticField#isSet) {
+      final core::int #t7 = 0;
+      if(self::Class::_#initializedFinalStaticField#isSet)
+        throw new _in::LateError::fieldADI("initializedFinalStaticField");
+      self::Class::_#initializedFinalStaticField = #t7;
+      self::Class::_#initializedFinalStaticField#isSet = true;
+    }
+    return let final core::int? #t8 = self::Class::_#initializedFinalStaticField in #t8{core::int};
+  }
+  get uninitializedNonFinalInstanceField() → core::int
+    return this.{self::Class::_#Class#uninitializedNonFinalInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t9 = this.{self::Class::_#Class#uninitializedNonFinalInstanceField}{core::int?} in #t9{core::int} : throw new _in::LateError::fieldNI("uninitializedNonFinalInstanceField");
+  set uninitializedNonFinalInstanceField(core::int #t10) → void {
+    this.{self::Class::_#Class#uninitializedNonFinalInstanceField#isSet} = true;
+    this.{self::Class::_#Class#uninitializedNonFinalInstanceField} = #t10;
+  }
+  get uninitializedFinalInstanceField() → core::int
+    return this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t11 = this.{self::Class::_#Class#uninitializedFinalInstanceField}{core::int?} in #t11{core::int} : throw new _in::LateError::fieldNI("uninitializedFinalInstanceField");
+  set uninitializedFinalInstanceField(core::int #t12) → void
+    if(this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("uninitializedFinalInstanceField");
+    else {
+      this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet} = true;
+      this.{self::Class::_#Class#uninitializedFinalInstanceField} = #t12;
+    }
+  get initializedNonFinalInstanceField() → core::int {
+    if(!this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet}{core::bool}) {
+      this.{self::Class::_#Class#initializedNonFinalInstanceField} = 0;
+      this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet} = true;
+    }
+    return let final core::int? #t13 = this.{self::Class::_#Class#initializedNonFinalInstanceField}{core::int?} in #t13{core::int};
+  }
+  set initializedNonFinalInstanceField(core::int #t14) → void {
+    this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet} = true;
+    this.{self::Class::_#Class#initializedNonFinalInstanceField} = #t14;
+  }
+  get initializedFinalInstanceField() → core::int {
+    if(!this.{self::Class::_#Class#initializedFinalInstanceField#isSet}{core::bool}) {
+      final core::int #t15 = 0;
+      if(this.{self::Class::_#Class#initializedFinalInstanceField#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("initializedFinalInstanceField");
+      this.{self::Class::_#Class#initializedFinalInstanceField} = #t15;
+      this.{self::Class::_#Class#initializedFinalInstanceField#isSet} = true;
+    }
+    return let final core::int? #t16 = this.{self::Class::_#Class#initializedFinalInstanceField}{core::int?} in #t16{core::int};
+  }
+}
+static field core::int? _#uninitializedNonFinalTopLevelField = null;
+static field core::bool _#uninitializedNonFinalTopLevelField#isSet = false;
+static field core::int? _#uninitializedFinalTopLevelField = null;
+static field core::bool _#uninitializedFinalTopLevelField#isSet = false;
+static field core::int? _#initializedNonFinalTopLevelField = null;
+static field core::bool _#initializedNonFinalTopLevelField#isSet = false;
+static field core::int? _#initializedFinalTopLevelField = null;
+static field core::bool _#initializedFinalTopLevelField#isSet = false;
+static method main() → dynamic {}
+static method method() → dynamic {
+  lowered core::int? #nullableUninitializedNonFinalLocal;
+  lowered core::bool #nullableUninitializedNonFinalLocal#isSet = false;
+  function #nullableUninitializedNonFinalLocal#get() → core::int?
+    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} #nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
+  function #nullableUninitializedNonFinalLocal#set(core::int? #t17) → dynamic {
+    #nullableUninitializedNonFinalLocal#isSet = true;
+    return #nullableUninitializedNonFinalLocal = #t17;
+  }
+  lowered core::int? #nonNullableUninitializedNonFinalLocal;
+  lowered core::bool #nonNullableUninitializedNonFinalLocal#isSet = false;
+  function #nonNullableUninitializedNonFinalLocal#get() → core::int
+    return #nonNullableUninitializedNonFinalLocal#isSet ?{core::int} #nonNullableUninitializedNonFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal");
+  function #nonNullableUninitializedNonFinalLocal#set(core::int #t18) → dynamic {
+    #nonNullableUninitializedNonFinalLocal#isSet = true;
+    return #nonNullableUninitializedNonFinalLocal = #t18;
+  }
+  lowered final core::int? #nullableUninitializedFinalLocal;
+  lowered core::bool #nullableUninitializedFinalLocal#isSet = false;
+  function #nullableUninitializedFinalLocal#get() → core::int?
+    return #nullableUninitializedFinalLocal#isSet ?{core::int?} #nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
+  function #nullableUninitializedFinalLocal#set(core::int? #t19) → dynamic
+    if(#nullableUninitializedFinalLocal#isSet)
+      throw new _in::LateError::localAI("nullableUninitializedFinalLocal");
+    else {
+      #nullableUninitializedFinalLocal#isSet = true;
+      return #nullableUninitializedFinalLocal = #t19;
+    }
+  lowered final core::int? #nonNullableUninitializedFinalLocal;
+  lowered core::bool #nonNullableUninitializedFinalLocal#isSet = false;
+  function #nonNullableUninitializedFinalLocal#get() → core::int
+    return #nonNullableUninitializedFinalLocal#isSet ?{core::int} #nonNullableUninitializedFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal");
+  function #nonNullableUninitializedFinalLocal#set(core::int #t20) → dynamic
+    if(#nonNullableUninitializedFinalLocal#isSet)
+      throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
+    else {
+      #nonNullableUninitializedFinalLocal#isSet = true;
+      return #nonNullableUninitializedFinalLocal = #t20;
+    }
+  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
+  function #nullableInitializedNonFinalLocal#get() → core::int? {
+    if(!#nullableInitializedNonFinalLocal#isSet) {
+      #nullableInitializedNonFinalLocal = 0;
+      #nullableInitializedNonFinalLocal#isSet = true;
+    }
+    return #nullableInitializedNonFinalLocal;
+  }
+  function #nullableInitializedNonFinalLocal#set(core::int? #t21) → dynamic {
+    #nullableInitializedNonFinalLocal#isSet = true;
+    return #nullableInitializedNonFinalLocal = #t21;
+  }
+  lowered core::int? #nonNullableInitializedNonFinalLocal;
+  lowered core::bool #nonNullableInitializedNonFinalLocal#isSet = false;
+  function #nonNullableInitializedNonFinalLocal#get() → core::int {
+    if(!#nonNullableInitializedNonFinalLocal#isSet) {
+      #nonNullableInitializedNonFinalLocal = 0;
+      #nonNullableInitializedNonFinalLocal#isSet = true;
+    }
+    return #nonNullableInitializedNonFinalLocal{core::int};
+  }
+  function #nonNullableInitializedNonFinalLocal#set(core::int #t22) → dynamic {
+    #nonNullableInitializedNonFinalLocal#isSet = true;
+    return #nonNullableInitializedNonFinalLocal = #t22;
+  }
+  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered core::bool #nullableInitializedFinalLocal#isSet = false;
+  function #nullableInitializedFinalLocal#get() → core::int? {
+    if(!#nullableInitializedFinalLocal#isSet) {
+      final core::int? #t23 = 0;
+      if(#nullableInitializedFinalLocal#isSet)
+        throw new _in::LateError::localADI("nullableInitializedFinalLocal");
+      #nullableInitializedFinalLocal = #t23;
+      #nullableInitializedFinalLocal#isSet = true;
+    }
+    return #nullableInitializedFinalLocal;
+  }
+  lowered final core::int? #nonNullableInitializedFinalLocal;
+  lowered core::bool #nonNullableInitializedFinalLocal#isSet = false;
+  function #nonNullableInitializedFinalLocal#get() → core::int {
+    if(!#nonNullableInitializedFinalLocal#isSet) {
+      final core::int #t24 = 0;
+      if(#nonNullableInitializedFinalLocal#isSet)
+        throw new _in::LateError::localADI("nonNullableInitializedFinalLocal");
+      #nonNullableInitializedFinalLocal = #t24;
+      #nonNullableInitializedFinalLocal#isSet = true;
+    }
+    return #nonNullableInitializedFinalLocal{core::int};
+  }
+}
+static get uninitializedNonFinalTopLevelField() → core::int
+  return self::_#uninitializedNonFinalTopLevelField#isSet ?{core::int} let final core::int? #t25 = self::_#uninitializedNonFinalTopLevelField in #t25{core::int} : throw new _in::LateError::fieldNI("uninitializedNonFinalTopLevelField");
+static set uninitializedNonFinalTopLevelField(core::int #t26) → void {
+  self::_#uninitializedNonFinalTopLevelField#isSet = true;
+  self::_#uninitializedNonFinalTopLevelField = #t26;
+}
+static get uninitializedFinalTopLevelField() → core::int
+  return self::_#uninitializedFinalTopLevelField#isSet ?{core::int} let final core::int? #t27 = self::_#uninitializedFinalTopLevelField in #t27{core::int} : throw new _in::LateError::fieldNI("uninitializedFinalTopLevelField");
+static set uninitializedFinalTopLevelField(core::int #t28) → void
+  if(self::_#uninitializedFinalTopLevelField#isSet)
+    throw new _in::LateError::fieldAI("uninitializedFinalTopLevelField");
+  else {
+    self::_#uninitializedFinalTopLevelField#isSet = true;
+    self::_#uninitializedFinalTopLevelField = #t28;
+  }
+static get initializedNonFinalTopLevelField() → core::int {
+  if(!self::_#initializedNonFinalTopLevelField#isSet) {
+    self::_#initializedNonFinalTopLevelField = 0;
+    self::_#initializedNonFinalTopLevelField#isSet = true;
+  }
+  return let final core::int? #t29 = self::_#initializedNonFinalTopLevelField in #t29{core::int};
+}
+static set initializedNonFinalTopLevelField(core::int #t30) → void {
+  self::_#initializedNonFinalTopLevelField#isSet = true;
+  self::_#initializedNonFinalTopLevelField = #t30;
+}
+static get initializedFinalTopLevelField() → core::int {
+  if(!self::_#initializedFinalTopLevelField#isSet) {
+    final core::int #t31 = 0;
+    if(self::_#initializedFinalTopLevelField#isSet)
+      throw new _in::LateError::fieldADI("initializedFinalTopLevelField");
+    self::_#initializedFinalTopLevelField = #t31;
+    self::_#initializedFinalTopLevelField#isSet = true;
+  }
+  return let final core::int? #t32 = self::_#initializedFinalTopLevelField in #t32{core::int};
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..a743497
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.modular.expect
@@ -0,0 +1,167 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  static field core::int? _#lateStaticField1 = null;
+  static field core::bool _#lateStaticField1#isSet = false;
+  static field core::int? _#lateStaticField2 = null;
+  static field core::bool _#lateStaticField2#isSet = false;
+  field core::int? _#Class#lateInstanceField = null;
+  field core::bool _#Class#lateInstanceField#isSet = false;
+  final field self::Class::T? field;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField = null;
+  field core::bool _#Class#lateGenericInstanceField#isSet = false;
+  constructor •(self::Class::T? field) → self::Class<self::Class::T%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  static method lateStaticField1Init() → core::int?
+    return 87;
+  static get lateStaticField1() → core::int? {
+    if(!self::Class::_#lateStaticField1#isSet) {
+      self::Class::_#lateStaticField1 = self::Class::lateStaticField1Init();
+      self::Class::_#lateStaticField1#isSet = true;
+    }
+    return self::Class::_#lateStaticField1;
+  }
+  static set lateStaticField1(core::int? #t1) → void {
+    self::Class::_#lateStaticField1#isSet = true;
+    self::Class::_#lateStaticField1 = #t1;
+  }
+  static method lateStaticField2Init() → core::int?
+    return 42;
+  static get lateStaticField2() → core::int? {
+    if(!self::Class::_#lateStaticField2#isSet) {
+      self::Class::_#lateStaticField2 = self::Class::lateStaticField2Init();
+      self::Class::_#lateStaticField2#isSet = true;
+    }
+    return self::Class::_#lateStaticField2;
+  }
+  static set lateStaticField2(core::int? #t2) → void {
+    self::Class::_#lateStaticField2#isSet = true;
+    self::Class::_#lateStaticField2 = #t2;
+  }
+  static method staticMethod() → dynamic {
+    self::expect(42, self::Class::lateStaticField2);
+    self::Class::lateStaticField2 = 43;
+    self::expect(43, self::Class::lateStaticField2);
+  }
+  method lateInstanceFieldInit() → core::int?
+    return 16;
+  get lateInstanceField() → core::int? {
+    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateInstanceField} = this.{self::Class::lateInstanceFieldInit}(){() → core::int?};
+      this.{self::Class::_#Class#lateInstanceField#isSet} = true;
+    }
+    return this.{self::Class::_#Class#lateInstanceField}{core::int?};
+  }
+  set lateInstanceField(core::int? #t3) → void {
+    this.{self::Class::_#Class#lateInstanceField#isSet} = true;
+    this.{self::Class::_#Class#lateInstanceField} = #t3;
+  }
+  method lateGenericInstanceFieldInit() → self::Class::T?
+    return this.{self::Class::field}{self::Class::T?};
+  get lateGenericInstanceField() → self::Class::T? {
+    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool}) {
+      this.{self::Class::_#Class#lateGenericInstanceField} = this.{self::Class::lateGenericInstanceFieldInit}(){() → self::Class::T?};
+      this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
+    }
+    return this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?};
+  }
+  set lateGenericInstanceField(covariant-by-class self::Class::T? #t4) → void {
+    this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
+    this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
+  }
+  method instanceMethod(covariant-by-class self::Class::T? value) → dynamic {
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
+    this.{self::Class::lateInstanceField} = 17;
+    self::expect(17, this.{self::Class::lateInstanceField}{core::int?});
+    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
+    this.{self::Class::lateGenericInstanceField} = value;
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
+  }
+}
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
+  static method lateExtensionField1Init = self::Extension|lateExtensionField1Init;
+  static field lateExtensionField1 = self::_#Extension|lateExtensionField1;
+  static field lateExtensionField1 = self::_#Extension|lateExtensionField1#isSet;
+  static get lateExtensionField1 = get self::Extension|lateExtensionField1;
+  static set lateExtensionField1 = set self::Extension|lateExtensionField1;
+  static method lateExtensionField2Init = self::Extension|lateExtensionField2Init;
+  static field lateExtensionField2 = self::_#Extension|lateExtensionField2;
+  static field lateExtensionField2 = self::_#Extension|lateExtensionField2#isSet;
+  static get lateExtensionField2 = get self::Extension|lateExtensionField2;
+  static set lateExtensionField2 = set self::Extension|lateExtensionField2;
+  static method staticMethod = self::Extension|staticMethod;
+}
+static field core::int? _#lateTopLevelField1 = null;
+static field core::bool _#lateTopLevelField1#isSet = false;
+static field core::int? _#Extension|lateExtensionField1 = null;
+static field core::bool _#Extension|lateExtensionField1#isSet = false;
+static field core::int? _#Extension|lateExtensionField2 = null;
+static field core::bool _#Extension|lateExtensionField2#isSet = false;
+static method lateTopLevelField1Init() → core::int?
+  return 123;
+static get lateTopLevelField1() → core::int? {
+  if(!self::_#lateTopLevelField1#isSet) {
+    self::_#lateTopLevelField1 = self::lateTopLevelField1Init();
+    self::_#lateTopLevelField1#isSet = true;
+  }
+  return self::_#lateTopLevelField1;
+}
+static set lateTopLevelField1(core::int? #t5) → void {
+  self::_#lateTopLevelField1#isSet = true;
+  self::_#lateTopLevelField1 = #t5;
+}
+static method Extension|lateExtensionField1Init() → core::int?
+  return 87;
+static get Extension|lateExtensionField1() → core::int? {
+  if(!self::_#Extension|lateExtensionField1#isSet) {
+    self::_#Extension|lateExtensionField1 = self::Extension|lateExtensionField1Init();
+    self::_#Extension|lateExtensionField1#isSet = true;
+  }
+  return self::_#Extension|lateExtensionField1;
+}
+static set Extension|lateExtensionField1(core::int? #t6) → void {
+  self::_#Extension|lateExtensionField1#isSet = true;
+  self::_#Extension|lateExtensionField1 = #t6;
+}
+static method Extension|lateExtensionField2Init() → core::int?
+  return 42;
+static get Extension|lateExtensionField2() → core::int? {
+  if(!self::_#Extension|lateExtensionField2#isSet) {
+    self::_#Extension|lateExtensionField2 = self::Extension|lateExtensionField2Init();
+    self::_#Extension|lateExtensionField2#isSet = true;
+  }
+  return self::_#Extension|lateExtensionField2;
+}
+static set Extension|lateExtensionField2(core::int? #t7) → void {
+  self::_#Extension|lateExtensionField2#isSet = true;
+  self::_#Extension|lateExtensionField2 = #t7;
+}
+static method Extension|staticMethod() → dynamic {
+  self::expect(42, self::Extension|lateExtensionField2);
+  self::Extension|lateExtensionField2 = 43;
+  self::expect(43, self::Extension|lateExtensionField2);
+}
+static method main() → dynamic {
+  self::expect(123, self::lateTopLevelField1);
+  self::lateTopLevelField1 = 124;
+  self::expect(124, self::lateTopLevelField1);
+  self::expect(87, self::Class::lateStaticField1);
+  self::Class::lateStaticField1 = 88;
+  self::expect(88, self::Class::lateStaticField1);
+  self::Class::staticMethod();
+  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int>(null).{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  self::expect(87, self::Extension|lateExtensionField1);
+  self::Extension|lateExtensionField1 = 88;
+  self::expect(88, self::Extension|lateExtensionField1);
+  self::Extension|staticMethod();
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..91ed9ea
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.modular.expect
@@ -0,0 +1,127 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  static field core::int? _#lateStaticField1 = null;
+  static field core::bool _#lateStaticField1#isSet = false;
+  static field core::int? _#lateStaticField2 = null;
+  static field core::bool _#lateStaticField2#isSet = false;
+  field core::int? _#Class#lateInstanceField = null;
+  field core::bool _#Class#lateInstanceField#isSet = false;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField = null;
+  field core::bool _#Class#lateGenericInstanceField#isSet = false;
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  static get lateStaticField1() → core::int?
+    return self::Class::_#lateStaticField1#isSet ?{core::int?} self::Class::_#lateStaticField1 : throw new _in::LateError::fieldNI("lateStaticField1");
+  static set lateStaticField1(core::int? #t1) → void {
+    self::Class::_#lateStaticField1#isSet = true;
+    self::Class::_#lateStaticField1 = #t1;
+  }
+  static get lateStaticField2() → core::int?
+    return self::Class::_#lateStaticField2#isSet ?{core::int?} self::Class::_#lateStaticField2 : throw new _in::LateError::fieldNI("lateStaticField2");
+  static set lateStaticField2(core::int? #t2) → void {
+    self::Class::_#lateStaticField2#isSet = true;
+    self::Class::_#lateStaticField2 = #t2;
+  }
+  static method staticMethod() → dynamic {
+    self::throws(() → core::int? => self::Class::lateStaticField2, "Read value from uninitialized Class.lateStaticField2");
+    self::Class::lateStaticField2 = 42;
+    self::expect(42, self::Class::lateStaticField2);
+  }
+  get lateInstanceField() → core::int?
+    return this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool} ?{core::int?} this.{self::Class::_#Class#lateInstanceField}{core::int?} : throw new _in::LateError::fieldNI("lateInstanceField");
+  set lateInstanceField(core::int? #t3) → void {
+    this.{self::Class::_#Class#lateInstanceField#isSet} = true;
+    this.{self::Class::_#Class#lateInstanceField} = #t3;
+  }
+  get lateGenericInstanceField() → self::Class::T?
+    return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
+  set lateGenericInstanceField(covariant-by-class self::Class::T? #t4) → void {
+    this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
+    this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
+  }
+  method instanceMethod(covariant-by-class self::Class::T? value) → dynamic {
+    self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
+    this.{self::Class::lateInstanceField} = 16;
+    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
+    self::throws(() → self::Class::T? => this.{self::Class::lateGenericInstanceField}{self::Class::T?}, "Read value from uninitialized Class.lateGenericInstanceField");
+    this.{self::Class::lateGenericInstanceField} = value;
+    self::expect(value, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
+  }
+}
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
+  static field lateExtensionField1 = self::_#Extension|lateExtensionField1;
+  static field lateExtensionField1 = self::_#Extension|lateExtensionField1#isSet;
+  static get lateExtensionField1 = get self::Extension|lateExtensionField1;
+  static set lateExtensionField1 = set self::Extension|lateExtensionField1;
+  static field lateExtensionField2 = self::_#Extension|lateExtensionField2;
+  static field lateExtensionField2 = self::_#Extension|lateExtensionField2#isSet;
+  static get lateExtensionField2 = get self::Extension|lateExtensionField2;
+  static set lateExtensionField2 = set self::Extension|lateExtensionField2;
+  static method staticMethod = self::Extension|staticMethod;
+}
+static field core::int? _#lateTopLevelField = null;
+static field core::bool _#lateTopLevelField#isSet = false;
+static field core::int? _#Extension|lateExtensionField1 = null;
+static field core::bool _#Extension|lateExtensionField1#isSet = false;
+static field core::int? _#Extension|lateExtensionField2 = null;
+static field core::bool _#Extension|lateExtensionField2#isSet = false;
+static get lateTopLevelField() → core::int?
+  return self::_#lateTopLevelField#isSet ?{core::int?} self::_#lateTopLevelField : throw new _in::LateError::fieldNI("lateTopLevelField");
+static set lateTopLevelField(core::int? #t5) → void {
+  self::_#lateTopLevelField#isSet = true;
+  self::_#lateTopLevelField = #t5;
+}
+static get Extension|lateExtensionField1() → core::int?
+  return self::_#Extension|lateExtensionField1#isSet ?{core::int?} self::_#Extension|lateExtensionField1 : throw new _in::LateError::fieldNI("lateExtensionField1");
+static set Extension|lateExtensionField1(core::int? #t6) → void {
+  self::_#Extension|lateExtensionField1#isSet = true;
+  self::_#Extension|lateExtensionField1 = #t6;
+}
+static get Extension|lateExtensionField2() → core::int?
+  return self::_#Extension|lateExtensionField2#isSet ?{core::int?} self::_#Extension|lateExtensionField2 : throw new _in::LateError::fieldNI("lateExtensionField2");
+static set Extension|lateExtensionField2(core::int? #t7) → void {
+  self::_#Extension|lateExtensionField2#isSet = true;
+  self::_#Extension|lateExtensionField2 = #t7;
+}
+static method Extension|staticMethod() → dynamic {
+  self::throws(() → core::int? => self::Extension|lateExtensionField2, "Read value from uninitialized Class.lateExtensionField2");
+  self::Extension|lateExtensionField2 = 42;
+  self::expect(42, self::Extension|lateExtensionField2);
+}
+static method main() → dynamic {
+  self::throws(() → core::int? => self::lateTopLevelField, "Read value from uninitialized lateTopLevelField");
+  self::lateTopLevelField = 123;
+  self::expect(123, self::lateTopLevelField);
+  self::throws(() → core::int? => self::Class::lateStaticField1, "Read value from uninitialized Class.lateStaticField1");
+  self::Class::lateStaticField1 = 87;
+  self::expect(87, self::Class::lateStaticField1);
+  self::Class::staticMethod();
+  self::throws(() → core::int? => self::Extension|lateExtensionField1, "Read value from uninitialized Extension.lateExtensionField1");
+  self::Extension|lateExtensionField1 = 87;
+  self::expect(87, self::Extension|lateExtensionField1);
+  self::Extension|staticMethod();
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int?>().{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(null){(core::int?) → dynamic};
+  new self::Class::•<core::int>().{self::Class::instanceMethod}(0){(core::int?) → dynamic};
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..a150002
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_with_initializer.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method lateLocalInit() → core::int?
+  return 123;
+static method main() → dynamic {
+  lowered core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
+  function #lateLocal#get() → core::int? {
+    if(!#lateLocal#isSet) {
+      #lateLocal = self::lateLocalInit();
+      #lateLocal#isSet = true;
+    }
+    return #lateLocal;
+  }
+  function #lateLocal#set(core::int? #t1) → dynamic {
+    #lateLocal#isSet = true;
+    return #lateLocal = #t1;
+  }
+  self::expect(123, #lateLocal#get(){() → core::int?});
+  self::expect(124, #lateLocal#set(124){(core::int?) → dynamic});
+  self::expect(124, #lateLocal#get(){() → core::int?});
+  function local<T extends core::Object? = dynamic>(T? value1, T? value2) → Null {
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
+    function #lateGenericLocal#get() → T? {
+      if(!#lateGenericLocal#isSet) {
+        #lateGenericLocal = value1;
+        #lateGenericLocal#isSet = true;
+      }
+      return #lateGenericLocal;
+    }
+    function #lateGenericLocal#set(T? #t2) → dynamic {
+      #lateGenericLocal#isSet = true;
+      return #lateGenericLocal = #t2;
+    }
+    self::expect(value1, #lateGenericLocal#get(){() → T?});
+    self::expect(value2, #lateGenericLocal#set(value2){(T?) → dynamic});
+    self::expect(value2, #lateGenericLocal#get(){() → T?});
+  }
+  local<core::int?>(null, 0){(core::int?, core::int?) → Null};
+  local<core::int?>(0, null){(core::int?, core::int?) → Null};
+  local<core::int>(null, 0){(core::int?, core::int?) → Null};
+  local<core::int>(0, null){(core::int?, core::int?) → Null};
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..133710a
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_local_without_initializer.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method main() → dynamic {
+  lowered core::int? #lateLocal;
+  lowered core::bool #lateLocal#isSet = false;
+  function #lateLocal#get() → core::int?
+    return #lateLocal#isSet ?{core::int?} #lateLocal : throw new _in::LateError::localNI("lateLocal");
+  function #lateLocal#set(core::int? #t1) → dynamic {
+    #lateLocal#isSet = true;
+    return #lateLocal = #t1;
+  }
+  self::throws(() → core::int? => #lateLocal#get(){() → core::int?}, "Read value from uninitialized lateLocal");
+  self::expect(123, #lateLocal#set(123){(core::int?) → dynamic});
+  self::expect(123, #lateLocal#get(){() → core::int?});
+  function local<T extends core::Object? = dynamic>(T? value) → Null {
+    lowered T? #lateGenericLocal;
+    lowered core::bool #lateGenericLocal#isSet = false;
+    function #lateGenericLocal#get() → T?
+      return #lateGenericLocal#isSet ?{T?} #lateGenericLocal : throw new _in::LateError::localNI("lateGenericLocal");
+    function #lateGenericLocal#set(T? #t2) → dynamic {
+      #lateGenericLocal#isSet = true;
+      return #lateGenericLocal = #t2;
+    }
+    self::throws(() → T? => #lateGenericLocal#get(){() → T?}, "Read value from uninitialized lateGenericLocal");
+    self::expect(value, #lateGenericLocal#set(value){(T?) → dynamic});
+    self::expect(value, #lateGenericLocal#get(){() → T?});
+  }
+  local<core::int?>(null){(core::int?) → Null};
+  local<core::int?>(0){(core::int?) → Null};
+  local<core::int>(null){(core::int?) → Null};
+  local<core::int>(0){(core::int?) → Null};
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/late_override.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/late_override.dart.weak.modular.expect
new file mode 100644
index 0000000..bb99080
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_override.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Interface extends core::Object {
+  field core::int? _#Interface#implementedLateFieldDeclaredGetterSetter = null;
+  field core::bool _#Interface#implementedLateFieldDeclaredGetterSetter#isSet = false;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  get implementedLateFieldDeclaredGetterSetter() → core::int
+    return this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("implementedLateFieldDeclaredGetterSetter");
+  set implementedLateFieldDeclaredGetterSetter(core::int #t2) → void {
+    this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter#isSet} = true;
+    this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} = #t2;
+  }
+}
+class Class extends core::Object implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  get implementedLateFieldDeclaredGetterSetter() → core::int
+    return 0;
+  set implementedLateFieldDeclaredGetterSetter(core::int value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.modular.expect
new file mode 100644
index 0000000..a38e25a
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.modular.expect
@@ -0,0 +1,208 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/later.dart:14:7: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+//   foo(late int x) {} // Error.
+//       ^^^^
+//
+// pkg/front_end/testcases/late_lowering/later.dart:17:5: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+// bar(late int x) {} // Error.
+//     ^^^^
+//
+// pkg/front_end/testcases/late_lowering/later.dart:22:28: Error: 'catch' must be followed by '(identifier)' or '(identifier, identifier)'.
+// No types are needed, the first is given by 'on', the second is always 'StackTrace'.
+//   } on dynamic catch (late e, late t) {} // Error.
+//                            ^
+//
+// pkg/front_end/testcases/late_lowering/later.dart:22:31: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+//   } on dynamic catch (late e, late t) {} // Error.
+//                               ^^^^
+//
+// pkg/front_end/testcases/late_lowering/later.dart:22:36: Error: 'catch' must be followed by '(identifier)' or '(identifier, identifier)'.
+// No types are needed, the first is given by 'on', the second is always 'StackTrace'.
+//   } on dynamic catch (late e, late t) {} // Error.
+//                                    ^
+//
+// pkg/front_end/testcases/late_lowering/later.dart:23:8: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+//   for (late int i = 0; i < 10; ++i) { // Error.
+//        ^^^^
+//
+// pkg/front_end/testcases/late_lowering/later.dart:26:8: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+//   for (late String s in ["baz"]) { // Error.
+//        ^^^^
+//
+// pkg/front_end/testcases/late_lowering/later.dart:29:9: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+//   [for (late int i = 0; i < 10; ++i) i]; // Error.
+//         ^^^^
+//
+// pkg/front_end/testcases/late_lowering/later.dart:33:14: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+//   await for (late String s in new Stream.fromIterable(["hest"])) { // Error.
+//              ^^^^
+//
+// pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
+//   late String s1 = await hest(); // Error.
+//                    ^^^^^
+//
+// pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
+//   late String s2 = '${fisk}${await hest()}${fisk}'; // Error.
+//                              ^^^^^
+//
+// pkg/front_end/testcases/late_lowering/later.dart:46:18: Error: Can't have a late final field in a class with a const constructor.
+//   late final int x = 42;
+//                  ^
+// pkg/front_end/testcases/late_lowering/later.dart:48:9: Context: This constructor is const.
+//   const B(); // Error: B has late final fields.
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+import "dart:async" as asy;
+
+class A extends core::Object {
+  field core::int a = 42;
+  field core::int? _#A#b = null;
+  field core::bool _#A#b#isSet = false;
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  get b() → core::int {
+    if(!this.{self::A::_#A#b#isSet}{core::bool}) {
+      this.{self::A::_#A#b} = this.{self::A::a}{core::int}.{core::num::*}(2){(core::num) → core::int}.{core::int::>>}(1){(core::int) → core::int};
+      this.{self::A::_#A#b#isSet} = true;
+    }
+    return let final core::int? #t1 = this.{self::A::_#A#b}{core::int?} in #t1{core::int};
+  }
+  set b(core::int #t2) → void {
+    this.{self::A::_#A#b#isSet} = true;
+    this.{self::A::_#A#b} = #t2;
+  }
+  method foo(core::int x) → dynamic {}
+}
+class B extends core::Object /*hasConstConstructor*/  {
+  field core::int? _#B#x = null;
+  field core::bool _#B#x#isSet = false;
+  const constructor •() → self::B
+    : super core::Object::•()
+    ;
+  get x() → core::int {
+    if(!this.{self::B::_#B#x#isSet}{core::bool}) {
+      final core::int #t3 = 42;
+      if(this.{self::B::_#B#x#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("x");
+      this.{self::B::_#B#x} = #t3;
+      this.{self::B::_#B#x#isSet} = true;
+    }
+    return let final core::int? #t4 = this.{self::B::_#B#x}{core::int?} in #t4{core::int};
+  }
+}
+class C extends core::Object {
+  field core::int? _#C#x = null;
+  field core::bool _#C#x#isSet = false;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  get x() → core::int
+    return this.{self::C::_#C#x#isSet}{core::bool} ?{core::int} let final core::int? #t5 = this.{self::C::_#C#x}{core::int?} in #t5{core::int} : throw new _in::LateError::fieldNI("x");
+  set x(core::int #t6) → void
+    if(this.{self::C::_#C#x#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("x");
+    else {
+      this.{self::C::_#C#x#isSet} = true;
+      this.{self::C::_#C#x} = #t6;
+    }
+  method initVars() → dynamic {
+    this.{self::C::x} = 42;
+  }
+}
+static method bar(core::int x) → dynamic {}
+static method baz() → dynamic {
+  {
+    {
+      invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:22:36: Error: 'catch' must be followed by '(identifier)' or '(identifier, identifier)'.
+No types are needed, the first is given by 'on', the second is always 'StackTrace'.
+  } on dynamic catch (late e, late t) {} // Error.
+                                   ^";
+    }
+    try {
+      throw "baz";
+    }
+    on dynamic catch(final dynamic late, final core::StackTrace e) {
+    }
+  }
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    core::print("baz");
+  }
+  for (core::String s in <core::String>["baz"]) {
+    core::print(s);
+  }
+  block {
+    final core::List<core::int> #t7 = <core::int>[];
+    for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t7.{core::List::add}{Invariant}(i){(core::int) → void};
+  } =>#t7;
+}
+static method hest() → dynamic async {
+  await for (core::String s in asy::Stream::fromIterable<core::String>(<core::String>["hest"])) {
+    core::print(s);
+  }
+  return "hest";
+}
+static method fisk() → dynamic async {
+  lowered core::String? #s1;
+  lowered core::bool #s1#isSet = false;
+  function #s1#get() → core::String {
+    if(!#s1#isSet) {
+      #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
+  late String s1 = await hest(); // Error.
+                   ^^^^^";
+      #s1#isSet = true;
+    }
+    return #s1{core::String};
+  }
+  function #s1#set(core::String #t8) → dynamic {
+    #s1#isSet = true;
+    return #s1 = #t8;
+  }
+  lowered core::String? #s2;
+  lowered core::bool #s2#isSet = false;
+  function #s2#get() → core::String {
+    if(!#s2#isSet) {
+      #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
+  late String s2 = '\${fisk}\${await hest()}\${fisk}'; // Error.
+                             ^^^^^"}${#C1}";
+      #s2#isSet = true;
+    }
+    return #s2{core::String};
+  }
+  function #s2#set(core::String #t9) → dynamic {
+    #s2#isSet = true;
+    return #s2 = #t9;
+  }
+  lowered core::Function? #f;
+  lowered core::bool #f#isSet = false;
+  function #f#get() → core::Function {
+    if(!#f#isSet) {
+      #f = () → asy::Future<dynamic> async => await self::hest();
+      #f#isSet = true;
+    }
+    return #f{core::Function};
+  }
+  function #f#set(core::Function #t10) → dynamic {
+    #f#isSet = true;
+    return #f = #t10;
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::fisk
+}
diff --git a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..86913df
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.modular.expect
@@ -0,0 +1,183 @@
+library;
+import self as self;
+import "non_nullable_from_opt_out_lib.dart" as non;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///non_nullable_from_opt_out_lib.dart";
+
+static method main() → dynamic {
+  non::topLevelField = null;
+  non::finalTopLevelField = null;
+  non::Class<core::int*>* c = new non::Class::•<core::int*>();
+  c.{non::Class::instanceField} = null;
+  c.{non::Class::finalInstanceField} = null;
+  c.{non::Class::instanceTypeVariable} = null;
+  c.{non::Class::finalInstanceTypeVariable} = null;
+  non::Class::staticField = null;
+  non::Class::staticFinalField = null;
+  non::expect(null, non::topLevelField);
+  non::expect(null, non::finalTopLevelField);
+  non::expect(null, c.{non::Class::instanceField}{core::int*});
+  non::expect(null, c.{non::Class::finalInstanceField}{dynamic});
+  non::expect(null, c.{non::Class::instanceTypeVariable}{core::int*});
+  non::expect(null, c.{non::Class::finalInstanceTypeVariable}{core::int*});
+  non::expect(null, non::Class::staticField);
+  non::expect(null, non::Class::staticFinalField);
+  non::throws(() → Null => non::finalTopLevelField = null);
+  non::throws(() → Null => c.{non::Class::finalInstanceField} = null);
+  non::throws(() → Null => c.{non::Class::finalInstanceTypeVariable} = null);
+  non::throws(() → Null => non::Class::staticFinalField = null);
+  non::method<Null>(true, null, null);
+}
+
+library /*isNonNullableByDefault*/;
+import self as non;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class<T extends core::Object> extends core::Object {
+  field core::int? _#Class#instanceField = null;
+  field core::bool _#Class#instanceField#isSet = false;
+  field dynamic _#Class#finalInstanceField = null;
+  field core::bool _#Class#finalInstanceField#isSet = false;
+  covariant-by-class field non::Class::T? _#Class#instanceTypeVariable = null;
+  field core::bool _#Class#instanceTypeVariable#isSet = false;
+  field non::Class::T? _#Class#finalInstanceTypeVariable = null;
+  field core::bool _#Class#finalInstanceTypeVariable#isSet = false;
+  static field core::int? _#staticField = null;
+  static field core::bool _#staticField#isSet = false;
+  static field dynamic _#staticFinalField = null;
+  static field core::bool _#staticFinalField#isSet = false;
+  synthetic constructor •() → non::Class<non::Class::T>
+    : super core::Object::•()
+    ;
+  get instanceField() → core::int
+    return this.{non::Class::_#Class#instanceField#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{non::Class::_#Class#instanceField}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("instanceField");
+  set instanceField(core::int #t2) → void {
+    this.{non::Class::_#Class#instanceField#isSet} = true;
+    this.{non::Class::_#Class#instanceField} = #t2;
+  }
+  get finalInstanceField() → dynamic
+    return this.{non::Class::_#Class#finalInstanceField#isSet}{core::bool} ?{dynamic} this.{non::Class::_#Class#finalInstanceField}{dynamic} : throw new _in::LateError::fieldNI("finalInstanceField");
+  set finalInstanceField(dynamic #t3) → void
+    if(this.{non::Class::_#Class#finalInstanceField#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("finalInstanceField");
+    else {
+      this.{non::Class::_#Class#finalInstanceField#isSet} = true;
+      this.{non::Class::_#Class#finalInstanceField} = #t3;
+    }
+  get instanceTypeVariable() → non::Class::T
+    return this.{non::Class::_#Class#instanceTypeVariable#isSet}{core::bool} ?{non::Class::T} let final non::Class::T? #t4 = this.{non::Class::_#Class#instanceTypeVariable}{non::Class::T?} in #t4{non::Class::T} : throw new _in::LateError::fieldNI("instanceTypeVariable");
+  set instanceTypeVariable(covariant-by-class non::Class::T #t5) → void {
+    this.{non::Class::_#Class#instanceTypeVariable#isSet} = true;
+    this.{non::Class::_#Class#instanceTypeVariable} = #t5;
+  }
+  get finalInstanceTypeVariable() → non::Class::T
+    return this.{non::Class::_#Class#finalInstanceTypeVariable#isSet}{core::bool} ?{non::Class::T} let final non::Class::T? #t6 = this.{non::Class::_#Class#finalInstanceTypeVariable}{non::Class::T?} in #t6{non::Class::T} : throw new _in::LateError::fieldNI("finalInstanceTypeVariable");
+  set finalInstanceTypeVariable(non::Class::T #t7) → void
+    if(this.{non::Class::_#Class#finalInstanceTypeVariable#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("finalInstanceTypeVariable");
+    else {
+      this.{non::Class::_#Class#finalInstanceTypeVariable#isSet} = true;
+      this.{non::Class::_#Class#finalInstanceTypeVariable} = #t7;
+    }
+  static get staticField() → core::int
+    return non::Class::_#staticField#isSet ?{core::int} let final core::int? #t8 = non::Class::_#staticField in #t8{core::int} : throw new _in::LateError::fieldNI("staticField");
+  static set staticField(core::int #t9) → void {
+    non::Class::_#staticField#isSet = true;
+    non::Class::_#staticField = #t9;
+  }
+  static get staticFinalField() → dynamic
+    return non::Class::_#staticFinalField#isSet ?{dynamic} non::Class::_#staticFinalField : throw new _in::LateError::fieldNI("staticFinalField");
+  static set staticFinalField(dynamic #t10) → void
+    if(non::Class::_#staticFinalField#isSet)
+      throw new _in::LateError::fieldAI("staticFinalField");
+    else {
+      non::Class::_#staticFinalField#isSet = true;
+      non::Class::_#staticFinalField = #t10;
+    }
+}
+static field core::int? _#topLevelField = null;
+static field core::bool _#topLevelField#isSet = false;
+static field dynamic _#finalTopLevelField = null;
+static field core::bool _#finalTopLevelField#isSet = false;
+static get topLevelField() → core::int
+  return non::_#topLevelField#isSet ?{core::int} let final core::int? #t11 = non::_#topLevelField in #t11{core::int} : throw new _in::LateError::fieldNI("topLevelField");
+static set topLevelField(core::int #t12) → void {
+  non::_#topLevelField#isSet = true;
+  non::_#topLevelField = #t12;
+}
+static get finalTopLevelField() → dynamic
+  return non::_#finalTopLevelField#isSet ?{dynamic} non::_#finalTopLevelField : throw new _in::LateError::fieldNI("finalTopLevelField");
+static set finalTopLevelField(dynamic #t13) → void
+  if(non::_#finalTopLevelField#isSet)
+    throw new _in::LateError::fieldAI("finalTopLevelField");
+  else {
+    non::_#finalTopLevelField#isSet = true;
+    non::_#finalTopLevelField = #t13;
+  }
+static method method<T extends core::Object>(core::bool b, core::int i, non::method::T t) → dynamic {
+  lowered core::int? #local;
+  lowered core::bool #local#isSet = false;
+  function #local#get() → core::int
+    return #local#isSet ?{core::int} #local{core::int} : throw new _in::LateError::localNI("local");
+  function #local#set(core::int #t14) → dynamic {
+    #local#isSet = true;
+    return #local = #t14;
+  }
+  lowered final dynamic #finalLocal;
+  lowered core::bool #finalLocal#isSet = false;
+  function #finalLocal#get() → dynamic
+    return #finalLocal#isSet ?{dynamic} #finalLocal : throw new _in::LateError::localNI("finalLocal");
+  function #finalLocal#set(dynamic #t15) → dynamic
+    if(#finalLocal#isSet)
+      throw new _in::LateError::localAI("finalLocal");
+    else {
+      #finalLocal#isSet = true;
+      return #finalLocal = #t15;
+    }
+  lowered non::method::T? #localTypeVariable;
+  lowered core::bool #localTypeVariable#isSet = false;
+  function #localTypeVariable#get() → non::method::T
+    return #localTypeVariable#isSet ?{non::method::T} #localTypeVariable{non::method::T} : throw new _in::LateError::localNI("localTypeVariable");
+  function #localTypeVariable#set(non::method::T #t16) → dynamic {
+    #localTypeVariable#isSet = true;
+    return #localTypeVariable = #t16;
+  }
+  lowered final non::method::T? #finalLocalTypeVariable;
+  lowered core::bool #finalLocalTypeVariable#isSet = false;
+  function #finalLocalTypeVariable#get() → non::method::T
+    return #finalLocalTypeVariable#isSet ?{non::method::T} #finalLocalTypeVariable{non::method::T} : throw new _in::LateError::localNI("finalLocalTypeVariable");
+  function #finalLocalTypeVariable#set(non::method::T #t17) → dynamic
+    if(#finalLocalTypeVariable#isSet)
+      throw new _in::LateError::localAI("finalLocalTypeVariable");
+    else {
+      #finalLocalTypeVariable#isSet = true;
+      return #finalLocalTypeVariable = #t17;
+    }
+  if(b) {
+    #local#set(i){(core::int) → dynamic};
+    #finalLocal#set(i){(dynamic) → dynamic};
+    #localTypeVariable#set(t){(non::method::T) → dynamic};
+    #finalLocalTypeVariable#set(t){(non::method::T) → dynamic};
+    non::expect(i, #local#get(){() → core::int});
+    non::expect(i, #finalLocal#get(){() → dynamic});
+    non::expect(t, #localTypeVariable#get(){() → non::method::T});
+    non::expect(t, #finalLocalTypeVariable#get(){() → non::method::T});
+  }
+  non::throws(() → void => #finalLocal#set(i){(dynamic) → dynamic});
+  non::throws(() → void => #finalLocalTypeVariable#set(t){(non::method::T) → dynamic});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → void f) → dynamic {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object _) {
+    return;
+  }
+  throw "Missing exception";
+}
diff --git a/pkg/front_end/testcases/late_lowering/override.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/override.dart.weak.modular.expect
new file mode 100644
index 0000000..d89b35a
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/override.dart.weak.modular.expect
@@ -0,0 +1,156 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class extends core::Object {
+  field core::int? _#Class#field1 = null;
+  field core::bool _#Class#field1#isSet = false;
+  field core::int? _#Class#field2 = null;
+  field core::bool _#Class#field2#isSet = false;
+  field core::int? _#Class#field3 = null;
+  field core::bool _#Class#field3#isSet = false;
+  field core::int? _#Class#field4 = null;
+  field core::bool _#Class#field4#isSet = false;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  get field1() → core::int
+    return this.{self::Class::_#Class#field1#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::Class::_#Class#field1}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("field1");
+  set field1(core::int #t2) → void {
+    this.{self::Class::_#Class#field1#isSet} = true;
+    this.{self::Class::_#Class#field1} = #t2;
+  }
+  get field2() → core::int
+    return this.{self::Class::_#Class#field2#isSet}{core::bool} ?{core::int} let final core::int? #t3 = this.{self::Class::_#Class#field2}{core::int?} in #t3{core::int} : throw new _in::LateError::fieldNI("field2");
+  set field2(core::int #t4) → void {
+    this.{self::Class::_#Class#field2#isSet} = true;
+    this.{self::Class::_#Class#field2} = #t4;
+  }
+  get field3() → core::int
+    return this.{self::Class::_#Class#field3#isSet}{core::bool} ?{core::int} let final core::int? #t5 = this.{self::Class::_#Class#field3}{core::int?} in #t5{core::int} : throw new _in::LateError::fieldNI("field3");
+  set field3(core::int #t6) → void
+    if(this.{self::Class::_#Class#field3#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("field3");
+    else {
+      this.{self::Class::_#Class#field3#isSet} = true;
+      this.{self::Class::_#Class#field3} = #t6;
+    }
+  get field4() → core::int
+    return this.{self::Class::_#Class#field4#isSet}{core::bool} ?{core::int} let final core::int? #t7 = this.{self::Class::_#Class#field4}{core::int?} in #t7{core::int} : throw new _in::LateError::fieldNI("field4");
+  set field4(core::int #t8) → void
+    if(this.{self::Class::_#Class#field4#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("field4");
+    else {
+      this.{self::Class::_#Class#field4#isSet} = true;
+      this.{self::Class::_#Class#field4} = #t8;
+    }
+}
+class SubClass extends self::Class {
+  field core::int? _#SubClass#field1 = null;
+  field core::bool _#SubClass#field1#isSet = false;
+  field core::int? _#SubClass#field2 = null;
+  field core::bool _#SubClass#field2#isSet = false;
+  field core::int? _#SubClass#field3 = null;
+  field core::bool _#SubClass#field3#isSet = false;
+  field core::int? _#SubClass#field4 = null;
+  field core::bool _#SubClass#field4#isSet = false;
+  synthetic constructor •() → self::SubClass
+    : super self::Class::•()
+    ;
+  get field1() → core::int
+    return this.{self::SubClass::_#SubClass#field1#isSet}{core::bool} ?{core::int} let final core::int? #t9 = this.{self::SubClass::_#SubClass#field1}{core::int?} in #t9{core::int} : throw new _in::LateError::fieldNI("field1");
+  set field1(core::int #t10) → void {
+    this.{self::SubClass::_#SubClass#field1#isSet} = true;
+    this.{self::SubClass::_#SubClass#field1} = #t10;
+  }
+  get field2() → core::int {
+    if(!this.{self::SubClass::_#SubClass#field2#isSet}{core::bool}) {
+      this.{self::SubClass::_#SubClass#field2} = 0;
+      this.{self::SubClass::_#SubClass#field2#isSet} = true;
+    }
+    return let final core::int? #t11 = this.{self::SubClass::_#SubClass#field2}{core::int?} in #t11{core::int};
+  }
+  set field2(core::int #t12) → void {
+    this.{self::SubClass::_#SubClass#field2#isSet} = true;
+    this.{self::SubClass::_#SubClass#field2} = #t12;
+  }
+  get field3() → core::int
+    return this.{self::SubClass::_#SubClass#field3#isSet}{core::bool} ?{core::int} let final core::int? #t13 = this.{self::SubClass::_#SubClass#field3}{core::int?} in #t13{core::int} : throw new _in::LateError::fieldNI("field3");
+  set field3(core::int #t14) → void
+    if(this.{self::SubClass::_#SubClass#field3#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("field3");
+    else {
+      this.{self::SubClass::_#SubClass#field3#isSet} = true;
+      this.{self::SubClass::_#SubClass#field3} = #t14;
+    }
+  get field4() → core::int {
+    if(!this.{self::SubClass::_#SubClass#field4#isSet}{core::bool}) {
+      final core::int #t15 = 0;
+      if(this.{self::SubClass::_#SubClass#field4#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("field4");
+      this.{self::SubClass::_#SubClass#field4} = #t15;
+      this.{self::SubClass::_#SubClass#field4#isSet} = true;
+    }
+    return let final core::int? #t16 = this.{self::SubClass::_#SubClass#field4}{core::int?} in #t16{core::int};
+  }
+  get directField1() → core::int
+    return super.{self::Class::field1};
+  set directField1(core::int value) → void {
+    super.{self::Class::field1} = value;
+  }
+  get directField2() → core::int
+    return super.{self::Class::field2};
+  set directField2(core::int value) → void {
+    super.{self::Class::field2} = value;
+  }
+  get directField3() → core::int
+    return super.{self::Class::field3};
+  get directField4() → core::int
+    return super.{self::Class::field4};
+}
+static method main() → dynamic {
+  self::SubClass sc = new self::SubClass::•();
+  self::Class c = sc;
+  self::throws(() → core::int => c.{self::Class::field1}{core::int}, "Read value from uninitialized SubClass.field1");
+  self::throws(() → core::int => sc.{self::SubClass::directField1}{core::int}, "Read value from uninitialized Class.field1");
+  self::expect(42, c.{self::Class::field1} = 42);
+  self::expect(42, c.{self::Class::field1}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField1}{core::int}, "Read value from uninitialized Class.field1");
+  self::expect(87, sc.{self::SubClass::directField1} = 87);
+  self::expect(87, sc.{self::SubClass::directField1}{core::int});
+  self::expect(0, c.{self::Class::field2}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField2}{core::int}, "Read value from uninitialized Class.field2");
+  self::expect(42, c.{self::Class::field2} = 42);
+  self::expect(42, c.{self::Class::field2}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField2}{core::int}, "Read value from uninitialized Class.field2");
+  self::expect(87, sc.{self::SubClass::directField2} = 87);
+  self::expect(87, sc.{self::SubClass::directField2}{core::int});
+  self::throws(() → core::int => c.{self::Class::field3}{core::int}, "Read value from uninitialized SubClass.field3");
+  self::throws(() → core::int => sc.{self::SubClass::directField3}{core::int}, "Read value from uninitialized Class.field3");
+  self::expect(42, c.{self::Class::field3} = 42);
+  self::expect(42, c.{self::Class::field3}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField3}{core::int}, "Read value from uninitialized Class.field3");
+  self::throws(() → core::int => c.{self::Class::field3} = 87, "Write value to initialized SubClass.field3");
+  self::expect(0, c.{self::Class::field4}{core::int});
+  self::throws(() → core::int => sc.{self::SubClass::directField4}{core::int}, "Read value from uninitialized Class.field4");
+  self::expect(42, c.{self::Class::field4} = 42);
+  self::expect(0, c.{self::Class::field4}{core::int});
+  self::expect(42, sc.{self::SubClass::directField4}{core::int});
+  self::throws(() → core::int => c.{self::Class::field4} = 87, "Write value to initialized SubClass.field4");
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}.";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..e46b981
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/override_getter_setter.dart.weak.modular.expect
@@ -0,0 +1,101 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class A extends core::Object {
+  field core::int? _#A#x = null;
+  field core::bool _#A#x#isSet = false;
+  field core::int? _#A#y = null;
+  field core::bool _#A#y#isSet = false;
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  get x() → core::int
+    return this.{self::A::_#A#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+  set x(core::int #t2) → void
+    if(this.{self::A::_#A#x#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("x");
+    else {
+      this.{self::A::_#A#x#isSet} = true;
+      this.{self::A::_#A#x} = #t2;
+    }
+  get y() → core::int?
+    return this.{self::A::_#A#y#isSet}{core::bool} ?{core::int?} this.{self::A::_#A#y}{core::int?} : throw new _in::LateError::fieldNI("y");
+  set y(core::int? #t3) → void
+    if(this.{self::A::_#A#y#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("y");
+    else {
+      this.{self::A::_#A#y#isSet} = true;
+      this.{self::A::_#A#y} = #t3;
+    }
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  get x() → core::int
+    return 1;
+  get y() → core::int?
+    return 1;
+}
+class C extends self::A {
+  field core::int? _#C#x = null;
+  field core::bool _#C#x#isSet = false;
+  field core::int? _#C#y = null;
+  field core::bool _#C#y#isSet = false;
+  synthetic constructor •() → self::C
+    : super self::A::•()
+    ;
+  get x() → core::int {
+    if(!this.{self::C::_#C#x#isSet}{core::bool}) {
+      final core::int #t4 = 2;
+      if(this.{self::C::_#C#x#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("x");
+      this.{self::C::_#C#x} = #t4;
+      this.{self::C::_#C#x#isSet} = true;
+    }
+    return let final core::int? #t5 = this.{self::C::_#C#x}{core::int?} in #t5{core::int};
+  }
+  get y() → core::int? {
+    if(!this.{self::C::_#C#y#isSet}{core::bool}) {
+      final core::int? #t6 = 2;
+      if(this.{self::C::_#C#y#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("y");
+      this.{self::C::_#C#y} = #t6;
+      this.{self::C::_#C#y#isSet} = true;
+    }
+    return this.{self::C::_#C#y}{core::int?};
+  }
+}
+static method main() → dynamic {
+  self::B b = new self::B::•();
+  b.{self::A::x} = 3;
+  self::C c = new self::C::•();
+  self::throws(() → core::int => b.{self::A::x} = 14, "Write to B.x");
+  c.{self::A::x} = 3;
+  self::throws(() → core::int => c.{self::A::x} = 14, "Write to C.x");
+  self::expect(1, b.{self::B::x}{core::int});
+  self::expect(2, c.{self::C::x}{core::int});
+  b.{self::A::y} = 3;
+  self::throws(() → core::int => b.{self::A::y} = 14, "Write to B.y");
+  c.{self::A::y} = 3;
+  self::throws(() → core::int => c.{self::A::y} = 14, "Write to C.y");
+  self::expect(1, b.{self::B::y}{core::int?});
+  self::expect(2, c.{self::C::y}{core::int?});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/private_members.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/private_members.dart.weak.modular.expect
new file mode 100644
index 0000000..10fbd90
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/private_members.dart.weak.modular.expect
@@ -0,0 +1,143 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+part private_members_part.dart;
+class _Class extends core::Object { // from org-dartlang-testcase:///private_members_part.dart
+  field core::int? _#_Class#_privateField1 = null;
+  field core::bool _#_Class#_privateField1#isSet = false;
+  field core::int? _#_Class#_privateField2 = null;
+  field core::bool _#_Class#_privateField2#isSet = false;
+  field core::int? _#_Class#_privateFinalField1 = null;
+  field core::bool _#_Class#_privateFinalField1#isSet = false;
+  field core::int? _#_Class#_privateFinalField2 = null;
+  field core::bool _#_Class#_privateFinalField2#isSet = false;
+  synthetic constructor •() → self::_Class
+    : super core::Object::•()
+    ;
+  get _privateField1() → core::int {
+    if(!this.{self::_Class::_#_Class#_privateField1#isSet}{core::bool}) {
+      this.{self::_Class::_#_Class#_privateField1} = 1;
+      this.{self::_Class::_#_Class#_privateField1#isSet} = true;
+    }
+    return let final core::int? #t1 = this.{self::_Class::_#_Class#_privateField1}{core::int?} in #t1{core::int};
+  }
+  set _privateField1(core::int #t2) → void {
+    this.{self::_Class::_#_Class#_privateField1#isSet} = true;
+    this.{self::_Class::_#_Class#_privateField1} = #t2;
+  }
+  get _privateField2() → core::int? {
+    if(!this.{self::_Class::_#_Class#_privateField2#isSet}{core::bool}) {
+      this.{self::_Class::_#_Class#_privateField2} = 1;
+      this.{self::_Class::_#_Class#_privateField2#isSet} = true;
+    }
+    return this.{self::_Class::_#_Class#_privateField2}{core::int?};
+  }
+  set _privateField2(core::int? #t3) → void {
+    this.{self::_Class::_#_Class#_privateField2#isSet} = true;
+    this.{self::_Class::_#_Class#_privateField2} = #t3;
+  }
+  get _privateFinalField1() → core::int {
+    if(!this.{self::_Class::_#_Class#_privateFinalField1#isSet}{core::bool}) {
+      this.{self::_Class::_#_Class#_privateFinalField1} = 1;
+      this.{self::_Class::_#_Class#_privateFinalField1#isSet} = true;
+    }
+    return let final core::int? #t4 = this.{self::_Class::_#_Class#_privateFinalField1}{core::int?} in #t4{core::int};
+  }
+  set _privateFinalField1(core::int #t5) → void {
+    this.{self::_Class::_#_Class#_privateFinalField1#isSet} = true;
+    this.{self::_Class::_#_Class#_privateFinalField1} = #t5;
+  }
+  get _privateFinalField2() → core::int? {
+    if(!this.{self::_Class::_#_Class#_privateFinalField2#isSet}{core::bool}) {
+      this.{self::_Class::_#_Class#_privateFinalField2} = 1;
+      this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
+    }
+    return this.{self::_Class::_#_Class#_privateFinalField2}{core::int?};
+  }
+  set _privateFinalField2(core::int? #t6) → void {
+    this.{self::_Class::_#_Class#_privateFinalField2#isSet} = true;
+    this.{self::_Class::_#_Class#_privateFinalField2} = #t6;
+  }
+}
+extension _Extension on core::int { // from org-dartlang-testcase:///private_members_part.dart
+  static field _privateField1 = self::_#_Extension|_privateField1;
+  static field _privateField1 = self::_#_Extension|_privateField1#isSet;
+  static get _privateField1 = get self::_Extension|_privateField1;
+  static set _privateField1 = set self::_Extension|_privateField1;
+  static field _privateField2 = self::_#_Extension|_privateField2;
+  static field _privateField2 = self::_#_Extension|_privateField2#isSet;
+  static get _privateField2 = get self::_Extension|_privateField2;
+  static set _privateField2 = set self::_Extension|_privateField2;
+  static field _privateFinalField1 = self::_#_Extension|_privateFinalField1;
+  static field _privateFinalField1 = self::_#_Extension|_privateFinalField1#isSet;
+  static get _privateFinalField1 = get self::_Extension|_privateFinalField1;
+  static set _privateFinalField1 = set self::_Extension|_privateFinalField1;
+  static field _privateFinalField2 = self::_#_Extension|_privateFinalField2;
+  static field _privateFinalField2 = self::_#_Extension|_privateFinalField2#isSet;
+  static get _privateFinalField2 = get self::_Extension|_privateFinalField2;
+  static set _privateFinalField2 = set self::_Extension|_privateFinalField2;
+}
+static field core::int? _#_Extension|_privateField1 = null /* from org-dartlang-testcase:///private_members_part.dart */;
+static field core::bool _#_Extension|_privateField1#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
+static field core::int? _#_Extension|_privateField2 = null /* from org-dartlang-testcase:///private_members_part.dart */;
+static field core::bool _#_Extension|_privateField2#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
+static field core::int? _#_Extension|_privateFinalField1 = null /* from org-dartlang-testcase:///private_members_part.dart */;
+static field core::bool _#_Extension|_privateFinalField1#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
+static field core::int? _#_Extension|_privateFinalField2 = null /* from org-dartlang-testcase:///private_members_part.dart */;
+static field core::bool _#_Extension|_privateFinalField2#isSet = false /* from org-dartlang-testcase:///private_members_part.dart */;
+static method main() → dynamic {
+  self::_Class c = new self::_Class::•();
+  c.{self::_Class::_privateField1} = c.{self::_Class::_privateField1}{core::int};
+  c.{self::_Class::_privateField2} = c.{self::_Class::_privateField2}{core::int?};
+  c.{self::_Class::_privateFinalField1}{core::int};
+  c.{self::_Class::_privateFinalField2}{core::int?};
+  self::_Extension|_privateField1 = self::_Extension|_privateField1;
+  self::_Extension|_privateField2 = self::_Extension|_privateField2;
+  self::_Extension|_privateFinalField1;
+  self::_Extension|_privateFinalField2;
+}
+static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1() → core::int {
+  if(!self::_#_Extension|_privateField1#isSet) {
+    self::_#_Extension|_privateField1 = 1;
+    self::_#_Extension|_privateField1#isSet = true;
+  }
+  return let final core::int? #t7 = self::_#_Extension|_privateField1 in #t7{core::int};
+}
+static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField1(core::int #t8) → void {
+  self::_#_Extension|_privateField1#isSet = true;
+  self::_#_Extension|_privateField1 = #t8;
+}
+static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField2() → core::int? {
+  if(!self::_#_Extension|_privateField2#isSet) {
+    self::_#_Extension|_privateField2 = 1;
+    self::_#_Extension|_privateField2#isSet = true;
+  }
+  return self::_#_Extension|_privateField2;
+}
+static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateField2(core::int? #t9) → void {
+  self::_#_Extension|_privateField2#isSet = true;
+  self::_#_Extension|_privateField2 = #t9;
+}
+static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1() → core::int {
+  if(!self::_#_Extension|_privateFinalField1#isSet) {
+    self::_#_Extension|_privateFinalField1 = 1;
+    self::_#_Extension|_privateFinalField1#isSet = true;
+  }
+  return let final core::int? #t10 = self::_#_Extension|_privateFinalField1 in #t10{core::int};
+}
+static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField1(core::int #t11) → void {
+  self::_#_Extension|_privateFinalField1#isSet = true;
+  self::_#_Extension|_privateFinalField1 = #t11;
+}
+static get /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField2() → core::int? {
+  if(!self::_#_Extension|_privateFinalField2#isSet) {
+    self::_#_Extension|_privateFinalField2 = 1;
+    self::_#_Extension|_privateFinalField2#isSet = true;
+  }
+  return self::_#_Extension|_privateFinalField2;
+}
+static set /* from org-dartlang-testcase:///private_members_part.dart */ _Extension|_privateFinalField2(core::int? #t12) → void {
+  self::_#_Extension|_privateFinalField2#isSet = true;
+  self::_#_Extension|_privateFinalField2 = #t12;
+}
diff --git a/pkg/front_end/testcases/late_lowering/return_late.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/return_late.dart.weak.modular.expect
new file mode 100644
index 0000000..3733586
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/return_late.dart.weak.modular.expect
@@ -0,0 +1,70 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class<E extends core::Object? = dynamic> extends core::Object {
+  final field self::Class::E% field;
+  constructor •(self::Class::E% field) → self::Class<self::Class::E%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  method returnTypeVariable() → self::Class::E% {
+    lowered self::Class::E? #result;
+    lowered core::bool #result#isSet = false;
+    function #result#get() → self::Class::E% {
+      if(!#result#isSet) {
+        #result = this.{self::Class::field}{self::Class::E%};
+        #result#isSet = true;
+      }
+      return #result{self::Class::E%};
+    }
+    function #result#set(self::Class::E% #t1) → dynamic {
+      #result#isSet = true;
+      return #result = #t1;
+    }
+    return #result#get(){() → self::Class::E%};
+  }
+}
+static method returnNonNullable(core::int value) → core::int {
+  lowered core::int? #result;
+  lowered core::bool #result#isSet = false;
+  function #result#get() → core::int {
+    if(!#result#isSet) {
+      #result = value;
+      #result#isSet = true;
+    }
+    return #result{core::int};
+  }
+  function #result#set(core::int #t2) → dynamic {
+    #result#isSet = true;
+    return #result = #t2;
+  }
+  return #result#get(){() → core::int};
+}
+static method returnNullable(core::int? value) → core::int? {
+  lowered core::int? #result;
+  lowered core::bool #result#isSet = false;
+  function #result#get() → core::int? {
+    if(!#result#isSet) {
+      #result = value;
+      #result#isSet = true;
+    }
+    return #result;
+  }
+  function #result#set(core::int? #t3) → dynamic {
+    #result#isSet = true;
+    return #result = #t3;
+  }
+  return #result#get(){() → core::int?};
+}
+static method main() → dynamic {
+  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}(){() → core::int});
+  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}(){() → core::int?});
+  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}(){() → core::int?});
+  self::expect(42, self::returnNonNullable(42));
+  self::expect(87, self::returnNullable(87));
+  self::expect(null, self::returnNullable(null));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.modular.expect
new file mode 100644
index 0000000..bfdde61
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/skip_late_final_uninitialized_instance_fields/main.dart.weak.modular.expect
@@ -0,0 +1,226 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class extends core::Object {
+  static field core::int? _#uninitializedNonFinalStaticField = null;
+  static field core::bool _#uninitializedNonFinalStaticField#isSet = false;
+  static field core::int? _#uninitializedFinalStaticField = null;
+  static field core::bool _#uninitializedFinalStaticField#isSet = false;
+  static field core::int? _#initializedNonFinalStaticField = null;
+  static field core::bool _#initializedNonFinalStaticField#isSet = false;
+  static field core::int? _#initializedFinalStaticField = null;
+  static field core::bool _#initializedFinalStaticField#isSet = false;
+  late field core::int uninitializedNonFinalInstanceField;
+  field core::int? _#Class#uninitializedFinalInstanceField = null;
+  field core::bool _#Class#uninitializedFinalInstanceField#isSet = false;
+  field core::int? _#Class#initializedNonFinalInstanceField = null;
+  field core::bool _#Class#initializedNonFinalInstanceField#isSet = false;
+  field core::int? _#Class#initializedFinalInstanceField = null;
+  field core::bool _#Class#initializedFinalInstanceField#isSet = false;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  static get uninitializedNonFinalStaticField() → core::int
+    return self::Class::_#uninitializedNonFinalStaticField#isSet ?{core::int} let final core::int? #t1 = self::Class::_#uninitializedNonFinalStaticField in #t1{core::int} : throw new _in::LateError::fieldNI("uninitializedNonFinalStaticField");
+  static set uninitializedNonFinalStaticField(core::int #t2) → void {
+    self::Class::_#uninitializedNonFinalStaticField#isSet = true;
+    self::Class::_#uninitializedNonFinalStaticField = #t2;
+  }
+  static get uninitializedFinalStaticField() → core::int
+    return self::Class::_#uninitializedFinalStaticField#isSet ?{core::int} let final core::int? #t3 = self::Class::_#uninitializedFinalStaticField in #t3{core::int} : throw new _in::LateError::fieldNI("uninitializedFinalStaticField");
+  static set uninitializedFinalStaticField(core::int #t4) → void
+    if(self::Class::_#uninitializedFinalStaticField#isSet)
+      throw new _in::LateError::fieldAI("uninitializedFinalStaticField");
+    else {
+      self::Class::_#uninitializedFinalStaticField#isSet = true;
+      self::Class::_#uninitializedFinalStaticField = #t4;
+    }
+  static get initializedNonFinalStaticField() → core::int {
+    if(!self::Class::_#initializedNonFinalStaticField#isSet) {
+      self::Class::_#initializedNonFinalStaticField = 0;
+      self::Class::_#initializedNonFinalStaticField#isSet = true;
+    }
+    return let final core::int? #t5 = self::Class::_#initializedNonFinalStaticField in #t5{core::int};
+  }
+  static set initializedNonFinalStaticField(core::int #t6) → void {
+    self::Class::_#initializedNonFinalStaticField#isSet = true;
+    self::Class::_#initializedNonFinalStaticField = #t6;
+  }
+  static get initializedFinalStaticField() → core::int {
+    if(!self::Class::_#initializedFinalStaticField#isSet) {
+      final core::int #t7 = 0;
+      if(self::Class::_#initializedFinalStaticField#isSet)
+        throw new _in::LateError::fieldADI("initializedFinalStaticField");
+      self::Class::_#initializedFinalStaticField = #t7;
+      self::Class::_#initializedFinalStaticField#isSet = true;
+    }
+    return let final core::int? #t8 = self::Class::_#initializedFinalStaticField in #t8{core::int};
+  }
+  get uninitializedFinalInstanceField() → core::int
+    return this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet}{core::bool} ?{core::int} let final core::int? #t9 = this.{self::Class::_#Class#uninitializedFinalInstanceField}{core::int?} in #t9{core::int} : throw new _in::LateError::fieldNI("uninitializedFinalInstanceField");
+  set uninitializedFinalInstanceField(core::int #t10) → void
+    if(this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet}{core::bool})
+      throw new _in::LateError::fieldAI("uninitializedFinalInstanceField");
+    else {
+      this.{self::Class::_#Class#uninitializedFinalInstanceField#isSet} = true;
+      this.{self::Class::_#Class#uninitializedFinalInstanceField} = #t10;
+    }
+  get initializedNonFinalInstanceField() → core::int {
+    if(!this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet}{core::bool}) {
+      this.{self::Class::_#Class#initializedNonFinalInstanceField} = 0;
+      this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet} = true;
+    }
+    return let final core::int? #t11 = this.{self::Class::_#Class#initializedNonFinalInstanceField}{core::int?} in #t11{core::int};
+  }
+  set initializedNonFinalInstanceField(core::int #t12) → void {
+    this.{self::Class::_#Class#initializedNonFinalInstanceField#isSet} = true;
+    this.{self::Class::_#Class#initializedNonFinalInstanceField} = #t12;
+  }
+  get initializedFinalInstanceField() → core::int {
+    if(!this.{self::Class::_#Class#initializedFinalInstanceField#isSet}{core::bool}) {
+      final core::int #t13 = 0;
+      if(this.{self::Class::_#Class#initializedFinalInstanceField#isSet}{core::bool})
+        throw new _in::LateError::fieldADI("initializedFinalInstanceField");
+      this.{self::Class::_#Class#initializedFinalInstanceField} = #t13;
+      this.{self::Class::_#Class#initializedFinalInstanceField#isSet} = true;
+    }
+    return let final core::int? #t14 = this.{self::Class::_#Class#initializedFinalInstanceField}{core::int?} in #t14{core::int};
+  }
+}
+static field core::int? _#uninitializedNonFinalTopLevelField = null;
+static field core::bool _#uninitializedNonFinalTopLevelField#isSet = false;
+static field core::int? _#uninitializedFinalTopLevelField = null;
+static field core::bool _#uninitializedFinalTopLevelField#isSet = false;
+static field core::int? _#initializedNonFinalTopLevelField = null;
+static field core::bool _#initializedNonFinalTopLevelField#isSet = false;
+static field core::int? _#initializedFinalTopLevelField = null;
+static field core::bool _#initializedFinalTopLevelField#isSet = false;
+static method main() → dynamic {}
+static method method() → dynamic {
+  lowered core::int? #nullableUninitializedNonFinalLocal;
+  lowered core::bool #nullableUninitializedNonFinalLocal#isSet = false;
+  function #nullableUninitializedNonFinalLocal#get() → core::int?
+    return #nullableUninitializedNonFinalLocal#isSet ?{core::int?} #nullableUninitializedNonFinalLocal : throw new _in::LateError::localNI("nullableUninitializedNonFinalLocal");
+  function #nullableUninitializedNonFinalLocal#set(core::int? #t15) → dynamic {
+    #nullableUninitializedNonFinalLocal#isSet = true;
+    return #nullableUninitializedNonFinalLocal = #t15;
+  }
+  lowered core::int? #nonNullableUninitializedNonFinalLocal;
+  lowered core::bool #nonNullableUninitializedNonFinalLocal#isSet = false;
+  function #nonNullableUninitializedNonFinalLocal#get() → core::int
+    return #nonNullableUninitializedNonFinalLocal#isSet ?{core::int} #nonNullableUninitializedNonFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedNonFinalLocal");
+  function #nonNullableUninitializedNonFinalLocal#set(core::int #t16) → dynamic {
+    #nonNullableUninitializedNonFinalLocal#isSet = true;
+    return #nonNullableUninitializedNonFinalLocal = #t16;
+  }
+  lowered final core::int? #nullableUninitializedFinalLocal;
+  lowered core::bool #nullableUninitializedFinalLocal#isSet = false;
+  function #nullableUninitializedFinalLocal#get() → core::int?
+    return #nullableUninitializedFinalLocal#isSet ?{core::int?} #nullableUninitializedFinalLocal : throw new _in::LateError::localNI("nullableUninitializedFinalLocal");
+  function #nullableUninitializedFinalLocal#set(core::int? #t17) → dynamic
+    if(#nullableUninitializedFinalLocal#isSet)
+      throw new _in::LateError::localAI("nullableUninitializedFinalLocal");
+    else {
+      #nullableUninitializedFinalLocal#isSet = true;
+      return #nullableUninitializedFinalLocal = #t17;
+    }
+  lowered final core::int? #nonNullableUninitializedFinalLocal;
+  lowered core::bool #nonNullableUninitializedFinalLocal#isSet = false;
+  function #nonNullableUninitializedFinalLocal#get() → core::int
+    return #nonNullableUninitializedFinalLocal#isSet ?{core::int} #nonNullableUninitializedFinalLocal{core::int} : throw new _in::LateError::localNI("nonNullableUninitializedFinalLocal");
+  function #nonNullableUninitializedFinalLocal#set(core::int #t18) → dynamic
+    if(#nonNullableUninitializedFinalLocal#isSet)
+      throw new _in::LateError::localAI("nonNullableUninitializedFinalLocal");
+    else {
+      #nonNullableUninitializedFinalLocal#isSet = true;
+      return #nonNullableUninitializedFinalLocal = #t18;
+    }
+  lowered core::int? #nullableInitializedNonFinalLocal;
+  lowered core::bool #nullableInitializedNonFinalLocal#isSet = false;
+  function #nullableInitializedNonFinalLocal#get() → core::int? {
+    if(!#nullableInitializedNonFinalLocal#isSet) {
+      #nullableInitializedNonFinalLocal = 0;
+      #nullableInitializedNonFinalLocal#isSet = true;
+    }
+    return #nullableInitializedNonFinalLocal;
+  }
+  function #nullableInitializedNonFinalLocal#set(core::int? #t19) → dynamic {
+    #nullableInitializedNonFinalLocal#isSet = true;
+    return #nullableInitializedNonFinalLocal = #t19;
+  }
+  lowered core::int? #nonNullableInitializedNonFinalLocal;
+  lowered core::bool #nonNullableInitializedNonFinalLocal#isSet = false;
+  function #nonNullableInitializedNonFinalLocal#get() → core::int {
+    if(!#nonNullableInitializedNonFinalLocal#isSet) {
+      #nonNullableInitializedNonFinalLocal = 0;
+      #nonNullableInitializedNonFinalLocal#isSet = true;
+    }
+    return #nonNullableInitializedNonFinalLocal{core::int};
+  }
+  function #nonNullableInitializedNonFinalLocal#set(core::int #t20) → dynamic {
+    #nonNullableInitializedNonFinalLocal#isSet = true;
+    return #nonNullableInitializedNonFinalLocal = #t20;
+  }
+  lowered final core::int? #nullableInitializedFinalLocal;
+  lowered core::bool #nullableInitializedFinalLocal#isSet = false;
+  function #nullableInitializedFinalLocal#get() → core::int? {
+    if(!#nullableInitializedFinalLocal#isSet) {
+      final core::int? #t21 = 0;
+      if(#nullableInitializedFinalLocal#isSet)
+        throw new _in::LateError::localADI("nullableInitializedFinalLocal");
+      #nullableInitializedFinalLocal = #t21;
+      #nullableInitializedFinalLocal#isSet = true;
+    }
+    return #nullableInitializedFinalLocal;
+  }
+  lowered final core::int? #nonNullableInitializedFinalLocal;
+  lowered core::bool #nonNullableInitializedFinalLocal#isSet = false;
+  function #nonNullableInitializedFinalLocal#get() → core::int {
+    if(!#nonNullableInitializedFinalLocal#isSet) {
+      final core::int #t22 = 0;
+      if(#nonNullableInitializedFinalLocal#isSet)
+        throw new _in::LateError::localADI("nonNullableInitializedFinalLocal");
+      #nonNullableInitializedFinalLocal = #t22;
+      #nonNullableInitializedFinalLocal#isSet = true;
+    }
+    return #nonNullableInitializedFinalLocal{core::int};
+  }
+}
+static get uninitializedNonFinalTopLevelField() → core::int
+  return self::_#uninitializedNonFinalTopLevelField#isSet ?{core::int} let final core::int? #t23 = self::_#uninitializedNonFinalTopLevelField in #t23{core::int} : throw new _in::LateError::fieldNI("uninitializedNonFinalTopLevelField");
+static set uninitializedNonFinalTopLevelField(core::int #t24) → void {
+  self::_#uninitializedNonFinalTopLevelField#isSet = true;
+  self::_#uninitializedNonFinalTopLevelField = #t24;
+}
+static get uninitializedFinalTopLevelField() → core::int
+  return self::_#uninitializedFinalTopLevelField#isSet ?{core::int} let final core::int? #t25 = self::_#uninitializedFinalTopLevelField in #t25{core::int} : throw new _in::LateError::fieldNI("uninitializedFinalTopLevelField");
+static set uninitializedFinalTopLevelField(core::int #t26) → void
+  if(self::_#uninitializedFinalTopLevelField#isSet)
+    throw new _in::LateError::fieldAI("uninitializedFinalTopLevelField");
+  else {
+    self::_#uninitializedFinalTopLevelField#isSet = true;
+    self::_#uninitializedFinalTopLevelField = #t26;
+  }
+static get initializedNonFinalTopLevelField() → core::int {
+  if(!self::_#initializedNonFinalTopLevelField#isSet) {
+    self::_#initializedNonFinalTopLevelField = 0;
+    self::_#initializedNonFinalTopLevelField#isSet = true;
+  }
+  return let final core::int? #t27 = self::_#initializedNonFinalTopLevelField in #t27{core::int};
+}
+static set initializedNonFinalTopLevelField(core::int #t28) → void {
+  self::_#initializedNonFinalTopLevelField#isSet = true;
+  self::_#initializedNonFinalTopLevelField = #t28;
+}
+static get initializedFinalTopLevelField() → core::int {
+  if(!self::_#initializedFinalTopLevelField#isSet) {
+    final core::int #t29 = 0;
+    if(self::_#initializedFinalTopLevelField#isSet)
+      throw new _in::LateError::fieldADI("initializedFinalTopLevelField");
+    self::_#initializedFinalTopLevelField = #t29;
+    self::_#initializedFinalTopLevelField#isSet = true;
+  }
+  return let final core::int? #t30 = self::_#initializedFinalTopLevelField in #t30{core::int};
+}
diff --git a/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.weak.modular.expect
new file mode 100644
index 0000000..13fee7d
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/uninitialized_non_nullable_late_fields.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class A extends core::Object {
+  field core::int? _#A#x = null;
+  field core::bool _#A#x#isSet = false;
+  constructor foo(core::int x) → self::A
+    : self::A::_#A#x#isSet = true, self::A::_#A#x = x, super core::Object::•()
+    ;
+  constructor bar() → self::A
+    : super core::Object::•()
+    ;
+  get x() → core::int
+    return this.{self::A::_#A#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::A::_#A#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
+  set x(core::int #t2) → void {
+    this.{self::A::_#A#x#isSet} = true;
+    this.{self::A::_#A#x} = #t2;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.weak.modular.expect
new file mode 100644
index 0000000..c037d72
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_fields.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static field core::int? _#nullableTopLevelField = _in::createSentinel<core::int?>();
+static field core::int? _#nonNullableTopLevelField = _in::createSentinel<core::int>();
+static field core::int? _#nullableTopLevelFieldWithInitializer = _in::createSentinel<core::int?>();
+static field core::int? _#nonNullableTopLevelFieldWithInitializer = _in::createSentinel<core::int>();
+static field core::int? _#nullableFinalTopLevelField = _in::createSentinel<core::int?>();
+static field core::int? _#nonNullableFinalTopLevelField = _in::createSentinel<core::int>();
+static field core::int? _#nullableFinalTopLevelFieldWithInitializer = _in::createSentinel<core::int?>();
+static field core::int? _#nonNullableFinalTopLevelFieldWithInitializer = _in::createSentinel<core::int>();
+static field Never? _#neverTopLevelField = _in::createSentinel<Never>();
+static get nullableTopLevelField() → core::int?
+  return let final core::int? #t1 = self::_#nullableTopLevelField in _in::isSentinel(#t1) ?{core::int?} throw new _in::LateError::fieldNI("nullableTopLevelField") : #t1{core::int?};
+static set nullableTopLevelField(core::int? #t2) → void
+  self::_#nullableTopLevelField = #t2;
+static get nonNullableTopLevelField() → core::int
+  return let final core::int? #t3 = self::_#nonNullableTopLevelField in _in::isSentinel(#t3) ?{core::int} throw new _in::LateError::fieldNI("nonNullableTopLevelField") : #t3{core::int};
+static set nonNullableTopLevelField(core::int #t4) → void
+  self::_#nonNullableTopLevelField = #t4;
+static get nullableTopLevelFieldWithInitializer() → core::int?
+  return let final core::int? #t5 = self::_#nullableTopLevelFieldWithInitializer in _in::isSentinel(#t5) ?{core::int?} self::_#nullableTopLevelFieldWithInitializer = null : #t5{core::int?};
+static set nullableTopLevelFieldWithInitializer(core::int? #t6) → void
+  self::_#nullableTopLevelFieldWithInitializer = #t6;
+static get nonNullableTopLevelFieldWithInitializer() → core::int
+  return let final core::int? #t7 = self::_#nonNullableTopLevelFieldWithInitializer in _in::isSentinel(#t7) ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer = 0 : #t7{core::int};
+static set nonNullableTopLevelFieldWithInitializer(core::int #t8) → void
+  self::_#nonNullableTopLevelFieldWithInitializer = #t8;
+static get nullableFinalTopLevelField() → core::int?
+  return let final core::int? #t9 = self::_#nullableFinalTopLevelField in _in::isSentinel(#t9) ?{core::int?} throw new _in::LateError::fieldNI("nullableFinalTopLevelField") : #t9{core::int?};
+static set nullableFinalTopLevelField(core::int? #t10) → void
+  if(_in::isSentinel(self::_#nullableFinalTopLevelField))
+    self::_#nullableFinalTopLevelField = #t10;
+  else
+    throw new _in::LateError::fieldAI("nullableFinalTopLevelField");
+static get nonNullableFinalTopLevelField() → core::int
+  return let final core::int? #t11 = self::_#nonNullableFinalTopLevelField in _in::isSentinel(#t11) ?{core::int} throw new _in::LateError::fieldNI("nonNullableFinalTopLevelField") : #t11{core::int};
+static set nonNullableFinalTopLevelField(core::int #t12) → void
+  if(_in::isSentinel(self::_#nonNullableFinalTopLevelField))
+    self::_#nonNullableFinalTopLevelField = #t12;
+  else
+    throw new _in::LateError::fieldAI("nonNullableFinalTopLevelField");
+static get nullableFinalTopLevelFieldWithInitializer() → core::int?
+  return let final core::int? #t13 = self::_#nullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t13) ?{core::int?} let final core::int? #t14 = null in _in::isSentinel(self::_#nullableFinalTopLevelFieldWithInitializer) ?{core::int?} self::_#nullableFinalTopLevelFieldWithInitializer = #t14 : throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer") : #t13;
+static get nonNullableFinalTopLevelFieldWithInitializer() → core::int
+  return let final core::int #t15 = self::_#nonNullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t15) ?{core::int} let final core::int #t16 = 0 in _in::isSentinel(self::_#nonNullableFinalTopLevelFieldWithInitializer) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer = #t16 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer") : #t15;
+static get neverTopLevelField() → Never
+  return let final Never? #t17 = self::_#neverTopLevelField in _in::isSentinel(#t17) ?{Never} throw new _in::LateError::fieldNI("neverTopLevelField") : #t17{Never};
+static set neverTopLevelField(Never #t18) → void
+  self::_#neverTopLevelField = #t18;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.modular.expect b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.modular.expect
new file mode 100644
index 0000000..98019ae
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering_sentinel/late_locals.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method test() → dynamic {
+  lowered core::int? #nullableTopLevelLocal = _in::createSentinel<core::int?>();
+  function #nullableTopLevelLocal#get() → core::int?
+    return let final core::int? #t1 = #nullableTopLevelLocal in _in::isSentinel(#t1) ?{core::int?} throw new _in::LateError::localNI("nullableTopLevelLocal") : #t1{core::int?};
+  function #nullableTopLevelLocal#set(core::int? #t2) → dynamic
+    return #nullableTopLevelLocal = #t2;
+  lowered core::int? #nonNullableTopLevelLocal = _in::createSentinel<core::int>();
+  function #nonNullableTopLevelLocal#get() → core::int
+    return let final core::int? #t3 = #nonNullableTopLevelLocal in _in::isSentinel(#t3) ?{core::int} throw new _in::LateError::localNI("nonNullableTopLevelLocal") : #t3{core::int};
+  function #nonNullableTopLevelLocal#set(core::int #t4) → dynamic
+    return #nonNullableTopLevelLocal = #t4;
+  lowered core::int? #nullableTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
+  function #nullableTopLevelLocalWithInitializer#get() → core::int?
+    return let final core::int? #t5 = #nullableTopLevelLocalWithInitializer in _in::isSentinel(#t5) ?{core::int?} #nullableTopLevelLocalWithInitializer = null : #t5{core::int?};
+  function #nullableTopLevelLocalWithInitializer#set(core::int? #t6) → dynamic
+    return #nullableTopLevelLocalWithInitializer = #t6;
+  lowered core::int? #nonNullableTopLevelLocalWithInitializer = _in::createSentinel<core::int>();
+  function #nonNullableTopLevelLocalWithInitializer#get() → core::int
+    return let final core::int? #t7 = #nonNullableTopLevelLocalWithInitializer in _in::isSentinel(#t7) ?{core::int} #nonNullableTopLevelLocalWithInitializer = 0 : #t7{core::int};
+  function #nonNullableTopLevelLocalWithInitializer#set(core::int #t8) → dynamic
+    return #nonNullableTopLevelLocalWithInitializer = #t8;
+  lowered final core::int? #nullableFinalTopLevelLocal = _in::createSentinel<core::int?>();
+  function #nullableFinalTopLevelLocal#get() → core::int?
+    return let final core::int? #t9 = #nullableFinalTopLevelLocal in _in::isSentinel(#t9) ?{core::int?} throw new _in::LateError::localNI("nullableFinalTopLevelLocal") : #t9{core::int?};
+  function #nullableFinalTopLevelLocal#set(core::int? #t10) → dynamic
+    if(_in::isSentinel(#nullableFinalTopLevelLocal))
+      return #nullableFinalTopLevelLocal = #t10;
+    else
+      throw new _in::LateError::localAI("nullableFinalTopLevelLocal");
+  lowered final core::int? #nonNullableFinalTopLevelLocal = _in::createSentinel<core::int>();
+  function #nonNullableFinalTopLevelLocal#get() → core::int
+    return let final core::int? #t11 = #nonNullableFinalTopLevelLocal in _in::isSentinel(#t11) ?{core::int} throw new _in::LateError::localNI("nonNullableFinalTopLevelLocal") : #t11{core::int};
+  function #nonNullableFinalTopLevelLocal#set(core::int #t12) → dynamic
+    if(_in::isSentinel(#nonNullableFinalTopLevelLocal))
+      return #nonNullableFinalTopLevelLocal = #t12;
+    else
+      throw new _in::LateError::localAI("nonNullableFinalTopLevelLocal");
+  lowered final core::int? #nullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int?>();
+  function #nullableFinalTopLevelLocalWithInitializer#get() → core::int?
+    return let final core::int? #t13 = #nullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t13) ?{core::int?} let final core::int? #t14 = null in _in::isSentinel(#nullableFinalTopLevelLocalWithInitializer) ?{core::int?} #nullableFinalTopLevelLocalWithInitializer = #t14 : throw new _in::LateError::localADI("nullableFinalTopLevelLocalWithInitializer") : #t13;
+  lowered final core::int? #nonNullableFinalTopLevelLocalWithInitializer = _in::createSentinel<core::int>();
+  function #nonNullableFinalTopLevelLocalWithInitializer#get() → core::int
+    return let final core::int #t15 = #nonNullableFinalTopLevelLocalWithInitializer in _in::isSentinel(#t15) ?{core::int} let final core::int #t16 = 0 in _in::isSentinel(#nonNullableFinalTopLevelLocalWithInitializer) ?{core::int} #nonNullableFinalTopLevelLocalWithInitializer = #t16 : throw new _in::LateError::localADI("nonNullableFinalTopLevelLocalWithInitializer") : #t15;
+  lowered Null #neverLocal = _in::createSentinel<Never>();
+  function #neverLocal#get() → Never
+    return let final Never? #t17 = #neverLocal in _in::isSentinel(#t17) ?{Never} throw new _in::LateError::localNI("neverLocal") : #t17{Never};
+  function #neverLocal#set(Never #t18) → dynamic
+    return #neverLocal = #t18;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/modular.status b/pkg/front_end/testcases/modular.status
new file mode 100644
index 0000000..3d6a84f
--- /dev/null
+++ b/pkg/front_end/testcases/modular.status
@@ -0,0 +1,89 @@
+# Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE.md file.
+
+# Status file for the modular_suite.dart test suite.
+
+constructor_tearoffs/call_instantiation: TypeCheckError
+constructor_tearoffs/lowering/invalid_redirect: VerificationError
+extension_types/access_setter_as_getter: ExpectationFileMismatchSerialized # Expected.
+extension_types/call_not_get: ExpectationFileMismatchSerialized # Expected.
+extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
+extension_types/issue45775: ExpectationFileMismatchSerialized # Expected.
+extension_types/show_and_run_ceil: ExpectationFileMismatchSerialized # Expected.
+extension_types/simple: ExpectationFileMismatchSerialized # Expected.
+extension_types/simple_getter_resolution: ExpectationFileMismatchSerialized # Expected.
+extension_types/simple_method_resolution: ExpectationFileMismatchSerialized # Expected.
+extension_types/simple_operator_resolution: ExpectationFileMismatchSerialized # Expected.
+extension_types/simple_setter_resolution: ExpectationFileMismatchSerialized # Expected.
+extension_types/simple_show_hide: ExpectationFileMismatchSerialized # Expected.
+extension_types/type_variable_in_static_context: ExpectationFileMismatchSerialized # Expected.
+extensions/extension_setter_error: TypeCheckError
+general/abstract_members: TypeCheckError
+general/bounded_implicit_instantiation: TypeCheckError
+general/bug30695: TypeCheckError
+general/covariant_field: TypeCheckError
+general/crashes/crash_02/main: Crash
+general/crashes/crash_06/main: Crash
+general/duplicated_declarations: TypeCheckError
+general/getter_vs_setter_type: TypeCheckError
+general/implement_semi_stub: TypeCheckError
+general/implicit_super_call: TypeCheckError
+general/infer_field_from_multiple: TypeCheckError
+general/invalid_operator: TypeCheckError
+general/invalid_operator_override: TypeCheckError
+general/issue41210a: TypeCheckError
+general/issue41210b/issue41210.no_link: TypeCheckError
+general/issue41210b/issue41210: TypeCheckError
+general/issue44733: TypeCheckError
+general/mixin_application_override: ExpectationFileMismatch # Too many errors.
+general/mixin_application_override: TypeCheckError
+general/override_check_accessor_after_inference: TypeCheckError # Issue #31620
+general/override_check_accessor_basic: TypeCheckError # Issue #31620
+general/override_check_accessor_with_covariant_modifier: TypeCheckError # Issue #31620
+general/override_check_after_inference: TypeCheckError # Issue #31620
+general/override_check_basic: TypeCheckError # Issue #31620
+general/override_check_with_covariant_modifier: TypeCheckError # Issue #31620
+general/override_setter_with_field: TypeCheckError
+general/redirecting_factory_invocation_in_invalid: TypeCheckError
+general/super_semi_stub: TypeCheckError
+general/unsound_promotion: TypeCheckError
+inference/constructors_infer_from_arguments_argument_not_assignable: TypeCheckError
+inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer: TypeCheckError
+inference/generic_methods_correctly_recognize_generic_upper_bound: TypeCheckError
+inference/generic_methods_do_not_infer_invalid_override_of_generic_method: TypeCheckError
+inference/generic_methods_handle_override_of_non_generic_with_generic: TypeCheckError
+inference/infer_method_missing_params: TypeCheckError
+inference/infer_types_on_generic_instantiations_infer: TypeCheckError
+inference/mixin_inference_outwards_3: TypeCheckError
+inference/mixin_inference_outwards_4: TypeCheckError
+inference/mixin_inference_unification_1: TypeCheckError
+inference/mixin_inference_unification_2: TypeCheckError
+inference_new/infer_assign_to_index_super_upwards: TypeCheckError
+inference_new/infer_assign_to_index_this_upwards: TypeCheckError
+inference_new/infer_assign_to_index_upwards: TypeCheckError
+late_lowering/covariant_late_field: TypeCheckError
+nnbd/covariant_late_field: TypeCheckError
+nnbd/getter_vs_setter_type: TypeCheckError
+nnbd/issue42603: TypeCheckError
+nnbd_mixed/bad_mixins: TypeCheckError
+nnbd_mixed/covariant_from_opt_in: TypeCheckError
+nnbd_mixed/hierarchy/conflict: TypeCheckError
+nnbd_mixed/hierarchy/duplicates: TypeCheckError
+nnbd_mixed/hierarchy/forwarding_semi_stub_field: TypeCheckError
+nnbd_mixed/hierarchy/forwarding_semi_stub_method: TypeCheckError
+nnbd_mixed/hierarchy/forwarding_semi_stub_setter: TypeCheckError
+nnbd_mixed/hierarchy/getter_setter: TypeCheckError
+nnbd_mixed/hierarchy/mix_in_override: TypeCheckError
+nnbd_mixed/hierarchy/override: TypeCheckError
+nnbd_mixed/inheritance_from_opt_in: TypeCheckError
+nnbd_mixed/issue41567: TypeCheckError
+nnbd_mixed/messages_with_types_opt_in: TypeCheckError
+nnbd_mixed/messages_with_types_opt_out: TypeCheckError
+rasta/mixin_library: TypeCheckError
+rasta/super: TypeCheckError
+rasta/super_mixin: TypeCheckError
+rasta/super_operator: TypeCheckError
+rasta/unresolved_recovery: TypeCheckError
+regress/issue_31180: TypeCheckError
+runtime_checks_new/mixin_forwarding_stub_getter: TypeCheckError
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.modular.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.modular.expect
new file mode 100644
index 0000000..2f58211
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.modular.expect
@@ -0,0 +1,78 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef B = self::A;
+class A extends core::Object {
+  constructor •(core::int x, core::int y, {required core::int z = #C1}) → self::A
+    : super core::Object::•()
+    ;
+  static factory foo(core::int x, core::int y, {required core::int z = #C1}) → self::A
+    return new self::A::•(x, y, z: z);
+  get property() → (core::int, core::int, {required z: core::int}) → void
+    return throw 42;
+  method bar(core::int x, core::int y, {required core::int z = #C1}) → void {}
+}
+class Test extends self::A {
+  constructor •() → self::Test
+    : super self::A::•(1, 2, z: 3)
+    ;
+  method test() → dynamic {
+    super.{self::A::bar}(1, 2, z: 3);
+    let final core::int #t1 = 1 in let final core::int #t2 = 2 in super.{self::A::bar}(#t1, 3, z: #t2);
+    let final core::int #t3 = 1 in super.{self::A::bar}(2, 3, z: #t3);
+  }
+}
+extension E on self::A {
+  method method1 = self::E|method1;
+  tearoff method1 = self::E|get#method1;
+  method method2 = self::E|method2;
+  tearoff method2 = self::E|get#method2;
+}
+static method foo(core::int x, core::int y, {required core::int z = #C1}) → dynamic {}
+static method E|method1(lowered final self::A #this) → dynamic {
+  let final self::A #t4 = #this in let final core::int #t5 = 1 in self::E|method2(#t4, 2, foo: #t5);
+}
+static method E|get#method1(lowered final self::A #this) → () → dynamic
+  return () → dynamic => self::E|method1(#this);
+static method E|method2(lowered final self::A #this, core::int bar, {core::int? foo = #C1}) → dynamic {}
+static method E|get#method2(lowered final self::A #this) → (core::int, {foo: core::int?}) → dynamic
+  return (core::int bar, {core::int? foo = #C1}) → dynamic => self::E|method2(#this, bar, foo: foo);
+static method test(dynamic d, core::Function f, self::A a) → dynamic {
+  function local(core::int x, core::int y, {required core::int z = #C1}) → void {}
+  self::foo(1, 2, z: 3);
+  let final core::int #t6 = 1 in let final core::int #t7 = 2 in self::foo(#t6, 3, z: #t7);
+  let final core::int #t8 = 1 in self::foo(2, 3, z: #t8);
+  self::A::foo(1, 2, z: 3);
+  let final core::int #t9 = 1 in let final core::int #t10 = 2 in self::A::foo(#t9, 3, z: #t10);
+  let final core::int #t11 = 1 in self::A::foo(2, 3, z: #t11);
+  self::A::foo(1, 2, z: 3);
+  let final core::int #t12 = 1 in let final core::int #t13 = 2 in self::A::foo(#t12, 3, z: #t13);
+  let final core::int #t14 = 1 in self::A::foo(2, 3, z: #t14);
+  new self::A::•(1, 2, z: 3);
+  let final core::int #t15 = 1 in let final core::int #t16 = 2 in new self::A::•(#t15, 3, z: #t16);
+  let final core::int #t17 = 1 in new self::A::•(2, 3, z: #t17);
+  new self::A::•(1, 2, z: 3);
+  let final core::int #t18 = 1 in let final core::int #t19 = 2 in new self::A::•(#t18, 3, z: #t19);
+  let final core::int #t20 = 1 in new self::A::•(2, 3, z: #t20);
+  d{dynamic}.call(1, 2, z: 3);
+  let final core::int #t21 = 1 in let final core::int #t22 = 2 in d{dynamic}.call(#t21, 3, z: #t22);
+  let final core::int #t23 = 1 in d{dynamic}.call(2, 3, z: #t23);
+  f(1, 2, z: 3);
+  let final core::int #t24 = 1 in let final core::int #t25 = 2 in f(#t24, 3, z: #t25);
+  let final core::int #t26 = 1 in f(2, 3, z: #t26);
+  let final self::A #t27 = a in let final core::int #t28 = 1 in let final core::int #t29 = 2 in let final core::int #t30 = 3 in #t27.{self::A::property}{(core::int, core::int, {required z: core::int}) → void}(#t28, #t29, z: #t30){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t31 = a in let final core::int #t32 = 1 in let final core::int #t33 = 2 in let final core::int #t34 = 3 in #t31.{self::A::property}{(core::int, core::int, {required z: core::int}) → void}(#t32, #t34, z: #t33){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t35 = a in let final core::int #t36 = 1 in let final core::int #t37 = 2 in let final core::int #t38 = 3 in #t35.{self::A::property}{(core::int, core::int, {required z: core::int}) → void}(#t37, #t38, z: #t36){(core::int, core::int, {required z: core::int}) → void};
+  a.{self::A::bar}(1, 2, z: 3){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t39 = a in let final core::int #t40 = 1 in let final core::int #t41 = 2 in #t39.{self::A::bar}(#t40, 3, z: #t41){(core::int, core::int, {required z: core::int}) → void};
+  let final self::A #t42 = a in let final core::int #t43 = 1 in #t42.{self::A::bar}(2, 3, z: #t43){(core::int, core::int, {required z: core::int}) → void};
+  local(1, 2, z: 3){(core::int, core::int, {required z: core::int}) → void};
+  let final core::int #t44 = 1 in let final core::int #t45 = 2 in local(#t44, 3, z: #t45){(core::int, core::int, {required z: core::int}) → void};
+  let final core::int #t46 = 1 in local(2, 3, z: #t46){(core::int, core::int, {required z: core::int}) → void};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.modular.expect b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.modular.expect
new file mode 100644
index 0000000..5b2dee8
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/redirecting_constructor_initializers.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •(core::int x, core::bool y, {required core::String z = #C2}) → self::A
+    : super core::Object::•()
+    ;
+  constructor foo() → self::A
+    : final core::int #t1 = 42, final core::String #t2 = "foo", this self::A::•(#t1, false, z: #t2)
+    ;
+  static factory bar(core::int x, core::bool y, {required core::String z = #C2}) → self::A
+    return new self::A::•(x, y, z: z);
+}
+class B extends self::A {
+  constructor •() → self::B
+    : final core::int #t3 = 42, final core::String #t4 = "foo", super self::A::•(#t3, false, z: #t4)
+    ;
+}
+static method test() → dynamic {
+  new self::A::•(42, false, z: "bar");
+  let final core::int #t5 = 42 in let final core::String #t6 = "bar" in new self::A::•(#t5, false, z: #t6);
+  let final core::String #t7 = "bar" in new self::A::•(42, false, z: #t7);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::bar
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/new_const_insertion/simple.dart.weak.modular.expect b/pkg/front_end/testcases/new_const_insertion/simple.dart.weak.modular.expect
new file mode 100644
index 0000000..47eae93
--- /dev/null
+++ b/pkg/front_end/testcases/new_const_insertion/simple.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  final field core::int* x;
+  const constructor •(core::int* x) → self::A*
+    : self::A::x = x, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::int* foo = 42;
+  new self::A::•(5);
+  new self::A::•(5.{core::num::+}(5){(core::num*) →* core::int*});
+  new self::A::•(foo);
+  new self::A::•(5.{core::num::+}(foo){(core::num*) →* core::int*});
+}
diff --git a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.modular.expect
new file mode 100644
index 0000000..ce1c9c6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.modular.expect
@@ -0,0 +1,248 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:5:1: Error: Can't have modifier 'abstract' here.
+// Try removing 'abstract'.
+// abstract int topLevelField;
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:7:1: Error: Can't have modifier 'abstract' here.
+// Try removing 'abstract'.
+// abstract final int finalTopLevelField = 0;
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:9:1: Error: Can't have modifier 'abstract' here.
+// Try removing 'abstract'.
+// abstract const int constField = 0;
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:20:3: Error: Static fields can't be declared 'abstract'.
+// Try removing the 'abstract' or 'static' keyword.
+//   abstract static int staticField;
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:22:3: Error: Static fields can't be declared 'abstract'.
+// Try removing the 'abstract' or 'static' keyword.
+//   abstract static final int finalStaticField;
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:24:3: Error: Abstract fields cannot be late.
+// Try removing the 'abstract' or 'late' keyword.
+//   abstract late int lateInstanceField;
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:26:12: Error: Fields can't be declared both 'abstract' and 'external'.
+// Try removing the 'abstract' or 'external' keyword.
+//   external abstract int externalInstanceField1;
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:28:12: Error: Fields can't be declared both 'abstract' and 'external'.
+// Try removing the 'abstract' or 'external' keyword.
+//   external abstract final int externalFinalInstanceField1;
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:30:12: Error: Fields can't be declared both 'abstract' and 'external'.
+// Try removing the 'abstract' or 'external' keyword.
+//   external abstract covariant num externalCovariantInstanceField1;
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:32:3: Error: Fields can't be declared both 'abstract' and 'external'.
+// Try removing the 'abstract' or 'external' keyword.
+//   abstract external int externalInstanceField2;
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:34:3: Error: Fields can't be declared both 'abstract' and 'external'.
+// Try removing the 'abstract' or 'external' keyword.
+//   abstract external final int externalFinalInstanceField2;
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:36:3: Error: Fields can't be declared both 'abstract' and 'external'.
+// Try removing the 'abstract' or 'external' keyword.
+//   abstract external covariant num externalCovariantInstanceField2;
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:38:12: Error: Fields can't be declared both 'abstract' and 'external'.
+// Try removing the 'abstract' or 'external' keyword.
+//   external abstract late int externalLateInstanceField;
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:38:12: Error: Abstract fields cannot be late.
+// Try removing the 'abstract' or 'late' keyword.
+//   external abstract late int externalLateInstanceField;
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:42:3: Error: Static fields can't be declared 'abstract'.
+// Try removing the 'abstract' or 'static' keyword.
+//   abstract static int staticField;
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:44:3: Error: Static fields can't be declared 'abstract'.
+// Try removing the 'abstract' or 'static' keyword.
+//   abstract static final int finalStaticField;
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:46:12: Error: Fields can't be declared both 'abstract' and 'external'.
+// Try removing the 'abstract' or 'external' keyword.
+//   external abstract int externalInstanceField;
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:48:12: Error: Fields can't be declared both 'abstract' and 'external'.
+// Try removing the 'abstract' or 'external' keyword.
+//   external abstract final int externalFinalInstanceField;
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:50:12: Error: Fields can't be declared both 'abstract' and 'external'.
+// Try removing the 'abstract' or 'external' keyword.
+//   external abstract covariant num externalCovariantInstanceField;
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:55:16: Error: Extension fields can't be declared 'abstract'.
+// Try removing the 'abstract' keyword.
+//   abstract int extensionInstanceField;
+//                ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:55:16: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   abstract int extensionInstanceField;
+//                ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:56:22: Error: Extension fields can't be declared 'abstract'.
+// Try removing the 'abstract' keyword.
+//   abstract final int finalExtensionInstanceField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:56:22: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   abstract final int finalExtensionInstanceField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:57:23: Error: Extension fields can't be declared 'abstract'.
+// Try removing the 'abstract' keyword.
+//   abstract static int extensionStaticField = 0;
+//                       ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:57:3: Error: Static fields can't be declared 'abstract'.
+// Try removing the 'abstract' or 'static' keyword.
+//   abstract static int extensionStaticField = 0;
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:58:29: Error: Extension fields can't be declared 'abstract'.
+// Try removing the 'abstract' keyword.
+//   abstract static final int finalExtensionStaticField = 0;
+//                             ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:58:3: Error: Static fields can't be declared 'abstract'.
+// Try removing the 'abstract' or 'static' keyword.
+//   abstract static final int finalExtensionStaticField = 0;
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:5:14: Error: Field 'topLevelField' should be initialized because its type 'int' doesn't allow null.
+// abstract int topLevelField;
+//              ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:20:23: Error: Field 'staticField' should be initialized because its type 'int' doesn't allow null.
+//   abstract static int staticField;
+//                       ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:22:29: Error: Field 'finalStaticField' should be initialized because its type 'int' doesn't allow null.
+//   abstract static final int finalStaticField;
+//                             ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:42:23: Error: Field 'staticField' should be initialized because its type 'int' doesn't allow null.
+//   abstract static int staticField;
+//                       ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:44:29: Error: Field 'finalStaticField' should be initialized because its type 'int' doesn't allow null.
+//   abstract static final int finalStaticField;
+//                             ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:12:37: Error: Abstract fields cannot have initializers.
+// Try removing the initializer or the 'abstract' keyword.
+//   abstract int fieldWithInitializer = 0;
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:10: Error: Abstract fields cannot have initializers.
+// Try removing the field initializer or the 'abstract' keyword from the field declaration.
+//   A(this.initializedField1) : this.initializedField2 = 0;
+//          ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:36: Error: Abstract fields cannot have initializers.
+// Try removing the field initializer or the 'abstract' keyword from the field declaration.
+//   A(this.initializedField1) : this.initializedField2 = 0;
+//                                    ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:22:29: Error: Final field 'finalStaticField' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   abstract static final int finalStaticField;
+//                             ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/abstract_field_errors.dart:44:29: Error: Final field 'finalStaticField' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   abstract static final int finalStaticField;
+//                             ^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  static field core::int staticField = null;
+  static final field core::int finalStaticField = null;
+  late field core::int lateInstanceField;
+  constructor •(core::int initializedField1) → self::A
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:10: Error: Abstract fields cannot have initializers.
+Try removing the field initializer or the 'abstract' keyword from the field declaration.
+  A(this.initializedField1) : this.initializedField2 = 0;
+         ^^^^^^^^^^^^^^^^^", final dynamic #t2 = invalid-expression "pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:36: Error: Abstract fields cannot have initializers.
+Try removing the field initializer or the 'abstract' keyword from the field declaration.
+  A(this.initializedField1) : this.initializedField2 = 0;
+                                   ^^^^^^^^^^^^^^^^^"
+    ;
+  abstract get fieldWithInitializer() → core::int;
+  abstract set fieldWithInitializer(core::int #externalFieldValue) → void;
+  abstract get initializedField1() → core::int;
+  abstract set initializedField1(core::int #externalFieldValue) → void;
+  abstract get initializedField2() → core::int;
+  abstract set initializedField2(core::int #externalFieldValue) → void;
+  external get externalInstanceField1() → core::int;
+  external set externalInstanceField1(core::int #externalFieldValue) → void;
+  external get externalFinalInstanceField1() → core::int;
+  external get externalCovariantInstanceField1() → core::num;
+  external set externalCovariantInstanceField1(covariant-by-declaration core::num #externalFieldValue) → void;
+  external get externalInstanceField2() → core::int;
+  external set externalInstanceField2(core::int #externalFieldValue) → void;
+  external get externalFinalInstanceField2() → core::int;
+  external get externalCovariantInstanceField2() → core::num;
+  external set externalCovariantInstanceField2(covariant-by-declaration core::num #externalFieldValue) → void;
+  external get externalLateInstanceField() → core::int;
+  external set externalLateInstanceField(core::int #externalFieldValue) → void;
+}
+abstract class B extends core::Object /*isMixinDeclaration*/  {
+  static field core::int staticField = null;
+  static final field core::int finalStaticField = null;
+  external get externalInstanceField() → core::int;
+  external set externalInstanceField(core::int #externalFieldValue) → void;
+  external get externalFinalInstanceField() → core::int;
+  external get externalCovariantInstanceField() → core::num;
+  external set externalCovariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
+}
+extension Extension on self::A {
+  get extensionInstanceField = get self::Extension|extensionInstanceField;
+  set extensionInstanceField = set self::Extension|extensionInstanceField;
+  get finalExtensionInstanceField = get self::Extension|finalExtensionInstanceField;
+  static field extensionStaticField = self::Extension|extensionStaticField;
+  static field finalExtensionStaticField = self::Extension|finalExtensionStaticField;
+}
+static field core::int topLevelField;
+static final field core::int finalTopLevelField = 0;
+static const field core::int constField = #C1;
+static field core::int Extension|extensionStaticField = 0;
+static final field core::int Extension|finalExtensionStaticField = 0;
+static abstract get Extension|extensionInstanceField() → core::int;
+static abstract set Extension|extensionInstanceField(core::int #externalFieldValue) → void;
+static abstract get Extension|finalExtensionInstanceField() → core::int;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+}
diff --git a/pkg/front_end/testcases/nnbd/abstract_fields.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/abstract_fields.dart.weak.modular.expect
new file mode 100644
index 0000000..f9cfd21
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/abstract_fields.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  abstract get instanceField() → core::int;
+  abstract set instanceField(core::int #externalFieldValue) → void;
+  abstract get finalInstanceField() → core::int;
+  abstract get covariantInstanceField() → core::num;
+  abstract set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
+}
+abstract class B extends core::Object /*isMixinDeclaration*/  {
+  abstract get instanceField() → core::int;
+  abstract set instanceField(core::int #externalFieldValue) → void;
+  abstract get finalInstanceField() → core::int;
+  abstract get covariantInstanceField() → core::num;
+  abstract set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.weak.modular.expect
new file mode 100644
index 0000000..efa8606
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  abstract get i1() → core::int;
+  abstract set i1(core::int #externalFieldValue) → void;
+  abstract get i2() → core::int;
+  abstract set i2(core::int #externalFieldValue) → void;
+  abstract get x() → dynamic;
+  abstract set x(dynamic #externalFieldValue) → void;
+  abstract get fi() → core::int;
+  abstract get fx() → dynamic;
+  abstract get cn() → core::num;
+  abstract set cn(covariant-by-declaration core::num #externalFieldValue) → void;
+  abstract get cx() → dynamic;
+  abstract set cx(covariant-by-declaration dynamic #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.weak.modular.expect
new file mode 100644
index 0000000..02aa3e0
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/ambiguous_main_export.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "org-dartlang-testcase:///ambiguous_main_export_lib0.dart";
+
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/ambiguous_main_export_lib0.dart:6:1: Error: 'main' is exported from both 'pkg/front_end/testcases/nnbd/ambiguous_main_export_lib1.dart' and 'pkg/front_end/testcases/nnbd/ambiguous_main_export_lib2.dart'.
+// export 'ambiguous_main_export_lib2.dart';
+// ^
+//
+import self as self2;
+import "dart:core" as core;
+
+export "org-dartlang-testcase:///ambiguous_main_export_lib1.dart";
+export "org-dartlang-testcase:///ambiguous_main_export_lib2.dart";
+
+static const field dynamic _exports# = #C1 /*isLegacy*/;
+
+library /*isNonNullableByDefault*/;
+import self as self3;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::print(42);
+}
+
+library /*isNonNullableByDefault*/;
+import self as self4;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::print(87);
+}
+
+constants  {
+  #C1 = "{\"main\":\"'main' is exported from both 'pkg/front_end/testcases/nnbd/ambiguous_main_export_lib1.dart' and 'pkg/front_end/testcases/nnbd/ambiguous_main_export_lib2.dart'.\"}"
+}
diff --git a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.modular.expect
new file mode 100644
index 0000000..e981e5c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class<E extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::E%>
+    : super core::Object::•()
+    ;
+  method method(covariant-by-class self::Class::E% e) → void {
+    e = self::id<self::Class::E%>(e);
+    e = self::id<self::Class::E%>(e);
+    if(!(e == null)) {
+      self::Class::E% e2 = e{self::Class::E% & core::Object /* '%' & '!' = '!' */};
+      e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
+      e2 = self::id<self::Class::E%>(e{self::Class::E% & core::Object /* '%' & '!' = '!' */});
+      e2 = self::id<self::Class::E%>(e2);
+      e2 = self::id<self::Class::E%>(e2);
+    }
+  }
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/assignability.dart.weak.modular.expect
new file mode 100644
index 0000000..5603cdc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.weak.modular.expect
@@ -0,0 +1,1790 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object' because 'Object?' is nullable and 'Object' isn't.
+//  - 'Object' is from 'dart:core'.
+//   Object objectVar = objectNullableArg;
+//                      ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object' because 'num?' is nullable and 'Object' isn't.
+//  - 'Object' is from 'dart:core'.
+//   objectVar = numNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object' because 'int?' is nullable and 'Object' isn't.
+//  - 'Object' is from 'dart:core'.
+//   objectVar = intNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object' because 'double?' is nullable and 'Object' isn't.
+//  - 'Object' is from 'dart:core'.
+//   objectVar = doubleNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object' because 'Function?' is nullable and 'Object' isn't.
+//  - 'Function' is from 'dart:core'.
+//  - 'Object' is from 'dart:core'.
+//   objectVar = functionNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object' because 'void Function()?' is nullable and 'Object' isn't.
+//  - 'Object' is from 'dart:core'.
+//   objectVar = toVoidNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object' because 'Tearoffable?' is nullable and 'Object' isn't.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//  - 'Object' is from 'dart:core'.
+//   objectVar = tearoffableNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object' because 'XnonNull?' is nullable and 'Object' isn't.
+//  - 'Object' is from 'dart:core'.
+//   objectVar = xNonNullNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull' is nullable and 'Object' isn't.
+//  - 'Object' is from 'dart:core'.
+//   objectVar = xPotentiallyNullArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull?' is nullable and 'Object' isn't.
+//  - 'Object' is from 'dart:core'.
+//   objectVar = xPotentiallyNullNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object' because 'YnonNull?' is nullable and 'Object' isn't.
+//  - 'Object' is from 'dart:core'.
+//   objectVar = yNonNullNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull' is nullable and 'Object' isn't.
+//  - 'Object' is from 'dart:core'.
+//   objectVar = yPotentiallyNullArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull?' is nullable and 'Object' isn't.
+//  - 'Object' is from 'dart:core'.
+//   objectVar = yPotentiallyNullNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
+//  - 'Object' is from 'dart:core'.
+//   num numVar = objectArg;
+//                ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
+//  - 'Object' is from 'dart:core'.
+//   numVar = objectNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num' because 'num?' is nullable and 'num' isn't.
+//   numVar = numNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num' because 'int?' is nullable and 'num' isn't.
+//   numVar = intNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num' because 'double?' is nullable and 'num' isn't.
+//   numVar = doubleNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
+//  - 'Function' is from 'dart:core'.
+//   numVar = functionArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
+//  - 'Function' is from 'dart:core'.
+//   numVar = functionNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
+//   numVar = toVoidArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
+//   numVar = toVoidNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   numVar = tearoffableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   numVar = tearoffableNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
+//   numVar = xNonNullArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
+//   numVar = xNonNullNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
+//   numVar = xPotentiallyNullArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
+//   numVar = xPotentiallyNullNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
+//   numVar = yNonNullArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
+//   numVar = yNonNullNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
+//   numVar = yPotentiallyNullArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
+//   numVar = yPotentiallyNullNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
+//  - 'Object' is from 'dart:core'.
+//   int intVar = objectArg;
+//                ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
+//  - 'Object' is from 'dart:core'.
+//   intVar = objectNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+//   intVar = numArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
+//   intVar = numNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   intVar = intNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   intVar = doubleArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
+//   intVar = doubleNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
+//  - 'Function' is from 'dart:core'.
+//   intVar = functionArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
+//  - 'Function' is from 'dart:core'.
+//   intVar = functionNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
+//   intVar = toVoidArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
+//   intVar = toVoidNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   intVar = tearoffableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   intVar = tearoffableNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
+//   intVar = xNonNullArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
+//   intVar = xNonNullNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
+//   intVar = xPotentiallyNullArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
+//   intVar = xPotentiallyNullNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
+//   intVar = yNonNullArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
+//   intVar = yNonNullNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
+//   intVar = yPotentiallyNullArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
+//   intVar = yPotentiallyNullNullableArg;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
+//  - 'Object' is from 'dart:core'.
+//   double doubleVar = objectArg;
+//                      ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
+//  - 'Object' is from 'dart:core'.
+//   doubleVar = objectNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+//   doubleVar = numArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
+//   doubleVar = numNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+//   doubleVar = intArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
+//   doubleVar = intNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double' because 'double?' is nullable and 'double' isn't.
+//   doubleVar = doubleNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
+//  - 'Function' is from 'dart:core'.
+//   doubleVar = functionArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
+//  - 'Function' is from 'dart:core'.
+//   doubleVar = functionNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
+//   doubleVar = toVoidArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
+//   doubleVar = toVoidNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   doubleVar = tearoffableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   doubleVar = tearoffableNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
+//   doubleVar = xNonNullArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
+//   doubleVar = xNonNullNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
+//   doubleVar = xPotentiallyNullArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
+//   doubleVar = xPotentiallyNullNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
+//   doubleVar = yNonNullArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
+//   doubleVar = yNonNullNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
+//   doubleVar = yPotentiallyNullArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
+//   doubleVar = yPotentiallyNullNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Function' is from 'dart:core'.
+//   Function functionVar = objectArg;
+//                          ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = objectNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = numArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = numNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = intArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = intNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = doubleArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = doubleNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function' because 'Function?' is nullable and 'Function' isn't.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = functionNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function' because 'void Function()?' is nullable and 'Function' isn't.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = toVoidNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
+//   functionVar = tearoffableNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = xNonNullArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = xNonNullNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = xPotentiallyNullArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = xPotentiallyNullNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = yNonNullArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = yNonNullNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = yPotentiallyNullArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+//  - 'Function' is from 'dart:core'.
+//   functionVar = yPotentiallyNullNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
+//  - 'Object' is from 'dart:core'.
+//   void Function() toVoidVar = objectArg;
+//                               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
+//  - 'Object' is from 'dart:core'.
+//   toVoidVar = objectNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
+//   toVoidVar = numArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
+//   toVoidVar = numNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
+//   toVoidVar = intArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
+//   toVoidVar = intNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
+//   toVoidVar = doubleArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
+//   toVoidVar = doubleNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
+//  - 'Function' is from 'dart:core'.
+//   toVoidVar = functionArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
+//  - 'Function' is from 'dart:core'.
+//   toVoidVar = functionNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()' because 'void Function()?' is nullable and 'void Function()' isn't.
+//   toVoidVar = toVoidNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
+//   toVoidVar = tearoffableNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
+//   toVoidVar = xNonNullArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
+//   toVoidVar = xNonNullNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+//   toVoidVar = xPotentiallyNullArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+//   toVoidVar = xPotentiallyNullNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
+//   toVoidVar = yNonNullArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
+//   toVoidVar = yNonNullNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+//   toVoidVar = yPotentiallyNullArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+//   toVoidVar = yPotentiallyNullNullableArg;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   Tearoffable tearoffableVar = objectArg;
+//                                ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = objectNullableArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = numArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = numNullableArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = intArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = intNullableArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = doubleArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = doubleNullableArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Function' is from 'dart:core'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = functionArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Function' is from 'dart:core'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = functionNullableArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = toVoidArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = toVoidNullableArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable' because 'Tearoffable?' is nullable and 'Tearoffable' isn't.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = tearoffableNullableArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = xNonNullArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = xNonNullNullableArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = xPotentiallyNullArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = xPotentiallyNullNullableArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = yNonNullArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = yNonNullNullableArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = yPotentiallyNullArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   tearoffableVar = yPotentiallyNullNullableArg;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
+//  - 'Object' is from 'dart:core'.
+//   XnonNull xNonNullVar = objectArg;
+//                          ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
+//  - 'Object' is from 'dart:core'.
+//   xNonNullVar = objectNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
+//   xNonNullVar = numArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
+//   xNonNullVar = numNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
+//   xNonNullVar = intArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
+//   xNonNullVar = intNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
+//   xNonNullVar = doubleArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
+//   xNonNullVar = doubleNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
+//  - 'Function' is from 'dart:core'.
+//   xNonNullVar = functionArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
+//  - 'Function' is from 'dart:core'.
+//   xNonNullVar = functionNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
+//   xNonNullVar = toVoidArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
+//   xNonNullVar = toVoidNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   xNonNullVar = tearoffableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   xNonNullVar = tearoffableNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull' because 'XnonNull?' is nullable and 'XnonNull' isn't.
+//   xNonNullVar = xNonNullNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+//   xNonNullVar = xPotentiallyNullArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+//   xNonNullVar = xPotentiallyNullNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull' because 'YnonNull?' is nullable and 'XnonNull' isn't.
+//   xNonNullVar = yNonNullNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+//   xNonNullVar = yPotentiallyNullArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+//   xNonNullVar = yPotentiallyNullNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
+//  - 'Object' is from 'dart:core'.
+//   XpotentiallyNull xPotentiallyNullVar = objectArg;
+//                                          ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
+//  - 'Object' is from 'dart:core'.
+//   xPotentiallyNullVar = objectNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
+//   xPotentiallyNullVar = numArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
+//   xPotentiallyNullVar = numNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
+//   xPotentiallyNullVar = intArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
+//   xPotentiallyNullVar = intNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
+//   xPotentiallyNullVar = doubleArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
+//   xPotentiallyNullVar = doubleNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
+//  - 'Function' is from 'dart:core'.
+//   xPotentiallyNullVar = functionArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
+//  - 'Function' is from 'dart:core'.
+//   xPotentiallyNullVar = functionNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
+//   xPotentiallyNullVar = toVoidArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
+//   xPotentiallyNullVar = toVoidNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   xPotentiallyNullVar = tearoffableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   xPotentiallyNullVar = tearoffableNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+//   xPotentiallyNullVar = xNonNullArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+//   xPotentiallyNullVar = xNonNullNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'XpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
+//   xPotentiallyNullVar = xPotentiallyNullNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+//   xPotentiallyNullVar = yNonNullArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+//   xPotentiallyNullVar = yNonNullNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
+//   xPotentiallyNullVar = yPotentiallyNullNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
+//  - 'Object' is from 'dart:core'.
+//   YnonNull yNonNullVar = objectArg;
+//                          ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
+//  - 'Object' is from 'dart:core'.
+//   yNonNullVar = objectNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
+//   yNonNullVar = numArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
+//   yNonNullVar = numNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
+//   yNonNullVar = intArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
+//   yNonNullVar = intNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
+//   yNonNullVar = doubleArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
+//   yNonNullVar = doubleNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
+//  - 'Function' is from 'dart:core'.
+//   yNonNullVar = functionArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
+//  - 'Function' is from 'dart:core'.
+//   yNonNullVar = functionNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
+//   yNonNullVar = toVoidArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
+//   yNonNullVar = toVoidNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   yNonNullVar = tearoffableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   yNonNullVar = tearoffableNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
+//   yNonNullVar = xNonNullArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
+//   yNonNullVar = xNonNullNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+//   yNonNullVar = xPotentiallyNullArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+//   yNonNullVar = xPotentiallyNullNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull' because 'YnonNull?' is nullable and 'YnonNull' isn't.
+//   yNonNullVar = yNonNullNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+//   yNonNullVar = yPotentiallyNullArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+//   yNonNullVar = yPotentiallyNullNullableArg;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
+//  - 'Object' is from 'dart:core'.
+//   YpotentiallyNull yPotentiallyNullVar = objectArg;
+//                                          ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
+//  - 'Object' is from 'dart:core'.
+//   yPotentiallyNullVar = objectNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
+//   yPotentiallyNullVar = numArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
+//   yPotentiallyNullVar = numNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
+//   yPotentiallyNullVar = intArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
+//   yPotentiallyNullVar = intNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
+//   yPotentiallyNullVar = doubleArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
+//   yPotentiallyNullVar = doubleNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
+//  - 'Function' is from 'dart:core'.
+//   yPotentiallyNullVar = functionArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
+//  - 'Function' is from 'dart:core'.
+//   yPotentiallyNullVar = functionNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
+//   yPotentiallyNullVar = toVoidArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
+//   yPotentiallyNullVar = toVoidNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   yPotentiallyNullVar = tearoffableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
+//  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+//   yPotentiallyNullVar = tearoffableNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+//   yPotentiallyNullVar = xNonNullArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+//   yPotentiallyNullVar = xNonNullNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+//   yPotentiallyNullVar = xPotentiallyNullArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+//   yPotentiallyNullVar = xPotentiallyNullNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+//   yPotentiallyNullVar = yNonNullArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+//   yPotentiallyNullVar = yNonNullNullableArg;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'YpotentiallyNull' isn't.
+//   yPotentiallyNullVar = yPotentiallyNullNullableArg;
+//                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Tearoffable extends core::Object {
+  synthetic constructor •() → self::Tearoffable
+    : super core::Object::•()
+    ;
+  method call() → void {}
+}
+static method ok<XnonNull extends core::Object, YnonNull extends self::ok::XnonNull = core::Object, XpotentiallyNull extends core::Object?, YpotentiallyNull extends self::ok::XpotentiallyNull% = core::Object?>(dynamic dynamicArg, core::Object objectArg, core::num numArg, core::int intArg, core::double doubleArg, core::Function functionArg, () → void toVoidArg, self::Tearoffable tearoffableArg, self::ok::XnonNull xNonNullArg, self::ok::XpotentiallyNull% xPotentiallyNullArg, self::ok::YnonNull yNonNullArg, self::ok::YpotentiallyNull% yPotentiallyNullArg) → dynamic {
+  dynamic dynamicVar = dynamicArg;
+  dynamicVar = objectArg;
+  dynamicVar = numArg;
+  dynamicVar = intArg;
+  dynamicVar = doubleArg;
+  dynamicVar = functionArg;
+  dynamicVar = toVoidArg;
+  dynamicVar = tearoffableArg;
+  dynamicVar = xNonNullArg;
+  dynamicVar = xPotentiallyNullArg;
+  dynamicVar = yNonNullArg;
+  dynamicVar = yPotentiallyNullArg;
+  core::Object objectVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object;
+  objectVar = objectArg;
+  objectVar = numArg;
+  objectVar = intArg;
+  objectVar = functionArg;
+  objectVar = toVoidArg;
+  objectVar = tearoffableArg;
+  objectVar = xNonNullArg;
+  objectVar = yNonNullArg;
+  core::num numVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::num;
+  numVar = numArg;
+  numVar = intArg;
+  numVar = doubleArg;
+  core::int intVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  intVar = intArg;
+  core::double doubleVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::double;
+  doubleVar = doubleArg;
+  core::Function functionVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Function;
+  functionVar = functionArg;
+  functionVar = toVoidArg;
+  functionVar = let final self::Tearoffable #t1 = tearoffableArg in #t1 == null ?{() → void} null : #t1.{self::Tearoffable::call}{() → void};
+  () → void toVoidVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} () → void;
+  toVoidVar = toVoidArg;
+  toVoidVar = let final self::Tearoffable #t2 = tearoffableArg in #t2 == null ?{() → void} null : #t2.{self::Tearoffable::call}{() → void};
+  self::Tearoffable tearoffableVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = tearoffableArg;
+  self::ok::XnonNull xNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XnonNull;
+  xNonNullVar = xNonNullArg;
+  xNonNullVar = yNonNullArg;
+  self::ok::YnonNull yNonNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YnonNull;
+  yNonNullVar = yNonNullArg;
+  self::ok::XpotentiallyNull% xPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::XpotentiallyNull%;
+  xPotentiallyNullVar = xPotentiallyNullArg;
+  xPotentiallyNullVar = yPotentiallyNullArg;
+  self::ok::YpotentiallyNull% yPotentiallyNullVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} self::ok::YpotentiallyNull%;
+  yPotentiallyNullVar = yPotentiallyNullArg;
+}
+static method error<XnonNull extends core::Object, YnonNull extends self::error::XnonNull = core::Object, XpotentiallyNull extends core::Object?, YpotentiallyNull extends self::error::XpotentiallyNull% = core::Object?>(core::Object objectArg, core::Object? objectNullableArg, core::num numArg, core::num? numNullableArg, core::int intArg, core::int? intNullableArg, core::double doubleArg, core::double? doubleNullableArg, core::Function functionArg, core::Function? functionNullableArg, () → void toVoidArg, () →? void toVoidNullableArg, self::Tearoffable tearoffableArg, self::Tearoffable? tearoffableNullableArg, self::error::XnonNull xNonNullArg, self::error::XnonNull? xNonNullNullableArg, self::error::XpotentiallyNull% xPotentiallyNullArg, self::error::XpotentiallyNull? xPotentiallyNullNullableArg, self::error::YnonNull yNonNullArg, self::error::YnonNull? yNonNullNullableArg, self::error::YpotentiallyNull% yPotentiallyNullArg, self::error::YpotentiallyNull? yPotentiallyNullNullableArg) → dynamic {
+  core::Object objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object' because 'Object?' is nullable and 'Object' isn't.
+ - 'Object' is from 'dart:core'.
+  Object objectVar = objectNullableArg;
+                     ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object' because 'num?' is nullable and 'Object' isn't.
+ - 'Object' is from 'dart:core'.
+  objectVar = numNullableArg;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object' because 'int?' is nullable and 'Object' isn't.
+ - 'Object' is from 'dart:core'.
+  objectVar = intNullableArg;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object' because 'double?' is nullable and 'Object' isn't.
+ - 'Object' is from 'dart:core'.
+  objectVar = doubleNullableArg;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object' because 'Function?' is nullable and 'Object' isn't.
+ - 'Function' is from 'dart:core'.
+ - 'Object' is from 'dart:core'.
+  objectVar = functionNullableArg;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object' because 'void Function()?' is nullable and 'Object' isn't.
+ - 'Object' is from 'dart:core'.
+  objectVar = toVoidNullableArg;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object' because 'Tearoffable?' is nullable and 'Object' isn't.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+ - 'Object' is from 'dart:core'.
+  objectVar = tearoffableNullableArg;
+              ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object' because 'XnonNull?' is nullable and 'Object' isn't.
+ - 'Object' is from 'dart:core'.
+  objectVar = xNonNullNullableArg;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull' is nullable and 'Object' isn't.
+ - 'Object' is from 'dart:core'.
+  objectVar = xPotentiallyNullArg;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'XpotentiallyNull?' is nullable and 'Object' isn't.
+ - 'Object' is from 'dart:core'.
+  objectVar = xPotentiallyNullNullableArg;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object' because 'YnonNull?' is nullable and 'Object' isn't.
+ - 'Object' is from 'dart:core'.
+  objectVar = yNonNullNullableArg;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull' is nullable and 'Object' isn't.
+ - 'Object' is from 'dart:core'.
+  objectVar = yPotentiallyNullArg;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object' because 'YpotentiallyNull?' is nullable and 'Object' isn't.
+ - 'Object' is from 'dart:core'.
+  objectVar = yPotentiallyNullNullableArg;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  core::num numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
+ - 'Object' is from 'dart:core'.
+  num numVar = objectArg;
+               ^" in objectArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
+ - 'Object' is from 'dart:core'.
+  numVar = objectNullableArg;
+           ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num' because 'num?' is nullable and 'num' isn't.
+  numVar = numNullableArg;
+           ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num' because 'int?' is nullable and 'num' isn't.
+  numVar = intNullableArg;
+           ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num' because 'double?' is nullable and 'num' isn't.
+  numVar = doubleNullableArg;
+           ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
+ - 'Function' is from 'dart:core'.
+  numVar = functionArg;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
+ - 'Function' is from 'dart:core'.
+  numVar = functionNullableArg;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
+  numVar = toVoidArg;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
+  numVar = toVoidNullableArg;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  numVar = tearoffableArg;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  numVar = tearoffableNullableArg;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
+  numVar = xNonNullArg;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
+  numVar = xNonNullNullableArg;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
+  numVar = xPotentiallyNullArg;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
+  numVar = xPotentiallyNullNullableArg;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
+  numVar = yNonNullArg;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
+  numVar = yNonNullNullableArg;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
+  numVar = yPotentiallyNullArg;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
+  numVar = yPotentiallyNullNullableArg;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  core::int intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
+ - 'Object' is from 'dart:core'.
+  int intVar = objectArg;
+               ^" in objectArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
+ - 'Object' is from 'dart:core'.
+  intVar = objectNullableArg;
+           ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  intVar = numArg;
+           ^" in numArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
+  intVar = numNullableArg;
+           ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  intVar = intNullableArg;
+           ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  intVar = doubleArg;
+           ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
+  intVar = doubleNullableArg;
+           ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
+ - 'Function' is from 'dart:core'.
+  intVar = functionArg;
+           ^" in functionArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
+ - 'Function' is from 'dart:core'.
+  intVar = functionNullableArg;
+           ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
+  intVar = toVoidArg;
+           ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
+  intVar = toVoidNullableArg;
+           ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  intVar = tearoffableArg;
+           ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  intVar = tearoffableNullableArg;
+           ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
+  intVar = xNonNullArg;
+           ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
+  intVar = xNonNullNullableArg;
+           ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
+  intVar = xPotentiallyNullArg;
+           ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
+  intVar = xPotentiallyNullNullableArg;
+           ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
+  intVar = yNonNullArg;
+           ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
+  intVar = yNonNullNullableArg;
+           ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
+  intVar = yPotentiallyNullArg;
+           ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
+  intVar = yPotentiallyNullNullableArg;
+           ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  core::double doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
+ - 'Object' is from 'dart:core'.
+  double doubleVar = objectArg;
+                     ^" in objectArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
+ - 'Object' is from 'dart:core'.
+  doubleVar = objectNullableArg;
+              ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  doubleVar = numArg;
+              ^" in numArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
+  doubleVar = numNullableArg;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+  doubleVar = intArg;
+              ^" in intArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
+  doubleVar = intNullableArg;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double' because 'double?' is nullable and 'double' isn't.
+  doubleVar = doubleNullableArg;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
+ - 'Function' is from 'dart:core'.
+  doubleVar = functionArg;
+              ^" in functionArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
+ - 'Function' is from 'dart:core'.
+  doubleVar = functionNullableArg;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
+  doubleVar = toVoidArg;
+              ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
+  doubleVar = toVoidNullableArg;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  doubleVar = tearoffableArg;
+              ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  doubleVar = tearoffableNullableArg;
+              ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
+  doubleVar = xNonNullArg;
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = xNonNullNullableArg;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
+  doubleVar = xPotentiallyNullArg;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = xPotentiallyNullNullableArg;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
+  doubleVar = yNonNullArg;
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = yNonNullNullableArg;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
+  doubleVar = yPotentiallyNullArg;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = yPotentiallyNullNullableArg;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  core::Function functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
+ - 'Object' is from 'dart:core'.
+ - 'Function' is from 'dart:core'.
+  Function functionVar = objectArg;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
+ - 'Object' is from 'dart:core'.
+ - 'Function' is from 'dart:core'.
+  functionVar = objectNullableArg;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
+  functionVar = numArg;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
+  functionVar = numNullableArg;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
+  functionVar = intArg;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
+  functionVar = intNullableArg;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
+  functionVar = doubleArg;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
+  functionVar = doubleNullableArg;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function' because 'Function?' is nullable and 'Function' isn't.
+ - 'Function' is from 'dart:core'.
+  functionVar = functionNullableArg;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function' because 'void Function()?' is nullable and 'Function' isn't.
+ - 'Function' is from 'dart:core'.
+  functionVar = toVoidNullableArg;
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
+  functionVar = tearoffableNullableArg;
+                ^" in tearoffableNullableArg as{TypeError} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
+  functionVar = xNonNullArg;
+                ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
+  functionVar = xNonNullNullableArg;
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
+  functionVar = xPotentiallyNullArg;
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
+  functionVar = xPotentiallyNullNullableArg;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
+  functionVar = yNonNullArg;
+                ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
+  functionVar = yNonNullNullableArg;
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
+  functionVar = yPotentiallyNullArg;
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
+  functionVar = yPotentiallyNullNullableArg;
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  () → void toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
+ - 'Object' is from 'dart:core'.
+  void Function() toVoidVar = objectArg;
+                              ^" in objectArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
+ - 'Object' is from 'dart:core'.
+  toVoidVar = objectNullableArg;
+              ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = numArg;
+              ^" in numArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = numNullableArg;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = intArg;
+              ^" in intArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = intNullableArg;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = doubleArg;
+              ^" in doubleArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = doubleNullableArg;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
+ - 'Function' is from 'dart:core'.
+  toVoidVar = functionArg;
+              ^" in functionArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
+ - 'Function' is from 'dart:core'.
+  toVoidVar = functionNullableArg;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()' because 'void Function()?' is nullable and 'void Function()' isn't.
+  toVoidVar = toVoidNullableArg;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
+  toVoidVar = tearoffableNullableArg;
+              ^" in tearoffableNullableArg as{TypeError} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = xNonNullArg;
+              ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = xNonNullNullableArg;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = xPotentiallyNullArg;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = xPotentiallyNullNullableArg;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = yNonNullArg;
+              ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = yNonNullNullableArg;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = yPotentiallyNullArg;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = yPotentiallyNullNullableArg;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  self::Tearoffable tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Object' is from 'dart:core'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  Tearoffable tearoffableVar = objectArg;
+                               ^" in objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Object' is from 'dart:core'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = objectNullableArg;
+                   ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = numArg;
+                   ^" in numArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = numNullableArg;
+                   ^" in numNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = intArg;
+                   ^" in intArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = intNullableArg;
+                   ^" in intNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = doubleArg;
+                   ^" in doubleArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = doubleNullableArg;
+                   ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Function' is from 'dart:core'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = functionArg;
+                   ^" in functionArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Function' is from 'dart:core'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = functionNullableArg;
+                   ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = toVoidArg;
+                   ^" in toVoidArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = toVoidNullableArg;
+                   ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable' because 'Tearoffable?' is nullable and 'Tearoffable' isn't.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = tearoffableNullableArg;
+                   ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = xNonNullArg;
+                   ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = xNonNullNullableArg;
+                   ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = xPotentiallyNullArg;
+                   ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = xPotentiallyNullNullableArg;
+                   ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = yNonNullArg;
+                   ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = yNonNullNullableArg;
+                   ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = yPotentiallyNullArg;
+                   ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = yPotentiallyNullNullableArg;
+                   ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  self::error::XnonNull xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
+ - 'Object' is from 'dart:core'.
+  XnonNull xNonNullVar = objectArg;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
+ - 'Object' is from 'dart:core'.
+  xNonNullVar = objectNullableArg;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = numArg;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = numNullableArg;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = intArg;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = intNullableArg;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = doubleArg;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = doubleNullableArg;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
+ - 'Function' is from 'dart:core'.
+  xNonNullVar = functionArg;
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
+ - 'Function' is from 'dart:core'.
+  xNonNullVar = functionNullableArg;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = toVoidArg;
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = toVoidNullableArg;
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  xNonNullVar = tearoffableArg;
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  xNonNullVar = tearoffableNullableArg;
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull' because 'XnonNull?' is nullable and 'XnonNull' isn't.
+  xNonNullVar = xNonNullNullableArg;
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = xPotentiallyNullArg;
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = xPotentiallyNullNullableArg;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull' because 'YnonNull?' is nullable and 'XnonNull' isn't.
+  xNonNullVar = yNonNullNullableArg;
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = yPotentiallyNullArg;
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
+  xNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = yPotentiallyNullNullableArg;
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  self::error::XpotentiallyNull% xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
+ - 'Object' is from 'dart:core'.
+  XpotentiallyNull xPotentiallyNullVar = objectArg;
+                                         ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
+ - 'Object' is from 'dart:core'.
+  xPotentiallyNullVar = objectNullableArg;
+                        ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = numArg;
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = numNullableArg;
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = intArg;
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = intNullableArg;
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = doubleArg;
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = doubleNullableArg;
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
+ - 'Function' is from 'dart:core'.
+  xPotentiallyNullVar = functionArg;
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
+ - 'Function' is from 'dart:core'.
+  xPotentiallyNullVar = functionNullableArg;
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = toVoidArg;
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = toVoidNullableArg;
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  xPotentiallyNullVar = tearoffableArg;
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  xPotentiallyNullVar = tearoffableNullableArg;
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = xNonNullArg;
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = xNonNullNullableArg;
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'XpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
+  xPotentiallyNullVar = xPotentiallyNullNullableArg;
+                        ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = yNonNullArg;
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = yNonNullNullableArg;
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  xPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'XpotentiallyNull' isn't.
+  xPotentiallyNullVar = yPotentiallyNullNullableArg;
+                        ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  self::error::YnonNull yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
+ - 'Object' is from 'dart:core'.
+  YnonNull yNonNullVar = objectArg;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
+ - 'Object' is from 'dart:core'.
+  yNonNullVar = objectNullableArg;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = numArg;
+                ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = numNullableArg;
+                ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = intArg;
+                ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = intNullableArg;
+                ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = doubleArg;
+                ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = doubleNullableArg;
+                ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
+ - 'Function' is from 'dart:core'.
+  yNonNullVar = functionArg;
+                ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
+ - 'Function' is from 'dart:core'.
+  yNonNullVar = functionNullableArg;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = toVoidArg;
+                ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = toVoidNullableArg;
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  yNonNullVar = tearoffableArg;
+                ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  yNonNullVar = tearoffableNullableArg;
+                ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = xNonNullArg;
+                ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = xNonNullNullableArg;
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = xPotentiallyNullArg;
+                ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = xPotentiallyNullNullableArg;
+                ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull' because 'YnonNull?' is nullable and 'YnonNull' isn't.
+  yNonNullVar = yNonNullNullableArg;
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = yPotentiallyNullArg;
+                ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
+  yNonNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = yPotentiallyNullNullableArg;
+                ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  self::error::YpotentiallyNull% yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
+ - 'Object' is from 'dart:core'.
+  YpotentiallyNull yPotentiallyNullVar = objectArg;
+                                         ^" in objectArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
+ - 'Object' is from 'dart:core'.
+  yPotentiallyNullVar = objectNullableArg;
+                        ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = numArg;
+                        ^" in numArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = numNullableArg;
+                        ^" in numNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = intArg;
+                        ^" in intArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = intNullableArg;
+                        ^" in intNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = doubleArg;
+                        ^" in doubleArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = doubleNullableArg;
+                        ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
+ - 'Function' is from 'dart:core'.
+  yPotentiallyNullVar = functionArg;
+                        ^" in functionArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
+ - 'Function' is from 'dart:core'.
+  yPotentiallyNullVar = functionNullableArg;
+                        ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = toVoidArg;
+                        ^" in toVoidArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = toVoidNullableArg;
+                        ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  yPotentiallyNullVar = tearoffableArg;
+                        ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  yPotentiallyNullVar = tearoffableNullableArg;
+                        ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = xNonNullArg;
+                        ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = xNonNullNullableArg;
+                        ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = xPotentiallyNullArg;
+                        ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = xPotentiallyNullNullableArg;
+                        ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = yNonNullArg;
+                        ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = yNonNullNullableArg;
+                        ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
+  yPotentiallyNullVar = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull' because 'YpotentiallyNull?' is nullable and 'YpotentiallyNull' isn't.
+  yPotentiallyNullVar = yPotentiallyNullNullableArg;
+                        ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} Never;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.modular.expect
new file mode 100644
index 0000000..1f4c1bb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.modular.expect
@@ -0,0 +1,393 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:27:14: Error: The argument type 'B?' can't be assigned to the parameter type 'A' because 'B?' is nullable and 'A' isn't.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//   fooContext(x); // Error.
+//              ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:28:9: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//   A a = x; // Error.
+//         ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:29:10: Error: Can't assign spread elements of type 'B?' to collection elements of type 'A' because 'B?' is nullable and 'A' isn't.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//   <A>[...l]; // Error.
+//          ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:30:10: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//   <A>[...l2]; // Error.
+//          ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:31:13: Error: Can't assign spread entry keys of type 'B?' to map entry keys of type 'A' because 'B?' is nullable and 'A' isn't.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//   <A, A>{...m}; // Error.
+//             ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:31:13: Error: Can't assign spread entry values of type 'B?' to map entry values of type 'A' because 'B?' is nullable and 'A' isn't.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//   <A, A>{...m}; // Error.
+//             ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:32:13: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//   <A, A>{...m2}; // Error.
+//             ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:33:10: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+// Try changing the type of the variable.
+//   for (A y in l) {} // Error.
+//          ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:34:15: Error: The type 'List<B>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<B>?' is nullable and 'Iterable<dynamic>' isn't.
+//  - 'List' is from 'dart:core'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'Iterable' is from 'dart:core'.
+//   for (A y in l2) {} // Error.
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:36:16: Error: Type 'A' of the case expression is not a subtype of type 'B?' of this switch expression.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//     case const A():
+//                ^
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:35:11: Context: The switch expression is here.
+//   switch (x) /*  Error. */ {
+//           ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//       return x; // Error.
+//              ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
+//  - 'Future' is from 'dart:async'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//       return new Future<B?>.value(x); // Error.
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//   return x; // Error.
+//          ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
+//  - 'List' is from 'dart:core'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//   barContext(x); // Error.
+//              ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+//  - 'List' is from 'dart:core'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//   List<A> y = x; // Error.
+//               ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:55:16: Error: Can't assign spread elements of type 'List<B?>' to collection elements of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+//  - 'List' is from 'dart:core'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//   <List<A>>[...l]; // Error.
+//                ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:56:25: Error: Can't assign spread entry keys of type 'List<B?>' to map entry keys of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+//  - 'List' is from 'dart:core'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//   <List<A>, List<A>>{...m}; // Error.
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:56:25: Error: Can't assign spread entry values of type 'List<B?>' to map entry values of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+//  - 'List' is from 'dart:core'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//   <List<A>, List<A>>{...m}; // Error.
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+//  - 'List' is from 'dart:core'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+// Try changing the type of the variable.
+//   for (List<A> y in l) {} // Error.
+//                ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
+//  - 'List' is from 'dart:core'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//   return x; // Error.
+//          ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
+//   bazContext(c);
+//              ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//   fooContext(x); // Error.
+//              ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//   fooContext(null); // Error.
+//              ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//   A a1 = x; // Error.
+//          ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//   A a2 = null; // Error.
+//          ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//     return x; // Error.
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//     return null; // Error.
+//            ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//       return null; // Error.
+//              ^
+//
+// pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
+//  - 'Future' is from 'dart:async'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+//       return new Future<Null>.value(null); // Error.
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class A extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method call() → core::num? {}
+}
+static method fooContext(self::A x) → void {}
+static method barContext(core::List<self::A> x) → void {}
+static method bazContext(() → core::num f) → void {}
+static method foo(self::B? x, core::List<self::B?> l, core::Map<self::B?, self::B?> m, core::List<self::B>? l2, core::Map<self::B, self::B>? m2) → self::A {
+  self::fooContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:27:14: Error: The argument type 'B?' can't be assigned to the parameter type 'A' because 'B?' is nullable and 'A' isn't.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+  fooContext(x); // Error.
+             ^" in x as{TypeError,ForNonNullableByDefault} self::A);
+  self::A a = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:28:9: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+  A a = x; // Error.
+        ^" in x as{TypeError,ForNonNullableByDefault} self::A;
+  <self::A>[invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:29:10: Error: Can't assign spread elements of type 'B?' to collection elements of type 'A' because 'B?' is nullable and 'A' isn't.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+  <A>[...l]; // Error.
+         ^"];
+  <self::A>[invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:30:10: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  <A>[...l2]; // Error.
+         ^"];
+  <self::A, self::A>{invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:31:13: Error: Can't assign spread entry keys of type 'B?' to map entry keys of type 'A' because 'B?' is nullable and 'A' isn't.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+  <A, A>{...m}; // Error.
+            ^": invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:31:13: Error: Can't assign spread entry values of type 'B?' to map entry values of type 'A' because 'B?' is nullable and 'A' isn't.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+  <A, A>{...m}; // Error.
+            ^"};
+  <self::A, self::A>{invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:32:13: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  <A, A>{...m2}; // Error.
+            ^": null};
+  for (final self::B? #t1 in l) {
+    self::A y = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:33:10: Error: A value of type 'B?' can't be assigned to a variable of type 'A' because 'B?' is nullable and 'A' isn't.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+Try changing the type of the variable.
+  for (A y in l) {} // Error.
+         ^" in #t1 as{TypeError,ForNonNullableByDefault} self::A;
+  }
+  for (self::A y in invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:34:15: Error: The type 'List<B>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<B>?' is nullable and 'Iterable<dynamic>' isn't.
+ - 'List' is from 'dart:core'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'Iterable' is from 'dart:core'.
+  for (A y in l2) {} // Error.
+              ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+  }
+  #L1:
+  switch(x) {
+    #L2:
+    case #C1:
+      {
+        break #L1;
+      }
+    #L3:
+    default:
+      {
+        break #L1;
+      }
+  }
+  function local() → FutureOr<self::A> async {
+    if(true) {
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+      return x; // Error.
+             ^" in x as{TypeError,ForNonNullableByDefault} self::A;
+    }
+    else {
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
+ - 'Future' is from 'dart:async'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+      return new Future<B?>.value(x); // Error.
+                 ^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A;
+    }
+  }
+  return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+  return x; // Error.
+         ^" in x as{TypeError,ForNonNullableByDefault} self::A;
+}
+static method bar(core::List<self::B?> x, core::List<core::List<self::B?>> l, core::Map<core::List<self::B?>, core::List<self::B?>> m) → core::List<self::A> {
+  self::barContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ - 'List' is from 'dart:core'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+  barContext(x); // Error.
+             ^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>);
+  core::List<self::A> y = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ - 'List' is from 'dart:core'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+  List<A> y = x; // Error.
+              ^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>;
+  <core::List<self::A>>[invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:55:16: Error: Can't assign spread elements of type 'List<B?>' to collection elements of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ - 'List' is from 'dart:core'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+  <List<A>>[...l]; // Error.
+               ^"];
+  <core::List<self::A>, core::List<self::A>>{invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:56:25: Error: Can't assign spread entry keys of type 'List<B?>' to map entry keys of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ - 'List' is from 'dart:core'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+  <List<A>, List<A>>{...m}; // Error.
+                        ^": invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:56:25: Error: Can't assign spread entry values of type 'List<B?>' to map entry values of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ - 'List' is from 'dart:core'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+  <List<A>, List<A>>{...m}; // Error.
+                        ^"};
+  for (final core::List<self::B?> #t2 in l) {
+    core::List<self::A> y = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ - 'List' is from 'dart:core'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+Try changing the type of the variable.
+  for (List<A> y in l) {} // Error.
+               ^" in #t2 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
+  }
+  return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ - 'List' is from 'dart:core'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+  return x; // Error.
+         ^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>;
+}
+static method baz(self::C c) → void {
+  self::bazContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
+  bazContext(c);
+             ^" in (let final self::C #t3 = c in #t3 == null ?{() → core::num?} null : #t3.{self::C::call}{() → core::num?}) as{TypeError,ForNonNullableByDefault} () → core::num);
+}
+static method boz(Null x) → self::A {
+  self::fooContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+  fooContext(x); // Error.
+             ^" in x as{TypeError,ForNonNullableByDefault} self::A);
+  self::fooContext(invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+  fooContext(null); // Error.
+             ^" in null as{TypeError,ForNonNullableByDefault} self::A);
+  self::A a1 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+  A a1 = x; // Error.
+         ^" in x as{TypeError,ForNonNullableByDefault} self::A;
+  self::A a2 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+  A a2 = null; // Error.
+         ^" in null as{TypeError,ForNonNullableByDefault} self::A;
+  if(true) {
+    return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+    return x; // Error.
+           ^" in x as{TypeError,ForNonNullableByDefault} self::A;
+  }
+  else {
+    return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+    return null; // Error.
+           ^" in null as{TypeError,ForNonNullableByDefault} self::A;
+  }
+  function local() → FutureOr<self::A> async {
+    if(true) {
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+      return null; // Error.
+             ^" in null as{TypeError,ForNonNullableByDefault} self::A;
+    }
+    else {
+      return invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
+ - 'Future' is from 'dart:async'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
+      return new Future<Null>.value(null); // Error.
+                 ^" in asy::Future::value<Null>(null) as{TypeError,ForNonNullableByDefault} self::A;
+    }
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::A {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///assignability_error_messages.dart:
+- A. (from org-dartlang-testcase:///assignability_error_messages.dart:11:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.modular.expect
new file mode 100644
index 0000000..ab741a5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.modular.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// foo(A<num?> a) {} // Error
+//             ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
+// Try changing type arguments so that they conform to the bounds.
+// A<num?>? bar() {} // Error
+//             ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// baz<T extends A<num?>>() {} // Error
+//     ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:7: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+// Try changing type arguments so that they conform to the bounds.
+// class B extends A<num?> {} // Error
+//       ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:9: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+// class C<T extends A<num?>> {} // Error
+//         ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:24:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'hest'.
+// Try changing type arguments so that they conform to the bounds.
+//   hest<num?>();
+//   ^
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:17:11: Context: This is the type variable whose bound isn't conformed to.
+// void hest<T extends num>() {}
+//           ^
+//
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:25:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'Hest.hest'.
+//  - 'Hest' is from 'pkg/front_end/testcases/nnbd/bounds_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   h.hest<num?>();
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+}
+class B extends self::A<core::num?> {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C<T extends self::A<core::num?>> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T>
+    : super core::Object::•()
+    ;
+}
+class Hest extends core::Object {
+  synthetic constructor •() → self::Hest
+    : super core::Object::•()
+    ;
+  method hest<T extends core::num>() → void {}
+}
+static method foo(self::A<core::num?> a) → dynamic {}
+static method bar() → self::A<core::num?>? {}
+static method baz<T extends self::A<core::num?>>() → dynamic {}
+static method hest<T extends core::num>() → void {}
+static method fisk(self::Hest h) → dynamic {
+  self::hest<core::num?>();
+  h.{self::Hest::hest}<core::num?>(){() → void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/build_issue_2688.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/build_issue_2688.dart.weak.modular.expect
new file mode 100644
index 0000000..2ae4ce3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/build_issue_2688.dart.weak.modular.expect
@@ -0,0 +1,270 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class M0 extends core::Object /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M1 extends core::Object implements self::M0 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M2 extends core::Object implements self::M1 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M3 extends core::Object implements self::M2 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M4 extends core::Object implements self::M3 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M5 extends core::Object implements self::M4 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M6 extends core::Object implements self::M5 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M7 extends core::Object implements self::M6 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M8 extends core::Object implements self::M7 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M9 extends core::Object implements self::M8 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M10 extends core::Object implements self::M9 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M11 extends core::Object implements self::M10 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M12 extends core::Object implements self::M11 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M13 extends core::Object implements self::M12 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M14 extends core::Object implements self::M13 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M15 extends core::Object implements self::M14 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M16 extends core::Object implements self::M15 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M17 extends core::Object implements self::M16 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M18 extends core::Object implements self::M17 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M19 extends core::Object implements self::M18 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M20 extends core::Object implements self::M19 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M21 extends core::Object implements self::M20 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M22 extends core::Object implements self::M21 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M23 extends core::Object implements self::M22 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M24 extends core::Object implements self::M23 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M25 extends core::Object implements self::M24 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M26 extends core::Object implements self::M25 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class M27 extends core::Object implements self::M26 /*isMixinDeclaration*/  {
+  abstract get property() → core::int;
+}
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  abstract get property() → core::int;
+}
+abstract class _Class&Super&M0 = self::Super with self::M0 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0
+    : super self::Super::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M0::property
+}
+abstract class _Class&Super&M0&M1 = self::_Class&Super&M0 with self::M1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1
+    : super self::_Class&Super&M0::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M1::property
+}
+abstract class _Class&Super&M0&M1&M2 = self::_Class&Super&M0&M1 with self::M2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2
+    : super self::_Class&Super&M0&M1::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M2::property
+}
+abstract class _Class&Super&M0&M1&M2&M3 = self::_Class&Super&M0&M1&M2 with self::M3 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3
+    : super self::_Class&Super&M0&M1&M2::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M3::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4 = self::_Class&Super&M0&M1&M2&M3 with self::M4 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4
+    : super self::_Class&Super&M0&M1&M2&M3::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M4::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5 = self::_Class&Super&M0&M1&M2&M3&M4 with self::M5 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5
+    : super self::_Class&Super&M0&M1&M2&M3&M4::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M5::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6 = self::_Class&Super&M0&M1&M2&M3&M4&M5 with self::M6 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M6::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6 with self::M7 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M7::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 with self::M8 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M8::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 with self::M9 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M9::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 with self::M10 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M10::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 with self::M11 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M11::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 with self::M12 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M12::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 with self::M13 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M13::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 with self::M14 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M14::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 with self::M15 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M15::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 with self::M16 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M16::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 with self::M17 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M17::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 with self::M18 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M18::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 with self::M19 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M19::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 with self::M20 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M20::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 with self::M21 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M21::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 with self::M22 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M22::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 with self::M23 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M23::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 with self::M24 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M24::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 with self::M25 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M25::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 with self::M26 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M26::property
+}
+abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 with self::M27 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26::•()
+    ;
+  abstract mixin-stub get property() → core::int; -> self::M27::property
+}
+class Class extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 {
+  synthetic constructor •() → self::Class
+    : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27::•()
+    ;
+  get property() → core::int
+    return 0;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/call.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/call.dart.weak.modular.expect
new file mode 100644
index 0000000..e93db55
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/call.dart.weak.modular.expect
@@ -0,0 +1,56 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+//   f();
+//    ^
+//
+// pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+// Try calling using ?. instead.
+//   f.call();
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+//   c.field();
+//          ^
+//
+// pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+//   c.getter();
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field () →? void field = null;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  get getter() → () →? void
+    return null;
+}
+static method error() → dynamic {
+  () →? void f;
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  f();
+   ^" in f{<nullable>}.(){() →? void};
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+Try calling using ?. instead.
+  f.call();
+    ^^^^" in f{<nullable>}.(){() →? void};
+  self::Class c = new self::Class::•();
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  c.field();
+         ^" in c.{self::Class::field}{() →? void}{<nullable>}.(){() →? void};
+  invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  c.getter();
+          ^" in c.{self::Class::getter}{() →? void}{<nullable>}.(){() →? void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/combined_required.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/combined_required.dart.weak.modular.expect
new file mode 100644
index 0000000..4e4e563
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/combined_required.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method method1({required core::int a = #C1}) → void {}
+  method method2({core::int? a = #C1, required core::int b = #C1}) → void {}
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  method method1({required covariant-by-declaration core::int a = #C1}) → void {}
+  method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void {}
+}
+class C extends self::A implements self::B {
+  synthetic constructor •() → self::C
+    : super self::A::•()
+    ;
+  forwarding-stub method method1({required covariant-by-declaration core::int a = #C1}) → void
+    return super.{self::A::method1}(a: a);
+  forwarding-stub method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void
+    return super.{self::A::method2}(a: a, b: b);
+}
+class D extends self::C {
+  synthetic constructor •() → self::D
+    : super self::C::•()
+    ;
+  method method1({required covariant-by-declaration core::int a = #C1}) → void {}
+  method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void {}
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/const_canonical_type.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/const_canonical_type.dart.weak.modular.expect
new file mode 100644
index 0000000..5e1af23
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/const_canonical_type.dart.weak.modular.expect
@@ -0,0 +1,64 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef F1 = () → self::A<FutureOr<dynamic>>;
+typedef F2 = () → self::A<dynamic>;
+typedef F3 = () → self::A<FutureOr<FutureOr<dynamic>?>>;
+typedef F4 = () → self::A<dynamic>;
+class Check extends core::Object /*hasConstConstructor*/  {
+  final field dynamic _ignored;
+  const constructor •(dynamic x, dynamic y) → self::Check
+    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+class A<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+static method expectEqual(dynamic x, dynamic y) → void {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
+    throw "Arguments were supposed to be identical.";
+  }
+}
+static method test1() → dynamic {
+  core::Type v = #C1;
+  self::expectEqual(#C1, #C1);
+  self::expectEqual(#C1, #C1);
+  self::expectEqual(#C1, #C1);
+  self::expectEqual(v, v);
+  self::expectEqual(v, #C1);
+  core::Type vf1 = #C2;
+  core::Type vf2 = #C2;
+  core::Type vf3 = #C2;
+  core::Type vf4 = #C2;
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, vf1);
+  self::expectEqual(vf1, vf2);
+  self::expectEqual(vf2, vf3);
+  self::expectEqual(vf3, vf4);
+  return #C5;
+}
+static method main() → dynamic {
+  self::test1();
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::A<dynamic>*)
+  #C2 = TypeLiteralConstant(() →* self::A<dynamic>*)
+  #C3 = 42
+  #C4 = self::Check {_ignored:#C3}
+  #C5 = <dynamic>[#C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_canonical_type.dart:
+- A. (from org-dartlang-testcase:///const_canonical_type.dart:22:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Check. (from org-dartlang-testcase:///const_canonical_type.dart:10:9)
diff --git a/pkg/front_end/testcases/nnbd/const_is.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/const_is.dart.weak.modular.expect
new file mode 100644
index 0000000..81ac3c3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/const_is.dart.weak.modular.expect
@@ -0,0 +1,106 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef fType = ({required i: core::int}) → core::int;
+typedef gType = ({i: core::int}) → core::int;
+typedef bigType = ({required i1: core::int, required i10: core::int, required i11: core::int, required i12: core::int, required i13: core::int, required i14: core::int, required i15: core::int, required i16: core::int, required i17: core::int, required i18: core::int, required i19: core::int, required i2: core::int, required i20: core::int, required i21: core::int, required i22: core::int, required i23: core::int, required i24: core::int, required i25: core::int, required i26: core::int, required i27: core::int, required i28: core::int, required i29: core::int, required i3: core::int, required i30: core::int, required i31: core::int, required i32: core::int, required i33: core::int, required i34: core::int, required i35: core::int, required i36: core::int, required i37: core::int, required i38: core::int, required i39: core::int, required i4: core::int, required i40: core::int, required i41: core::int, required i42: core::int, required i43: core::int, required i44: core::int, required i45: core::int, required i46: core::int, required i47: core::int, required i48: core::int, required i49: core::int, required i5: core::int, required i50: core::int, required i51: core::int, required i52: core::int, required i53: core::int, required i54: core::int, required i55: core::int, required i56: core::int, required i57: core::int, required i58: core::int, required i59: core::int, required i6: core::int, required i60: core::int, required i61: core::int, required i62: core::int, required i63: core::int, required i64: core::int, required i65: core::int, required i66: core::int, required i67: core::int, required i68: core::int, required i69: core::int, required i7: core::int, required i70: core::int, required i8: core::int, required i9: core::int}) → core::int;
+typedef func = (core::Object) → self::B;
+typedef t1 = (core::int, self::B, core::Map<core::int, core::num>, dynamic, {required ob: self::B, required obool: core::bool, required ol: core::List<core::num>, required ox: dynamic}) → self::B;
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class A1 extends core::Object {
+  synthetic constructor •() → self::A1
+    : super core::Object::•()
+    ;
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object implements self::A, self::A1, self::A2 {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object implements self::B {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+class D extends core::Object implements self::C {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+}
+static field core::bool inStrongMode = !(<core::int?>[] is{ForNonNullableByDefault} core::List<core::int>);
+static const field core::bool f_is_fType = #C1;
+static const field core::bool f_is_gType = #C1;
+static const field core::bool g_is_fType = #C1;
+static const field core::bool g_is_gType = #C1;
+static const field core::bool f_is_bigType = #C2;
+static const field core::bool f1_is_t1 = #C2;
+static const field core::bool f2_is_t1 = #C2;
+static const field core::bool f3_is_t1 = #C1;
+static const field core::bool f4_is_t1 = #C1;
+static const field core::bool f5_is_t1 = #C1;
+static method f({required core::int i = #C3}) → core::int {
+  return i.{core::num::+}(1){(core::num) → core::int};
+}
+static method g({core::int i = #C4}) → core::int {
+  return i.{core::num::+}(1){(core::num) → core::int};
+}
+static method f1(core::int i, self::B b, core::Map<core::int, core::num> m, dynamic x, {required dynamic extraParam = #C3, required core::bool obool = #C3, required dynamic ox = #C3, required self::D ob = #C3, required core::List<core::num>? ol = #C3}) → self::B
+  return new self::B::•();
+static method f2(core::int i, self::D b, core::Map<core::int, core::int> m, (core::Object) → self::B x, {required (core::Object) → self::B ox = #C3, required self::D ob = #C3, required core::List<core::int> ol = #C3, required core::bool obool = #C3}) → self::D
+  return new self::D::•();
+static method f3(core::num i, self::A b, core::Map<core::Object, core::Object> m, dynamic x, {required dynamic ox = #C3, required dynamic extraParam = #C3, required self::A2 ob = #C3, required core::List<dynamic> ol = #C3, required core::Object obool = #C3}) → self::C
+  return new self::C::•();
+static method f4(core::num i, self::A b, core::Map<core::Object, core::Object> m, dynamic x, {required dynamic ox = #C3, required self::A2 ob = #C3, required core::List<dynamic> ol = #C3, required core::bool obool = #C3, required self::A xx = #C3, required self::B yy = #C3}) → self::C
+  return new self::C::•();
+static method f5(core::int i, self::A b, core::Map<core::Object, core::Object> m, dynamic x, {required dynamic ox = #C3, required self::B ob = #C3, required core::List<dynamic> ol = #C3, required dynamic obool = #C3}) → self::C
+  return new self::C::•();
+static method main() → dynamic {
+  self::expect(true, #C1);
+  self::expect(#C5 is{ForNonNullableByDefault} ({required i: core::int}) → core::int, #C1);
+  self::expect(!self::inStrongMode, #C1);
+  self::expect(#C5 is{ForNonNullableByDefault} ({i: core::int}) → core::int, #C1);
+  self::expect(true, #C1);
+  self::expect(#C6 is{ForNonNullableByDefault} ({required i: core::int}) → core::int, #C1);
+  self::expect(true, #C1);
+  self::expect(#C6 is{ForNonNullableByDefault} ({i: core::int}) → core::int, #C1);
+  self::expect(false, #C2);
+  self::expect(#C5 is{ForNonNullableByDefault} ({required i1: core::int, required i10: core::int, required i11: core::int, required i12: core::int, required i13: core::int, required i14: core::int, required i15: core::int, required i16: core::int, required i17: core::int, required i18: core::int, required i19: core::int, required i2: core::int, required i20: core::int, required i21: core::int, required i22: core::int, required i23: core::int, required i24: core::int, required i25: core::int, required i26: core::int, required i27: core::int, required i28: core::int, required i29: core::int, required i3: core::int, required i30: core::int, required i31: core::int, required i32: core::int, required i33: core::int, required i34: core::int, required i35: core::int, required i36: core::int, required i37: core::int, required i38: core::int, required i39: core::int, required i4: core::int, required i40: core::int, required i41: core::int, required i42: core::int, required i43: core::int, required i44: core::int, required i45: core::int, required i46: core::int, required i47: core::int, required i48: core::int, required i49: core::int, required i5: core::int, required i50: core::int, required i51: core::int, required i52: core::int, required i53: core::int, required i54: core::int, required i55: core::int, required i56: core::int, required i57: core::int, required i58: core::int, required i59: core::int, required i6: core::int, required i60: core::int, required i61: core::int, required i62: core::int, required i63: core::int, required i64: core::int, required i65: core::int, required i66: core::int, required i67: core::int, required i68: core::int, required i69: core::int, required i7: core::int, required i70: core::int, required i8: core::int, required i9: core::int}) → core::int, #C2);
+  self::expect(false, #C2);
+  self::expect(#C7 is{ForNonNullableByDefault} (core::int, self::B, core::Map<core::int, core::num>, dynamic, {required ob: self::B, required obool: core::bool, required ol: core::List<core::num>, required ox: dynamic}) → self::B, #C2);
+  self::expect(false, #C2);
+  self::expect(#C8 is{ForNonNullableByDefault} (core::int, self::B, core::Map<core::int, core::num>, dynamic, {required ob: self::B, required obool: core::bool, required ol: core::List<core::num>, required ox: dynamic}) → self::B, #C2);
+  self::expect(!self::inStrongMode, #C1);
+  self::expect(#C9 is{ForNonNullableByDefault} (core::int, self::B, core::Map<core::int, core::num>, dynamic, {required ob: self::B, required obool: core::bool, required ol: core::List<core::num>, required ox: dynamic}) → self::B, #C1);
+  self::expect(!self::inStrongMode, #C1);
+  self::expect(#C10 is{ForNonNullableByDefault} (core::int, self::B, core::Map<core::int, core::num>, dynamic, {required ob: self::B, required obool: core::bool, required ol: core::List<core::num>, required ox: dynamic}) → self::B, #C1);
+  self::expect(true, #C1);
+  self::expect(#C11 is{ForNonNullableByDefault} (core::int, self::B, core::Map<core::int, core::num>, dynamic, {required ob: self::B, required obool: core::bool, required ol: core::List<core::num>, required ox: dynamic}) → self::B, #C1);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = true
+  #C2 = false
+  #C3 = null
+  #C4 = 1
+  #C5 = static-tearoff self::f
+  #C6 = static-tearoff self::g
+  #C7 = static-tearoff self::f1
+  #C8 = static-tearoff self::f2
+  #C9 = static-tearoff self::f3
+  #C10 = static-tearoff self::f4
+  #C11 = static-tearoff self::f5
+}
diff --git a/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.modular.expect
new file mode 100644
index 0000000..a50f6c7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:17: Error: Constant evaluation error:
+// const int? d = c!;
+//                 ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:17: Context: Constant expression must be non-null.
+// const int? d = c!;
+//                 ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:12: Context: While analyzing:
+// const int? d = c!;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:17:23: Error: Constant evaluation error:
+// const Class f = const Class(c);
+//                       ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:13:30: Context: Constant expression must be non-null.
+//   const Class(int? x) : y = x!;
+//                              ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:17:13: Context: While analyzing:
+// const Class f = const Class(c);
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object /*hasConstConstructor*/  {
+  final field core::int y;
+  const constructor •(core::int? x) → self::Class
+    : self::Class::y = x!, super core::Object::•()
+    ;
+}
+static const field core::int? a = #C1;
+static const field core::int b = #C1;
+static const field core::int? c = #C2;
+static const field core::int? d = invalid-expression "Constant expression must be non-null.";
+static const field self::Class e = #C3;
+static const field self::Class f = invalid-expression "Constant expression must be non-null.";
+static method main() → dynamic {
+  self::expect(42, #C1);
+  self::expect(42, #C1);
+  self::expect(42, #C3.{self::Class::y}{core::int});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+  #C2 = null
+  #C3 = self::Class {y:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///constant_null_check.dart:
+- Class. (from org-dartlang-testcase:///constant_null_check.dart:13:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/constant_null_is.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/constant_null_is.dart.weak.modular.expect
new file mode 100644
index 0000000..94f3fa4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/constant_null_is.dart.weak.modular.expect
@@ -0,0 +1,103 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field core::bool field;
+  const constructor constructor1(dynamic value) → self::Class<self::Class::T%>
+    : self::Class::field = value is{ForNonNullableByDefault} self::Class::T%, super core::Object::•()
+    ;
+  const constructor constructor2(dynamic value) → self::Class<self::Class::T%>
+    : self::Class::field = value is{ForNonNullableByDefault} self::Class::T?, super core::Object::•()
+    ;
+  const constructor constructor3(dynamic value) → self::Class<self::Class::T%>
+    : self::Class::field = value is{ForNonNullableByDefault} self::Class<self::Class::T%>, super core::Object::•()
+    ;
+  const constructor constructor4(dynamic value) → self::Class<self::Class::T%>
+    : self::Class::field = value is{ForNonNullableByDefault} self::Class<self::Class::T%>?, super core::Object::•()
+    ;
+}
+static final field core::bool isWeakMode = #C1 is{ForNonNullableByDefault} core::List<core::Object>;
+static const field core::bool c0 = #C2;
+static const field core::bool c1 = #C3;
+static const field core::bool c2 = #C2;
+static const field core::bool c3 = #C2;
+static const field core::bool c4 = #C3;
+static const field core::bool c5 = #C2;
+static const field core::bool c6 = #C3;
+static const field core::bool c7 = #C2;
+static const field core::bool c8 = #C2;
+static const field core::bool c9 = #C2;
+static const field core::bool c10 = #C3;
+static const field core::bool c11 = #C2;
+static const field core::bool c12 = #C2;
+static const field self::Class<core::int> e1 = #C4;
+static const field self::Class<core::List<core::int>> e2 = #C5;
+static const field self::Class<Null> e3 = #C6;
+static const field self::Class<core::int> e4 = #C7;
+static const field self::Class<core::int?> e5 = #C8;
+static const field self::Class<Null> e6 = #C6;
+static const field self::Class<core::int> e7 = #C4;
+static const field self::Class<core::int?> e8 = #C9;
+static const field self::Class<Null> e9 = #C10;
+static const field self::Class<core::int> e10 = #C7;
+static const field self::Class<core::int?> e11 = #C8;
+static const field self::Class<Null> e12 = #C6;
+static method main() → dynamic {
+  self::expect(null is{ForNonNullableByDefault} core::int?, #C2, "null is int?");
+  self::expect(null is{ForNonNullableByDefault} core::int, #C3, "null is int");
+  self::expect(null is{ForNonNullableByDefault} Null, #C2, "null is Null");
+  self::expect(null is{ForNonNullableByDefault} Never?, #C2, "null is Never?");
+  self::expect(null is{ForNonNullableByDefault} Never, #C3, "null is Never");
+  self::expect(null is{ForNonNullableByDefault} FutureOr<core::int?>, #C2, "null is FutureOr<int?>");
+  self::expect(null is{ForNonNullableByDefault} FutureOr<core::int>, #C3, "null is FutureOr<int>");
+  self::expect(null is{ForNonNullableByDefault} FutureOr<core::int>?, #C2, "null is FutureOr<int>?");
+  self::expect(null is{ForNonNullableByDefault} FutureOr<Null>, #C2, "null is FutureOr<Null>");
+  self::expect(null is{ForNonNullableByDefault} FutureOr<Null>?, #C2, "null is FutureOr<Null>?");
+  self::expect(null is{ForNonNullableByDefault} FutureOr<Never>, #C3, "null is FutureOr<Never>");
+  self::expect(null is{ForNonNullableByDefault} FutureOr<Never?>, #C2, "null is FutureOr<Never?>");
+  self::expect(null is{ForNonNullableByDefault} FutureOr<Never>?, #C2, "null is FutureOr<Never>?");
+  self::expect(new self::Class::constructor1<core::int>(null).{self::Class::field}{core::bool}, #C4.{self::Class::field}{core::bool}, "Class<int>.constructor1(null).field");
+  self::expect(true, new self::Class::constructor1<core::int?>(null).{self::Class::field}{core::bool}, "new Class<int?>.constructor1(null).field");
+  self::expect(self::isWeakMode, #C5.{self::Class::field}{core::bool}, "const Class<List<int>>.constructor1(<Null>[null]).field");
+  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}{core::bool}, #C6.{self::Class::field}{core::bool}, "Class<Null>.constructor1(null).field");
+  self::expect(new self::Class::constructor2<core::int>(null).{self::Class::field}{core::bool}, #C7.{self::Class::field}{core::bool}, "Class<int>.constructor2(null).field");
+  self::expect(true, new self::Class::constructor2<core::int?>(null).{self::Class::field}{core::bool}, "new Class<int?>.constructor2(null).field");
+  self::expect(new self::Class::constructor2<core::int?>(null).{self::Class::field}{core::bool}, #C8.{self::Class::field}{core::bool}, "Class<int?>.constructor2(null).field");
+  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}{core::bool}, #C6.{self::Class::field}{core::bool}, "Class<Null>.constructor2(null).field");
+  self::expect(new self::Class::constructor3<core::int>(null).{self::Class::field}{core::bool}, #C4.{self::Class::field}{core::bool}, "Class<int>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}{core::bool}, #C9.{self::Class::field}{core::bool}, "Class<int?>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}{core::bool}, #C9.{self::Class::field}{core::bool}, "Class<int?>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}{core::bool}, #C10.{self::Class::field}{core::bool}, "Class<Null>.constructor3(null).field");
+  self::expect(new self::Class::constructor4<core::int>(null).{self::Class::field}{core::bool}, #C7.{self::Class::field}{core::bool}, "Class<int>.constructor4(null).field");
+  self::expect(new self::Class::constructor4<core::int?>(null).{self::Class::field}{core::bool}, #C8.{self::Class::field}{core::bool}, "Class<int?>.constructor4(null).field");
+  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}{core::bool}, #C6.{self::Class::field}{core::bool}, "Class<Null>.constructor4(null).field");
+}
+static method expect(dynamic expected, dynamic actual, core::String message) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual} for ${message}";
+}
+
+constants  {
+  #C1 = <Null>[]
+  #C2 = true
+  #C3 = false
+  #C4 = self::Class<core::int*> {field:#C3}
+  #C5 = self::Class<core::List<core::int*>*> {field:#C2}
+  #C6 = self::Class<Null> {field:#C2}
+  #C7 = self::Class<core::int*> {field:#C2}
+  #C8 = self::Class<core::int?> {field:#C2}
+  #C9 = self::Class<core::int?> {field:#C3}
+  #C10 = self::Class<Null> {field:#C3}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///constant_null_is.dart:
+- Class.constructor1 (from org-dartlang-testcase:///constant_null_is.dart:38:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Class.constructor2 (from org-dartlang-testcase:///constant_null_is.dart:39:9)
+- Class.constructor3 (from org-dartlang-testcase:///constant_null_is.dart:40:9)
+- Class.constructor4 (from org-dartlang-testcase:///constant_null_is.dart:41:9)
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/constants.dart.weak.modular.expect
new file mode 100644
index 0000000..9af4cec
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/constants.dart.weak.modular.expect
@@ -0,0 +1,114 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "constants_lib.dart" as con;
+
+import "org-dartlang-testcase:///constants_lib.dart" as lib;
+
+typedef F1<invariant T extends core::Object? = dynamic> = (T%) → T%;
+typedef F2 = <T extends core::Object? = dynamic>(T%) → T%;
+static const field core::Type objectTypeLiteral = #C1;
+static const field (core::int) → core::int partialInstantiation = #C3;
+static const field con::Class<core::int> instance = #C5;
+static const field core::Type functionTypeLiteral = #C6;
+static const field core::Type genericFunctionTypeLiteral = #C7;
+static const field core::List<core::int> listLiteral = #C8;
+static const field core::Set<core::int> setLiteral = #C9;
+static const field core::Map<core::int, core::String> mapLiteral = #C11;
+static const field core::List<core::int> listConcatenation = #C8;
+static const field core::Set<core::int> setConcatenation = #C9;
+static const field core::Map<core::int, core::String> mapConcatenation = #C11;
+static const field core::bool objectTypeLiteralIdentical = #C12;
+static const field core::bool partialInstantiationIdentical = #C12;
+static const field core::bool instanceIdentical = #C12;
+static const field core::bool functionTypeLiteralIdentical = #C12;
+static const field core::bool genericFunctionTypeLiteralIdentical = #C12;
+static const field core::bool listLiteralIdentical = #C12;
+static const field core::bool setLiteralIdentical = #C12;
+static const field core::bool mapLiteralIdentical = #C12;
+static const field core::bool listConcatenationIdentical = #C12;
+static const field core::bool setConcatenationIdentical = #C12;
+static const field core::bool mapConcatenationIdentical = #C12;
+static method main() → dynamic {
+  self::test(#C1, #C1);
+  self::test(#C3, #C3);
+  self::test(#C5, #C5);
+  self::test(#C6, #C6);
+  self::test(#C7, #C7);
+  self::test(#C8, #C8);
+  self::test(#C9, #C9);
+  self::test(#C11, #C11);
+  self::test(#C8, #C8);
+  self::test(#C9, #C9);
+  self::test(#C11, #C11);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+  self::test(true, #C12);
+}
+static method test(dynamic expected, dynamic actual) → dynamic {
+  core::print("test(${expected}, ${actual})");
+  if(!core::identical(expected, actual)) {
+    throw "Expected ${expected}, actual ${actual}";
+  }
+}
+
+library /*isNonNullableByDefault*/;
+import self as con;
+import "dart:core" as core;
+
+typedef F1<invariant T extends core::Object? = dynamic> = (T%) → T%;
+typedef F2 = <T extends core::Object? = dynamic>(T%) → T%;
+class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field con::Class::T% field;
+  const constructor •(con::Class::T% field) → con::Class<con::Class::T%>
+    : con::Class::field = field, super core::Object::•()
+    ;
+}
+static const field core::Type objectTypeLiteral = #C1;
+static const field (core::Object?, core::Object?) → core::bool c2 = #C13;
+static const field (core::int) → core::int partialInstantiation = #C3;
+static const field con::Class<core::int> instance = #C5;
+static const field core::Type functionTypeLiteral = #C6;
+static const field core::Type genericFunctionTypeLiteral = #C7;
+static const field core::List<core::int> listLiteral = #C8;
+static const field core::Set<core::int> setLiteral = #C9;
+static const field core::Map<core::int, core::String> mapLiteral = #C11;
+static const field core::List<core::int> listConcatenation = #C8;
+static const field core::Set<core::int> setConcatenation = #C9;
+static const field core::Map<core::int, core::String> mapConcatenation = #C11;
+static method id<T extends core::Object? = dynamic>(con::id::T% t) → con::id::T%
+  return t;
+
+constants  {
+  #C1 = TypeLiteralConstant(core::Object*)
+  #C2 = static-tearoff con::id
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = 0
+  #C5 = con::Class<core::int*> {field:#C4}
+  #C6 = TypeLiteralConstant((dynamic) →* dynamic)
+  #C7 = TypeLiteralConstant(<T extends core::Object? = dynamic>(T*) →* T*)
+  #C8 = <core::int*>[#C4]
+  #C9 = <core::int*>{#C4}
+  #C10 = "foo"
+  #C11 = <core::int*, core::String*>{#C4:#C10)
+  #C12 = true
+  #C13 = static-tearoff core::identical
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///constants.dart:
+- Class. (from org-dartlang-testcase:///constants_lib.dart:8:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
+org-dartlang-testcase:///constants_lib.dart:
+- Class. (from org-dartlang-testcase:///constants_lib.dart:8:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.modular.expect
new file mode 100644
index 0000000..ac2d469
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.modular.expect
@@ -0,0 +1,546 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   a == c_dynamic; // error
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   a == c_int; // error
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   a == c_string; // error
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+//  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   a == d; // error
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   b == c_dynamic; // error
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   b == c_int; // error
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   b == c_string; // error
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+//  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   b == d; // error
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_dynamic == a; // error
+//                ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_dynamic == b; // error
+//                ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_int == a; // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_int == b; // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_int == c_dynamic; // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_int == c_string; // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_string == a; // error
+//               ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_string == b; // error
+//               ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_string == c_dynamic; // error
+//               ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_string == c_int; // error
+//               ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
+//  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_string == d; // error
+//               ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   d == a; // error
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   d == b; // error
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   d == c_dynamic; // error
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   d == c_string; // error
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   a == c_dynamic; // ok or error ?
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   a == c_int; // ok or error ?
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   a == c_string; // ok or error ?
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+//  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   a == d; // ok or error ?
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   b == c_dynamic; // ok or error ?
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   b == c_int; // ok or error ?
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   b == c_string; // ok or error ?
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+//  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   b == d; // ok or error ?
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_dynamic == a; // ok or error ?
+//                ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_dynamic == b; // ok or error ?
+//                ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_int == a; // ok or error ?
+//            ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_int == b; // ok or error ?
+//            ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_int == c_dynamic; // ok or error ?
+//            ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_int == c_string; // ok or error ?
+//            ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_string == a; // ok or error ?
+//               ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_string == b; // ok or error ?
+//               ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_string == c_dynamic; // ok or error ?
+//               ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_string == c_int; // ok or error ?
+//               ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
+//  - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   c_string == d; // ok or error ?
+//               ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   d == a; // ok or error ?
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   d == b; // ok or error ?
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   d == c_dynamic; // ok or error ?
+//        ^
+//
+// pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+//   d == c_string; // ok or error ?
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  operator ==(covariant-by-declaration self::A other) → core::bool
+    return true;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  operator ==(covariant-by-declaration self::A other) → core::bool
+    return true;
+}
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T%> other) → core::bool
+    return true;
+}
+class D extends self::C<core::int> {
+  synthetic constructor •() → self::D
+    : super self::C::•()
+    ;
+}
+static method main() → dynamic {}
+static method testNonNullable(self::A a, self::B b, self::C<dynamic> c_dynamic, self::C<core::int> c_int, self::C<core::String> c_string, self::D d) → dynamic {
+  a =={self::A::==}{(self::A) → core::bool} a;
+  a =={self::A::==}{(self::A) → core::bool} b;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  a == c_dynamic; // error
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  a == c_int; // error
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  a == c_string; // error
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  a == d; // error
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} a;
+  b =={self::B::==}{(self::A) → core::bool} b;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  b == c_dynamic; // error
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  b == c_int; // error
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  b == c_string; // error
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  b == d; // error
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_dynamic == a; // error
+               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_dynamic == b; // error
+               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_int == a; // error
+           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_int == b; // error
+           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_int == c_dynamic; // error
+           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_int == c_string; // error
+           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_string == a; // error
+              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_string == b; // error
+              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_string == c_dynamic; // error
+              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_string == c_int; // error
+              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_string == d; // error
+              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  d == a; // error
+       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  d == b; // error
+       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  d == c_dynamic; // error
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  d == c_string; // error
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} d;
+}
+static method testNullable(self::A? a, self::B? b, self::C<dynamic>? c_dynamic, self::C<core::int>? c_int, self::C<core::String>? c_string, self::D? d) → dynamic {
+  a =={self::A::==}{(self::A) → core::bool} a;
+  a =={self::A::==}{(self::A) → core::bool} b;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:75:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  a == c_dynamic; // ok or error ?
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:76:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  a == c_int; // ok or error ?
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:77:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  a == c_string; // ok or error ?
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:78:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  a == d; // ok or error ?
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} a;
+  b =={self::B::==}{(self::A) → core::bool} b;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:82:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'A?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  b == c_dynamic; // ok or error ?
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:83:8: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'A?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  b == c_int; // ok or error ?
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:84:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'A?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  b == c_string; // ok or error ?
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:85:8: Error: The argument type 'D?' can't be assigned to the parameter type 'A?'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  b == d; // ok or error ?
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:87:16: Error: The argument type 'A?' can't be assigned to the parameter type 'C<dynamic>?'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_dynamic == a; // ok or error ?
+               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:88:16: Error: The argument type 'B?' can't be assigned to the parameter type 'C<dynamic>?'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_dynamic == b; // ok or error ?
+               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:94:12: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_int == a; // ok or error ?
+           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:95:12: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_int == b; // ok or error ?
+           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:96:12: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_int == c_dynamic; // ok or error ?
+           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:98:12: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_int == c_string; // ok or error ?
+           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:101:15: Error: The argument type 'A?' can't be assigned to the parameter type 'C<String>?'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_string == a; // ok or error ?
+              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:102:15: Error: The argument type 'B?' can't be assigned to the parameter type 'C<String>?'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_string == b; // ok or error ?
+              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:103:15: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<String>?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_string == c_dynamic; // ok or error ?
+              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:104:15: Error: The argument type 'C<int>?' can't be assigned to the parameter type 'C<String>?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_string == c_int; // ok or error ?
+              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:106:15: Error: The argument type 'D?' can't be assigned to the parameter type 'C<String>?'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  c_string == d; // ok or error ?
+              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:108:8: Error: The argument type 'A?' can't be assigned to the parameter type 'C<int>?'.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  d == a; // ok or error ?
+       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:109:8: Error: The argument type 'B?' can't be assigned to the parameter type 'C<int>?'.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  d == b; // ok or error ?
+       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:110:8: Error: The argument type 'C<dynamic>?' can't be assigned to the parameter type 'C<int>?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  d == c_dynamic; // ok or error ?
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/covariant_equals.dart:112:8: Error: The argument type 'C<String>?' can't be assigned to the parameter type 'C<int>?'.
+ - 'C' is from 'pkg/front_end/testcases/nnbd/covariant_equals.dart'.
+  d == c_string; // ok or error ?
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} d;
+}
diff --git a/pkg/front_end/testcases/nnbd/covariant_late_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/covariant_late_field.dart.weak.modular.expect
new file mode 100644
index 0000000..2aecfe1
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/covariant_late_field.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/covariant_late_field.dart:19:31: Error: The parameter 'value' of the method 'C.invariantField' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'A.invariantField'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void set invariantField(int value) {} // error
+//                               ^
+// pkg/front_end/testcases/nnbd/covariant_late_field.dart:6:12: Context: This is the overridden method ('invariantField').
+//   late num invariantField;
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  late field core::num invariantField;
+  late covariant-by-declaration field core::num covariantField;
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+abstract class B extends core::Object implements self::A {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  abstract get invariantField() → core::num;
+  abstract set invariantField(core::num value) → void;
+  abstract get covariantField() → core::num;
+  abstract set covariantField(covariant-by-declaration core::num value) → void;
+}
+abstract class C extends core::Object implements self::A {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  abstract get invariantField() → core::int;
+  set invariantField(core::int value) → void {}
+  abstract get covariantField() → core::int;
+  set covariantField(covariant-by-declaration core::int value) → void {}
+}
+abstract class D extends core::Object implements self::A {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+  abstract get invariantField() → core::int;
+  set invariantField(covariant-by-declaration core::int value) → void {}
+  abstract get covariantField() → core::int;
+  set covariantField(covariant-by-declaration core::int value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.modular.expect
new file mode 100644
index 0000000..692e181
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.modular.expect
@@ -0,0 +1,76 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  abstract method method(dynamic a) → void;
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  abstract method method(covariant-by-declaration core::num a) → void;
+}
+abstract class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  abstract method method(covariant-by-declaration core::int a) → void;
+}
+abstract class D1 extends core::Object implements self::A, self::B, self::C {
+  synthetic constructor •() → self::D1
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
+}
+abstract class D2 extends core::Object implements self::A, self::B {
+  synthetic constructor •() → self::D2
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
+}
+abstract class D3 extends core::Object implements self::B, self::C {
+  synthetic constructor •() → self::D3
+    : super core::Object::•()
+    ;
+}
+abstract class D4 extends core::Object implements self::C, self::B {
+  synthetic constructor •() → self::D4
+    : super core::Object::•()
+    ;
+  abstract member-signature method method(covariant-by-declaration core::num a) → void; -> self::B::method
+}
+abstract class D5 extends core::Object implements self::A, self::C {
+  synthetic constructor •() → self::D5
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
+}
+abstract class E extends core::Object {
+  synthetic constructor •() → self::E
+    : super core::Object::•()
+    ;
+  abstract method method(core::num a) → void;
+}
+abstract class F extends core::Object {
+  synthetic constructor •() → self::F
+    : super core::Object::•()
+    ;
+  abstract method method(covariant-by-declaration core::int a) → void;
+}
+abstract class G1 extends core::Object implements self::E, self::F {
+  synthetic constructor •() → self::G1
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub method method(covariant-by-declaration core::num a) → void;
+}
+abstract class G2 extends core::Object implements self::F, self::E {
+  synthetic constructor •() → self::G2
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub method method(covariant-by-declaration core::num a) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.modular.expect
new file mode 100644
index 0000000..aae820c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
+//   return x;
+//          ^
+//
+// pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
+//     return x;
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object /*hasConstConstructor*/  {
+  final field core::int x;
+  const constructor •(core::int x) → self::Class
+    : self::Class::x = x, super core::Object::•()
+    ;
+  method foo() → core::int {
+    core::int x;
+    return invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
+    return x;
+           ^" in x;
+  }
+  method bar() → core::int
+    return 0;
+  method baz(core::int x) → core::int {
+    return x;
+  }
+  method boz(core::int x) → core::int
+    return x;
+}
+static method foo() → core::int {
+  core::int x;
+  return invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
+  return x;
+         ^" in x;
+}
+static method bar() → core::int
+  return 0;
+static method baz(core::int x) → core::int {
+  return x;
+}
+static method boz(core::int x) → core::int
+  return x;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.modular.expect
new file mode 100644
index 0000000..8a0aaba
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.modular.expect
@@ -0,0 +1,158 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → Null fieldDirect = <T extends core::Object? = dynamic>(T% value) → Null {
+  late final T% local2;
+  late final core::int local4;
+  late final FutureOr<core::int>local6;
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
+  late final T% local2;
+  late final core::int local4;
+  late final FutureOr<core::int>local6;
+  if(b) {
+    local2 = value;
+    local4 = 0;
+    local6 = 0;
+  }
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+};
+static field () → Null fieldCompound = () → Null {
+  late final core::int local4;
+  local4 = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  late final self::methodDirect::T% local2;
+  late final core::int local4;
+  late final FutureOr<core::int>local6;
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  late final self::methodConditional::T% local2;
+  late final core::int local4;
+  late final FutureOr<core::int>local6;
+  if(b) {
+    local2 = value;
+    local4 = 0;
+    local6 = 0;
+  }
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+}
+static method methodCompound() → dynamic {
+  late final core::int local4;
+  local4 = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in local4 = local4.{core::num::+}(0){(core::num) → core::int};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.modular.expect
new file mode 100644
index 0000000..58f8535
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.modular.expect
@@ -0,0 +1,236 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → Null fieldDirect = <T extends core::Object? = dynamic>(T% value) → Null {
+  T% local1;
+  late T% local2;
+  core::int local3;
+  late core::int local4;
+  FutureOr<core::int>local5;
+  late FutureOr<core::int>local6;
+  late T% local7 = value;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in local2;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in local4;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in local6;
+  local7;
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
+  T% local1;
+  late T% local2;
+  core::int local3;
+  late core::int local4;
+  FutureOr<core::int>local5;
+  late FutureOr<core::int>local6;
+  late T% local7 = value;
+  if(b) {
+    local1 = value;
+    local2 = value;
+    local3 = 0;
+    local4 = 0;
+    local5 = 0;
+    local6 = 0;
+    local7;
+  }
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  local2;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  local4;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  local6;
+  local7;
+};
+static field () → Null fieldCompound = () → Null {
+  core::int local3;
+  late core::int local4;
+  local3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  local4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in local4.{core::num::+}(0){(core::num) → core::int};
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  self::methodDirect::T% local1;
+  late self::methodDirect::T% local2;
+  core::int local3;
+  late core::int local4;
+  FutureOr<core::int>local5;
+  late FutureOr<core::int>local6;
+  late self::methodDirect::T% local7 = value;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in local2;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in local4;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in local6;
+  local7;
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  self::methodConditional::T% local1;
+  late self::methodConditional::T% local2;
+  core::int local3;
+  late core::int local4;
+  FutureOr<core::int>local5;
+  late FutureOr<core::int>local6;
+  late self::methodConditional::T% local7 = value;
+  if(b) {
+    local1 = value;
+    local2 = value;
+    local3 = 0;
+    local4 = 0;
+    local5 = 0;
+    local6 = 0;
+    local7 = value;
+  }
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  local2;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  local4;
+  invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  local6;
+  local7;
+}
+static method methodCompound() → dynamic {
+  core::int local3;
+  late core::int local4;
+  local3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3.{core::num::+}(0){(core::num) → core::int};
+  local4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in local4.{core::num::+}(0){(core::num) → core::int};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.modular.expect
new file mode 100644
index 0000000..677a9bb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Late variable 'value' without initializer is definitely unassigned.
+//     bar(value); // Error.
+//         ^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Late variable 'intValue' without initializer is definitely unassigned.
+//     barInt(intValue); // Error.
+//            ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
+  method barInt(core::int value) → dynamic {}
+  method foo() → dynamic {
+    late self::A::T% value;
+    late core::int intValue;
+    this.{self::A::bar}(invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Late variable 'value' without initializer is definitely unassigned.
+    bar(value); // Error.
+        ^^^^^" in value){(self::A::T%) → dynamic};
+    this.{self::A::barInt}(invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Late variable 'intValue' without initializer is definitely unassigned.
+    barInt(intValue); // Error.
+           ^^^^^^^^" in intValue){(core::int) → dynamic};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.modular.expect
new file mode 100644
index 0000000..d3ad413
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/demote_closure_types.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
+//     String s = f();
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method method<T extends core::Object? = dynamic>(self::method::T% a, self::method::T% b) → dynamic {
+  if(a is{ForNonNullableByDefault} core::String) {
+    () → self::method::T% f = () → self::method::T% => a{self::method::T% & core::String /* '%' & '!' = '!' */};
+    core::String s = invalid-expression "pkg/front_end/testcases/nnbd/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
+    String s = f();
+                ^" in f(){() → self::method::T%} as{TypeError,ForNonNullableByDefault} core::String;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/duplicate_import.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/duplicate_import.dart.weak.modular.expect
new file mode 100644
index 0000000..78771c5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicate_import.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "org-dartlang-testcase:///duplicate_import_lib1.dart";
+import "org-dartlang-testcase:///duplicate_import_lib2.dart";
+export "org-dartlang-testcase:///duplicate_import_lib1.dart";
+export "org-dartlang-testcase:///duplicate_import_lib2.dart";
+
+static method main() → dynamic {}
+
+library foo /*isNonNullableByDefault*/;
+import self as self2;
+
+
+library foo /*isNonNullableByDefault*/;
+import self as self3;
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.modular.expect
new file mode 100644
index 0000000..36ed89b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance.dart.weak.modular.expect
@@ -0,0 +1,344 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:9:7: Error: 'instanceMethod' is already declared in this scope.
+//   int instanceMethod() => 2;
+//       ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:8:7: Context: Previous declaration of 'instanceMethod'.
+//   int instanceMethod() => 1;
+//       ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:12:11: Error: 'instanceGetter' is already declared in this scope.
+//   int get instanceGetter => 2;
+//           ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:11:11: Context: Previous declaration of 'instanceGetter'.
+//   int get instanceGetter => 1;
+//           ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:18:12: Error: 'instanceSetter' is already declared in this scope.
+//   void set instanceSetter(value) {
+//            ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:14:12: Context: Previous declaration of 'instanceSetter'.
+//   void set instanceSetter(value) {
+//            ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:23:7: Error: 'instanceField' is already declared in this scope.
+//   int instanceField = 2;
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:22:7: Context: Previous declaration of 'instanceField'.
+//   int instanceField = 1;
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:48:13: Error: 'instanceDuplicateFieldAndSetter' is already declared in this scope.
+//   final int instanceDuplicateFieldAndSetter = 2;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:47:13: Context: Previous declaration of 'instanceDuplicateFieldAndSetter'.
+//   final int instanceDuplicateFieldAndSetter = 1;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:58:12: Error: 'instanceFieldAndDuplicateSetter' is already declared in this scope.
+//   void set instanceFieldAndDuplicateSetter(int value) {
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:54:12: Context: Previous declaration of 'instanceFieldAndDuplicateSetter'.
+//   void set instanceFieldAndDuplicateSetter(int value) {
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:63:13: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+//   final int instanceDuplicateFieldAndDuplicateSetter = 2;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:62:13: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
+//   final int instanceDuplicateFieldAndDuplicateSetter = 1;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:68:12: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+//   void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:64:12: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
+//   void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:26:12: Error: Conflicts with the implicit setter of the field 'instanceFieldAndSetter1'.
+//   void set instanceFieldAndSetter1(int value) {
+//            ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:25:7: Error: Conflicts with setter 'instanceFieldAndSetter1'.
+//   int instanceFieldAndSetter1 = 1;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:30:12: Error: Conflicts with the implicit setter of the field 'instanceFieldAndSetter2'.
+//   void set instanceFieldAndSetter2(int value) {
+//            ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:34:7: Error: Conflicts with setter 'instanceFieldAndSetter2'.
+//   int instanceFieldAndSetter2 = 1;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:37:12: Error: Conflicts with the implicit setter of the field 'instanceLateFinalFieldAndSetter1'.
+//   void set instanceLateFinalFieldAndSetter1(int value) {
+//            ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:36:18: Error: Conflicts with setter 'instanceLateFinalFieldAndSetter1'.
+//   late final int instanceLateFinalFieldAndSetter1;
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:41:12: Error: Conflicts with the implicit setter of the field 'instanceLateFinalFieldAndSetter2'.
+//   void set instanceLateFinalFieldAndSetter2(int value) {
+//            ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:45:18: Error: Conflicts with setter 'instanceLateFinalFieldAndSetter2'.
+//   late final int instanceLateFinalFieldAndSetter2;
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:73:12: Error: 'instanceMethodAndSetter1' is already declared in this scope.
+//   void set instanceMethodAndSetter1(int value) {
+//            ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:72:7: Context: Previous declaration of 'instanceMethodAndSetter1'.
+//   int instanceMethodAndSetter1() => 1;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:81:7: Error: 'instanceMethodAndSetter2' is already declared in this scope.
+//   int instanceMethodAndSetter2() => 1;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:77:12: Context: Previous declaration of 'instanceMethodAndSetter2'.
+//   void set instanceMethodAndSetter2(int value) {
+//            ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:86:5: Error: Can't use 'instanceMethod' because it is declared more than once.
+//   c.instanceMethod();
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:86:5: Error: The method 'instanceMethod' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
+//   c.instanceMethod();
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: Can't use 'instanceMethod' because it is declared more than once.
+//   (c.instanceMethod)();
+//      ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: The getter 'instanceMethod' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
+//   (c.instanceMethod)();
+//      ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: Can't use 'instanceGetter' because it is declared more than once.
+//   c.instanceGetter;
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
+//   c.instanceGetter;
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: Can't use 'instanceSetter' because it is declared more than once.
+//   c.instanceSetter = 0;
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: The setter 'instanceSetter' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
+//   c.instanceSetter = 0;
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: Can't use 'instanceField' because it is declared more than once.
+//   c.instanceField;
+//     ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: The getter 'instanceField' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
+//   c.instanceField;
+//     ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: Can't use 'instanceField' because it is declared more than once.
+//   c.instanceField = 0;
+//     ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: The setter 'instanceField' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
+//   c.instanceField = 0;
+//     ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: Can't use 'instanceDuplicateFieldAndSetter' because it is declared more than once.
+//   c.instanceDuplicateFieldAndSetter;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
+//   c.instanceDuplicateFieldAndSetter;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: Can't use 'instanceFieldAndDuplicateSetter' because it is declared more than once.
+//   c.instanceFieldAndDuplicateSetter = 0;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
+//   c.instanceFieldAndDuplicateSetter = 0;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: Can't use 'instanceDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+//   c.instanceDuplicateFieldAndDuplicateSetter;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+//   c.instanceDuplicateFieldAndDuplicateSetter;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: Can't use 'instanceDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+//   c.instanceDuplicateFieldAndDuplicateSetter = 0;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+//   c.instanceDuplicateFieldAndDuplicateSetter = 0;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int instanceField = null;
+  field core::int instanceFieldAndSetter1 = 1;
+  field core::int instanceFieldAndSetter2 = 1;
+  late final [setter] field core::int instanceLateFinalFieldAndSetter1;
+  late final [setter] field core::int instanceLateFinalFieldAndSetter2;
+  final field core::int instanceDuplicateFieldAndSetter = null;
+  final field core::int instanceFieldAndDuplicateSetter = 1;
+  final field core::int instanceDuplicateFieldAndDuplicateSetter = null;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method instanceMethod() → core::int
+    return 1;
+  get instanceGetter() → core::int
+    return 1;
+  set instanceSetter(dynamic value) → void {
+    self::result = 1;
+  }
+  set instanceDuplicateFieldAndSetter(core::int value) → void {
+    self::result = 3;
+  }
+  set instanceFieldAndDuplicateSetter(core::int value) → void {
+    self::result = 2;
+  }
+  set instanceDuplicateFieldAndDuplicateSetter(core::int value) → void {
+    self::result = 3;
+  }
+  method instanceMethodAndSetter1() → core::int
+    return 1;
+  set instanceMethodAndSetter1(core::int value) → void {
+    self::result = 2;
+  }
+  set instanceMethodAndSetter2(core::int value) → void {
+    self::result = 2;
+  }
+  method instanceMethodAndSetter2() → core::int
+    return 1;
+}
+static field dynamic result;
+static method test() → dynamic {
+  self::Class c = new self::Class::•();
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:86:5: Error: The method 'instanceMethod' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
+  c.instanceMethod();
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod();
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:87:6: Error: The getter 'instanceMethod' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
+  (c.instanceMethod)();
+     ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod{dynamic}.call();
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:88:5: Error: The getter 'instanceGetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
+  c.instanceGetter;
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceGetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:89:5: Error: The setter 'instanceSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
+  c.instanceSetter = 0;
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceSetter = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:90:5: Error: The getter 'instanceField' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
+  c.instanceField;
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:91:5: Error: The setter 'instanceField' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
+  c.instanceField = 0;
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:92:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
+  c.instanceDuplicateFieldAndSetter;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndSetter;
+  c.{self::Class::instanceDuplicateFieldAndSetter} = 0;
+  c.{self::Class::instanceFieldAndDuplicateSetter}{core::int};
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:95:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
+  c.instanceFieldAndDuplicateSetter = 0;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndDuplicateSetter = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:96:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+  c.instanceDuplicateFieldAndDuplicateSetter;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance.dart:97:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/duplicates_instance.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+  c.instanceDuplicateFieldAndDuplicateSetter = 0;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter = 0;
+}
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  c.{self::Class::instanceFieldAndSetter1} = 0;
+  self::expect(null, self::result);
+  self::expect(0, c.{self::Class::instanceFieldAndSetter1}{core::int});
+  self::result = null;
+  c.{self::Class::instanceFieldAndSetter2} = 0;
+  self::expect(null, self::result);
+  self::expect(0, c.{self::Class::instanceFieldAndSetter2}{core::int});
+  self::result = null;
+  c.{self::Class::instanceLateFinalFieldAndSetter1} = 0;
+  self::expect(null, self::result);
+  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter1}{core::int});
+  self::result = null;
+  c.{self::Class::instanceLateFinalFieldAndSetter2} = 0;
+  self::expect(null, self::result);
+  self::expect(0, c.{self::Class::instanceLateFinalFieldAndSetter2}{core::int});
+  self::result = null;
+  self::expect(1, c.{self::Class::instanceMethodAndSetter1}(){() → core::int});
+  c.{self::Class::instanceMethodAndSetter1} = 0;
+  self::expect(2, self::result);
+  self::result = null;
+  self::expect(1, c.{self::Class::instanceMethodAndSetter2}(){() → core::int});
+  c.{self::Class::instanceMethodAndSetter2} = 0;
+  self::expect(2, self::result);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print(e);
+    return;
+  }
+  throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.modular.expect
new file mode 100644
index 0000000..92b80e8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart.weak.modular.expect
@@ -0,0 +1,432 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:9:7: Error: 'instanceMethod' is already declared in this scope.
+//   int instanceMethod() => 2;
+//       ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:8:7: Context: Previous declaration of 'instanceMethod'.
+//   int instanceMethod() => 1;
+//       ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:12:11: Error: 'instanceGetter' is already declared in this scope.
+//   int get instanceGetter => 2;
+//           ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:11:11: Context: Previous declaration of 'instanceGetter'.
+//   int get instanceGetter => 1;
+//           ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:18:12: Error: 'instanceSetter' is already declared in this scope.
+//   void set instanceSetter(value) {
+//            ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:14:12: Context: Previous declaration of 'instanceSetter'.
+//   void set instanceSetter(value) {
+//            ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:22:7: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int instanceField = 1;
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:23:7: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int instanceField = 2;
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:23:7: Error: 'instanceField' is already declared in this scope.
+//   int instanceField = 2;
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:22:7: Context: Previous declaration of 'instanceField'.
+//   int instanceField = 1;
+//       ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:25:7: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int instanceFieldAndSetter1 = 1;
+//       ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:33:7: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int instanceFieldAndSetter2 = 1;
+//       ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:35:18: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late final int instanceLateFinalFieldAndSetter1;
+//                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:43:18: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   late final int instanceLateFinalFieldAndSetter2;
+//                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:45:13: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int instanceDuplicateFieldAndSetter = 1;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:46:13: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int instanceDuplicateFieldAndSetter = 2;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:46:13: Error: 'instanceDuplicateFieldAndSetter' is already declared in this scope.
+//   final int instanceDuplicateFieldAndSetter = 2;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:45:13: Context: Previous declaration of 'instanceDuplicateFieldAndSetter'.
+//   final int instanceDuplicateFieldAndSetter = 1;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:51:13: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int instanceFieldAndDuplicateSetter = 1;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:56:12: Error: 'instanceFieldAndDuplicateSetter' is already declared in this scope.
+//   void set instanceFieldAndDuplicateSetter(int value) {
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:52:12: Context: Previous declaration of 'instanceFieldAndDuplicateSetter'.
+//   void set instanceFieldAndDuplicateSetter(int value) {
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:60:13: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int instanceDuplicateFieldAndDuplicateSetter = 1;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:61:13: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int instanceDuplicateFieldAndDuplicateSetter = 2;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:61:13: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+//   final int instanceDuplicateFieldAndDuplicateSetter = 2;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:60:13: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
+//   final int instanceDuplicateFieldAndDuplicateSetter = 1;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:66:12: Error: 'instanceDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+//   void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:62:12: Context: Previous declaration of 'instanceDuplicateFieldAndDuplicateSetter'.
+//   void set instanceDuplicateFieldAndDuplicateSetter(int value) {
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:26:12: Error: Conflicts with the implicit setter of the field 'instanceFieldAndSetter1'.
+//   void set instanceFieldAndSetter1(int value) {
+//            ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:25:7: Error: Conflicts with setter 'instanceFieldAndSetter1'.
+//   int instanceFieldAndSetter1 = 1;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:30:12: Error: Conflicts with the implicit setter of the field 'instanceFieldAndSetter2'.
+//   void set instanceFieldAndSetter2(int value) {
+//            ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:33:7: Error: Conflicts with setter 'instanceFieldAndSetter2'.
+//   int instanceFieldAndSetter2 = 1;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:36:12: Error: Conflicts with the implicit setter of the field 'instanceLateFinalFieldAndSetter1'.
+//   void set instanceLateFinalFieldAndSetter1(int value) {
+//            ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:35:18: Error: Conflicts with setter 'instanceLateFinalFieldAndSetter1'.
+//   late final int instanceLateFinalFieldAndSetter1;
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:40:12: Error: Conflicts with the implicit setter of the field 'instanceLateFinalFieldAndSetter2'.
+//   void set instanceLateFinalFieldAndSetter2(int value) {
+//            ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:43:18: Error: Conflicts with setter 'instanceLateFinalFieldAndSetter2'.
+//   late final int instanceLateFinalFieldAndSetter2;
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:71:12: Error: Conflicts with member 'instanceMethodAndSetter1'.
+//   void set instanceMethodAndSetter1(int value) {
+//            ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:70:7: Error: Conflicts with setter 'instanceMethodAndSetter1'.
+//   int instanceMethodAndSetter1() => 1;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:75:12: Error: Conflicts with member 'instanceMethodAndSetter2'.
+//   void set instanceMethodAndSetter2(int value) {
+//            ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:78:7: Error: Conflicts with setter 'instanceMethodAndSetter2'.
+//   int instanceMethodAndSetter2() => 1;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:83:5: Error: The method 'instanceMethod' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
+//   c.instanceMethod();
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:84:6: Error: The getter 'instanceMethod' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
+//   (c.instanceMethod)();
+//      ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:85:5: Error: The getter 'instanceGetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
+//   c.instanceGetter;
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:86:5: Error: The setter 'instanceSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
+//   c.instanceSetter = 0;
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:87:5: Error: The getter 'instanceField' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
+//   c.instanceField;
+//     ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:88:5: Error: The setter 'instanceField' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
+//   c.instanceField = 0;
+//     ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:89:5: Error: The getter 'instanceFieldAndSetter1' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndSetter1'.
+//   c.instanceFieldAndSetter1;
+//     ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:90:5: Error: The setter 'instanceFieldAndSetter1' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndSetter1'.
+//   c.instanceFieldAndSetter1 = 0;
+//     ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:91:5: Error: The getter 'instanceFieldAndSetter2' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndSetter2'.
+//   c.instanceFieldAndSetter2;
+//     ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:92:5: Error: The setter 'instanceFieldAndSetter2' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndSetter2'.
+//   c.instanceFieldAndSetter2 = 0;
+//     ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:93:5: Error: The getter 'instanceLateFinalFieldAndSetter1' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceLateFinalFieldAndSetter1'.
+//   c.instanceLateFinalFieldAndSetter1;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:94:5: Error: The setter 'instanceLateFinalFieldAndSetter1' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceLateFinalFieldAndSetter1'.
+//   c.instanceLateFinalFieldAndSetter1 = 0;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:95:5: Error: The getter 'instanceLateFinalFieldAndSetter2' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceLateFinalFieldAndSetter2'.
+//   c.instanceLateFinalFieldAndSetter2;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:96:5: Error: The setter 'instanceLateFinalFieldAndSetter2' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceLateFinalFieldAndSetter2'.
+//   c.instanceLateFinalFieldAndSetter2 = 0;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:97:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
+//   c.instanceDuplicateFieldAndSetter;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:98:5: Error: The getter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndDuplicateSetter'.
+//   c.instanceFieldAndDuplicateSetter;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:99:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
+//   c.instanceFieldAndDuplicateSetter = 0;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:100:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+//   c.instanceDuplicateFieldAndDuplicateSetter;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:101:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+//   c.instanceDuplicateFieldAndDuplicateSetter = 0;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension Extension on core::int {
+  method instanceMethod = self::Extension|instanceMethod;
+  tearoff instanceMethod = self::Extension|get#instanceMethod;
+  get instanceGetter = self::Extension|get#instanceGetter;
+  field instanceField = self::Extension|instanceField;
+  field instanceFieldAndSetter1 = self::Extension|instanceFieldAndSetter1;
+  field instanceFieldAndSetter2 = self::Extension|instanceFieldAndSetter2;
+  field instanceLateFinalFieldAndSetter1 = self::Extension|instanceLateFinalFieldAndSetter1;
+  field instanceLateFinalFieldAndSetter2 = self::Extension|instanceLateFinalFieldAndSetter2;
+  field instanceDuplicateFieldAndSetter = self::Extension|instanceDuplicateFieldAndSetter;
+  field instanceFieldAndDuplicateSetter = self::Extension|instanceFieldAndDuplicateSetter;
+  field instanceDuplicateFieldAndDuplicateSetter = self::Extension|instanceDuplicateFieldAndDuplicateSetter;
+  method instanceMethodAndSetter1 = self::Extension|instanceMethodAndSetter1;
+  tearoff instanceMethodAndSetter1 = self::Extension|get#instanceMethodAndSetter1;
+  method instanceMethodAndSetter2 = self::Extension|instanceMethodAndSetter2;
+  tearoff instanceMethodAndSetter2 = self::Extension|get#instanceMethodAndSetter2;
+  set instanceSetter = self::Extension|set#instanceSetter;
+  set instanceDuplicateFieldAndSetter = self::Extension|set#instanceDuplicateFieldAndSetter;
+  set instanceFieldAndDuplicateSetter = self::Extension|set#instanceFieldAndDuplicateSetter;
+  set instanceDuplicateFieldAndDuplicateSetter = self::Extension|set#instanceDuplicateFieldAndDuplicateSetter;
+  set instanceMethodAndSetter1 = self::Extension|set#instanceMethodAndSetter1;
+  set instanceMethodAndSetter2 = self::Extension|set#instanceMethodAndSetter2;
+}
+static field dynamic result;
+static field core::int Extension|instanceField;
+static field core::int Extension|instanceFieldAndSetter1 = 1;
+static field core::int Extension|instanceFieldAndSetter2 = 1;
+late static final [setter] field core::int Extension|instanceLateFinalFieldAndSetter1;
+late static final [setter] field core::int Extension|instanceLateFinalFieldAndSetter2;
+static final field core::int Extension|instanceDuplicateFieldAndSetter;
+static final field core::int Extension|instanceFieldAndDuplicateSetter = 1;
+static final field core::int Extension|instanceDuplicateFieldAndDuplicateSetter;
+static method Extension|instanceMethod(lowered final core::int #this) → core::int
+  return 1;
+static method Extension|get#instanceMethod(lowered final core::int #this) → () → core::int
+  return () → core::int => self::Extension|instanceMethod(#this);
+static method Extension|get#instanceGetter(lowered final core::int #this) → core::int
+  return 1;
+static method Extension|set#instanceSetter(lowered final core::int #this, dynamic value) → void {
+  self::result = 1;
+}
+static method Extension|set#instanceDuplicateFieldAndSetter(lowered final core::int #this, core::int value) → void {
+  self::result = 3;
+}
+static method Extension|set#instanceFieldAndDuplicateSetter(lowered final core::int #this, core::int value) → void {
+  self::result = 2;
+}
+static method Extension|set#instanceDuplicateFieldAndDuplicateSetter(lowered final core::int #this, core::int value) → void {
+  self::result = 3;
+}
+static method Extension|instanceMethodAndSetter1(lowered final core::int #this) → core::int
+  return 1;
+static method Extension|get#instanceMethodAndSetter1(lowered final core::int #this) → () → core::int
+  return () → core::int => self::Extension|instanceMethodAndSetter1(#this);
+static method Extension|set#instanceMethodAndSetter1(lowered final core::int #this, core::int value) → void {
+  self::result = 2;
+}
+static method Extension|set#instanceMethodAndSetter2(lowered final core::int #this, core::int value) → void {
+  self::result = 2;
+}
+static method Extension|instanceMethodAndSetter2(lowered final core::int #this) → core::int
+  return 1;
+static method Extension|get#instanceMethodAndSetter2(lowered final core::int #this) → () → core::int
+  return () → core::int => self::Extension|instanceMethodAndSetter2(#this);
+static method test() → dynamic {
+  core::int c = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:83:5: Error: The method 'instanceMethod' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'instanceMethod'.
+  c.instanceMethod();
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod();
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:84:6: Error: The getter 'instanceMethod' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceMethod'.
+  (c.instanceMethod)();
+     ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceMethod{dynamic}.call();
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:85:5: Error: The getter 'instanceGetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceGetter'.
+  c.instanceGetter;
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceGetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:86:5: Error: The setter 'instanceSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceSetter'.
+  c.instanceSetter = 0;
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.instanceSetter = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:87:5: Error: The getter 'instanceField' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceField'.
+  c.instanceField;
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:88:5: Error: The setter 'instanceField' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceField'.
+  c.instanceField = 0;
+    ^^^^^^^^^^^^^" in c{<unresolved>}.instanceField = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:89:5: Error: The getter 'instanceFieldAndSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndSetter1'.
+  c.instanceFieldAndSetter1;
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter1;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:90:5: Error: The setter 'instanceFieldAndSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndSetter1'.
+  c.instanceFieldAndSetter1 = 0;
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter1 = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:91:5: Error: The getter 'instanceFieldAndSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndSetter2'.
+  c.instanceFieldAndSetter2;
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter2;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:92:5: Error: The setter 'instanceFieldAndSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndSetter2'.
+  c.instanceFieldAndSetter2 = 0;
+    ^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndSetter2 = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:93:5: Error: The getter 'instanceLateFinalFieldAndSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceLateFinalFieldAndSetter1'.
+  c.instanceLateFinalFieldAndSetter1;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter1;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:94:5: Error: The setter 'instanceLateFinalFieldAndSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceLateFinalFieldAndSetter1'.
+  c.instanceLateFinalFieldAndSetter1 = 0;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter1 = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:95:5: Error: The getter 'instanceLateFinalFieldAndSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceLateFinalFieldAndSetter2'.
+  c.instanceLateFinalFieldAndSetter2;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter2;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:96:5: Error: The setter 'instanceLateFinalFieldAndSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceLateFinalFieldAndSetter2'.
+  c.instanceLateFinalFieldAndSetter2 = 0;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceLateFinalFieldAndSetter2 = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:97:5: Error: The getter 'instanceDuplicateFieldAndSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndSetter'.
+  c.instanceDuplicateFieldAndSetter;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:98:5: Error: The getter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceFieldAndDuplicateSetter'.
+  c.instanceFieldAndDuplicateSetter;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndDuplicateSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:99:5: Error: The setter 'instanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceFieldAndDuplicateSetter'.
+  c.instanceFieldAndDuplicateSetter = 0;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceFieldAndDuplicateSetter = 0;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:100:5: Error: The getter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+  c.instanceDuplicateFieldAndDuplicateSetter;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_instance_extension.dart:101:5: Error: The setter 'instanceDuplicateFieldAndDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'instanceDuplicateFieldAndDuplicateSetter'.
+  c.instanceDuplicateFieldAndDuplicateSetter = 0;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.instanceDuplicateFieldAndDuplicateSetter = 0;
+}
+static method main() → dynamic {
+  core::int c = 0;
+  self::result = null;
+  self::Extension|set#instanceDuplicateFieldAndSetter(c, 0);
+  self::expect(3, self::result);
+  self::result = null;
+  self::expect(1, self::Extension|instanceMethodAndSetter1(c));
+  self::Extension|set#instanceMethodAndSetter1(c, 0);
+  self::expect(2, self::result);
+  self::result = null;
+  self::expect(1, self::Extension|instanceMethodAndSetter2(c));
+  self::Extension|set#instanceMethodAndSetter2(c, 0);
+  self::expect(2, self::result);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print(e);
+    return;
+  }
+  throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.modular.expect
new file mode 100644
index 0000000..d487082
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_static.dart.weak.modular.expect
@@ -0,0 +1,293 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:9:14: Error: 'staticMethod' is already declared in this scope.
+//   static int staticMethod() => 2;
+//              ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:8:14: Context: Previous declaration of 'staticMethod'.
+//   static int staticMethod() => 1;
+//              ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:12:18: Error: 'staticGetter' is already declared in this scope.
+//   static int get staticGetter => 2;
+//                  ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:11:18: Context: Previous declaration of 'staticGetter'.
+//   static int get staticGetter => 1;
+//                  ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:18:19: Error: 'staticSetter' is already declared in this scope.
+//   static void set staticSetter(value) {
+//                   ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:14:19: Context: Previous declaration of 'staticSetter'.
+//   static void set staticSetter(value) {
+//                   ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:23:14: Error: 'staticField' is already declared in this scope.
+//   static int staticField = 2;
+//              ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:22:14: Context: Previous declaration of 'staticField'.
+//   static int staticField = 1;
+//              ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:48:20: Error: 'staticDuplicateFieldAndSetter' is already declared in this scope.
+//   static final int staticDuplicateFieldAndSetter = 2;
+//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:47:20: Context: Previous declaration of 'staticDuplicateFieldAndSetter'.
+//   static final int staticDuplicateFieldAndSetter = 1;
+//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:58:19: Error: 'staticFieldAndDuplicateSetter' is already declared in this scope.
+//   static void set staticFieldAndDuplicateSetter(int value) {
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:54:19: Context: Previous declaration of 'staticFieldAndDuplicateSetter'.
+//   static void set staticFieldAndDuplicateSetter(int value) {
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:63:20: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+//   static final int staticDuplicateFieldAndDuplicateSetter = 2;
+//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:62:20: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+//   static final int staticDuplicateFieldAndDuplicateSetter = 1;
+//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:68:19: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+//   static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:64:19: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+//   static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:26:19: Error: Conflicts with the implicit setter of the field 'staticFieldAndSetter1'.
+//   static void set staticFieldAndSetter1(int value) {
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:25:14: Error: Conflicts with setter 'staticFieldAndSetter1'.
+//   static int staticFieldAndSetter1 = 1;
+//              ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:30:19: Error: Conflicts with the implicit setter of the field 'staticFieldAndSetter2'.
+//   static void set staticFieldAndSetter2(int value) {
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:34:14: Error: Conflicts with setter 'staticFieldAndSetter2'.
+//   static int staticFieldAndSetter2 = 1;
+//              ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:37:19: Error: Conflicts with the implicit setter of the field 'staticLateFinalFieldAndSetter1'.
+//   static void set staticLateFinalFieldAndSetter1(int value) {
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:36:25: Error: Conflicts with setter 'staticLateFinalFieldAndSetter1'.
+//   static late final int staticLateFinalFieldAndSetter1;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:41:19: Error: Conflicts with the implicit setter of the field 'staticLateFinalFieldAndSetter2'.
+//   static void set staticLateFinalFieldAndSetter2(int value) {
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:45:25: Error: Conflicts with setter 'staticLateFinalFieldAndSetter2'.
+//   static late final int staticLateFinalFieldAndSetter2;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:73:19: Error: 'staticMethodAndSetter1' is already declared in this scope.
+//   static void set staticMethodAndSetter1(int value) {
+//                   ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:72:14: Context: Previous declaration of 'staticMethodAndSetter1'.
+//   static int staticMethodAndSetter1() => 1;
+//              ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:81:14: Error: 'staticMethodAndSetter2' is already declared in this scope.
+//   static int staticMethodAndSetter2() => 1;
+//              ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:77:19: Context: Previous declaration of 'staticMethodAndSetter2'.
+//   static void set staticMethodAndSetter2(int value) {
+//                   ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:85:9: Error: Can't use 'staticMethod' because it is declared more than once.
+//   Class.staticMethod();
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:86:10: Error: Can't use 'staticMethod' because it is declared more than once.
+//   (Class.staticMethod)();
+//          ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:87:9: Error: Can't use 'staticGetter' because it is declared more than once.
+//   Class.staticGetter;
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:88:9: Error: Can't use 'staticSetter' because it is declared more than once.
+//   Class.staticSetter = 0;
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:88:22: Error: Can't assign to this.
+//   Class.staticSetter = 0;
+//                      ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:89:9: Error: Can't use 'staticField' because it is declared more than once.
+//   Class.staticField;
+//         ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:90:9: Error: Can't use 'staticField' because it is declared more than once.
+//   Class.staticField = 0;
+//         ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:90:21: Error: Can't assign to this.
+//   Class.staticField = 0;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:91:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+//   Class.staticDuplicateFieldAndSetter;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:92:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+//   Class.staticDuplicateFieldAndSetter = 0;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:92:39: Error: Can't assign to this.
+//   Class.staticDuplicateFieldAndSetter = 0;
+//                                       ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:94:9: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+//   Class.staticFieldAndDuplicateSetter = 0;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:95:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+//   Class.staticDuplicateFieldAndDuplicateSetter;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:96:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+//   Class.staticDuplicateFieldAndDuplicateSetter = 0;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:96:48: Error: Can't assign to this.
+//   Class.staticDuplicateFieldAndDuplicateSetter = 0;
+//                                                ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:97:9: Error: Setter not found: 'staticMethodAndSetter1'.
+//   Class.staticMethodAndSetter1 = 0;
+//         ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static.dart:98:9: Error: Setter not found: 'staticMethodAndSetter2'.
+//   Class.staticMethodAndSetter2 = 0;
+//         ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  static field core::int staticField = null;
+  static field core::int staticFieldAndSetter1 = 1;
+  static field core::int staticFieldAndSetter2 = 1;
+  late static final [setter] field core::int staticLateFinalFieldAndSetter1;
+  late static final [setter] field core::int staticLateFinalFieldAndSetter2;
+  static final field core::int staticDuplicateFieldAndSetter = null;
+  static final field core::int staticFieldAndDuplicateSetter = 1;
+  static final field core::int staticDuplicateFieldAndDuplicateSetter = null;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  static method staticMethod() → core::int
+    return 1;
+  static get staticGetter() → core::int
+    return 1;
+  static set staticSetter(dynamic value) → void {
+    self::result = 1;
+  }
+  static set staticDuplicateFieldAndSetter(core::int value) → void {
+    self::result = 3;
+  }
+  static set staticFieldAndDuplicateSetter(core::int value) → void {
+    self::result = 2;
+  }
+  static set staticDuplicateFieldAndDuplicateSetter(core::int value) → void {
+    self::result = 3;
+  }
+  static method staticMethodAndSetter1() → core::int
+    return 1;
+  static set staticMethodAndSetter1(core::int value) → void {
+    self::result = 2;
+  }
+  static set staticMethodAndSetter2(core::int value) → void {
+    self::result = 2;
+  }
+  static method staticMethodAndSetter2() → core::int
+    return 1;
+}
+static field dynamic result;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:85:9: Error: Can't use 'staticMethod' because it is declared more than once.
+  Class.staticMethod();
+        ^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:86:10: Error: Can't use 'staticMethod' because it is declared more than once.
+  (Class.staticMethod)();
+         ^^^^^^^^^^^^"{dynamic}.call();
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:87:9: Error: Can't use 'staticGetter' because it is declared more than once.
+  Class.staticGetter;
+        ^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:88:22: Error: Can't assign to this.
+  Class.staticSetter = 0;
+                     ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:89:9: Error: Can't use 'staticField' because it is declared more than once.
+  Class.staticField;
+        ^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:90:21: Error: Can't assign to this.
+  Class.staticField = 0;
+                    ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:91:9: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+  Class.staticDuplicateFieldAndSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:92:39: Error: Can't assign to this.
+  Class.staticDuplicateFieldAndSetter = 0;
+                                      ^";
+  self::Class::staticFieldAndDuplicateSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:94:9: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+  Class.staticFieldAndDuplicateSetter = 0;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:95:9: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+  Class.staticDuplicateFieldAndDuplicateSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:96:48: Error: Can't assign to this.
+  Class.staticDuplicateFieldAndDuplicateSetter = 0;
+                                               ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:97:9: Error: Setter not found: 'staticMethodAndSetter1'.
+  Class.staticMethodAndSetter1 = 0;
+        ^^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static.dart:98:9: Error: Setter not found: 'staticMethodAndSetter2'.
+  Class.staticMethodAndSetter2 = 0;
+        ^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+  self::result = null;
+  self::Class::staticFieldAndSetter1 = 0;
+  self::expect(null, self::result);
+  self::expect(0, self::Class::staticFieldAndSetter1);
+  self::result = null;
+  self::Class::staticFieldAndSetter2 = 0;
+  self::expect(null, self::result);
+  self::expect(0, self::Class::staticFieldAndSetter2);
+  self::result = null;
+  self::Class::staticLateFinalFieldAndSetter1 = 0;
+  self::expect(null, self::result);
+  self::expect(0, self::Class::staticLateFinalFieldAndSetter1);
+  self::result = null;
+  self::Class::staticLateFinalFieldAndSetter2 = 0;
+  self::expect(null, self::result);
+  self::expect(0, self::Class::staticLateFinalFieldAndSetter2);
+  self::expect(1, self::Class::staticMethodAndSetter1());
+  self::expect(1, self::Class::staticMethodAndSetter2());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print(e);
+    return;
+  }
+  throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.modular.expect
new file mode 100644
index 0000000..925247a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_static_extension.dart.weak.modular.expect
@@ -0,0 +1,310 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:9:14: Error: 'staticMethod' is already declared in this scope.
+//   static int staticMethod() => 2;
+//              ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:8:14: Context: Previous declaration of 'staticMethod'.
+//   static int staticMethod() => 1;
+//              ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:12:18: Error: 'staticGetter' is already declared in this scope.
+//   static int get staticGetter => 2;
+//                  ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:11:18: Context: Previous declaration of 'staticGetter'.
+//   static int get staticGetter => 1;
+//                  ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:18:19: Error: 'staticSetter' is already declared in this scope.
+//   static void set staticSetter(value) {
+//                   ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:14:19: Context: Previous declaration of 'staticSetter'.
+//   static void set staticSetter(value) {
+//                   ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:23:14: Error: 'staticField' is already declared in this scope.
+//   static int staticField = 2;
+//              ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:22:14: Context: Previous declaration of 'staticField'.
+//   static int staticField = 1;
+//              ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:48:20: Error: 'staticDuplicateFieldAndSetter' is already declared in this scope.
+//   static final int staticDuplicateFieldAndSetter = 2;
+//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:47:20: Context: Previous declaration of 'staticDuplicateFieldAndSetter'.
+//   static final int staticDuplicateFieldAndSetter = 1;
+//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:58:19: Error: 'staticFieldAndDuplicateSetter' is already declared in this scope.
+//   static void set staticFieldAndDuplicateSetter(int value) {
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:54:19: Context: Previous declaration of 'staticFieldAndDuplicateSetter'.
+//   static void set staticFieldAndDuplicateSetter(int value) {
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:63:20: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+//   static final int staticDuplicateFieldAndDuplicateSetter = 2;
+//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:62:20: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+//   static final int staticDuplicateFieldAndDuplicateSetter = 1;
+//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:68:19: Error: 'staticDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+//   static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:64:19: Context: Previous declaration of 'staticDuplicateFieldAndDuplicateSetter'.
+//   static void set staticDuplicateFieldAndDuplicateSetter(int value) {
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:26:19: Error: Conflicts with the implicit setter of the field 'staticFieldAndSetter1'.
+//   static void set staticFieldAndSetter1(int value) {
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:25:14: Error: Conflicts with setter 'staticFieldAndSetter1'.
+//   static int staticFieldAndSetter1 = 1;
+//              ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:30:19: Error: Conflicts with the implicit setter of the field 'staticFieldAndSetter2'.
+//   static void set staticFieldAndSetter2(int value) {
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:34:14: Error: Conflicts with setter 'staticFieldAndSetter2'.
+//   static int staticFieldAndSetter2 = 1;
+//              ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:37:19: Error: Conflicts with the implicit setter of the field 'staticLateFinalFieldAndSetter1'.
+//   static void set staticLateFinalFieldAndSetter1(int value) {
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:36:25: Error: Conflicts with setter 'staticLateFinalFieldAndSetter1'.
+//   static late final int staticLateFinalFieldAndSetter1;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:41:19: Error: Conflicts with the implicit setter of the field 'staticLateFinalFieldAndSetter2'.
+//   static void set staticLateFinalFieldAndSetter2(int value) {
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:45:25: Error: Conflicts with setter 'staticLateFinalFieldAndSetter2'.
+//   static late final int staticLateFinalFieldAndSetter2;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:73:19: Error: Conflicts with member 'staticMethodAndSetter1'.
+//   static void set staticMethodAndSetter1(int value) {
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:72:14: Error: Conflicts with setter 'staticMethodAndSetter1'.
+//   static int staticMethodAndSetter1() => 1;
+//              ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:77:19: Error: Conflicts with member 'staticMethodAndSetter2'.
+//   static void set staticMethodAndSetter2(int value) {
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:81:14: Error: Conflicts with setter 'staticMethodAndSetter2'.
+//   static int staticMethodAndSetter2() => 1;
+//              ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:85:13: Error: Can't use 'staticMethod' because it is declared more than once.
+//   Extension.staticMethod();
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:86:14: Error: Can't use 'staticMethod' because it is declared more than once.
+//   (Extension.staticMethod)();
+//              ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:87:13: Error: Can't use 'staticGetter' because it is declared more than once.
+//   Extension.staticGetter;
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:88:13: Error: Can't use 'staticSetter' because it is declared more than once.
+//   Extension.staticSetter = 0;
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:88:26: Error: Can't assign to this.
+//   Extension.staticSetter = 0;
+//                          ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:89:13: Error: Can't use 'staticField' because it is declared more than once.
+//   Extension.staticField;
+//             ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:90:13: Error: Can't use 'staticField' because it is declared more than once.
+//   Extension.staticField = 0;
+//             ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:90:25: Error: Can't assign to this.
+//   Extension.staticField = 0;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:91:13: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+//   Extension.staticDuplicateFieldAndSetter;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:92:13: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+//   Extension.staticDuplicateFieldAndSetter = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:92:43: Error: Can't assign to this.
+//   Extension.staticDuplicateFieldAndSetter = 0;
+//                                           ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:94:13: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+//   Extension.staticFieldAndDuplicateSetter = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:95:13: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+//   Extension.staticDuplicateFieldAndDuplicateSetter;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:96:13: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+//   Extension.staticDuplicateFieldAndDuplicateSetter = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:96:52: Error: Can't assign to this.
+//   Extension.staticDuplicateFieldAndDuplicateSetter = 0;
+//                                                    ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:97:13: Error: Setter not found: 'staticMethodAndSetter1'.
+//   Extension.staticMethodAndSetter1 = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:98:13: Error: Setter not found: 'staticMethodAndSetter2'.
+//   Extension.staticMethodAndSetter2 = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension Extension on core::int {
+  static method staticMethod = self::Extension|staticMethod;
+  static get staticGetter = get self::Extension|staticGetter;
+  static field staticField = self::Extension|staticField;
+  static field staticFieldAndSetter1 = self::Extension|staticFieldAndSetter1;
+  static field staticFieldAndSetter2 = self::Extension|staticFieldAndSetter2;
+  static field staticLateFinalFieldAndSetter1 = self::Extension|staticLateFinalFieldAndSetter1;
+  static field staticLateFinalFieldAndSetter2 = self::Extension|staticLateFinalFieldAndSetter2;
+  static field staticDuplicateFieldAndSetter = self::Extension|staticDuplicateFieldAndSetter;
+  static field staticFieldAndDuplicateSetter = self::Extension|staticFieldAndDuplicateSetter;
+  static field staticDuplicateFieldAndDuplicateSetter = self::Extension|staticDuplicateFieldAndDuplicateSetter;
+  static method staticMethodAndSetter1 = self::Extension|staticMethodAndSetter1;
+  static method staticMethodAndSetter2 = self::Extension|staticMethodAndSetter2;
+  static set staticSetter = set self::Extension|staticSetter;
+  static set staticDuplicateFieldAndSetter = set self::Extension|staticDuplicateFieldAndSetter;
+  static set staticFieldAndDuplicateSetter = set self::Extension|staticFieldAndDuplicateSetter;
+  static set staticDuplicateFieldAndDuplicateSetter = set self::Extension|staticDuplicateFieldAndDuplicateSetter;
+  static set staticMethodAndSetter1 = set self::Extension|staticMethodAndSetter1;
+  static set staticMethodAndSetter2 = set self::Extension|staticMethodAndSetter2;
+}
+static field dynamic result;
+static field core::int Extension|staticField;
+static field core::int Extension|staticFieldAndSetter1 = 1;
+static field core::int Extension|staticFieldAndSetter2 = 1;
+late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter1;
+late static final [setter] field core::int Extension|staticLateFinalFieldAndSetter2;
+static final field core::int Extension|staticDuplicateFieldAndSetter;
+static final field core::int Extension|staticFieldAndDuplicateSetter = 1;
+static final field core::int Extension|staticDuplicateFieldAndDuplicateSetter;
+static method Extension|staticMethod() → core::int
+  return 1;
+static get Extension|staticGetter() → core::int
+  return 1;
+static set Extension|staticSetter(dynamic value) → void {
+  self::result = 1;
+}
+static set Extension|staticDuplicateFieldAndSetter(core::int value) → void {
+  self::result = 3;
+}
+static set Extension|staticFieldAndDuplicateSetter(core::int value) → void {
+  self::result = 2;
+}
+static set Extension|staticDuplicateFieldAndDuplicateSetter(core::int value) → void {
+  self::result = 3;
+}
+static method Extension|staticMethodAndSetter1() → core::int
+  return 1;
+static set Extension|staticMethodAndSetter1(core::int value) → void {
+  self::result = 2;
+}
+static set Extension|staticMethodAndSetter2(core::int value) → void {
+  self::result = 2;
+}
+static method Extension|staticMethodAndSetter2() → core::int
+  return 1;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:85:13: Error: Can't use 'staticMethod' because it is declared more than once.
+  Extension.staticMethod();
+            ^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:86:14: Error: Can't use 'staticMethod' because it is declared more than once.
+  (Extension.staticMethod)();
+             ^^^^^^^^^^^^"{dynamic}.call();
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:87:13: Error: Can't use 'staticGetter' because it is declared more than once.
+  Extension.staticGetter;
+            ^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:88:26: Error: Can't assign to this.
+  Extension.staticSetter = 0;
+                         ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:89:13: Error: Can't use 'staticField' because it is declared more than once.
+  Extension.staticField;
+            ^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:90:25: Error: Can't assign to this.
+  Extension.staticField = 0;
+                        ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:91:13: Error: Can't use 'staticDuplicateFieldAndSetter' because it is declared more than once.
+  Extension.staticDuplicateFieldAndSetter;
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:92:43: Error: Can't assign to this.
+  Extension.staticDuplicateFieldAndSetter = 0;
+                                          ^";
+  self::Extension|staticFieldAndDuplicateSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:94:13: Error: Setter not found: 'staticFieldAndDuplicateSetter'.
+  Extension.staticFieldAndDuplicateSetter = 0;
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:95:13: Error: Can't use 'staticDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+  Extension.staticDuplicateFieldAndDuplicateSetter;
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:96:52: Error: Can't assign to this.
+  Extension.staticDuplicateFieldAndDuplicateSetter = 0;
+                                                   ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:97:13: Error: Setter not found: 'staticMethodAndSetter1'.
+  Extension.staticMethodAndSetter1 = 0;
+            ^^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_static_extension.dart:98:13: Error: Setter not found: 'staticMethodAndSetter2'.
+  Extension.staticMethodAndSetter2 = 0;
+            ^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+  self::result = null;
+  self::Extension|staticFieldAndSetter1 = 0;
+  self::expect(null, self::result);
+  self::expect(0, self::Extension|staticFieldAndSetter1);
+  self::result = null;
+  self::Extension|staticFieldAndSetter2 = 0;
+  self::expect(null, self::result);
+  self::expect(0, self::Extension|staticFieldAndSetter2);
+  self::result = null;
+  self::Extension|staticLateFinalFieldAndSetter1 = 0;
+  self::expect(null, self::result);
+  self::expect(0, self::Extension|staticLateFinalFieldAndSetter1);
+  self::result = null;
+  self::Extension|staticLateFinalFieldAndSetter2 = 0;
+  self::expect(null, self::result);
+  self::expect(0, self::Extension|staticLateFinalFieldAndSetter2);
+  self::expect(1, self::Extension|staticMethodAndSetter1());
+  self::expect(1, self::Extension|staticMethodAndSetter2());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print(e);
+    return;
+  }
+  throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.modular.expect
new file mode 100644
index 0000000..85c4c69
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/duplicates_toplevel.dart.weak.modular.expect
@@ -0,0 +1,400 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:8:5: Error: 'topLevelMethod' is already declared in this scope.
+// int topLevelMethod() => 2;
+//     ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:7:5: Context: Previous declaration of 'topLevelMethod'.
+// int topLevelMethod() => 1;
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:11:9: Error: 'topLevelGetter' is already declared in this scope.
+// int get topLevelGetter => 2;
+//         ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:10:9: Context: Previous declaration of 'topLevelGetter'.
+// int get topLevelGetter => 1;
+//         ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:17:10: Error: 'topLevelSetter' is already declared in this scope.
+// void set topLevelSetter(value) {
+//          ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:13:10: Context: Previous declaration of 'topLevelSetter'.
+// void set topLevelSetter(value) {
+//          ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:22:5: Error: 'topLevelField' is already declared in this scope.
+// int topLevelField = 2;
+//     ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:21:5: Context: Previous declaration of 'topLevelField'.
+// int topLevelField = 1;
+//     ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:47:11: Error: 'topLevelDuplicateFieldAndSetter' is already declared in this scope.
+// final int topLevelDuplicateFieldAndSetter = 2;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:46:11: Context: Previous declaration of 'topLevelDuplicateFieldAndSetter'.
+// final int topLevelDuplicateFieldAndSetter = 1;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:57:10: Error: 'topLevelFieldAndDuplicateSetter' is already declared in this scope.
+// void set topLevelFieldAndDuplicateSetter(int value) {
+//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:53:10: Context: Previous declaration of 'topLevelFieldAndDuplicateSetter'.
+// void set topLevelFieldAndDuplicateSetter(int value) {
+//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:62:11: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// final int topLevelDuplicateFieldAndDuplicateSetter = 2;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:61:11: Context: Previous declaration of 'topLevelDuplicateFieldAndDuplicateSetter'.
+// final int topLevelDuplicateFieldAndDuplicateSetter = 1;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:67:10: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is already declared in this scope.
+// void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
+//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:63:10: Context: Previous declaration of 'topLevelDuplicateFieldAndDuplicateSetter'.
+// void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
+//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart: Error: 'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:25:10: Error: Conflicts with the implicit setter of the field 'topLevelFieldAndSetter1'.
+// void set topLevelFieldAndSetter1(int value) {
+//          ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:24:5: Error: Conflicts with setter 'topLevelFieldAndSetter1'.
+// int topLevelFieldAndSetter1 = 1;
+//     ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:29:10: Error: Conflicts with the implicit setter of the field 'topLevelFieldAndSetter2'.
+// void set topLevelFieldAndSetter2(int value) {
+//          ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:33:5: Error: Conflicts with setter 'topLevelFieldAndSetter2'.
+// int topLevelFieldAndSetter2 = 1;
+//     ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:36:10: Error: Conflicts with the implicit setter of the field 'topLevelLateFinalFieldAndSetter1'.
+// void set topLevelLateFinalFieldAndSetter1(int value) {
+//          ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:35:16: Error: Conflicts with setter 'topLevelLateFinalFieldAndSetter1'.
+// late final int topLevelLateFinalFieldAndSetter1;
+//                ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:40:10: Error: Conflicts with the implicit setter of the field 'topLevelLateFinalFieldAndSetter2'.
+// void set topLevelLateFinalFieldAndSetter2(int value) {
+//          ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:44:16: Error: Conflicts with setter 'topLevelLateFinalFieldAndSetter2'.
+// late final int topLevelLateFinalFieldAndSetter2;
+//                ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:72:10: Error: Conflicts with member 'topLevelMethodAndSetter1'.
+// void set topLevelMethodAndSetter1(int value) {
+//          ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:71:5: Error: Conflicts with setter 'topLevelMethodAndSetter1'.
+// int topLevelMethodAndSetter1() => 1;
+//     ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:76:10: Error: Conflicts with member 'topLevelMethodAndSetter2'.
+// void set topLevelMethodAndSetter2(int value) {
+//          ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:80:5: Error: Conflicts with setter 'topLevelMethodAndSetter2'.
+// int topLevelMethodAndSetter2() => 1;
+//     ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:82:13: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// var field = topLevelMethod;
+//             ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: Can't use 'topLevelMethod' because it is declared more than once.
+// @topLevelMethod
+//  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
+// @topLevelMethod
+//  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod();
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   (topLevelMethod)();
+//    ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:7: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   if (topLevelMethod) {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   @topLevelMethod
+//    ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:4: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
+//   @topLevelMethod
+//    ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:24: Error: Expected ':' before this.
+//     case topLevelMethod;
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:10: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//     case topLevelMethod;
+//          ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod || topLevelMethod;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod || topLevelMethod;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod + 0;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:97:18: Error: '~' isn't a binary operator.
+//   topLevelMethod ~ 0;
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod ?? topLevelMethod;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod ?? topLevelMethod;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:99:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod?.foo;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:100:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+//   topLevelMethod?.foo();
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:101:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+//   topLevelGetter;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:102:18: Error: Can't assign to this.
+//   topLevelSetter = 0;
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:103:3: Error: Can't use 'topLevelField' because it is declared more than once.
+//   topLevelField;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:104:17: Error: Can't assign to this.
+//   topLevelField = 0;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:105:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+//   topLevelDuplicateFieldAndSetter;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:106:35: Error: Can't assign to this.
+//   topLevelDuplicateFieldAndSetter = 0;
+//                                   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:108:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+//   topLevelFieldAndDuplicateSetter = 0;
+//   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:109:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+//   topLevelDuplicateFieldAndDuplicateSetter;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:110:44: Error: Can't assign to this.
+//   topLevelDuplicateFieldAndDuplicateSetter = 0;
+//                                            ^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:111:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+//   topLevelMethodAndSetter1 = 0;
+//   ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:112:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+//   topLevelMethodAndSetter2 = 0;
+//   ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static field dynamic result;
+static field core::int topLevelField;
+static field core::int topLevelFieldAndSetter1 = 1;
+static field core::int topLevelFieldAndSetter2 = 1;
+late static final [setter] field core::int topLevelLateFinalFieldAndSetter1;
+late static final [setter] field core::int topLevelLateFinalFieldAndSetter2;
+static final field core::int topLevelDuplicateFieldAndSetter;
+static final field core::int topLevelFieldAndDuplicateSetter = 1;
+static final field core::int topLevelDuplicateFieldAndDuplicateSetter;
+static field invalid-type field = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:82:13: Error: Can't use 'topLevelMethod' because it is declared more than once.
+var field = topLevelMethod;
+            ^";
+static const field dynamic _exports# = #C1 /*isLegacy*/;
+static method topLevelMethod() → core::int
+  return 1;
+static get topLevelGetter() → core::int
+  return 1;
+static set topLevelSetter(dynamic value) → void {
+  self::result = 1;
+}
+static set topLevelDuplicateFieldAndSetter(core::int value) → void {
+  self::result = 3;
+}
+static set topLevelFieldAndDuplicateSetter(core::int value) → void {
+  self::result = 2;
+}
+static set topLevelDuplicateFieldAndDuplicateSetter(core::int value) → void {
+  self::result = 3;
+}
+static method topLevelMethodAndSetter1() → core::int
+  return 1;
+static set topLevelMethodAndSetter1(core::int value) → void {
+  self::result = 2;
+}
+static set topLevelMethodAndSetter2(core::int value) → void {
+  self::result = 2;
+}
+static method topLevelMethodAndSetter2() → core::int
+  return 1;
+@invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:84:2: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
+@topLevelMethod
+ ^"
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:86:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod();
+  ^"{dynamic}.call();
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:87:4: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  (topLevelMethod)();
+   ^"{dynamic}.call();
+  if(invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:88:7: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  if (topLevelMethod) {}
+      ^") {
+  }
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:89:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod;
+  ^";
+  @invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:90:4: Error: This can't be used as an annotation; an annotation should be a reference to a compile-time constant variable, or a call to a constant constructor.
+  @topLevelMethod
+   ^" dynamic foo;
+  switch(null) {
+    #L1:
+    case invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:93:10: Error: Can't use 'topLevelMethod' because it is declared more than once.
+    case topLevelMethod;
+         ^":
+      {
+        ;
+      }
+  }
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod || topLevelMethod;
+  ^" || invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:95:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod || topLevelMethod;
+                    ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:96:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod + 0;
+  ^"{<invalid>}.+(0);
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:97:18: Error: '~' isn't a binary operator.
+  topLevelMethod ~ 0;
+                 ^";
+  let final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod ?? topLevelMethod;
+  ^" in #t1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:98:21: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod ?? topLevelMethod;
+                    ^" : #t1;
+  let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:99:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod?.foo;
+  ^" in #t2 == null ?{invalid-type} null : #t2{<invalid>}.foo;
+  let final invalid-type #t3 = invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:100:3: Error: Can't use 'topLevelMethod' because it is declared more than once.
+  topLevelMethod?.foo();
+  ^" in #t3 == null ?{dynamic} null : #t3{dynamic}.foo();
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:101:3: Error: Can't use 'topLevelGetter' because it is declared more than once.
+  topLevelGetter;
+  ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:102:18: Error: Can't assign to this.
+  topLevelSetter = 0;
+                 ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:103:3: Error: Can't use 'topLevelField' because it is declared more than once.
+  topLevelField;
+  ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:104:17: Error: Can't assign to this.
+  topLevelField = 0;
+                ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:105:3: Error: Can't use 'topLevelDuplicateFieldAndSetter' because it is declared more than once.
+  topLevelDuplicateFieldAndSetter;
+  ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:106:35: Error: Can't assign to this.
+  topLevelDuplicateFieldAndSetter = 0;
+                                  ^";
+  self::topLevelFieldAndDuplicateSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:108:3: Error: Setter not found: 'topLevelFieldAndDuplicateSetter'.
+  topLevelFieldAndDuplicateSetter = 0;
+  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:109:3: Error: Can't use 'topLevelDuplicateFieldAndDuplicateSetter' because it is declared more than once.
+  topLevelDuplicateFieldAndDuplicateSetter;
+  ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:110:44: Error: Can't assign to this.
+  topLevelDuplicateFieldAndDuplicateSetter = 0;
+                                           ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:111:3: Error: Setter not found: 'topLevelMethodAndSetter1'.
+  topLevelMethodAndSetter1 = 0;
+  ^^^^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/duplicates_toplevel.dart:112:3: Error: Setter not found: 'topLevelMethodAndSetter2'.
+  topLevelMethodAndSetter2 = 0;
+  ^^^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {
+  self::result = null;
+  self::topLevelFieldAndSetter1 = 0;
+  self::expect(null, self::result);
+  self::expect(0, self::topLevelFieldAndSetter1);
+  self::result = null;
+  self::topLevelFieldAndSetter2 = 0;
+  self::expect(null, self::result);
+  self::expect(0, self::topLevelFieldAndSetter2);
+  self::result = null;
+  self::topLevelLateFinalFieldAndSetter1 = 0;
+  self::expect(null, self::result);
+  self::expect(0, self::topLevelLateFinalFieldAndSetter1);
+  self::result = null;
+  self::topLevelLateFinalFieldAndSetter2 = 0;
+  self::expect(null, self::result);
+  self::expect(0, self::topLevelLateFinalFieldAndSetter2);
+  self::expect(1, self::topLevelMethodAndSetter1());
+  self::expect(1, self::topLevelMethodAndSetter2());
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f) → dynamic {
+  try {
+    f(){() → dynamic};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print(e);
+    return;
+  }
+  throw "Expected exception.";
+}
+
+constants  {
+  #C1 = "{\"topLevelSetter\":\"'topLevelSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelFieldAndDuplicateSetter\":\"'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\",\"topLevelDuplicateFieldAndDuplicateSetter\":\"'topLevelDuplicateFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart' and 'pkg/front_end/testcases/nnbd/duplicates_toplevel.dart'.\"}"
+}
diff --git a/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.modular.expect
new file mode 100644
index 0000000..0d1dd3b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/dynamic_object_call.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/dynamic_object_call.dart:21:22: Error: 'hashCode' isn't a function or method and can't be invoked.
+//   var v5 = c.hashCode();
+//                      ^^^^...
+//
+// pkg/front_end/testcases/nnbd/dynamic_object_call.dart:23:27: Error: The argument type 'String' can't be assigned to the parameter type 'Invocation'.
+//  - 'Invocation' is from 'dart:core'.
+//   var v6 = c.noSuchMethod("foo");
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Object o, {core::String foo = #C2}) → dynamic
+    return 42;
+  @#C1
+  method toString({core::String foo = #C2}) → core::String
+    return "foo";
+}
+static method main() → dynamic {}
+static method test() → dynamic {
+  dynamic c = new self::Class::•();
+  core::String v1 = c.{core::Object::toString}(){() → core::String};
+  dynamic v2 = c{dynamic}.toString(foo: 42);
+  () → core::String v3 = c.{core::Object::toString}{() → core::String};
+  core::int v4 = c.{core::Object::hashCode}{core::int};
+  dynamic v5 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:21:22: Error: 'hashCode' isn't a function or method and can't be invoked.
+  var v5 = c.hashCode();
+                     ^^^^..." in c.{core::Object::hashCode}{core::int}{<unresolved>}.call();
+  dynamic v6 = c.{core::Object::noSuchMethod}(invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:23:27: Error: The argument type 'String' can't be assigned to the parameter type 'Invocation'.
+ - 'Invocation' is from 'dart:core'.
+  var v6 = c.noSuchMethod(\"foo\");
+                          ^" in "foo" as{TypeError,ForNonNullableByDefault} core::Invocation){(core::Invocation) → dynamic};
+  dynamic v7 = c{dynamic}.noSuchMethod("foo", foo: 42);
+  (core::Invocation) → dynamic v8 = c.{core::Object::noSuchMethod}{(core::Invocation) → dynamic};
+}
+
+constants  {
+  #C1 = core::_Override {}
+  #C2 = ""
+}
diff --git a/pkg/front_end/testcases/nnbd/export_main_declaration.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/export_main_declaration.dart.weak.modular.expect
new file mode 100644
index 0000000..c4ad76f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/export_main_declaration.dart.weak.modular.expect
@@ -0,0 +1,416 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_declaration.dart" as mai;
+additionalExports = (mai::main)
+
+import "org-dartlang-testcase:///export_main_declaration_class_lib.dart" as class_lib;
+import "org-dartlang-testcase:///export_main_declaration_extension_lib.dart" as extension_lib;
+import "org-dartlang-testcase:///export_main_declaration_field_lib.dart" as field_lib;
+import "org-dartlang-testcase:///export_main_declaration_getter_lib.dart" as getter_lib;
+import "org-dartlang-testcase:///export_main_declaration_method_extra_optional_parameters_lib.dart" as method_extra_optional_parameters_lib;
+import "org-dartlang-testcase:///export_main_declaration_method_named_parameters_lib.dart" as method_named_parameters_lib;
+import "org-dartlang-testcase:///export_main_declaration_method_one_optional_parameter_lib.dart" as method_one_optional_parameter_lib;
+import "org-dartlang-testcase:///export_main_declaration_method_one_parameter_lib.dart" as method_one_parameter_lib;
+import "org-dartlang-testcase:///export_main_declaration_method_one_required_optional_lib.dart" as method_one_required_optional_lib;
+import "org-dartlang-testcase:///export_main_declaration_method_required_named_parameters_lib.dart" as method_required_named_parameters_lib;
+import "org-dartlang-testcase:///export_main_declaration_method_too_many_parameters_lib.dart" as method_too_many_parameters_lib;
+import "org-dartlang-testcase:///export_main_declaration_method_two_optional_parameters_lib.dart" as method_two_optional_parameters_lib;
+import "org-dartlang-testcase:///export_main_declaration_method_two_parameters_lib.dart" as method_two_parameters_lib;
+import "org-dartlang-testcase:///export_main_declaration_method_wrong_parameter_type_lib.dart" as method_wrong_parameter_type_lib;
+import "org-dartlang-testcase:///export_main_declaration_setter_lib.dart" as setter_lib;
+import "org-dartlang-testcase:///export_main_declaration_typedef_lib.dart" as typedef_lib;
+export "org-dartlang-testcase:///main_declaration.dart";
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/export_main_declaration_class_lib.dart: Error: The exported 'main' declaration must be a function declaration.
+// pkg/front_end/testcases/nnbd/main_declaration_class_lib.dart:5:7: Context: This is exported 'main' declaration.
+// class main /* error */ {}
+//       ^
+//
+import self as self2;
+import "main_declaration_class_lib.dart" as mai2;
+additionalExports = (mai2::main)
+
+export "org-dartlang-testcase:///main_declaration_class_lib.dart";
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/export_main_declaration_extension_lib.dart: Error: The exported 'main' declaration must be a function declaration.
+// pkg/front_end/testcases/nnbd/main_declaration_extension_lib.dart:5:11: Context: This is exported 'main' declaration.
+// extension main /* error */ on Object {}
+//           ^
+//
+import self as self3;
+import "main_declaration_extension_lib.dart" as mai3;
+additionalExports = (mai3::main)
+
+export "org-dartlang-testcase:///main_declaration_extension_lib.dart";
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/export_main_declaration_field_lib.dart: Error: The exported 'main' declaration must be a function declaration.
+// pkg/front_end/testcases/nnbd/main_declaration_field_lib.dart:5:17: Context: This is exported 'main' declaration.
+// void Function() main /* error */ = () {};
+//                 ^^^^
+//
+import self as self4;
+import "main_declaration_field_lib.dart" as mai4;
+additionalExports = (mai4::main,
+  mai4::main)
+
+export "org-dartlang-testcase:///main_declaration_field_lib.dart";
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/export_main_declaration_getter_lib.dart: Error: The exported 'main' declaration must be a function declaration.
+// pkg/front_end/testcases/nnbd/main_declaration_getter_lib.dart:5:21: Context: This is exported 'main' declaration.
+// void Function() get main /* error */ => () {};
+//                     ^^^^
+//
+import self as self5;
+import "main_declaration_getter_lib.dart" as mai5;
+additionalExports = (mai5::main)
+
+export "org-dartlang-testcase:///main_declaration_getter_lib.dart";
+
+
+library /*isNonNullableByDefault*/;
+import self as self6;
+import "main_declaration_method_extra_optional_parameters_lib.dart" as mai6;
+additionalExports = (mai6::main)
+
+export "org-dartlang-testcase:///main_declaration_method_extra_optional_parameters_lib.dart";
+
+
+library /*isNonNullableByDefault*/;
+import self as self7;
+import "main_declaration_method_named_parameters_lib.dart" as mai7;
+additionalExports = (mai7::main)
+
+export "org-dartlang-testcase:///main_declaration_method_named_parameters_lib.dart";
+
+
+library /*isNonNullableByDefault*/;
+import self as self8;
+import "main_declaration_method_one_optional_parameter_lib.dart" as mai8;
+additionalExports = (mai8::main)
+
+export "org-dartlang-testcase:///main_declaration_method_one_optional_parameter_lib.dart";
+
+
+library /*isNonNullableByDefault*/;
+import self as self9;
+import "main_declaration_method_one_parameter_lib.dart" as mai9;
+additionalExports = (mai9::main)
+
+export "org-dartlang-testcase:///main_declaration_method_one_parameter_lib.dart";
+
+
+library /*isNonNullableByDefault*/;
+import self as self10;
+import "main_declaration_method_one_required_optional_lib.dart" as mai10;
+additionalExports = (mai10::main)
+
+export "org-dartlang-testcase:///main_declaration_method_one_required_optional_lib.dart";
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/export_main_declaration_method_required_named_parameters_lib.dart: Error: The exported 'main' method cannot have required named parameters.
+// pkg/front_end/testcases/nnbd/main_declaration_method_required_named_parameters_lib.dart:5:6: Context: This is exported 'main' declaration.
+// void main({required List<String> args}) /* error */ {}
+//      ^^^^
+//
+import self as self11;
+import "main_declaration_method_required_named_parameters_lib.dart" as mai11;
+additionalExports = (mai11::main)
+
+export "org-dartlang-testcase:///main_declaration_method_required_named_parameters_lib.dart";
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/export_main_declaration_method_too_many_parameters_lib.dart: Error: The exported 'main' method must have at most 2 required parameters.
+// pkg/front_end/testcases/nnbd/main_declaration_method_too_many_parameters_lib.dart:5:6: Context: This is exported 'main' declaration.
+// void main(List<String> args, a, b) /* error */ {}
+//      ^^^^
+//
+import self as self12;
+import "main_declaration_method_too_many_parameters_lib.dart" as mai12;
+additionalExports = (mai12::main)
+
+export "org-dartlang-testcase:///main_declaration_method_too_many_parameters_lib.dart";
+
+
+library /*isNonNullableByDefault*/;
+import self as self13;
+import "main_declaration_method_two_optional_parameters_lib.dart" as mai13;
+additionalExports = (mai13::main)
+
+export "org-dartlang-testcase:///main_declaration_method_two_optional_parameters_lib.dart";
+
+
+library /*isNonNullableByDefault*/;
+import self as self14;
+import "main_declaration_method_two_parameters_lib.dart" as mai14;
+additionalExports = (mai14::main)
+
+export "org-dartlang-testcase:///main_declaration_method_two_parameters_lib.dart";
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/export_main_declaration_method_wrong_parameter_type_lib.dart: Error: The type 'Set<String>' of the first parameter of the exported 'main' method is not a supertype of 'List<String>'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// pkg/front_end/testcases/nnbd/main_declaration_method_wrong_parameter_type_lib.dart:5:6: Context: This is exported 'main' declaration.
+// void main(Set<String> args) /* error */ {}
+//      ^^^^
+//
+import self as self15;
+import "main_declaration_method_wrong_parameter_type_lib.dart" as mai15;
+additionalExports = (mai15::main)
+
+export "org-dartlang-testcase:///main_declaration_method_wrong_parameter_type_lib.dart";
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/export_main_declaration_setter_lib.dart: Error: The exported 'main' declaration must be a function declaration.
+// pkg/front_end/testcases/nnbd/main_declaration_setter_lib.dart:5:10: Context: This is exported 'main' declaration.
+// void set main(void Function() f) /* error */ {}
+//          ^^^^
+//
+import self as self16;
+import "main_declaration_setter_lib.dart" as mai16;
+additionalExports = (mai16::main)
+
+export "org-dartlang-testcase:///main_declaration_setter_lib.dart";
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/export_main_declaration_typedef_lib.dart: Error: The exported 'main' declaration must be a function declaration.
+// pkg/front_end/testcases/nnbd/main_declaration_typedef_lib.dart:5:9: Context: This is exported 'main' declaration.
+// typedef main /* error */ = void Function();
+//         ^
+//
+import self as self17;
+import "main_declaration_typedef_lib.dart" as mai17;
+additionalExports = (mai17::main)
+
+export "org-dartlang-testcase:///main_declaration_typedef_lib.dart";
+
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+
+import "org-dartlang-testcase:///main_declaration_class_lib.dart" as class_lib;
+import "org-dartlang-testcase:///main_declaration_extension_lib.dart" as extension_lib;
+import "org-dartlang-testcase:///main_declaration_field_lib.dart" as field_lib;
+import "org-dartlang-testcase:///main_declaration_getter_lib.dart" as getter_lib;
+import "org-dartlang-testcase:///main_declaration_method_extra_optional_parameters_lib.dart" as method_extra_optional_parameters_lib;
+import "org-dartlang-testcase:///main_declaration_method_named_parameters_lib.dart" as method_named_parameters_lib;
+import "org-dartlang-testcase:///main_declaration_method_one_optional_parameter_lib.dart" as method_one_optional_parameter_lib;
+import "org-dartlang-testcase:///main_declaration_method_one_parameter_lib.dart" as method_one_parameter_lib;
+import "org-dartlang-testcase:///main_declaration_method_one_required_optional_lib.dart" as method_one_required_optional_lib;
+import "org-dartlang-testcase:///main_declaration_method_required_named_parameters_lib.dart" as method_required_named_parameters_lib;
+import "org-dartlang-testcase:///main_declaration_method_too_many_parameters_lib.dart" as method_too_many_parameters_lib;
+import "org-dartlang-testcase:///main_declaration_method_two_optional_parameters_lib.dart" as method_two_optional_parameters_lib;
+import "org-dartlang-testcase:///main_declaration_method_two_parameters_lib.dart" as method_two_parameters_lib;
+import "org-dartlang-testcase:///main_declaration_method_wrong_parameter_type_lib.dart" as method_wrong_parameter_type_lib;
+import "org-dartlang-testcase:///main_declaration_setter_lib.dart" as setter_lib;
+import "org-dartlang-testcase:///main_declaration_typedef_lib.dart" as typedef_lib;
+
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_class_lib.dart:5:7: Error: The 'main' declaration must be a function declaration.
+// class main /* error */ {}
+//       ^
+//
+import self as mai2;
+import "dart:core" as core;
+
+class main extends core::Object {
+  synthetic constructor •() → mai2::main
+    : super core::Object::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_extension_lib.dart:5:11: Error: The 'main' declaration must be a function declaration.
+// extension main /* error */ on Object {}
+//           ^
+//
+import self as mai3;
+import "dart:core" as core;
+
+extension main on core::Object {
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_field_lib.dart:5:17: Error: The 'main' declaration must be a function declaration.
+// void Function() main /* error */ = () {};
+//                 ^^^^
+//
+import self as mai4;
+
+static field () → void main = () → void {};
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_getter_lib.dart:5:21: Error: The 'main' declaration must be a function declaration.
+// void Function() get main /* error */ => () {};
+//                     ^^^^
+//
+import self as mai5;
+
+static get main() → () → void
+  return () → void {};
+
+library /*isNonNullableByDefault*/;
+import self as mai6;
+import "dart:core" as core;
+
+static method main(core::List<core::String> args, dynamic other, [dynamic extra = #C1]) → void {}
+
+library /*isNonNullableByDefault*/;
+import self as mai7;
+import "dart:core" as core;
+
+static method main({core::List<core::String> args = #C2}) → void {}
+
+library /*isNonNullableByDefault*/;
+import self as mai8;
+import "dart:core" as core;
+
+static method main([core::List<core::String>? args = #C1]) → void {}
+
+library /*isNonNullableByDefault*/;
+import self as mai9;
+import "dart:core" as core;
+
+static method main(core::List<core::String> args) → void {}
+
+library /*isNonNullableByDefault*/;
+import self as mai10;
+import "dart:core" as core;
+
+static method main(core::List<core::String> args, [dynamic other = #C1]) → void {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_method_required_named_parameters_lib.dart:5:6: Error: The 'main' method cannot have required named parameters.
+// void main({required List<String> args}) /* error */ {}
+//      ^^^^
+//
+import self as mai11;
+import "dart:core" as core;
+
+static method main({required core::List<core::String> args = #C1}) → void {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_method_too_many_parameters_lib.dart:5:6: Error: The 'main' method must have at most 2 required parameters.
+// void main(List<String> args, a, b) /* error */ {}
+//      ^^^^
+//
+import self as mai12;
+import "dart:core" as core;
+
+static method main(core::List<core::String> args, dynamic a, dynamic b) → void {}
+
+library /*isNonNullableByDefault*/;
+import self as mai13;
+import "dart:core" as core;
+
+static method main([core::List<core::String> args = #C2, dynamic other = #C1]) → void {}
+
+library /*isNonNullableByDefault*/;
+import self as mai14;
+import "dart:core" as core;
+
+static method main(core::List<core::String> args, dynamic other) → void {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_method_wrong_parameter_type_lib.dart:5:6: Error: The type 'Set<String>' of the first parameter of the 'main' method is not a supertype of 'List<String>'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// void main(Set<String> args) /* error */ {}
+//      ^^^^
+//
+import self as mai15;
+import "dart:core" as core;
+
+static method main(core::Set<core::String> args) → void {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_setter_lib.dart:5:10: Error: The 'main' declaration must be a function declaration.
+// void set main(void Function() f) /* error */ {}
+//          ^^^^
+//
+import self as mai16;
+
+static set main(() → void f) → void {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_typedef_lib.dart:5:9: Error: The 'main' declaration must be a function declaration.
+// typedef main /* error */ = void Function();
+//         ^
+//
+import self as mai17;
+
+typedef main = () → void;
+
+constants  {
+  #C1 = null
+  #C2 = <core::String*>[]
+}
diff --git a/pkg/front_end/testcases/nnbd/extension_bounds.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/extension_bounds.dart.weak.modular.expect
new file mode 100644
index 0000000..71679c9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/extension_bounds.dart.weak.modular.expect
@@ -0,0 +1,140 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension Extension1<T extends core::Object> on T {
+  method method1 = self::Extension1|method1;
+  tearoff method1 = self::Extension1|get#method1;
+  method method2 = self::Extension1|method2;
+  tearoff method2 = self::Extension1|get#method2;
+  method method3 = self::Extension1|method3;
+  tearoff method3 = self::Extension1|get#method3;
+  method method4 = self::Extension1|method4;
+  tearoff method4 = self::Extension1|get#method4;
+  method method5 = self::Extension1|method5;
+  tearoff method5 = self::Extension1|get#method5;
+}
+extension Extension2<T extends core::String> on T {
+  method method1 = self::Extension2|method1;
+  tearoff method1 = self::Extension2|get#method1;
+  method method2 = self::Extension2|method2;
+  tearoff method2 = self::Extension2|get#method2;
+  method method3 = self::Extension2|method3;
+  tearoff method3 = self::Extension2|get#method3;
+  method method4 = self::Extension2|method4;
+  tearoff method4 = self::Extension2|get#method4;
+  method method5 = self::Extension2|method5;
+  tearoff method5 = self::Extension2|get#method5;
+}
+extension Extension3<T extends dynamic> on T% {
+  method method1 = self::Extension3|method1;
+  tearoff method1 = self::Extension3|get#method1;
+  method method2 = self::Extension3|method2;
+  tearoff method2 = self::Extension3|get#method2;
+  method method3 = self::Extension3|method3;
+  tearoff method3 = self::Extension3|get#method3;
+  method method4 = self::Extension3|method4;
+  tearoff method4 = self::Extension3|get#method4;
+  method method5 = self::Extension3|method5;
+  tearoff method5 = self::Extension3|get#method5;
+}
+extension Extension4<T extends core::Object? = dynamic> on T% {
+  method method1 = self::Extension4|method1;
+  tearoff method1 = self::Extension4|get#method1;
+  method method2 = self::Extension4|method2;
+  tearoff method2 = self::Extension4|get#method2;
+  method method3 = self::Extension4|method3;
+  tearoff method3 = self::Extension4|get#method3;
+  method method4 = self::Extension4|method4;
+  tearoff method4 = self::Extension4|get#method4;
+  method method5 = self::Extension4|method5;
+  tearoff method5 = self::Extension4|get#method5;
+}
+extension Extension5<T extends core::Object?> on T% {
+  method method1 = self::Extension5|method1;
+  tearoff method1 = self::Extension5|get#method1;
+  method method2 = self::Extension5|method2;
+  tearoff method2 = self::Extension5|get#method2;
+  method method3 = self::Extension5|method3;
+  tearoff method3 = self::Extension5|get#method3;
+  method method4 = self::Extension5|method4;
+  tearoff method4 = self::Extension5|get#method4;
+  method method5 = self::Extension5|method5;
+  tearoff method5 = self::Extension5|get#method5;
+}
+static method Extension1|method1<T extends core::Object, S extends core::Object>(lowered final self::Extension1|method1::T #this) → dynamic {}
+static method Extension1|get#method1<T extends core::Object>(lowered final self::Extension1|get#method1::T #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T, S>(#this);
+static method Extension1|method2<T extends core::Object, S extends core::String>(lowered final self::Extension1|method2::T #this) → dynamic {}
+static method Extension1|get#method2<T extends core::Object>(lowered final self::Extension1|get#method2::T #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T, S>(#this);
+static method Extension1|method3<T extends core::Object, S extends dynamic>(lowered final self::Extension1|method3::T #this) → dynamic {}
+static method Extension1|get#method3<T extends core::Object>(lowered final self::Extension1|get#method3::T #this) → <S extends dynamic>() → dynamic
+  return <S extends dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T, S%>(#this);
+static method Extension1|method4<T extends core::Object, S extends core::Object? = dynamic>(lowered final self::Extension1|method4::T #this) → dynamic {}
+static method Extension1|get#method4<T extends core::Object>(lowered final self::Extension1|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
+  return <S extends core::Object? = dynamic>() → dynamic => self::Extension1|method4<self::Extension1|get#method4::T, S%>(#this);
+static method Extension1|method5<T extends core::Object, S extends core::Object?>(lowered final self::Extension1|method5::T #this) → dynamic {}
+static method Extension1|get#method5<T extends core::Object>(lowered final self::Extension1|get#method5::T #this) → <S extends core::Object?>() → dynamic
+  return <S extends core::Object?>() → dynamic => self::Extension1|method5<self::Extension1|get#method5::T, S%>(#this);
+static method Extension2|method1<T extends core::String, S extends core::Object>(lowered final self::Extension2|method1::T #this) → dynamic {}
+static method Extension2|get#method1<T extends core::String>(lowered final self::Extension2|get#method1::T #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T, S>(#this);
+static method Extension2|method2<T extends core::String, S extends core::String>(lowered final self::Extension2|method2::T #this) → dynamic {}
+static method Extension2|get#method2<T extends core::String>(lowered final self::Extension2|get#method2::T #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T, S>(#this);
+static method Extension2|method3<T extends core::String, S extends dynamic>(lowered final self::Extension2|method3::T #this) → dynamic {}
+static method Extension2|get#method3<T extends core::String>(lowered final self::Extension2|get#method3::T #this) → <S extends dynamic>() → dynamic
+  return <S extends dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T, S%>(#this);
+static method Extension2|get#method4<T extends core::String>(lowered final self::Extension2|get#method4::T #this) → <S extends core::Object? = dynamic>() → dynamic
+  return <S extends core::Object? = dynamic>() → dynamic => self::Extension2|method4<self::Extension2|get#method4::T, S%>(#this);
+static method Extension2|method4<T extends core::String, S extends core::Object? = dynamic>(lowered final self::Extension2|method4::T #this) → dynamic {}
+static method Extension2|method5<T extends core::String, S extends core::Object?>(lowered final self::Extension2|method5::T #this) → dynamic {}
+static method Extension2|get#method5<T extends core::String>(lowered final self::Extension2|get#method5::T #this) → <S extends core::Object?>() → dynamic
+  return <S extends core::Object?>() → dynamic => self::Extension2|method5<self::Extension2|get#method5::T, S%>(#this);
+static method Extension3|method1<T extends dynamic, S extends core::Object>(lowered final self::Extension3|method1::T% #this) → dynamic {}
+static method Extension3|get#method1<T extends dynamic>(lowered final self::Extension3|get#method1::T% #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S>(#this);
+static method Extension3|method2<T extends dynamic, S extends core::String>(lowered final self::Extension3|method2::T% #this) → dynamic {}
+static method Extension3|get#method2<T extends dynamic>(lowered final self::Extension3|get#method2::T% #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S>(#this);
+static method Extension3|method3<T extends dynamic, S extends dynamic>(lowered final self::Extension3|method3::T% #this) → dynamic {}
+static method Extension3|get#method3<T extends dynamic>(lowered final self::Extension3|get#method3::T% #this) → <S extends dynamic>() → dynamic
+  return <S extends dynamic>() → dynamic => self::Extension3|method3<self::Extension3|get#method3::T%, S%>(#this);
+static method Extension3|method4<T extends dynamic, S extends core::Object? = dynamic>(lowered final self::Extension3|method4::T% #this) → dynamic {}
+static method Extension3|get#method4<T extends dynamic>(lowered final self::Extension3|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+  return <S extends core::Object? = dynamic>() → dynamic => self::Extension3|method4<self::Extension3|get#method4::T%, S%>(#this);
+static method Extension3|method5<T extends dynamic, S extends core::Object?>(lowered final self::Extension3|method5::T% #this) → dynamic {}
+static method Extension3|get#method5<T extends dynamic>(lowered final self::Extension3|get#method5::T% #this) → <S extends core::Object?>() → dynamic
+  return <S extends core::Object?>() → dynamic => self::Extension3|method5<self::Extension3|get#method5::T%, S%>(#this);
+static method Extension4|method1<T extends core::Object? = dynamic, S extends core::Object>(lowered final self::Extension4|method1::T% #this) → dynamic {}
+static method Extension4|get#method1<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method1::T% #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension4|method1<self::Extension4|get#method1::T%, S>(#this);
+static method Extension4|method2<T extends core::Object? = dynamic, S extends core::String>(lowered final self::Extension4|method2::T% #this) → dynamic {}
+static method Extension4|get#method2<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method2::T% #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension4|method2<self::Extension4|get#method2::T%, S>(#this);
+static method Extension4|method3<T extends core::Object? = dynamic, S extends dynamic>(lowered final self::Extension4|method3::T% #this) → dynamic {}
+static method Extension4|get#method3<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method3::T% #this) → <S extends dynamic>() → dynamic
+  return <S extends dynamic>() → dynamic => self::Extension4|method3<self::Extension4|get#method3::T%, S%>(#this);
+static method Extension4|method4<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(lowered final self::Extension4|method4::T% #this) → dynamic {}
+static method Extension4|get#method4<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+  return <S extends core::Object? = dynamic>() → dynamic => self::Extension4|method4<self::Extension4|get#method4::T%, S%>(#this);
+static method Extension4|method5<T extends core::Object? = dynamic, S extends core::Object?>(lowered final self::Extension4|method5::T% #this) → dynamic {}
+static method Extension4|get#method5<T extends core::Object? = dynamic>(lowered final self::Extension4|get#method5::T% #this) → <S extends core::Object?>() → dynamic
+  return <S extends core::Object?>() → dynamic => self::Extension4|method5<self::Extension4|get#method5::T%, S%>(#this);
+static method Extension5|method1<T extends core::Object?, S extends core::Object>(lowered final self::Extension5|method1::T% #this) → dynamic {}
+static method Extension5|get#method1<T extends core::Object?>(lowered final self::Extension5|get#method1::T% #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension5|method1<self::Extension5|get#method1::T%, S>(#this);
+static method Extension5|method2<T extends core::Object?, S extends core::String>(lowered final self::Extension5|method2::T% #this) → dynamic {}
+static method Extension5|get#method2<T extends core::Object?>(lowered final self::Extension5|get#method2::T% #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension5|method2<self::Extension5|get#method2::T%, S>(#this);
+static method Extension5|method3<T extends core::Object?, S extends dynamic>(lowered final self::Extension5|method3::T% #this) → dynamic {}
+static method Extension5|get#method3<T extends core::Object?>(lowered final self::Extension5|get#method3::T% #this) → <S extends dynamic>() → dynamic
+  return <S extends dynamic>() → dynamic => self::Extension5|method3<self::Extension5|get#method3::T%, S%>(#this);
+static method Extension5|method4<T extends core::Object?, S extends core::Object? = dynamic>(lowered final self::Extension5|method4::T% #this) → dynamic {}
+static method Extension5|get#method4<T extends core::Object?>(lowered final self::Extension5|get#method4::T% #this) → <S extends core::Object? = dynamic>() → dynamic
+  return <S extends core::Object? = dynamic>() → dynamic => self::Extension5|method4<self::Extension5|get#method4::T%, S%>(#this);
+static method Extension5|method5<T extends core::Object?, S extends core::Object?>(lowered final self::Extension5|method5::T% #this) → dynamic {}
+static method Extension5|get#method5<T extends core::Object?>(lowered final self::Extension5|get#method5::T% #this) → <S extends core::Object?>() → dynamic
+  return <S extends core::Object?>() → dynamic => self::Extension5|method5<self::Extension5|get#method5::T%, S%>(#this);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/extension_never.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/extension_never.dart.weak.modular.expect
new file mode 100644
index 0000000..16f18a0
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/extension_never.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:_internal" as _in;
+
+extension Extension on Never {
+  method extensionMethod = self::Extension|extensionMethod;
+  tearoff extensionMethod = self::Extension|get#extensionMethod;
+}
+static method Extension|extensionMethod(lowered final Never #this) → dynamic {}
+static method Extension|get#extensionMethod(lowered final Never #this) → () → dynamic
+  return () → dynamic => self::Extension|extensionMethod(#this);
+static method implicitAccess(Never never) → dynamic {
+  let final Never #t1 = (let final Never #t2 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.extensionMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t3 = (let final Never #t4 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.missingMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+}
+static method explicitAccess(Never never) → dynamic {
+  self::Extension|extensionMethod(let final Never #t5 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..beb5bfc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart.weak.modular.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:19:15: Error: A value of type 'T' can't be returned from a function with return type 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
+//     return t1.method1();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:26:28: Error: A value of type 'T' can't be assigned to a variable of type 'SubClass'.
+//  - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
+//     SubClass subClass = t2.method2();
+//                            ^
+//
+// pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:32:28: Error: The method 'method2' isn't defined for the class 'SubClass'.
+//  - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'method2'.
+//     SubClass subClass = t3.method2();
+//                            ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+}
+class SubClass extends self::Class {
+  synthetic constructor •() → self::SubClass
+    : super self::Class::•()
+    ;
+}
+extension Extension<T extends core::Object? = dynamic> on T% {
+  method method1 = self::Extension|method1;
+  tearoff method1 = self::Extension|get#method1;
+}
+extension BoundExtension<T extends self::Class> on T {
+  method method2 = self::BoundExtension|method2;
+  tearoff method2 = self::BoundExtension|get#method2;
+}
+static method Extension|method1<T extends core::Object? = dynamic>(lowered final self::Extension|method1::T% #this) → self::Extension|method1::T%
+  return #this;
+static method Extension|get#method1<T extends core::Object? = dynamic>(lowered final self::Extension|get#method1::T% #this) → () → self::Extension|get#method1::T%
+  return () → self::Extension|get#method1::T% => self::Extension|method1<self::Extension|get#method1::T%>(#this);
+static method BoundExtension|method2<T extends self::Class>(lowered final self::BoundExtension|method2::T #this) → self::BoundExtension|method2::T
+  return #this;
+static method BoundExtension|get#method2<T extends self::Class>(lowered final self::BoundExtension|get#method2::T #this) → () → self::BoundExtension|get#method2::T
+  return () → self::BoundExtension|get#method2::T => self::BoundExtension|method2<self::BoundExtension|get#method2::T>(#this);
+static method test1<T extends core::Object? = dynamic>(self::test1::T% t1) → self::Class {
+  if(t1 is{ForNonNullableByDefault} self::SubClass) {
+    return invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:19:15: Error: A value of type 'T' can't be returned from a function with return type 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
+    return t1.method1();
+              ^" in self::Extension|method1<self::test1::T%>(t1{self::test1::T% & self::SubClass /* '%' & '!' = '!' */}) as{TypeError,ForNonNullableByDefault} self::Class;
+  }
+  return new self::Class::•();
+}
+static method test2<T extends self::Class>(self::test2::T t2) → dynamic {
+  if(self::test2::T =={core::Type::==}{(core::Object) → core::bool} #C1) {
+    self::SubClass subClass = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:26:28: Error: A value of type 'T' can't be assigned to a variable of type 'SubClass'.
+ - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
+    SubClass subClass = t2.method2();
+                           ^" in self::BoundExtension|method2<self::test2::T>(t2) as{TypeError,ForNonNullableByDefault} self::SubClass;
+  }
+}
+static method test3<T extends core::Object? = dynamic>(self::test3::T% t3) → dynamic {
+  if(t3 is{ForNonNullableByDefault} self::SubClass) {
+    self::SubClass subClass = invalid-expression "pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart:32:28: Error: The method 'method2' isn't defined for the class 'SubClass'.
+ - 'SubClass' is from 'pkg/front_end/testcases/nnbd/extension_type_variable_bound.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'method2'.
+    SubClass subClass = t3.method2();
+                           ^^^^^^^" in t3{self::test3::T% & self::SubClass /* '%' & '!' = '!' */}{<unresolved>}.method2() as{TypeError,ForDynamic,ForNonNullableByDefault} self::SubClass;
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::SubClass*)
+}
diff --git a/pkg/front_end/testcases/nnbd/external_field_errors.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/external_field_errors.dart.weak.modular.expect
new file mode 100644
index 0000000..ec21f8d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/external_field_errors.dart.weak.modular.expect
@@ -0,0 +1,122 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/external_field_errors.dart:5:28: Error: External fields cannot have initializers.
+// Try removing the initializer or the 'external' keyword.
+// external int topLevelField = 0;
+//                            ^
+//
+// pkg/front_end/testcases/nnbd/external_field_errors.dart:7:39: Error: External fields cannot have initializers.
+// Try removing the initializer or the 'external' keyword.
+// external final int finalTopLevelField = 0;
+//                                       ^
+//
+// pkg/front_end/testcases/nnbd/external_field_errors.dart:9:31: Error: External fields cannot have initializers.
+// Try removing the initializer or the 'external' keyword.
+// external const int constField = 0;
+//                               ^
+//
+// pkg/front_end/testcases/nnbd/external_field_errors.dart:12:37: Error: External fields cannot have initializers.
+// Try removing the initializer or the 'external' keyword.
+//   external int fieldWithInitializer = 0;
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/external_field_errors.dart:18:10: Error: External fields cannot have initializers.
+// Try removing the field initializer or the 'external' keyword from the field declaration.
+//   A(this.initializedField1) : this.initializedField2 = 0;
+//          ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/external_field_errors.dart:18:36: Error: External fields cannot have initializers.
+// Try removing the field initializer or the 'external' keyword from the field declaration.
+//   A(this.initializedField1) : this.initializedField2 = 0;
+//                                    ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/external_field_errors.dart:20:35: Error: External fields cannot have initializers.
+// Try removing the initializer or the 'external' keyword.
+//   external static int staticField = 0;
+//                                   ^
+//
+// pkg/front_end/testcases/nnbd/external_field_errors.dart:22:46: Error: External fields cannot have initializers.
+// Try removing the initializer or the 'external' keyword.
+//   external static final int finalStaticField = 0;
+//                                              ^
+//
+// pkg/front_end/testcases/nnbd/external_field_errors.dart:26:35: Error: External fields cannot have initializers.
+// Try removing the initializer or the 'external' keyword.
+//   external static int staticField = 0;
+//                                   ^
+//
+// pkg/front_end/testcases/nnbd/external_field_errors.dart:28:46: Error: External fields cannot have initializers.
+// Try removing the initializer or the 'external' keyword.
+//   external static final int finalStaticField = 0;
+//                                              ^
+//
+// pkg/front_end/testcases/nnbd/external_field_errors.dart:32:39: Error: External fields cannot have initializers.
+// Try removing the initializer or the 'external' keyword.
+//   external int extensionInstanceField = 0;
+//                                       ^
+//
+// pkg/front_end/testcases/nnbd/external_field_errors.dart:33:50: Error: External fields cannot have initializers.
+// Try removing the initializer or the 'external' keyword.
+//   external final int finalExtensionInstanceField = 0;
+//                                                  ^
+//
+// pkg/front_end/testcases/nnbd/external_field_errors.dart:34:44: Error: External fields cannot have initializers.
+// Try removing the initializer or the 'external' keyword.
+//   external static int extensionStaticField = 0;
+//                                            ^
+//
+// pkg/front_end/testcases/nnbd/external_field_errors.dart:35:55: Error: External fields cannot have initializers.
+// Try removing the initializer or the 'external' keyword.
+//   external static final int finalExtensionStaticField = 0;
+//                                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  constructor •(core::int initializedField1) → self::A
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/nnbd/external_field_errors.dart:18:10: Error: External fields cannot have initializers.
+Try removing the field initializer or the 'external' keyword from the field declaration.
+  A(this.initializedField1) : this.initializedField2 = 0;
+         ^^^^^^^^^^^^^^^^^", final dynamic #t2 = invalid-expression "pkg/front_end/testcases/nnbd/external_field_errors.dart:18:36: Error: External fields cannot have initializers.
+Try removing the field initializer or the 'external' keyword from the field declaration.
+  A(this.initializedField1) : this.initializedField2 = 0;
+                                   ^^^^^^^^^^^^^^^^^"
+    ;
+  external get fieldWithInitializer() → core::int;
+  external set fieldWithInitializer(core::int #externalFieldValue) → void;
+  external get initializedField1() → core::int;
+  external set initializedField1(core::int #externalFieldValue) → void;
+  external get initializedField2() → core::int;
+  external set initializedField2(core::int #externalFieldValue) → void;
+  external static get staticField() → core::int;
+  external static set staticField(core::int #externalFieldValue) → void;
+  external static get finalStaticField() → core::int;
+}
+abstract class B extends core::Object /*isMixinDeclaration*/  {
+  external static get staticField() → core::int;
+  external static set staticField(core::int #externalFieldValue) → void;
+  external static get finalStaticField() → core::int;
+}
+extension Extension on self::A {
+  get extensionInstanceField = self::Extension|get#extensionInstanceField;
+  set extensionInstanceField = self::Extension|set#extensionInstanceField;
+  get finalExtensionInstanceField = self::Extension|get#finalExtensionInstanceField;
+  static get extensionStaticField = get self::Extension|extensionStaticField;
+  static set extensionStaticField = set self::Extension|extensionStaticField;
+  static get finalExtensionStaticField = get self::Extension|finalExtensionStaticField;
+}
+external static get topLevelField() → core::int;
+external static set topLevelField(core::int #externalFieldValue) → void;
+external static get finalTopLevelField() → core::int;
+external static get constField() → core::int;
+external static set constField(core::int #externalFieldValue) → void;
+external static method Extension|get#extensionInstanceField(self::A #this) → core::int;
+external static method Extension|set#extensionInstanceField(self::A #this, core::int #externalFieldValue) → void;
+external static method Extension|get#finalExtensionInstanceField(self::A #this) → core::int;
+external static get Extension|extensionStaticField() → core::int;
+external static set Extension|extensionStaticField(core::int #externalFieldValue) → void;
+external static get Extension|finalExtensionStaticField() → core::int;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/external_fields.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/external_fields.dart.weak.modular.expect
new file mode 100644
index 0000000..9ca288c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/external_fields.dart.weak.modular.expect
@@ -0,0 +1,131 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Annotation extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::Annotation
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  @#C1
+  external get instanceField() → core::int;
+  @#C1
+  external set instanceField(core::int #externalFieldValue) → void;
+  @#C1
+  external get finalInstanceField() → core::int;
+  @#C1
+  external get covariantInstanceField() → core::num;
+  @#C1
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
+  @#C1
+  external static get staticField() → core::int;
+  @#C1
+  external static set staticField(core::int #externalFieldValue) → void;
+  @#C1
+  external static get finalStaticField() → core::int;
+  external get untypedInstanceField() → dynamic;
+  external set untypedInstanceField(dynamic #externalFieldValue) → void;
+  external get untypedFinalInstanceField() → dynamic;
+  external get untypedCovariantInstanceField() → dynamic;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
+  external static get untypedStaticField() → dynamic;
+  external static set untypedStaticField(dynamic #externalFieldValue) → void;
+  external static get untypedFinalStaticField() → dynamic;
+}
+abstract class B extends core::Object /*isMixinDeclaration*/  {
+  @#C1
+  external get instanceField() → core::int;
+  @#C1
+  external set instanceField(core::int #externalFieldValue) → void;
+  @#C1
+  external get finalInstanceField() → core::int;
+  @#C1
+  external get covariantInstanceField() → core::num;
+  @#C1
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
+  @#C1
+  external static get staticField() → core::int;
+  @#C1
+  external static set staticField(core::int #externalFieldValue) → void;
+  @#C1
+  external static get finalStaticField() → core::int;
+  external get untypedInstanceField() → dynamic;
+  external set untypedInstanceField(dynamic #externalFieldValue) → void;
+  external get untypedFinalInstanceField() → dynamic;
+  external get untypedCovariantInstanceField() → dynamic;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
+  external static get untypedStaticField() → dynamic;
+  external static set untypedStaticField(dynamic #externalFieldValue) → void;
+  external static get untypedFinalStaticField() → dynamic;
+}
+class C extends core::Object implements self::A {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  external get instanceField() → core::int;
+  external set instanceField(core::int #externalFieldValue) → void;
+  external get finalInstanceField() → core::int;
+  external get covariantInstanceField() → core::num;
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
+  external get untypedInstanceField() → dynamic;
+  external set untypedInstanceField(dynamic #externalFieldValue) → void;
+  external get untypedFinalInstanceField() → dynamic;
+  external get untypedCovariantInstanceField() → dynamic;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
+}
+extension Extension on self::A {
+  get extensionInstanceField = self::Extension|get#extensionInstanceField;
+  set extensionInstanceField = self::Extension|set#extensionInstanceField;
+  get finalExtensionInstanceField = self::Extension|get#finalExtensionInstanceField;
+  static get extensionStaticField = get self::Extension|extensionStaticField;
+  static set extensionStaticField = set self::Extension|extensionStaticField;
+  static get finalExtensionStaticField = get self::Extension|finalExtensionStaticField;
+  get untypedExtensionInstanceField = self::Extension|get#untypedExtensionInstanceField;
+  set untypedExtensionInstanceField = self::Extension|set#untypedExtensionInstanceField;
+  get untypedFinalExtensionInstanceField = self::Extension|get#untypedFinalExtensionInstanceField;
+  static get untypedExtensionStaticField = get self::Extension|untypedExtensionStaticField;
+  static set untypedExtensionStaticField = set self::Extension|untypedExtensionStaticField;
+  static get untypedFinalExtensionStaticField = get self::Extension|untypedFinalExtensionStaticField;
+}
+@#C1
+external static get topLevelField() → core::int;
+@#C1
+external static set topLevelField(core::int #externalFieldValue) → void;
+@#C1
+external static get finalTopLevelField() → core::int;
+external static get untypedTopLevelField() → dynamic;
+external static set untypedTopLevelField(dynamic #externalFieldValue) → void;
+external static get untypedFinalTopLevelField() → dynamic;
+@#C1
+external static method Extension|get#extensionInstanceField(self::A #this) → core::int;
+@#C1
+external static method Extension|set#extensionInstanceField(self::A #this, core::int #externalFieldValue) → void;
+@#C1
+external static method Extension|get#finalExtensionInstanceField(self::A #this) → core::int;
+@#C1
+external static get Extension|extensionStaticField() → core::int;
+@#C1
+external static set Extension|extensionStaticField(core::int #externalFieldValue) → void;
+@#C1
+external static get Extension|finalExtensionStaticField() → core::int;
+external static method Extension|get#untypedExtensionInstanceField(self::A #this) → dynamic;
+external static method Extension|set#untypedExtensionInstanceField(self::A #this, dynamic #externalFieldValue) → void;
+external static method Extension|get#untypedFinalExtensionInstanceField(self::A #this) → dynamic;
+external static get Extension|untypedExtensionStaticField() → dynamic;
+external static set Extension|untypedExtensionStaticField(dynamic #externalFieldValue) → void;
+external static get Extension|untypedFinalExtensionStaticField() → dynamic;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = self::Annotation {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///external_fields.dart:
+- Annotation. (from org-dartlang-testcase:///external_fields.dart:6:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/external_fields_spec.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/external_fields_spec.dart.weak.modular.expect
new file mode 100644
index 0000000..d5e1933
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/external_fields_spec.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  external get i1() → core::int;
+  external set i1(core::int #externalFieldValue) → void;
+  external get cx() → dynamic;
+  external set cx(covariant-by-declaration dynamic #externalFieldValue) → void;
+  external static get s1() → core::int;
+  external static set s1(core::int #externalFieldValue) → void;
+  external static get fx() → dynamic;
+}
+external static get s1() → core::int;
+external static set s1(core::int #externalFieldValue) → void;
+external static get fx() → dynamic;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.modular.expect
new file mode 100644
index 0000000..8fae114
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:ffi" as ffi;
+import "dart:core" as core;
+
+import "dart:ffi";
+import "package:ffi/ffi.dart";
+
+class Coordinate extends ffi::Struct {
+  @#C1
+  external get x() → core::double;
+  @#C1
+  external set x(core::double #externalFieldValue) → void;
+  @#C1
+  external get y() → core::double;
+  @#C1
+  external set y(core::double #externalFieldValue) → void;
+  external get next() → ffi::Pointer<self::Coordinate>;
+  external set next(ffi::Pointer<self::Coordinate> #externalFieldValue) → void;
+  static factory allocate(ffi::Allocator allocator, core::double x, core::double y, ffi::Pointer<self::Coordinate> next) → self::Coordinate {
+    return let final self::Coordinate #t1 = ffi::StructPointer|get#ref<self::Coordinate>(ffi::AllocatorAlloc|call<self::Coordinate>(allocator)) in block {
+      #t1.{self::Coordinate::x} = x;
+      #t1.{self::Coordinate::y} = y;
+      #t1.{self::Coordinate::next} = next;
+    } =>#t1;
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = ffi::Double {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///ffi_sample.dart:
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:122:9)
+- _NativeDouble. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:34:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.modular.expect
new file mode 100644
index 0000000..732d282
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:ffi" as ffi;
+
+import "dart:ffi";
+import "package:ffi/ffi.dart";
+
+class StructInlineArray extends ffi::Struct {
+  synthetic constructor •() → self::StructInlineArray
+    : super ffi::Struct::•()
+    ;
+  @#C3
+  external get a0() → ffi::Array<ffi::Uint8>;
+  @#C3
+  external set a0(ffi::Array<ffi::Uint8> #externalFieldValue) → void;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 8
+  #C2 = null
+  #C3 = ffi::_ArraySize<ffi::NativeType*> {dimension1:#C1, dimension2:#C2, dimension3:#C2, dimension4:#C2, dimension5:#C2, dimensions:#C2}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///ffi_struct_inline_array.dart:
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:137:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.modular.expect
new file mode 100644
index 0000000..b6819cb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:ffi" as ffi;
+
+import "dart:ffi";
+import "package:ffi/ffi.dart";
+
+class StructInlineArrayMultiDimensional extends ffi::Struct {
+  synthetic constructor •() → self::StructInlineArrayMultiDimensional
+    : super ffi::Struct::•()
+    ;
+  @#C3
+  external get a0() → ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>>;
+  @#C3
+  external set a0(ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>> #externalFieldValue) → void;
+}
+static method main() → dynamic {
+  final ffi::Pointer<self::StructInlineArrayMultiDimensional> pointer = ffi::AllocatorAlloc|call<self::StructInlineArrayMultiDimensional>(#C4);
+  final self::StructInlineArrayMultiDimensional struct = ffi::StructPointer|get#ref<self::StructInlineArrayMultiDimensional>(pointer);
+  final ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>> array = struct.{self::StructInlineArrayMultiDimensional::a0}{ffi::Array<ffi::Array<ffi::Array<ffi::Uint8>>>};
+  final ffi::Array<ffi::Array<ffi::Uint8>> subArray = ffi::ArrayArray|[]<ffi::Array<ffi::Uint8>>(array, 0);
+  ffi::ArrayArray|[]=<ffi::Array<ffi::Uint8>>(array, 1, subArray);
+  #C4.{ffi::Allocator::free}(pointer){(ffi::Pointer<ffi::NativeType>) → void};
+}
+
+constants  {
+  #C1 = 2
+  #C2 = null
+  #C3 = ffi::_ArraySize<ffi::NativeType*> {dimension1:#C1, dimension2:#C1, dimension3:#C1, dimension4:#C2, dimension5:#C2, dimensions:#C2}
+  #C4 = all::_CallocAllocator {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///ffi_struct_inline_array_multi_dimensional.dart:
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:137:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/field_setter_conflict.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/field_setter_conflict.dart.weak.modular.expect
new file mode 100644
index 0000000..4dec1df
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/field_setter_conflict.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/field_setter_conflict.dart:7:10: Error: Conflicts with the implicit setter of the field 'topLevelFieldInPartSetterInMain'.
+// void set topLevelFieldInPartSetterInMain(int? value) {}
+//          ^
+//
+// pkg/front_end/testcases/nnbd/field_setter_conflict_part.dart:39:6: Error: Conflicts with setter 'topLevelFieldInPartSetterInMain'.
+// int? topLevelFieldInPartSetterInMain;
+//      ^
+//
+// pkg/front_end/testcases/nnbd/field_setter_conflict_part.dart:40:10: Error: Conflicts with the implicit setter of the field 'topLevelFieldInMainSetterInPart'.
+// void set topLevelFieldInMainSetterInPart(int? value) {}
+//          ^
+//
+// pkg/front_end/testcases/nnbd/field_setter_conflict.dart:8:6: Error: Conflicts with setter 'topLevelFieldInMainSetterInPart'.
+// int? topLevelFieldInMainSetterInPart;
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+part field_setter_conflict_part.dart;
+static field core::int? topLevelFieldInMainSetterInPart;
+static field core::int? topLevelFieldInPartSetterInMain /* from org-dartlang-testcase:///field_setter_conflict_part.dart */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..6e42cfb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.modular.expect
@@ -0,0 +1,1348 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:10:10: Error: 'topLevelFieldAndDuplicateSetter' is already declared in this scope.
+// void set topLevelFieldAndDuplicateSetter(int? value) {}
+//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:9:10: Context: Previous declaration of 'topLevelFieldAndDuplicateSetter'.
+// void set topLevelFieldAndDuplicateSetter(int? value) {}
+//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:13:12: Error: 'duplicateTopLevelFieldAndSetter1' is already declared in this scope.
+// final int? duplicateTopLevelFieldAndSetter1 = null;
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:12:6: Context: Previous declaration of 'duplicateTopLevelFieldAndSetter1'.
+// int? duplicateTopLevelFieldAndSetter1;
+//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:17:6: Error: 'duplicateTopLevelFieldAndSetter2' is already declared in this scope.
+// int? duplicateTopLevelFieldAndSetter2;
+//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:16:12: Context: Previous declaration of 'duplicateTopLevelFieldAndSetter2'.
+// final int? duplicateTopLevelFieldAndSetter2 = null;
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:25:10: Error: 'topLevelLateFinalFieldAndDuplicateSetter' is already declared in this scope.
+// void set topLevelLateFinalFieldAndDuplicateSetter(int? value) {}
+//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:24:10: Context: Previous declaration of 'topLevelLateFinalFieldAndDuplicateSetter'.
+// void set topLevelLateFinalFieldAndDuplicateSetter(int? value) {}
+//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:33:12: Error: 'instanceFieldAndDuplicateSetter' is already declared in this scope.
+//   void set instanceFieldAndDuplicateSetter(int? value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:32:12: Context: Previous declaration of 'instanceFieldAndDuplicateSetter'.
+//   void set instanceFieldAndDuplicateSetter(int? value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:36:14: Error: 'duplicateInstanceFieldAndSetter1' is already declared in this scope.
+//   final int? duplicateInstanceFieldAndSetter1 = null;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:35:8: Context: Previous declaration of 'duplicateInstanceFieldAndSetter1'.
+//   int? duplicateInstanceFieldAndSetter1;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:40:8: Error: 'duplicateInstanceFieldAndSetter2' is already declared in this scope.
+//   int? duplicateInstanceFieldAndSetter2;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:14: Context: Previous declaration of 'duplicateInstanceFieldAndSetter2'.
+//   final int? duplicateInstanceFieldAndSetter2 = null;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:48:12: Error: 'instanceLateFinalFieldAndDuplicateSetter' is already declared in this scope.
+//   void set instanceLateFinalFieldAndDuplicateSetter(int? value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:47:12: Context: Previous declaration of 'instanceLateFinalFieldAndDuplicateSetter'.
+//   void set instanceLateFinalFieldAndDuplicateSetter(int? value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:55:19: Error: 'staticFieldAndDuplicateSetter' is already declared in this scope.
+//   static void set staticFieldAndDuplicateSetter(int? value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:54:19: Context: Previous declaration of 'staticFieldAndDuplicateSetter'.
+//   static void set staticFieldAndDuplicateSetter(int? value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:58:21: Error: 'duplicateStaticFieldAndSetter1' is already declared in this scope.
+//   static final int? duplicateStaticFieldAndSetter1 = null;
+//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:57:15: Context: Previous declaration of 'duplicateStaticFieldAndSetter1'.
+//   static int? duplicateStaticFieldAndSetter1;
+//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:62:15: Error: 'duplicateStaticFieldAndSetter2' is already declared in this scope.
+//   static int? duplicateStaticFieldAndSetter2;
+//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:61:21: Context: Previous declaration of 'duplicateStaticFieldAndSetter2'.
+//   static final int? duplicateStaticFieldAndSetter2 = null;
+//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:70:19: Error: 'staticLateFinalFieldAndDuplicateSetter' is already declared in this scope.
+//   static void set staticLateFinalFieldAndDuplicateSetter(int? value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:69:19: Context: Previous declaration of 'staticLateFinalFieldAndDuplicateSetter'.
+//   static void set staticLateFinalFieldAndDuplicateSetter(int? value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:77:12: Error: 'staticFieldAndInstanceDuplicateSetter' is already declared in this scope.
+//   void set staticFieldAndInstanceDuplicateSetter(int? value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:76:12: Context: Previous declaration of 'staticFieldAndInstanceDuplicateSetter'.
+//   void set staticFieldAndInstanceDuplicateSetter(int? value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:84:19: Error: 'instanceFieldAndStaticDuplicateSetter' is already declared in this scope.
+//   static void set instanceFieldAndStaticDuplicateSetter(int? value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:83:19: Context: Previous declaration of 'instanceFieldAndStaticDuplicateSetter'.
+//   static void set instanceFieldAndStaticDuplicateSetter(int? value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:87:14: Error: 'duplicateInstanceFieldAndStaticSetter1' is already declared in this scope.
+//   final int? duplicateInstanceFieldAndStaticSetter1 = null;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:86:8: Context: Previous declaration of 'duplicateInstanceFieldAndStaticSetter1'.
+//   int? duplicateInstanceFieldAndStaticSetter1;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:91:8: Error: 'duplicateInstanceFieldAndStaticSetter2' is already declared in this scope.
+//   int? duplicateInstanceFieldAndStaticSetter2;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:90:14: Context: Previous declaration of 'duplicateInstanceFieldAndStaticSetter2'.
+//   final int? duplicateInstanceFieldAndStaticSetter2 = null;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:95:21: Error: 'duplicateStaticFieldAndInstanceSetter1' is already declared in this scope.
+//   static final int? duplicateStaticFieldAndInstanceSetter1 = null;
+//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:94:15: Context: Previous declaration of 'duplicateStaticFieldAndInstanceSetter1'.
+//   static int? duplicateStaticFieldAndInstanceSetter1;
+//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:99:15: Error: 'duplicateStaticFieldAndInstanceSetter2' is already declared in this scope.
+//   static int? duplicateStaticFieldAndInstanceSetter2;
+//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:98:21: Context: Previous declaration of 'duplicateStaticFieldAndInstanceSetter2'.
+//   static final int? duplicateStaticFieldAndInstanceSetter2 = null;
+//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:104:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int? extensionInstanceFieldAndSetter;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:107:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int? extensionInstanceFieldAndDuplicateSetter;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:109:12: Error: 'extensionInstanceFieldAndDuplicateSetter' is already declared in this scope.
+//   void set extensionInstanceFieldAndDuplicateSetter(int? value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:108:12: Context: Previous declaration of 'extensionInstanceFieldAndDuplicateSetter'.
+//   void set extensionInstanceFieldAndDuplicateSetter(int? value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:111:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int? duplicateExtensionInstanceFieldAndSetter1;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:112:14: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int? duplicateExtensionInstanceFieldAndSetter1 = null;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:112:14: Error: 'duplicateExtensionInstanceFieldAndSetter1' is already declared in this scope.
+//   final int? duplicateExtensionInstanceFieldAndSetter1 = null;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:111:8: Context: Previous declaration of 'duplicateExtensionInstanceFieldAndSetter1'.
+//   int? duplicateExtensionInstanceFieldAndSetter1;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:115:14: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int? duplicateExtensionInstanceFieldAndSetter2 = null;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:116:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int? duplicateExtensionInstanceFieldAndSetter2;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:116:8: Error: 'duplicateExtensionInstanceFieldAndSetter2' is already declared in this scope.
+//   int? duplicateExtensionInstanceFieldAndSetter2;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:115:14: Context: Previous declaration of 'duplicateExtensionInstanceFieldAndSetter2'.
+//   final int? duplicateExtensionInstanceFieldAndSetter2 = null;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:124:19: Error: 'extensionStaticFieldAndDuplicateSetter' is already declared in this scope.
+//   static void set extensionStaticFieldAndDuplicateSetter(int? value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:123:19: Context: Previous declaration of 'extensionStaticFieldAndDuplicateSetter'.
+//   static void set extensionStaticFieldAndDuplicateSetter(int? value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:127:21: Error: 'duplicateExtensionStaticFieldAndSetter1' is already declared in this scope.
+//   static final int? duplicateExtensionStaticFieldAndSetter1 = null;
+//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:126:15: Context: Previous declaration of 'duplicateExtensionStaticFieldAndSetter1'.
+//   static int? duplicateExtensionStaticFieldAndSetter1;
+//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:131:15: Error: 'duplicateExtensionStaticFieldAndSetter2' is already declared in this scope.
+//   static int? duplicateExtensionStaticFieldAndSetter2;
+//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:130:21: Context: Previous declaration of 'duplicateExtensionStaticFieldAndSetter2'.
+//   static final int? duplicateExtensionStaticFieldAndSetter2 = null;
+//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:139:19: Error: 'extensionStaticLateFinalFieldAndDuplicateSetter' is already declared in this scope.
+//   static void set extensionStaticLateFinalFieldAndDuplicateSetter(int? value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:138:19: Context: Previous declaration of 'extensionStaticLateFinalFieldAndDuplicateSetter'.
+//   static void set extensionStaticLateFinalFieldAndDuplicateSetter(int? value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:146:12: Error: 'extensionStaticFieldAndInstanceDuplicateSetter' is already declared in this scope.
+//   void set extensionStaticFieldAndInstanceDuplicateSetter(int? value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:145:12: Context: Previous declaration of 'extensionStaticFieldAndInstanceDuplicateSetter'.
+//   void set extensionStaticFieldAndInstanceDuplicateSetter(int? value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:148:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int? extensionInstanceFieldAndStaticSetter;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:151:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int? extensionInstanceFieldAndStaticDuplicateSetter;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:153:19: Error: 'extensionInstanceFieldAndStaticDuplicateSetter' is already declared in this scope.
+//   static void set extensionInstanceFieldAndStaticDuplicateSetter(int? value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:152:19: Context: Previous declaration of 'extensionInstanceFieldAndStaticDuplicateSetter'.
+//   static void set extensionInstanceFieldAndStaticDuplicateSetter(int? value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:155:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int? duplicateExtensionInstanceFieldAndStaticSetter1;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:156:14: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int? duplicateExtensionInstanceFieldAndStaticSetter1 = null;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:156:14: Error: 'duplicateExtensionInstanceFieldAndStaticSetter1' is already declared in this scope.
+//   final int? duplicateExtensionInstanceFieldAndStaticSetter1 = null;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:155:8: Context: Previous declaration of 'duplicateExtensionInstanceFieldAndStaticSetter1'.
+//   int? duplicateExtensionInstanceFieldAndStaticSetter1;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:159:14: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   final int? duplicateExtensionInstanceFieldAndStaticSetter2 = null;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:160:8: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   int? duplicateExtensionInstanceFieldAndStaticSetter2;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:160:8: Error: 'duplicateExtensionInstanceFieldAndStaticSetter2' is already declared in this scope.
+//   int? duplicateExtensionInstanceFieldAndStaticSetter2;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:159:14: Context: Previous declaration of 'duplicateExtensionInstanceFieldAndStaticSetter2'.
+//   final int? duplicateExtensionInstanceFieldAndStaticSetter2 = null;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:164:21: Error: 'duplicateExtensionStaticFieldAndInstanceSetter1' is already declared in this scope.
+//   static final int? duplicateExtensionStaticFieldAndInstanceSetter1 = null;
+//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:163:15: Context: Previous declaration of 'duplicateExtensionStaticFieldAndInstanceSetter1'.
+//   static int? duplicateExtensionStaticFieldAndInstanceSetter1;
+//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:168:15: Error: 'duplicateExtensionStaticFieldAndInstanceSetter2' is already declared in this scope.
+//   static int? duplicateExtensionStaticFieldAndInstanceSetter2;
+//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:167:21: Context: Previous declaration of 'duplicateExtensionStaticFieldAndInstanceSetter2'.
+//   static final int? duplicateExtensionStaticFieldAndInstanceSetter2 = null;
+//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart: Error: 'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/field_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart: Error: 'topLevelLateFinalFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/field_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:6:10: Error: Conflicts with the implicit setter of the field 'topLevelFieldAndSetter'.
+// void set topLevelFieldAndSetter(int? value) {}
+//          ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:5:6: Error: Conflicts with setter 'topLevelFieldAndSetter'.
+// int? topLevelFieldAndSetter;
+//      ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:10:10: Error: Conflicts with the implicit setter of the field 'topLevelFieldAndDuplicateSetter'.
+// void set topLevelFieldAndDuplicateSetter(int? value) {}
+//          ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:9:10: Error: Conflicts with the implicit setter of the field 'topLevelFieldAndDuplicateSetter'.
+// void set topLevelFieldAndDuplicateSetter(int? value) {}
+//          ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:8:6: Error: Conflicts with setter 'topLevelFieldAndDuplicateSetter'.
+// int? topLevelFieldAndDuplicateSetter;
+//      ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:14:10: Error: Conflicts with the implicit setter of the field 'duplicateTopLevelFieldAndSetter1'.
+// void set duplicateTopLevelFieldAndSetter1(int? value) {}
+//          ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:12:6: Error: Conflicts with setter 'duplicateTopLevelFieldAndSetter1'.
+// int? duplicateTopLevelFieldAndSetter1;
+//      ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:18:10: Error: Conflicts with the implicit setter of the field 'duplicateTopLevelFieldAndSetter2'.
+// void set duplicateTopLevelFieldAndSetter2(int? value) {}
+//          ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:17:6: Error: Conflicts with setter 'duplicateTopLevelFieldAndSetter2'.
+// int? duplicateTopLevelFieldAndSetter2;
+//      ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:21:10: Error: Conflicts with the implicit setter of the field 'topLevelLateFinalFieldAndSetter'.
+// void set topLevelLateFinalFieldAndSetter(int? value) {}
+//          ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:20:17: Error: Conflicts with setter 'topLevelLateFinalFieldAndSetter'.
+// late final int? topLevelLateFinalFieldAndSetter;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:25:10: Error: Conflicts with the implicit setter of the field 'topLevelLateFinalFieldAndDuplicateSetter'.
+// void set topLevelLateFinalFieldAndDuplicateSetter(int? value) {}
+//          ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:24:10: Error: Conflicts with the implicit setter of the field 'topLevelLateFinalFieldAndDuplicateSetter'.
+// void set topLevelLateFinalFieldAndDuplicateSetter(int? value) {}
+//          ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:23:17: Error: Conflicts with setter 'topLevelLateFinalFieldAndDuplicateSetter'.
+// late final int? topLevelLateFinalFieldAndDuplicateSetter;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:29:12: Error: Conflicts with the implicit setter of the field 'instanceFieldAndSetter'.
+//   void set instanceFieldAndSetter(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:28:8: Error: Conflicts with setter 'instanceFieldAndSetter'.
+//   int? instanceFieldAndSetter;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:33:12: Error: Conflicts with the implicit setter of the field 'instanceFieldAndDuplicateSetter'.
+//   void set instanceFieldAndDuplicateSetter(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:32:12: Error: Conflicts with the implicit setter of the field 'instanceFieldAndDuplicateSetter'.
+//   void set instanceFieldAndDuplicateSetter(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:31:8: Error: Conflicts with setter 'instanceFieldAndDuplicateSetter'.
+//   int? instanceFieldAndDuplicateSetter;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:37:12: Error: Conflicts with the implicit setter of the field 'duplicateInstanceFieldAndSetter1'.
+//   void set duplicateInstanceFieldAndSetter1(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:35:8: Error: Conflicts with setter 'duplicateInstanceFieldAndSetter1'.
+//   int? duplicateInstanceFieldAndSetter1;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:41:12: Error: Conflicts with the implicit setter of the field 'duplicateInstanceFieldAndSetter2'.
+//   void set duplicateInstanceFieldAndSetter2(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:40:8: Error: Conflicts with setter 'duplicateInstanceFieldAndSetter2'.
+//   int? duplicateInstanceFieldAndSetter2;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:44:12: Error: Conflicts with the implicit setter of the field 'instanceLateFinalFieldAndSetter'.
+//   void set instanceLateFinalFieldAndSetter(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:43:19: Error: Conflicts with setter 'instanceLateFinalFieldAndSetter'.
+//   late final int? instanceLateFinalFieldAndSetter;
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:48:12: Error: Conflicts with the implicit setter of the field 'instanceLateFinalFieldAndDuplicateSetter'.
+//   void set instanceLateFinalFieldAndDuplicateSetter(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:47:12: Error: Conflicts with the implicit setter of the field 'instanceLateFinalFieldAndDuplicateSetter'.
+//   void set instanceLateFinalFieldAndDuplicateSetter(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:46:19: Error: Conflicts with setter 'instanceLateFinalFieldAndDuplicateSetter'.
+//   late final int? instanceLateFinalFieldAndDuplicateSetter;
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:51:19: Error: Conflicts with the implicit setter of the field 'staticFieldAndSetter'.
+//   static void set staticFieldAndSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:50:15: Error: Conflicts with setter 'staticFieldAndSetter'.
+//   static int? staticFieldAndSetter;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:55:19: Error: Conflicts with the implicit setter of the field 'staticFieldAndDuplicateSetter'.
+//   static void set staticFieldAndDuplicateSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:54:19: Error: Conflicts with the implicit setter of the field 'staticFieldAndDuplicateSetter'.
+//   static void set staticFieldAndDuplicateSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:53:15: Error: Conflicts with setter 'staticFieldAndDuplicateSetter'.
+//   static int? staticFieldAndDuplicateSetter;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:59:19: Error: Conflicts with the implicit setter of the field 'duplicateStaticFieldAndSetter1'.
+//   static void set duplicateStaticFieldAndSetter1(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:57:15: Error: Conflicts with setter 'duplicateStaticFieldAndSetter1'.
+//   static int? duplicateStaticFieldAndSetter1;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:63:19: Error: Conflicts with the implicit setter of the field 'duplicateStaticFieldAndSetter2'.
+//   static void set duplicateStaticFieldAndSetter2(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:62:15: Error: Conflicts with setter 'duplicateStaticFieldAndSetter2'.
+//   static int? duplicateStaticFieldAndSetter2;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:66:19: Error: Conflicts with the implicit setter of the field 'staticLateFinalFieldAndSetter'.
+//   static void set staticLateFinalFieldAndSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:65:26: Error: Conflicts with setter 'staticLateFinalFieldAndSetter'.
+//   static late final int? staticLateFinalFieldAndSetter;
+//                          ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:70:19: Error: Conflicts with the implicit setter of the field 'staticLateFinalFieldAndDuplicateSetter'.
+//   static void set staticLateFinalFieldAndDuplicateSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:69:19: Error: Conflicts with the implicit setter of the field 'staticLateFinalFieldAndDuplicateSetter'.
+//   static void set staticLateFinalFieldAndDuplicateSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:68:26: Error: Conflicts with setter 'staticLateFinalFieldAndDuplicateSetter'.
+//   static late final int? staticLateFinalFieldAndDuplicateSetter;
+//                          ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:73:12: Error: Conflicts with the implicit setter of the field 'staticFieldAndInstanceSetter'.
+//   void set staticFieldAndInstanceSetter(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:72:15: Error: Conflicts with setter 'staticFieldAndInstanceSetter'.
+//   static int? staticFieldAndInstanceSetter;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:77:12: Error: Conflicts with the implicit setter of the field 'staticFieldAndInstanceDuplicateSetter'.
+//   void set staticFieldAndInstanceDuplicateSetter(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:76:12: Error: Conflicts with the implicit setter of the field 'staticFieldAndInstanceDuplicateSetter'.
+//   void set staticFieldAndInstanceDuplicateSetter(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:75:15: Error: Conflicts with setter 'staticFieldAndInstanceDuplicateSetter'.
+//   static int? staticFieldAndInstanceDuplicateSetter;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:80:19: Error: Conflicts with the implicit setter of the field 'instanceFieldAndStaticSetter'.
+//   static void set instanceFieldAndStaticSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:79:8: Error: Conflicts with setter 'instanceFieldAndStaticSetter'.
+//   int? instanceFieldAndStaticSetter;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:84:19: Error: Conflicts with the implicit setter of the field 'instanceFieldAndStaticDuplicateSetter'.
+//   static void set instanceFieldAndStaticDuplicateSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:83:19: Error: Conflicts with the implicit setter of the field 'instanceFieldAndStaticDuplicateSetter'.
+//   static void set instanceFieldAndStaticDuplicateSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:82:8: Error: Conflicts with setter 'instanceFieldAndStaticDuplicateSetter'.
+//   int? instanceFieldAndStaticDuplicateSetter;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:88:19: Error: Conflicts with the implicit setter of the field 'duplicateInstanceFieldAndStaticSetter1'.
+//   static void set duplicateInstanceFieldAndStaticSetter1(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:86:8: Error: Conflicts with setter 'duplicateInstanceFieldAndStaticSetter1'.
+//   int? duplicateInstanceFieldAndStaticSetter1;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:92:19: Error: Conflicts with the implicit setter of the field 'duplicateInstanceFieldAndStaticSetter2'.
+//   static void set duplicateInstanceFieldAndStaticSetter2(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:91:8: Error: Conflicts with setter 'duplicateInstanceFieldAndStaticSetter2'.
+//   int? duplicateInstanceFieldAndStaticSetter2;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:96:12: Error: Conflicts with the implicit setter of the field 'duplicateStaticFieldAndInstanceSetter1'.
+//   void set duplicateStaticFieldAndInstanceSetter1(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:94:15: Error: Conflicts with setter 'duplicateStaticFieldAndInstanceSetter1'.
+//   static int? duplicateStaticFieldAndInstanceSetter1;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:100:12: Error: Conflicts with the implicit setter of the field 'duplicateStaticFieldAndInstanceSetter2'.
+//   void set duplicateStaticFieldAndInstanceSetter2(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:99:15: Error: Conflicts with setter 'duplicateStaticFieldAndInstanceSetter2'.
+//   static int? duplicateStaticFieldAndInstanceSetter2;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:105:12: Error: Conflicts with the implicit setter of the field 'extensionInstanceFieldAndSetter'.
+//   void set extensionInstanceFieldAndSetter(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:104:8: Error: Conflicts with setter 'extensionInstanceFieldAndSetter'.
+//   int? extensionInstanceFieldAndSetter;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:109:12: Error: Conflicts with the implicit setter of the field 'extensionInstanceFieldAndDuplicateSetter'.
+//   void set extensionInstanceFieldAndDuplicateSetter(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:108:12: Error: Conflicts with the implicit setter of the field 'extensionInstanceFieldAndDuplicateSetter'.
+//   void set extensionInstanceFieldAndDuplicateSetter(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:107:8: Error: Conflicts with setter 'extensionInstanceFieldAndDuplicateSetter'.
+//   int? extensionInstanceFieldAndDuplicateSetter;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:113:12: Error: Conflicts with the implicit setter of the field 'duplicateExtensionInstanceFieldAndSetter1'.
+//   void set duplicateExtensionInstanceFieldAndSetter1(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:111:8: Error: Conflicts with setter 'duplicateExtensionInstanceFieldAndSetter1'.
+//   int? duplicateExtensionInstanceFieldAndSetter1;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:117:12: Error: Conflicts with the implicit setter of the field 'duplicateExtensionInstanceFieldAndSetter2'.
+//   void set duplicateExtensionInstanceFieldAndSetter2(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:116:8: Error: Conflicts with setter 'duplicateExtensionInstanceFieldAndSetter2'.
+//   int? duplicateExtensionInstanceFieldAndSetter2;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:120:19: Error: Conflicts with the implicit setter of the field 'extensionStaticFieldAndSetter'.
+//   static void set extensionStaticFieldAndSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:119:15: Error: Conflicts with setter 'extensionStaticFieldAndSetter'.
+//   static int? extensionStaticFieldAndSetter;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:124:19: Error: Conflicts with the implicit setter of the field 'extensionStaticFieldAndDuplicateSetter'.
+//   static void set extensionStaticFieldAndDuplicateSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:123:19: Error: Conflicts with the implicit setter of the field 'extensionStaticFieldAndDuplicateSetter'.
+//   static void set extensionStaticFieldAndDuplicateSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:122:15: Error: Conflicts with setter 'extensionStaticFieldAndDuplicateSetter'.
+//   static int? extensionStaticFieldAndDuplicateSetter;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:128:19: Error: Conflicts with the implicit setter of the field 'duplicateExtensionStaticFieldAndSetter1'.
+//   static void set duplicateExtensionStaticFieldAndSetter1(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:126:15: Error: Conflicts with setter 'duplicateExtensionStaticFieldAndSetter1'.
+//   static int? duplicateExtensionStaticFieldAndSetter1;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:132:19: Error: Conflicts with the implicit setter of the field 'duplicateExtensionStaticFieldAndSetter2'.
+//   static void set duplicateExtensionStaticFieldAndSetter2(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:131:15: Error: Conflicts with setter 'duplicateExtensionStaticFieldAndSetter2'.
+//   static int? duplicateExtensionStaticFieldAndSetter2;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:135:19: Error: Conflicts with the implicit setter of the field 'extensionStaticLateFinalFieldAndSetter'.
+//   static void set extensionStaticLateFinalFieldAndSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:134:26: Error: Conflicts with setter 'extensionStaticLateFinalFieldAndSetter'.
+//   static late final int? extensionStaticLateFinalFieldAndSetter;
+//                          ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:139:19: Error: Conflicts with the implicit setter of the field 'extensionStaticLateFinalFieldAndDuplicateSetter'.
+//   static void set extensionStaticLateFinalFieldAndDuplicateSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:138:19: Error: Conflicts with the implicit setter of the field 'extensionStaticLateFinalFieldAndDuplicateSetter'.
+//   static void set extensionStaticLateFinalFieldAndDuplicateSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:137:26: Error: Conflicts with setter 'extensionStaticLateFinalFieldAndDuplicateSetter'.
+//   static late final int? extensionStaticLateFinalFieldAndDuplicateSetter;
+//                          ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:142:12: Error: Conflicts with the implicit setter of the field 'extensionStaticFieldAndInstanceSetter'.
+//   void set extensionStaticFieldAndInstanceSetter(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:141:15: Error: Conflicts with setter 'extensionStaticFieldAndInstanceSetter'.
+//   static int? extensionStaticFieldAndInstanceSetter;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:146:12: Error: Conflicts with the implicit setter of the field 'extensionStaticFieldAndInstanceDuplicateSetter'.
+//   void set extensionStaticFieldAndInstanceDuplicateSetter(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:145:12: Error: Conflicts with the implicit setter of the field 'extensionStaticFieldAndInstanceDuplicateSetter'.
+//   void set extensionStaticFieldAndInstanceDuplicateSetter(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:144:15: Error: Conflicts with setter 'extensionStaticFieldAndInstanceDuplicateSetter'.
+//   static int? extensionStaticFieldAndInstanceDuplicateSetter;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:149:19: Error: Conflicts with the implicit setter of the field 'extensionInstanceFieldAndStaticSetter'.
+//   static void set extensionInstanceFieldAndStaticSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:148:8: Error: Conflicts with setter 'extensionInstanceFieldAndStaticSetter'.
+//   int? extensionInstanceFieldAndStaticSetter;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:153:19: Error: Conflicts with the implicit setter of the field 'extensionInstanceFieldAndStaticDuplicateSetter'.
+//   static void set extensionInstanceFieldAndStaticDuplicateSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:152:19: Error: Conflicts with the implicit setter of the field 'extensionInstanceFieldAndStaticDuplicateSetter'.
+//   static void set extensionInstanceFieldAndStaticDuplicateSetter(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:151:8: Error: Conflicts with setter 'extensionInstanceFieldAndStaticDuplicateSetter'.
+//   int? extensionInstanceFieldAndStaticDuplicateSetter;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:157:19: Error: Conflicts with the implicit setter of the field 'duplicateExtensionInstanceFieldAndStaticSetter1'.
+//   static void set duplicateExtensionInstanceFieldAndStaticSetter1(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:155:8: Error: Conflicts with setter 'duplicateExtensionInstanceFieldAndStaticSetter1'.
+//   int? duplicateExtensionInstanceFieldAndStaticSetter1;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:156:14: Error: Conflicts with setter 'duplicateExtensionInstanceFieldAndStaticSetter1'.
+//   final int? duplicateExtensionInstanceFieldAndStaticSetter1 = null;
+//              ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:161:19: Error: Conflicts with the implicit setter of the field 'duplicateExtensionInstanceFieldAndStaticSetter2'.
+//   static void set duplicateExtensionInstanceFieldAndStaticSetter2(int? value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:160:8: Error: Conflicts with setter 'duplicateExtensionInstanceFieldAndStaticSetter2'.
+//   int? duplicateExtensionInstanceFieldAndStaticSetter2;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:159:14: Error: Conflicts with setter 'duplicateExtensionInstanceFieldAndStaticSetter2'.
+//   final int? duplicateExtensionInstanceFieldAndStaticSetter2 = null;
+//              ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:165:12: Error: Conflicts with the implicit setter of the field 'duplicateExtensionStaticFieldAndInstanceSetter1'.
+//   void set duplicateExtensionStaticFieldAndInstanceSetter1(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:163:15: Error: Conflicts with setter 'duplicateExtensionStaticFieldAndInstanceSetter1'.
+//   static int? duplicateExtensionStaticFieldAndInstanceSetter1;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:164:21: Error: Conflicts with setter 'duplicateExtensionStaticFieldAndInstanceSetter1'.
+//   static final int? duplicateExtensionStaticFieldAndInstanceSetter1 = null;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:169:12: Error: Conflicts with the implicit setter of the field 'duplicateExtensionStaticFieldAndInstanceSetter2'.
+//   void set duplicateExtensionStaticFieldAndInstanceSetter2(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:168:15: Error: Conflicts with setter 'duplicateExtensionStaticFieldAndInstanceSetter2'.
+//   static int? duplicateExtensionStaticFieldAndInstanceSetter2;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:167:21: Error: Conflicts with setter 'duplicateExtensionStaticFieldAndInstanceSetter2'.
+//   static final int? duplicateExtensionStaticFieldAndInstanceSetter2 = null;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:178:38: Error: Can't use 'duplicateTopLevelFieldAndSetter1' because it is declared more than once.
+//   duplicateTopLevelFieldAndSetter1 = duplicateTopLevelFieldAndSetter1;
+//                                      ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:178:36: Error: Can't assign to this.
+//   duplicateTopLevelFieldAndSetter1 = duplicateTopLevelFieldAndSetter1;
+//                                    ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:179:38: Error: Can't use 'duplicateTopLevelFieldAndSetter2' because it is declared more than once.
+//   duplicateTopLevelFieldAndSetter2 = duplicateTopLevelFieldAndSetter2;
+//                                      ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:179:36: Error: Can't assign to this.
+//   duplicateTopLevelFieldAndSetter2 = duplicateTopLevelFieldAndSetter2;
+//                                    ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:198:9: Error: Can't use 'duplicateStaticFieldAndSetter1' because it is declared more than once.
+//   Class.duplicateStaticFieldAndSetter1 = Class.duplicateStaticFieldAndSetter1;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:198:48: Error: Can't use 'duplicateStaticFieldAndSetter1' because it is declared more than once.
+//   Class.duplicateStaticFieldAndSetter1 = Class.duplicateStaticFieldAndSetter1;
+//                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:198:40: Error: Can't assign to this.
+//   Class.duplicateStaticFieldAndSetter1 = Class.duplicateStaticFieldAndSetter1;
+//                                        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:199:9: Error: Can't use 'duplicateStaticFieldAndSetter2' because it is declared more than once.
+//   Class.duplicateStaticFieldAndSetter2 = Class.duplicateStaticFieldAndSetter2;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:199:48: Error: Can't use 'duplicateStaticFieldAndSetter2' because it is declared more than once.
+//   Class.duplicateStaticFieldAndSetter2 = Class.duplicateStaticFieldAndSetter2;
+//                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:199:40: Error: Can't assign to this.
+//   Class.duplicateStaticFieldAndSetter2 = Class.duplicateStaticFieldAndSetter2;
+//                                        ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:209:9: Error: Setter not found: 'instanceFieldAndStaticSetter'.
+//   Class.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:212:9: Error: Can't use 'instanceFieldAndStaticDuplicateSetter' because it is declared more than once.
+//   Class.instanceFieldAndStaticDuplicateSetter =
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:212:47: Error: Can't assign to this.
+//   Class.instanceFieldAndStaticDuplicateSetter =
+//                                               ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:218:13: Error: Can't use 'duplicateStaticFieldAndInstanceSetter1' because it is declared more than once.
+//       Class.duplicateStaticFieldAndInstanceSetter1;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:219:9: Error: Can't use 'duplicateStaticFieldAndInstanceSetter1' because it is declared more than once.
+//   Class.duplicateStaticFieldAndInstanceSetter1 =
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:220:13: Error: Can't use 'duplicateStaticFieldAndInstanceSetter1' because it is declared more than once.
+//       Class.duplicateStaticFieldAndInstanceSetter1;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:219:48: Error: Can't assign to this.
+//   Class.duplicateStaticFieldAndInstanceSetter1 =
+//                                                ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:223:13: Error: Can't use 'duplicateStaticFieldAndInstanceSetter2' because it is declared more than once.
+//       Class.duplicateStaticFieldAndInstanceSetter2;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:224:9: Error: Can't use 'duplicateStaticFieldAndInstanceSetter2' because it is declared more than once.
+//   Class.duplicateStaticFieldAndInstanceSetter2 =
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:225:13: Error: Can't use 'duplicateStaticFieldAndInstanceSetter2' because it is declared more than once.
+//       Class.duplicateStaticFieldAndInstanceSetter2;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:224:48: Error: Can't assign to this.
+//   Class.duplicateStaticFieldAndInstanceSetter2 =
+//                                                ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:227:9: Error: Can't use 'duplicateInstanceFieldAndStaticSetter1' because it is declared more than once.
+//   Class.duplicateInstanceFieldAndStaticSetter1 =
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:227:48: Error: Can't assign to this.
+//   Class.duplicateInstanceFieldAndStaticSetter1 =
+//                                                ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:229:9: Error: Can't use 'duplicateInstanceFieldAndStaticSetter2' because it is declared more than once.
+//   Class.duplicateInstanceFieldAndStaticSetter2 =
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:229:48: Error: Can't assign to this.
+//   Class.duplicateInstanceFieldAndStaticSetter2 =
+//                                                ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:252:13: Error: Can't use 'duplicateExtensionStaticFieldAndSetter1' because it is declared more than once.
+//   Extension.duplicateExtensionStaticFieldAndSetter1 =
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:253:17: Error: Can't use 'duplicateExtensionStaticFieldAndSetter1' because it is declared more than once.
+//       Extension.duplicateExtensionStaticFieldAndSetter1;
+//                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:252:53: Error: Can't assign to this.
+//   Extension.duplicateExtensionStaticFieldAndSetter1 =
+//                                                     ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:254:13: Error: Can't use 'duplicateExtensionStaticFieldAndSetter2' because it is declared more than once.
+//   Extension.duplicateExtensionStaticFieldAndSetter2 =
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:255:17: Error: Can't use 'duplicateExtensionStaticFieldAndSetter2' because it is declared more than once.
+//       Extension.duplicateExtensionStaticFieldAndSetter2;
+//                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:254:53: Error: Can't assign to this.
+//   Extension.duplicateExtensionStaticFieldAndSetter2 =
+//                                                     ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:267:13: Error: Setter not found: 'extensionInstanceFieldAndStaticSetter'.
+//   Extension.extensionInstanceFieldAndStaticSetter =
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:272:13: Error: Can't use 'extensionInstanceFieldAndStaticDuplicateSetter' because it is declared more than once.
+//   Extension.extensionInstanceFieldAndStaticDuplicateSetter =
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:272:60: Error: Can't assign to this.
+//   Extension.extensionInstanceFieldAndStaticDuplicateSetter =
+//                                                            ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:277:13: Error: Can't use 'duplicateExtensionInstanceFieldAndStaticSetter1' because it is declared more than once.
+//   Extension.duplicateExtensionInstanceFieldAndStaticSetter1 =
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:277:61: Error: Can't assign to this.
+//   Extension.duplicateExtensionInstanceFieldAndStaticSetter1 =
+//                                                             ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:282:13: Error: Can't use 'duplicateExtensionInstanceFieldAndStaticSetter2' because it is declared more than once.
+//   Extension.duplicateExtensionInstanceFieldAndStaticSetter2 =
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:282:61: Error: Can't assign to this.
+//   Extension.duplicateExtensionInstanceFieldAndStaticSetter2 =
+//                                                             ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:287:13: Error: Can't use 'duplicateExtensionStaticFieldAndInstanceSetter1' because it is declared more than once.
+//   Extension.duplicateExtensionStaticFieldAndInstanceSetter1 =
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:288:17: Error: Can't use 'duplicateExtensionStaticFieldAndInstanceSetter1' because it is declared more than once.
+//       Extension.duplicateExtensionStaticFieldAndInstanceSetter1;
+//                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:287:61: Error: Can't assign to this.
+//   Extension.duplicateExtensionStaticFieldAndInstanceSetter1 =
+//                                                             ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:290:17: Error: Can't use 'duplicateExtensionStaticFieldAndInstanceSetter1' because it is declared more than once.
+//       Extension.duplicateExtensionStaticFieldAndInstanceSetter1;
+//                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:292:13: Error: Can't use 'duplicateExtensionStaticFieldAndInstanceSetter2' because it is declared more than once.
+//   Extension.duplicateExtensionStaticFieldAndInstanceSetter2 =
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:293:17: Error: Can't use 'duplicateExtensionStaticFieldAndInstanceSetter2' because it is declared more than once.
+//       Extension.duplicateExtensionStaticFieldAndInstanceSetter2;
+//                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:292:61: Error: Can't assign to this.
+//   Extension.duplicateExtensionStaticFieldAndInstanceSetter2 =
+//                                                             ^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:295:17: Error: Can't use 'duplicateExtensionStaticFieldAndInstanceSetter2' because it is declared more than once.
+//       Extension.duplicateExtensionStaticFieldAndInstanceSetter2;
+//                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:188:5: Error: Can't use 'duplicateInstanceFieldAndStaticSetter1' because it is declared more than once.
+//   c.duplicateInstanceFieldAndStaticSetter1 =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:189:9: Error: Can't use 'duplicateInstanceFieldAndStaticSetter1' because it is declared more than once.
+//       c.duplicateInstanceFieldAndStaticSetter1;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:189:9: Error: The getter 'duplicateInstanceFieldAndStaticSetter1' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateInstanceFieldAndStaticSetter1'.
+//       c.duplicateInstanceFieldAndStaticSetter1;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:188:5: Error: The setter 'duplicateInstanceFieldAndStaticSetter1' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateInstanceFieldAndStaticSetter1'.
+//   c.duplicateInstanceFieldAndStaticSetter1 =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:190:5: Error: Can't use 'duplicateInstanceFieldAndStaticSetter2' because it is declared more than once.
+//   c.duplicateInstanceFieldAndStaticSetter2 =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:191:9: Error: Can't use 'duplicateInstanceFieldAndStaticSetter2' because it is declared more than once.
+//       c.duplicateInstanceFieldAndStaticSetter2;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:191:9: Error: The getter 'duplicateInstanceFieldAndStaticSetter2' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateInstanceFieldAndStaticSetter2'.
+//       c.duplicateInstanceFieldAndStaticSetter2;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:190:5: Error: The setter 'duplicateInstanceFieldAndStaticSetter2' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateInstanceFieldAndStaticSetter2'.
+//   c.duplicateInstanceFieldAndStaticSetter2 =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:201:5: Error: The setter 'staticFieldAndInstanceSetter' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticFieldAndInstanceSetter'.
+//   c.staticFieldAndInstanceSetter = Class.staticFieldAndInstanceSetter;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:204:5: Error: The setter 'staticFieldAndInstanceDuplicateSetter' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticFieldAndInstanceDuplicateSetter'.
+//   c.staticFieldAndInstanceDuplicateSetter =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:217:5: Error: The setter 'duplicateStaticFieldAndInstanceSetter1' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateStaticFieldAndInstanceSetter1'.
+//   c.duplicateStaticFieldAndInstanceSetter1 =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:222:5: Error: The setter 'duplicateStaticFieldAndInstanceSetter2' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateStaticFieldAndInstanceSetter2'.
+//   c.duplicateStaticFieldAndInstanceSetter2 =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:232:41: Error: The getter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndSetter'.
+//   0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+//                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:232:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
+//   0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:234:9: Error: The getter 'extensionInstanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndDuplicateSetter'.
+//       0.extensionInstanceFieldAndDuplicateSetter;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:233:5: Error: The setter 'extensionInstanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndDuplicateSetter'.
+//   0.extensionInstanceFieldAndDuplicateSetter =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:237:9: Error: The getter 'duplicateExtensionInstanceFieldAndSetter1' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndSetter1'.
+//       0.duplicateExtensionInstanceFieldAndSetter1;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:236:5: Error: The setter 'duplicateExtensionInstanceFieldAndSetter1' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndSetter1'.
+//   0.duplicateExtensionInstanceFieldAndSetter1 =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:239:9: Error: The getter 'duplicateExtensionInstanceFieldAndSetter2' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndSetter2'.
+//       0.duplicateExtensionInstanceFieldAndSetter2;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:238:5: Error: The setter 'duplicateExtensionInstanceFieldAndSetter2' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndSetter2'.
+//   0.duplicateExtensionInstanceFieldAndSetter2 =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:257:5: Error: The setter 'extensionStaticFieldAndInstanceSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionStaticFieldAndInstanceSetter'.
+//   0.extensionStaticFieldAndInstanceSetter =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:262:5: Error: The setter 'extensionStaticFieldAndInstanceDuplicateSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionStaticFieldAndInstanceDuplicateSetter'.
+//   0.extensionStaticFieldAndInstanceDuplicateSetter =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:270:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+//       0.extensionInstanceFieldAndStaticSetter;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:269:5: Error: The setter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticSetter'.
+//   0.extensionInstanceFieldAndStaticSetter =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:275:9: Error: The getter 'extensionInstanceFieldAndStaticDuplicateSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticDuplicateSetter'.
+//       0.extensionInstanceFieldAndStaticDuplicateSetter;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:274:5: Error: The setter 'extensionInstanceFieldAndStaticDuplicateSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticDuplicateSetter'.
+//   0.extensionInstanceFieldAndStaticDuplicateSetter =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:280:9: Error: The getter 'duplicateExtensionInstanceFieldAndStaticSetter1' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndStaticSetter1'.
+//       0.duplicateExtensionInstanceFieldAndStaticSetter1;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:279:5: Error: The setter 'duplicateExtensionInstanceFieldAndStaticSetter1' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndStaticSetter1'.
+//   0.duplicateExtensionInstanceFieldAndStaticSetter1 =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:285:9: Error: The getter 'duplicateExtensionInstanceFieldAndStaticSetter2' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndStaticSetter2'.
+//       0.duplicateExtensionInstanceFieldAndStaticSetter2;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:284:5: Error: The setter 'duplicateExtensionInstanceFieldAndStaticSetter2' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndStaticSetter2'.
+//   0.duplicateExtensionInstanceFieldAndStaticSetter2 =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:289:5: Error: The setter 'duplicateExtensionStaticFieldAndInstanceSetter1' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionStaticFieldAndInstanceSetter1'.
+//   0.duplicateExtensionStaticFieldAndInstanceSetter1 =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:294:5: Error: The setter 'duplicateExtensionStaticFieldAndInstanceSetter2' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionStaticFieldAndInstanceSetter2'.
+//   0.duplicateExtensionStaticFieldAndInstanceSetter2 =
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:14: Error: Final field 'duplicateInstanceFieldAndSetter2' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int? duplicateInstanceFieldAndSetter2 = null;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:61:21: Error: Final field 'duplicateStaticFieldAndSetter2' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   static final int? duplicateStaticFieldAndSetter2 = null;
+//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:90:14: Error: Final field 'duplicateInstanceFieldAndStaticSetter2' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int? duplicateInstanceFieldAndStaticSetter2 = null;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/field_vs_setter.dart:98:21: Error: Final field 'duplicateStaticFieldAndInstanceSetter2' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   static final int? duplicateStaticFieldAndInstanceSetter2 = null;
+//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? instanceFieldAndSetter = null;
+  field core::int? instanceFieldAndDuplicateSetter = null;
+  field core::int? duplicateInstanceFieldAndSetter1 = null;
+  final field core::int? duplicateInstanceFieldAndSetter2 = null;
+  late final [setter] field core::int? instanceLateFinalFieldAndSetter;
+  late final [setter] field core::int? instanceLateFinalFieldAndDuplicateSetter;
+  static field core::int? staticFieldAndSetter = null;
+  static field core::int? staticFieldAndDuplicateSetter = null;
+  static field core::int? duplicateStaticFieldAndSetter1 = null;
+  static final field core::int? duplicateStaticFieldAndSetter2 = null;
+  late static final [setter] field core::int? staticLateFinalFieldAndSetter;
+  late static final [setter] field core::int? staticLateFinalFieldAndDuplicateSetter;
+  static field core::int? staticFieldAndInstanceSetter = null;
+  static field core::int? staticFieldAndInstanceDuplicateSetter = null;
+  field core::int? instanceFieldAndStaticSetter = null;
+  field core::int? instanceFieldAndStaticDuplicateSetter = null;
+  field core::int? duplicateInstanceFieldAndStaticSetter1 = null;
+  final field core::int? duplicateInstanceFieldAndStaticSetter2 = null;
+  static field core::int? duplicateStaticFieldAndInstanceSetter1 = null;
+  static final field core::int? duplicateStaticFieldAndInstanceSetter2 = null;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+}
+extension Extension on core::int? {
+  field extensionInstanceFieldAndSetter = self::Extension|extensionInstanceFieldAndSetter;
+  field extensionInstanceFieldAndDuplicateSetter = self::Extension|extensionInstanceFieldAndDuplicateSetter;
+  field duplicateExtensionInstanceFieldAndSetter1 = self::Extension|duplicateExtensionInstanceFieldAndSetter1;
+  field duplicateExtensionInstanceFieldAndSetter2 = self::Extension|duplicateExtensionInstanceFieldAndSetter2;
+  static field extensionStaticFieldAndSetter = self::Extension|extensionStaticFieldAndSetter;
+  static field extensionStaticFieldAndDuplicateSetter = self::Extension|extensionStaticFieldAndDuplicateSetter;
+  static field duplicateExtensionStaticFieldAndSetter1 = self::Extension|duplicateExtensionStaticFieldAndSetter1;
+  static field duplicateExtensionStaticFieldAndSetter2 = self::Extension|duplicateExtensionStaticFieldAndSetter2;
+  static field extensionStaticLateFinalFieldAndSetter = self::Extension|extensionStaticLateFinalFieldAndSetter;
+  static field extensionStaticLateFinalFieldAndDuplicateSetter = self::Extension|extensionStaticLateFinalFieldAndDuplicateSetter;
+  static field extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
+  static field extensionStaticFieldAndInstanceDuplicateSetter = self::Extension|extensionStaticFieldAndInstanceDuplicateSetter;
+  field extensionInstanceFieldAndStaticSetter = self::Extension|extensionInstanceFieldAndStaticSetter;
+  field extensionInstanceFieldAndStaticDuplicateSetter = self::Extension|extensionInstanceFieldAndStaticDuplicateSetter;
+  field duplicateExtensionInstanceFieldAndStaticSetter1 = self::Extension|duplicateExtensionInstanceFieldAndStaticSetter1;
+  field duplicateExtensionInstanceFieldAndStaticSetter2 = self::Extension|duplicateExtensionInstanceFieldAndStaticSetter2;
+  static field duplicateExtensionStaticFieldAndInstanceSetter1 = self::Extension|duplicateExtensionStaticFieldAndInstanceSetter1;
+  static field duplicateExtensionStaticFieldAndInstanceSetter2 = self::Extension|duplicateExtensionStaticFieldAndInstanceSetter2;
+}
+static field core::int? topLevelFieldAndSetter;
+static field core::int? topLevelFieldAndDuplicateSetter;
+static field core::int? duplicateTopLevelFieldAndSetter1;
+static final field core::int? duplicateTopLevelFieldAndSetter2;
+late static final [setter] field core::int? topLevelLateFinalFieldAndSetter;
+late static final [setter] field core::int? topLevelLateFinalFieldAndDuplicateSetter;
+static field core::int? Extension|extensionInstanceFieldAndSetter;
+static field core::int? Extension|extensionInstanceFieldAndDuplicateSetter;
+static field core::int? Extension|duplicateExtensionInstanceFieldAndSetter1;
+static final field core::int? Extension|duplicateExtensionInstanceFieldAndSetter2;
+static field core::int? Extension|extensionStaticFieldAndSetter;
+static field core::int? Extension|extensionStaticFieldAndDuplicateSetter;
+static field core::int? Extension|duplicateExtensionStaticFieldAndSetter1;
+static final field core::int? Extension|duplicateExtensionStaticFieldAndSetter2;
+late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndSetter;
+late static final [setter] field core::int? Extension|extensionStaticLateFinalFieldAndDuplicateSetter;
+static field core::int? Extension|extensionStaticFieldAndInstanceSetter;
+static field core::int? Extension|extensionStaticFieldAndInstanceDuplicateSetter;
+static field core::int? Extension|extensionInstanceFieldAndStaticSetter;
+static field core::int? Extension|extensionInstanceFieldAndStaticDuplicateSetter;
+static field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter1;
+static final field core::int? Extension|duplicateExtensionInstanceFieldAndStaticSetter2;
+static field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter1;
+static final field core::int? Extension|duplicateExtensionStaticFieldAndInstanceSetter2;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
+static method test() → dynamic {
+  self::topLevelFieldAndSetter = self::topLevelFieldAndSetter;
+  self::topLevelFieldAndDuplicateSetter = self::topLevelFieldAndDuplicateSetter;
+  self::topLevelLateFinalFieldAndSetter = self::topLevelLateFinalFieldAndSetter;
+  self::topLevelLateFinalFieldAndDuplicateSetter = self::topLevelLateFinalFieldAndDuplicateSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:178:36: Error: Can't assign to this.
+  duplicateTopLevelFieldAndSetter1 = duplicateTopLevelFieldAndSetter1;
+                                   ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:179:36: Error: Can't assign to this.
+  duplicateTopLevelFieldAndSetter2 = duplicateTopLevelFieldAndSetter2;
+                                   ^";
+  self::Class c = new self::Class::•();
+  c.{self::Class::instanceFieldAndSetter} = c.{self::Class::instanceFieldAndSetter}{core::int?};
+  c.{self::Class::instanceFieldAndDuplicateSetter} = c.{self::Class::instanceFieldAndDuplicateSetter}{core::int?};
+  c.{self::Class::instanceLateFinalFieldAndSetter} = c.{self::Class::instanceLateFinalFieldAndSetter}{core::int?};
+  c.{self::Class::instanceLateFinalFieldAndDuplicateSetter} = c.{self::Class::instanceLateFinalFieldAndDuplicateSetter}{core::int?};
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:188:5: Error: The setter 'duplicateInstanceFieldAndStaticSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateInstanceFieldAndStaticSetter1'.
+  c.duplicateInstanceFieldAndStaticSetter1 =
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:189:9: Error: The getter 'duplicateInstanceFieldAndStaticSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateInstanceFieldAndStaticSetter1'.
+      c.duplicateInstanceFieldAndStaticSetter1;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter1;
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:190:5: Error: The setter 'duplicateInstanceFieldAndStaticSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateInstanceFieldAndStaticSetter2'.
+  c.duplicateInstanceFieldAndStaticSetter2 =
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:191:9: Error: The getter 'duplicateInstanceFieldAndStaticSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateInstanceFieldAndStaticSetter2'.
+      c.duplicateInstanceFieldAndStaticSetter2;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateInstanceFieldAndStaticSetter2;
+  self::Class::staticFieldAndSetter = self::Class::staticFieldAndSetter;
+  self::Class::staticFieldAndDuplicateSetter = self::Class::staticFieldAndDuplicateSetter;
+  self::Class::staticLateFinalFieldAndSetter = self::Class::staticLateFinalFieldAndSetter;
+  self::Class::staticLateFinalFieldAndDuplicateSetter = self::Class::staticLateFinalFieldAndDuplicateSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:198:40: Error: Can't assign to this.
+  Class.duplicateStaticFieldAndSetter1 = Class.duplicateStaticFieldAndSetter1;
+                                       ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:199:40: Error: Can't assign to this.
+  Class.duplicateStaticFieldAndSetter2 = Class.duplicateStaticFieldAndSetter2;
+                                       ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:201:5: Error: The setter 'staticFieldAndInstanceSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticFieldAndInstanceSetter'.
+  c.staticFieldAndInstanceSetter = Class.staticFieldAndInstanceSetter;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.staticFieldAndInstanceSetter = self::Class::staticFieldAndInstanceSetter;
+  self::Class::staticFieldAndInstanceSetter = self::Class::staticFieldAndInstanceSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:204:5: Error: The setter 'staticFieldAndInstanceDuplicateSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticFieldAndInstanceDuplicateSetter'.
+  c.staticFieldAndInstanceDuplicateSetter =
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.staticFieldAndInstanceDuplicateSetter = self::Class::staticFieldAndInstanceDuplicateSetter;
+  self::Class::staticFieldAndInstanceDuplicateSetter = self::Class::staticFieldAndInstanceDuplicateSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:209:9: Error: Setter not found: 'instanceFieldAndStaticSetter'.
+  Class.instanceFieldAndStaticSetter = c.instanceFieldAndStaticSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+  c.{self::Class::instanceFieldAndStaticSetter} = c.{self::Class::instanceFieldAndStaticSetter}{core::int?};
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:212:47: Error: Can't assign to this.
+  Class.instanceFieldAndStaticDuplicateSetter =
+                                              ^";
+  c.{self::Class::instanceFieldAndStaticDuplicateSetter} = c.{self::Class::instanceFieldAndStaticDuplicateSetter}{core::int?};
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:217:5: Error: The setter 'duplicateStaticFieldAndInstanceSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateStaticFieldAndInstanceSetter1'.
+  c.duplicateStaticFieldAndInstanceSetter1 =
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateStaticFieldAndInstanceSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:218:13: Error: Can't use 'duplicateStaticFieldAndInstanceSetter1' because it is declared more than once.
+      Class.duplicateStaticFieldAndInstanceSetter1;
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:219:48: Error: Can't assign to this.
+  Class.duplicateStaticFieldAndInstanceSetter1 =
+                                               ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:222:5: Error: The setter 'duplicateStaticFieldAndInstanceSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateStaticFieldAndInstanceSetter2'.
+  c.duplicateStaticFieldAndInstanceSetter2 =
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.duplicateStaticFieldAndInstanceSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:223:13: Error: Can't use 'duplicateStaticFieldAndInstanceSetter2' because it is declared more than once.
+      Class.duplicateStaticFieldAndInstanceSetter2;
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:224:48: Error: Can't assign to this.
+  Class.duplicateStaticFieldAndInstanceSetter2 =
+                                               ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:227:48: Error: Can't assign to this.
+  Class.duplicateInstanceFieldAndStaticSetter1 =
+                                               ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:229:48: Error: Can't assign to this.
+  Class.duplicateInstanceFieldAndStaticSetter2 =
+                                               ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:232:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
+  0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:232:41: Error: The getter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndSetter'.
+  0.extensionInstanceFieldAndSetter = 0.extensionInstanceFieldAndSetter;
+                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:233:5: Error: The setter 'extensionInstanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndDuplicateSetter'.
+  0.extensionInstanceFieldAndDuplicateSetter =
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndDuplicateSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:234:9: Error: The getter 'extensionInstanceFieldAndDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndDuplicateSetter'.
+      0.extensionInstanceFieldAndDuplicateSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndDuplicateSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:236:5: Error: The setter 'duplicateExtensionInstanceFieldAndSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndSetter1'.
+  0.duplicateExtensionInstanceFieldAndSetter1 =
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:237:9: Error: The getter 'duplicateExtensionInstanceFieldAndSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndSetter1'.
+      0.duplicateExtensionInstanceFieldAndSetter1;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter1;
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:238:5: Error: The setter 'duplicateExtensionInstanceFieldAndSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndSetter2'.
+  0.duplicateExtensionInstanceFieldAndSetter2 =
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:239:9: Error: The getter 'duplicateExtensionInstanceFieldAndSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndSetter2'.
+      0.duplicateExtensionInstanceFieldAndSetter2;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndSetter2;
+  self::Extension|extensionStaticFieldAndSetter = self::Extension|extensionStaticFieldAndSetter;
+  self::Extension|extensionStaticFieldAndDuplicateSetter = self::Extension|extensionStaticFieldAndDuplicateSetter;
+  self::Extension|extensionStaticLateFinalFieldAndSetter = self::Extension|extensionStaticLateFinalFieldAndSetter;
+  self::Extension|extensionStaticLateFinalFieldAndDuplicateSetter = self::Extension|extensionStaticLateFinalFieldAndDuplicateSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:252:53: Error: Can't assign to this.
+  Extension.duplicateExtensionStaticFieldAndSetter1 =
+                                                    ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:254:53: Error: Can't assign to this.
+  Extension.duplicateExtensionStaticFieldAndSetter2 =
+                                                    ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:257:5: Error: The setter 'extensionStaticFieldAndInstanceSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionStaticFieldAndInstanceSetter'.
+  0.extensionStaticFieldAndInstanceSetter =
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
+  self::Extension|extensionStaticFieldAndInstanceSetter = self::Extension|extensionStaticFieldAndInstanceSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:262:5: Error: The setter 'extensionStaticFieldAndInstanceDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionStaticFieldAndInstanceDuplicateSetter'.
+  0.extensionStaticFieldAndInstanceDuplicateSetter =
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionStaticFieldAndInstanceDuplicateSetter = self::Extension|extensionStaticFieldAndInstanceDuplicateSetter;
+  self::Extension|extensionStaticFieldAndInstanceDuplicateSetter = self::Extension|extensionStaticFieldAndInstanceDuplicateSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:267:13: Error: Setter not found: 'extensionInstanceFieldAndStaticSetter'.
+  Extension.extensionInstanceFieldAndStaticSetter =
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:269:5: Error: The setter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticSetter'.
+  0.extensionInstanceFieldAndStaticSetter =
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:270:9: Error: The getter 'extensionInstanceFieldAndStaticSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticSetter'.
+      0.extensionInstanceFieldAndStaticSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:272:60: Error: Can't assign to this.
+  Extension.extensionInstanceFieldAndStaticDuplicateSetter =
+                                                           ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:274:5: Error: The setter 'extensionInstanceFieldAndStaticDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndStaticDuplicateSetter'.
+  0.extensionInstanceFieldAndStaticDuplicateSetter =
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticDuplicateSetter = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:275:9: Error: The getter 'extensionInstanceFieldAndStaticDuplicateSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'extensionInstanceFieldAndStaticDuplicateSetter'.
+      0.extensionInstanceFieldAndStaticDuplicateSetter;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndStaticDuplicateSetter;
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:277:61: Error: Can't assign to this.
+  Extension.duplicateExtensionInstanceFieldAndStaticSetter1 =
+                                                            ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:279:5: Error: The setter 'duplicateExtensionInstanceFieldAndStaticSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndStaticSetter1'.
+  0.duplicateExtensionInstanceFieldAndStaticSetter1 =
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:280:9: Error: The getter 'duplicateExtensionInstanceFieldAndStaticSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndStaticSetter1'.
+      0.duplicateExtensionInstanceFieldAndStaticSetter1;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter1;
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:282:61: Error: Can't assign to this.
+  Extension.duplicateExtensionInstanceFieldAndStaticSetter2 =
+                                                            ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:284:5: Error: The setter 'duplicateExtensionInstanceFieldAndStaticSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionInstanceFieldAndStaticSetter2'.
+  0.duplicateExtensionInstanceFieldAndStaticSetter2 =
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:285:9: Error: The getter 'duplicateExtensionInstanceFieldAndStaticSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'duplicateExtensionInstanceFieldAndStaticSetter2'.
+      0.duplicateExtensionInstanceFieldAndStaticSetter2;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionInstanceFieldAndStaticSetter2;
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:287:61: Error: Can't assign to this.
+  Extension.duplicateExtensionStaticFieldAndInstanceSetter1 =
+                                                            ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:289:5: Error: The setter 'duplicateExtensionStaticFieldAndInstanceSetter1' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionStaticFieldAndInstanceSetter1'.
+  0.duplicateExtensionStaticFieldAndInstanceSetter1 =
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionStaticFieldAndInstanceSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:290:17: Error: Can't use 'duplicateExtensionStaticFieldAndInstanceSetter1' because it is declared more than once.
+      Extension.duplicateExtensionStaticFieldAndInstanceSetter1;
+                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:292:61: Error: Can't assign to this.
+  Extension.duplicateExtensionStaticFieldAndInstanceSetter2 =
+                                                            ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:294:5: Error: The setter 'duplicateExtensionStaticFieldAndInstanceSetter2' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'duplicateExtensionStaticFieldAndInstanceSetter2'.
+  0.duplicateExtensionStaticFieldAndInstanceSetter2 =
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.duplicateExtensionStaticFieldAndInstanceSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/field_vs_setter.dart:295:17: Error: Can't use 'duplicateExtensionStaticFieldAndInstanceSetter2' because it is declared more than once.
+      Extension.duplicateExtensionStaticFieldAndInstanceSetter2;
+                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "{\"topLevelFieldAndDuplicateSetter\":\"'topLevelFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/field_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.\",\"topLevelLateFinalFieldAndDuplicateSetter\":\"'topLevelLateFinalFieldAndDuplicateSetter' is exported from both 'pkg/front_end/testcases/nnbd/field_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/field_vs_setter.dart'.\"}"
+}
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.modular.expect
new file mode 100644
index 0000000..5ed98d4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.modular.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+abstract class TestMixin<R extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> async {
+    final self::TestMixin::R% response = await fetch;
+    self::TestMixin::T% result;
+    if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
+      result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
+    }
+    else
+      if(response is{ForNonNullableByDefault} self::PagingResponse<dynamic>) {
+        result = response{self::TestMixin::R% & self::PagingResponse<dynamic> /* '%' & '!' = '!' */}.{self::PagingResponse::data}{self::PagingResponseData<dynamic>}.{self::PagingResponseData::data}{core::List<dynamic>} as{ForNonNullableByDefault} self::TestMixin::T%;
+      }
+      else
+        if(response is{ForNonNullableByDefault} self::TestMixin::T%) {
+          result = response{self::TestMixin::R% & self::TestMixin::T% /* '%' & '%' = '%' */};
+        }
+        else {
+          throw core::Exception::•("Invalid response type");
+        }
+    return result;
+  }
+}
+class PagingResponse<T extends core::Object? = dynamic> extends core::Object {
+  final field self::PagingResponseData<self::PagingResponse::T%> data;
+  constructor •(self::PagingResponseData<self::PagingResponse::T%> data) → self::PagingResponse<self::PagingResponse::T%>
+    : self::PagingResponse::data = data, super core::Object::•()
+    ;
+}
+class PagingResponseData<T extends core::Object? = dynamic> extends core::Object {
+  final field core::List<self::PagingResponseData::T%> data;
+  constructor •(core::List<self::PagingResponseData::T%> data) → self::PagingResponseData<self::PagingResponseData::T%>
+    : self::PagingResponseData::data = data, super core::Object::•()
+    ;
+}
+class Response<T extends core::Object? = dynamic> extends core::Object {
+  final field self::Response::T% data;
+  constructor •(self::Response::T% data) → self::Response<self::Response::T%>
+    : self::Response::data = data, super core::Object::•()
+    ;
+}
+abstract class _Class1&Object&TestMixin = core::Object with self::TestMixin<self::Response<core::String>, core::String> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Class1&Object&TestMixin
+    : super core::Object::•()
+    ;
+  mixin-super-stub method test(covariant-by-class asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String>
+    return super.{self::TestMixin::test}(fetch);
+}
+class Class1 extends self::_Class1&Object&TestMixin {
+  synthetic constructor •() → self::Class1
+    : super self::_Class1&Object&TestMixin::•()
+    ;
+  method _test() → dynamic {
+    final self::Response<core::String> response = new self::Response::•<core::String>("test");
+    this.{self::_Class1&Object&TestMixin::test}(asy::Future::value<self::Response<core::String>>(response)){(asy::Future<self::Response<core::String>>) → asy::Future<core::String>};
+  }
+}
+abstract class _Class2&Object&TestMixin = core::Object with self::TestMixin<self::PagingResponse<core::String>, core::String> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Class2&Object&TestMixin
+    : super core::Object::•()
+    ;
+  mixin-super-stub method test(covariant-by-class asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String>
+    return super.{self::TestMixin::test}(fetch);
+}
+class Class2 extends self::_Class2&Object&TestMixin {
+  synthetic constructor •() → self::Class2
+    : super self::_Class2&Object&TestMixin::•()
+    ;
+  method _test() → dynamic {
+    final self::PagingResponse<core::String> response = new self::PagingResponse::•<core::String>(new self::PagingResponseData::•<core::String>(<core::String>["test"]));
+    this.{self::_Class2&Object&TestMixin::test}(asy::Future::value<self::PagingResponse<core::String>>(response)){(asy::Future<self::PagingResponse<core::String>>) → asy::Future<core::String>};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.modular.expect
new file mode 100644
index 0000000..5fac846
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.modular.expect
@@ -0,0 +1,283 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:12:7: Error: Can't mix 'Aoo' in because it's marked with '?'.
+// class Coo extends Boo with Aoo? {}
+//       ^^^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:14:7: Error: Can't extend 'Aoo' because it's marked with '?'.
+// class Doo extends Aoo? {}
+//       ^^^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:16:7: Error: Can't implement 'Boo' because it's marked with '?'.
+// class Eoo implements Boo? {}
+//       ^^^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:18:7: Error: Can't extend 'Boo' because it's marked with '?'.
+// class Foo extends Boo? with Aoo {}
+//       ^^^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:20:7: Error: Can't extend 'Boo' because it's marked with '?'.
+// class Goo = Boo? with Aoo?;
+//       ^^^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:20:7: Error: Can't mix 'Aoo' in because it's marked with '?'.
+// class Goo = Boo? with Aoo?;
+//       ^^^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:22:7: Error: Can't implement 'Boo' because it's marked with '?'.
+// class Hoo extends Object with Aoo implements Boo? {}
+//       ^^^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:24:7: Error: Can't implement 'Boo' because it's marked with '?'.
+// class Ioo = Object with Aoo implements Boo?;
+//       ^^^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:32:7: Error: Can't extend 'Aoo' because it's marked with '?'.
+// mixin Moo1 on Aoo? implements Boo? {}
+//       ^^^^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:32:7: Error: Can't implement 'Boo' because it's marked with '?'.
+// mixin Moo1 on Aoo? implements Boo? {}
+//       ^^^^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:34:7: Error: Can't extend 'Aoo' because it's marked with '?'.
+// mixin Moo2 on Aoo?, Boo? {}
+//       ^^^^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:34:7: Error: Can't extend 'Boo' because it's marked with '?'.
+// mixin Moo2 on Aoo?, Boo? {}
+//       ^^^^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:36:7: Error: Can't implement 'Aoo' because it's marked with '?'.
+// mixin Moo3 implements Aoo?, Boo? {}
+//       ^^^^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:36:7: Error: Can't implement 'Boo' because it's marked with '?'.
+// mixin Moo3 implements Aoo?, Boo? {}
+//       ^^^^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:50:17: Error: Type 'void' can't be used here.
+// Try removing 'void' keyword or replace it with 'var', 'final', or a type.
+// class NooVoid = void with Aoo;
+//                 ^^^^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:50:17: Error: Type 'void' not found.
+// class NooVoid = void with Aoo;
+//                 ^^^^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:26:7: Error: The type 'Never' can't be mixed in.
+// class Joo extends Boo with Never {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:52:7: Error: The type 'Never' can't be mixed in.
+// class Ooo = Aoo with Never;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:26:7: Error: The type 'Never' can't be used as supertype.
+// class Joo extends Boo with Never {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:7: Error: The type 'Never' can't be used as supertype.
+// class Koo extends Never {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:7: Error: The type 'Never' can't be used as supertype.
+// class Loo implements Never {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:7: Error: The type 'Never' can't be used as supertype.
+// mixin Moo4 on Aoo implements Never {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:7: Error: The type 'Never' can't be used as supertype.
+// mixin Moo5 on Aoo, Never {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:7: Error: The type 'Never' can't be used as supertype.
+// mixin Moo6 on Never {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:7: Error: The type 'Never' can't be used as supertype.
+// mixin Moo7 implements Aoo, Never {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:7: Error: The type 'Never' can't be used as supertype.
+// mixin Moo8 implements Never {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:7: Error: The type 'Never' can't be used as supertype.
+// class Noo = Never with Aoo;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:49:7: Error: The type 'dynamic' can't be used as supertype.
+// class NooDynamic = dynamic with Aoo;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:52:7: Error: The type 'Never' can't be used as supertype.
+// class Ooo = Aoo with Never;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// class Koo extends Never {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// class Loo implements Never {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// mixin Moo4 on Aoo implements Never {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// mixin Moo5 on Aoo, Never {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// mixin Moo6 on Never {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// mixin Moo7 implements Aoo, Never {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// mixin Moo8 implements Never {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// class Noo = Never with Aoo;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Aoo extends core::Object {
+  synthetic constructor •() → self::Aoo
+    : super core::Object::•()
+    ;
+}
+class Boo extends core::Object {
+  synthetic constructor •() → self::Boo
+    : super core::Object::•()
+    ;
+}
+abstract class _Coo&Boo&Aoo = self::Boo with self::Aoo /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Coo&Boo&Aoo
+    : super self::Boo::•()
+    ;
+}
+class Coo extends self::_Coo&Boo&Aoo {
+  synthetic constructor •() → self::Coo
+    : super self::_Coo&Boo&Aoo::•()
+    ;
+}
+class Doo extends self::Aoo {
+  synthetic constructor •() → self::Doo
+    : super self::Aoo::•()
+    ;
+}
+class Eoo extends core::Object implements self::Boo {
+  synthetic constructor •() → self::Eoo
+    : super core::Object::•()
+    ;
+}
+abstract class _Foo&Boo&Aoo = self::Boo with self::Aoo /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Foo&Boo&Aoo
+    : super self::Boo::•()
+    ;
+}
+class Foo extends self::_Foo&Boo&Aoo {
+  synthetic constructor •() → self::Foo
+    : super self::_Foo&Boo&Aoo::•()
+    ;
+}
+class Goo = self::Boo with self::Aoo {
+  synthetic constructor •() → self::Goo
+    : super self::Boo::•()
+    ;
+}
+abstract class _Hoo&Object&Aoo = core::Object with self::Aoo /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Hoo&Object&Aoo
+    : super core::Object::•()
+    ;
+}
+class Hoo extends self::_Hoo&Object&Aoo implements self::Boo {
+  synthetic constructor •() → self::Hoo
+    : super self::_Hoo&Object&Aoo::•()
+    ;
+}
+class Ioo = core::Object with self::Aoo implements self::Boo /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Ioo
+    : super core::Object::•()
+    ;
+}
+abstract class _Joo&Boo&Never extends self::Boo /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Joo&Boo&Never
+    : super self::Boo::•()
+    ;
+}
+class Joo extends self::_Joo&Boo&Never {
+  synthetic constructor •() → self::Joo
+    : super self::_Joo&Boo&Never::•()
+    ;
+}
+class Koo extends core::Object {
+  synthetic constructor •() → self::Koo
+    : super core::Object::•()
+    ;
+}
+class Loo extends core::Object {
+  synthetic constructor •() → self::Loo
+    : super core::Object::•()
+    ;
+}
+abstract class Moo1 extends self::Aoo implements self::Boo /*isMixinDeclaration*/  {
+}
+abstract class _Moo2&Aoo&Boo extends core::Object implements self::Aoo, self::Boo /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Moo2&Aoo&Boo
+    : super core::Object::•()
+    ;
+}
+abstract class Moo2 extends self::_Moo2&Aoo&Boo /*isMixinDeclaration*/  {
+}
+abstract class Moo3 extends core::Object implements self::Aoo, self::Boo /*isMixinDeclaration*/  {
+}
+abstract class Moo4 extends self::Aoo /*isMixinDeclaration*/  {
+}
+abstract class _Moo5&Aoo&Never extends core::Object implements self::Aoo /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Moo5&Aoo&Never
+    : super core::Object::•()
+    ;
+}
+abstract class Moo5 extends self::_Moo5&Aoo&Never /*isMixinDeclaration*/  {
+}
+abstract class Moo6 extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class Moo7 extends core::Object implements self::Aoo /*isMixinDeclaration*/  {
+}
+abstract class Moo8 extends core::Object /*isMixinDeclaration*/  {
+}
+class Noo = core::Object with self::Aoo {
+  synthetic constructor •() → self::Noo
+    : super core::Object::•()
+    ;
+}
+class NooDynamic = core::Object with self::Aoo {
+  synthetic constructor •() → self::NooDynamic
+    : super core::Object::•()
+    ;
+}
+class NooVoid = core::Object with self::Aoo {
+  synthetic constructor •() → self::NooVoid
+    : super core::Object::•()
+    ;
+}
+class Ooo extends self::Aoo {
+  synthetic constructor •() → self::Ooo
+    : super self::Aoo::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/forin.dart.weak.modular.expect
new file mode 100644
index 0000000..875fe7a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/forin.dart.weak.modular.expect
@@ -0,0 +1,149 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
+//  - 'Iterable' is from 'dart:core'.
+//   for (int x in i2) x;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
+//  - 'Iterable' is from 'dart:core'.
+//   [for (int x in i2) x];
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+//  - 'List' is from 'dart:core'.
+//  - 'Iterable' is from 'dart:core'.
+//   for (int x in l2) x;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/forin.dart:13:18: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+//  - 'List' is from 'dart:core'.
+//  - 'Iterable' is from 'dart:core'.
+//   [for (int x in l2) x];
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Iterable' is from 'dart:core'.
+//   for (int x in o1) x;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/forin.dart:16:18: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Iterable' is from 'dart:core'.
+//   [for (int x in o1) x];
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/forin.dart:18:17: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Iterable' is from 'dart:core'.
+//   for (int x in o2) x;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/forin.dart:19:18: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Iterable' is from 'dart:core'.
+//   [for (int x in o2) x];
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method error(core::Iterable<core::int>? i2, core::List<core::int>? l2, core::Object o1, core::Object? o2) → dynamic {
+  for (core::int x in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
+ - 'Iterable' is from 'dart:core'.
+  for (int x in i2) x;
+                ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
+    x;
+  block {
+    final core::List<core::int> #t1 = <core::int>[];
+    for (core::int x in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'Iterable<int>?' is nullable and 'Iterable<dynamic>' isn't.
+ - 'Iterable' is from 'dart:core'.
+  [for (int x in i2) x];
+                 ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
+      #t1.{core::List::add}{Invariant}(x){(core::int) → void};
+  } =>#t1;
+  for (core::int x in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+ - 'List' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  for (int x in l2) x;
+                ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
+    x;
+  block {
+    final core::List<core::int> #t2 = <core::int>[];
+    for (core::int x in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:13:18: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>' because 'List<int>?' is nullable and 'Iterable<dynamic>' isn't.
+ - 'List' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  [for (int x in l2) x];
+                 ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
+      #t2.{core::List::add}{Invariant}(x){(core::int) → void};
+  } =>#t2;
+  for (final dynamic #t3 in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  for (int x in o1) x;
+                ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    x;
+  }
+  block {
+    final core::List<core::int> #t4 = <core::int>[];
+    for (final dynamic #t5 in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:16:18: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  [for (int x in o1) x];
+                 ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t5 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+      #t4.{core::List::add}{Invariant}(x){(core::int) → void};
+    }
+  } =>#t4;
+  for (final dynamic #t6 in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:18:17: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  for (int x in o2) x;
+                ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t6 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    x;
+  }
+  block {
+    final core::List<core::int> #t7 = <core::int>[];
+    for (final dynamic #t8 in invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:19:18: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  [for (int x in o2) x];
+                 ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t8 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+      #t7.{core::List::add}{Invariant}(x){(core::int) → void};
+    }
+  } =>#t7;
+}
+static method ok(core::Iterable<core::int> i1, core::List<core::int> l1, dynamic d) → dynamic {
+  for (core::int x in i1)
+    x;
+  block {
+    final core::List<core::int> #t9 = <core::int>[];
+    for (core::int x in i1)
+      #t9.{core::List::add}{Invariant}(x){(core::int) → void};
+  } =>#t9;
+  for (core::int x in l1)
+    x;
+  block {
+    final core::List<core::int> #t10 = <core::int>[];
+    for (core::int x in l1)
+      #t10.{core::List::add}{Invariant}(x){(core::int) → void};
+  } =>#t10;
+  for (final dynamic #t11 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t11 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+    x;
+  }
+  block {
+    final core::List<core::int> #t12 = <core::int>[];
+    for (final dynamic #t13 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t13 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+      #t12.{core::List::add}{Invariant}(x){(core::int) → void};
+    }
+  } =>#t12;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.weak.modular.expect
new file mode 100644
index 0000000..5118ed8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/from_agnostic/from_agnostic.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///from_agnostic_lib.dart";
+
+static const field core::bool c1 = #C1;
+static const field core::Map<core::List<core::int?>, core::int> c2 = #C6;
+static const field core::Set<core::List<core::int?>> c3 = #C7;
+static const field core::List<core::int> c4 = #C2;
+static const field core::List<core::int?> c5 = #C4;
+static method main() → dynamic {
+  #C2;
+  #C4;
+}
+
+constants  {
+  #C1 = false
+  #C2 = <core::int*>[]
+  #C3 = 0
+  #C4 = <core::int?>[]
+  #C5 = 1
+  #C6 = <core::List<core::int?>*, core::int*>{#C2:#C3, #C4:#C5)
+  #C7 = <core::List<core::int?>*>{#C2, #C4}
+}
diff --git a/pkg/front_end/testcases/nnbd/function_types.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/function_types.dart.weak.modular.expect
new file mode 100644
index 0000000..57a3b98
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/function_types.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F = () → void;
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+}
+class B extends self::A<() →? dynamic> {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  method method(() →? dynamic x) → () →? dynamic
+    return null;
+}
+static method foo() → void {}
+static method bar() → () → void
+  return #C1;
+static method baz() → () →? void
+  return #C1;
+static method hest() → () → void
+  return #C1;
+static method fisk() → () →? void
+  return #C1;
+static method foobar(() →? dynamic x) → () →? dynamic
+  return null;
+static method main() → dynamic {
+  () → void g = () → void {};
+  () →? void f = g;
+  () → void fBar = self::bar();
+  () →? void fBaz = self::baz();
+  () → void fHest = self::hest();
+  () →? void fFisk = self::fisk();
+}
+
+constants  {
+  #C1 = static-tearoff self::foo
+}
diff --git a/pkg/front_end/testcases/nnbd/future_or_variables.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/future_or_variables.dart.weak.modular.expect
new file mode 100644
index 0000000..88659fb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/future_or_variables.dart.weak.modular.expect
@@ -0,0 +1,51 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+class Class1 extends core::Object {
+  field FutureOr<dynamic>instanceField1 = null;
+  field FutureOr<core::int?>instanceField2 = null;
+  field FutureOr<FutureOr<dynamic>>instanceField3 = null;
+  static field FutureOr<dynamic>staticField1 = null;
+  static field FutureOr<core::int?>staticField2 = null;
+  static field FutureOr<FutureOr<dynamic>>staticField3 = null;
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+  method instanceMethod1([FutureOr<dynamic>parameter1 = #C1, FutureOr<core::int?>parameter2 = #C1, FutureOr<FutureOr<dynamic>>parameter3 = #C1]) → void {}
+  method instanceMethod2({FutureOr<dynamic>parameter1 = #C1, FutureOr<core::int?>parameter2 = #C1, FutureOr<FutureOr<dynamic>>parameter3 = #C1}) → void {}
+  static method staticMethod1([FutureOr<dynamic>parameter1 = #C1, FutureOr<core::int?>parameter2 = #C1, FutureOr<FutureOr<dynamic>>parameter3 = #C1]) → void {}
+  static method staticMethod2({FutureOr<dynamic>parameter1 = #C1, FutureOr<core::int?>parameter2 = #C1, FutureOr<FutureOr<dynamic>>parameter3 = #C1}) → void {}
+}
+class Class2 extends core::Object {
+  field FutureOr<dynamic>instanceField1;
+  field FutureOr<core::int?>instanceField2;
+  field FutureOr<FutureOr<dynamic>>instanceField3;
+  constructor constructor1(FutureOr<dynamic>instanceField1, FutureOr<core::int?>instanceField2, FutureOr<FutureOr<dynamic>>instanceField3) → self::Class2
+    : self::Class2::instanceField1 = instanceField1, self::Class2::instanceField2 = instanceField2, self::Class2::instanceField3 = instanceField3, super core::Object::•()
+    ;
+  constructor constructor2() → self::Class2
+    : self::Class2::instanceField3 = null, self::Class2::instanceField2 = null, self::Class2::instanceField1 = null, super core::Object::•()
+    ;
+}
+static field FutureOr<dynamic>topLevelField1;
+static field FutureOr<core::int?>topLevelField2;
+static field FutureOr<FutureOr<dynamic>>topLevelField3;
+static method toplevelMethod1([FutureOr<dynamic>parameter1 = #C1, FutureOr<core::int?>parameter2 = #C1, FutureOr<FutureOr<dynamic>>parameter3 = #C1]) → void {}
+static method toplevelMethod2({FutureOr<dynamic>parameter1 = #C1, FutureOr<core::int?>parameter2 = #C1, FutureOr<FutureOr<dynamic>>parameter3 = #C1}) → void {}
+static method main() → dynamic {
+  FutureOr<dynamic>local1;
+  FutureOr<core::int?>local2;
+  FutureOr<FutureOr<dynamic>>local3;
+  core::print(local1);
+  core::print(local2);
+  core::print(local3);
+  function localFunction1([FutureOr<dynamic>parameter1 = #C1, FutureOr<core::int?>parameter2 = #C1, FutureOr<FutureOr<dynamic>>parameter3 = #C1]) → void {}
+  function localFunction2({FutureOr<dynamic>parameter1 = #C1, FutureOr<core::int?>parameter2 = #C1, FutureOr<FutureOr<dynamic>>parameter3 = #C1}) → void {}
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.modular.expect
new file mode 100644
index 0000000..c796a15
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.modular.expect
@@ -0,0 +1,273 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:21:11: Error: The type 'num' of the getter 'A.property3' is not a subtype of the type 'int' of the setter 'A.property3'.
+//   num get property3; // error
+//           ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:22:12: Context: This is the declaration of the setter 'A.property3'.
+//   void set property3(int i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:36:18: Error: The type 'num' of the getter 'A.property9' is not a subtype of the type 'int' of the setter 'A.property9'.
+//   static num get property9 => 0; // error
+//                  ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:37:19: Context: This is the declaration of the setter 'A.property9'.
+//   static void set property9(int value) {}
+//                   ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:61:12: Error: The type 'num' of the inherited getter 'B1.property3' is not a subtype of the type 'int' of the setter 'B2.property3'.
+//   void set property3(int i); // error
+//            ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:45:11: Context: This is the declaration of the getter 'B1.property3'.
+//   num get property3;
+//           ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:67:12: Error: The type 'num' of the inherited field 'B1.property6' is not a subtype of the type 'int' of the setter 'B2.property6'.
+//   void set property6(int i); // error
+//            ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:51:13: Context: This is the declaration of the field 'B1.property6'.
+//   final num property6;
+//             ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:89:11: Error: The type 'num' of the getter 'C2.property3' is not a subtype of the type 'int' of the inherited setter 'C1.property3'.
+//   num get property3; // error
+//           ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:75:12: Context: This is the declaration of the setter 'C1.property3'.
+//   void set property3(int i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:97:11: Error: The type 'num' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+//   num get property6; // error
+//           ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:81:7: Context: This is the declaration of the setter 'C1.property6'.
+//   int property6 = 0;
+//       ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:97:11: Error: The return type of the method 'C2.property6' is 'num', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
+// Change to a subtype of 'int'.
+//   num get property6; // error
+//           ^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:81:7: Context: This is the overridden method ('property6').
+//   int property6 = 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:116:16: Error: The type 'num' of the inherited getter 'D1.property3' is not a subtype of the type 'int' of the inherited setter 'D2.property3'.
+// abstract class D3 implements D1, D2 /* error on property3 */ {}
+//                ^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:105:11: Context: This is the declaration of the getter 'D1.property3'.
+//   num get property3;
+//           ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:113:12: Context: This is the declaration of the setter 'D2.property3'.
+//   void set property3(int i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:118:16: Error: The type 'num' of the inherited getter 'D1.property3' is not a subtype of the type 'int' of the inherited setter 'D2.property3'.
+// abstract class D4 implements D3 /* no need for error on property3 */ {}
+//                ^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:105:11: Context: This is the declaration of the getter 'D1.property3'.
+//   num get property3;
+//           ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:113:12: Context: This is the declaration of the setter 'D2.property3'.
+//   void set property3(int i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:11:9: Error: The type 'num' of the getter 'property3' is not a subtype of the type 'int' of the setter 'property3'.
+// num get property3 => 0; // error
+//         ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:12:10: Context: This is the declaration of the setter 'property3'.
+// void set property3(int value) {}
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:127:11: Error: The type 'num' of the getter 'property3' is not a subtype of the type 'int' of the setter 'property3'.
+//   num get property3 => 0; // error
+//           ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:128:12: Context: This is the declaration of the setter 'property3'.
+//   void set property3(int i) {}
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:136:9: Error: The type 'T' of the getter 'property6' is not a subtype of the type 'S' of the setter 'property6'.
+//   T get property6 => 0; // error
+//         ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:137:12: Context: This is the declaration of the setter 'property6'.
+//   void set property6(S i) {}
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:145:18: Error: The type 'num' of the getter 'property9' is not a subtype of the type 'int' of the setter 'property9'.
+//   static num get property9 => 0; // error
+//                  ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:146:19: Context: This is the declaration of the setter 'property9'.
+//   static void set property9(int value) {}
+//                   ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:130:22: Error: A value of type 'int' can't be returned from a function with return type 'S'.
+//   S get property4 => 0; // ok
+//                      ^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be returned from a function with return type 'S'.
+//   S get property5 => 0; // ok
+//                      ^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:136:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
+//   T get property6 => 0; // error
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  field core::int property4 = 0;
+  field core::int property5 = 0;
+  covariant-by-declaration field core::num property6 = 0;
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  abstract get property1() → core::int;
+  abstract set property1(core::int i) → void;
+  abstract get property2() → core::int;
+  abstract set property2(core::int i) → void;
+  abstract get property3() → core::num;
+  abstract set property3(core::int i) → void;
+  static get property7() → core::int
+    return 0;
+  static set property7(core::int value) → void {}
+  static get property8() → core::int
+    return 0;
+  static set property8(core::num value) → void {}
+  static get property9() → core::num
+    return 0;
+  static set property9(core::int value) → void {}
+}
+abstract class B1 extends core::Object {
+  final field core::int property4;
+  final field core::int property5;
+  final field core::num property6;
+  constructor •(core::int property4, core::int property5, core::num property6) → self::B1
+    : self::B1::property4 = property4, self::B1::property5 = property5, self::B1::property6 = property6, super core::Object::•()
+    ;
+  abstract get property1() → core::int;
+  abstract get property2() → core::int;
+  abstract get property3() → core::num;
+}
+abstract class B2 extends core::Object implements self::B1 {
+  synthetic constructor •() → self::B2
+    : super core::Object::•()
+    ;
+  abstract set property1(core::int i) → void;
+  abstract set property2(core::num i) → void;
+  abstract set property3(core::int i) → void;
+  abstract set property4(core::int i) → void;
+  abstract set property5(core::num i) → void;
+  abstract set property6(core::int i) → void;
+}
+abstract class C1 extends core::Object {
+  field core::int property4 = 0;
+  field core::num property5 = 0;
+  field core::int property6 = 0;
+  synthetic constructor •() → self::C1
+    : super core::Object::•()
+    ;
+  abstract set property1(core::int i) → void;
+  abstract set property2(core::num i) → void;
+  abstract set property3(core::int i) → void;
+}
+abstract class C2 extends core::Object implements self::C1 {
+  synthetic constructor •() → self::C2
+    : super core::Object::•()
+    ;
+  abstract get property1() → core::int;
+  abstract get property2() → core::int;
+  abstract get property3() → core::num;
+  abstract get property4() → core::int;
+  abstract get property5() → core::int;
+  abstract get property6() → core::num;
+}
+abstract class D1 extends core::Object {
+  synthetic constructor •() → self::D1
+    : super core::Object::•()
+    ;
+  abstract get property1() → core::int;
+  abstract get property2() → core::int;
+  abstract get property3() → core::num;
+}
+abstract class D2 extends core::Object {
+  synthetic constructor •() → self::D2
+    : super core::Object::•()
+    ;
+  abstract set property1(core::int i) → void;
+  abstract set property2(core::num i) → void;
+  abstract set property3(core::int i) → void;
+}
+abstract class D3 extends core::Object implements self::D1, self::D2 {
+  synthetic constructor •() → self::D3
+    : super core::Object::•()
+    ;
+}
+abstract class D4 extends core::Object implements self::D3 {
+  synthetic constructor •() → self::D4
+    : super core::Object::•()
+    ;
+}
+extension Extension<T extends core::Object? = dynamic, S extends T% = dynamic> on core::int {
+  get property1 = self::Extension|get#property1;
+  get property2 = self::Extension|get#property2;
+  get property3 = self::Extension|get#property3;
+  get property4 = self::Extension|get#property4;
+  get property5 = self::Extension|get#property5;
+  get property6 = self::Extension|get#property6;
+  static get property7 = get self::Extension|property7;
+  static get property8 = get self::Extension|property8;
+  static get property9 = get self::Extension|property9;
+  set property1 = self::Extension|set#property1;
+  set property2 = self::Extension|set#property2;
+  set property3 = self::Extension|set#property3;
+  set property4 = self::Extension|set#property4;
+  set property5 = self::Extension|set#property5;
+  set property6 = self::Extension|set#property6;
+  static set property7 = set self::Extension|property7;
+  static set property8 = set self::Extension|property8;
+  static set property9 = set self::Extension|property9;
+}
+static get property1() → core::int
+  return 0;
+static set property1(core::int value) → void {}
+static get property2() → core::int
+  return 0;
+static set property2(core::num value) → void {}
+static get property3() → core::num
+  return 0;
+static set property3(core::int value) → void {}
+static method Extension|get#property1<T extends core::Object? = dynamic, S extends self::Extension|get#property1::T% = dynamic>(lowered final core::int #this) → core::int
+  return 0;
+static method Extension|set#property1<T extends core::Object? = dynamic, S extends self::Extension|set#property1::T% = dynamic>(lowered final core::int #this, core::int i) → void {}
+static method Extension|get#property2<T extends core::Object? = dynamic, S extends self::Extension|get#property2::T% = dynamic>(lowered final core::int #this) → core::int
+  return 0;
+static method Extension|set#property2<T extends core::Object? = dynamic, S extends self::Extension|set#property2::T% = dynamic>(lowered final core::int #this, core::num i) → void {}
+static method Extension|get#property3<T extends core::Object? = dynamic, S extends self::Extension|get#property3::T% = dynamic>(lowered final core::int #this) → core::num
+  return 0;
+static method Extension|set#property3<T extends core::Object? = dynamic, S extends self::Extension|set#property3::T% = dynamic>(lowered final core::int #this, core::int i) → void {}
+static method Extension|get#property4<T extends core::Object? = dynamic, S extends self::Extension|get#property4::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property4::S%
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:130:22: Error: A value of type 'int' can't be returned from a function with return type 'S'.
+  S get property4 => 0; // ok
+                     ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
+static method Extension|set#property4<T extends core::Object? = dynamic, S extends self::Extension|set#property4::T% = dynamic>(lowered final core::int #this, self::Extension|set#property4::S% i) → void {}
+static method Extension|get#property5<T extends core::Object? = dynamic, S extends self::Extension|get#property5::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property5::S%
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be returned from a function with return type 'S'.
+  S get property5 => 0; // ok
+                     ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
+static method Extension|set#property5<T extends core::Object? = dynamic, S extends self::Extension|set#property5::T% = dynamic>(lowered final core::int #this, self::Extension|set#property5::T% i) → void {}
+static method Extension|get#property6<T extends core::Object? = dynamic, S extends self::Extension|get#property6::T% = dynamic>(lowered final core::int #this) → self::Extension|get#property6::T%
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:136:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
+  T get property6 => 0; // error
+                     ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
+static method Extension|set#property6<T extends core::Object? = dynamic, S extends self::Extension|set#property6::T% = dynamic>(lowered final core::int #this, self::Extension|set#property6::S% i) → void {}
+static get Extension|property7() → core::int
+  return 0;
+static set Extension|property7(core::int value) → void {}
+static get Extension|property8() → core::int
+  return 0;
+static set Extension|property8(core::num value) → void {}
+static get Extension|property9() → core::num
+  return 0;
+static set Extension|property9(core::int value) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.modular.expect
new file mode 100644
index 0000000..6234f7f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.modular.expect
@@ -0,0 +1,70 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:30:12: Error: The type 'int?' of the inherited field 'B1.property6' is not a subtype of the type 'int' of the setter 'B2.property6'.
+//   void set property6(int i); // error
+//            ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:20:19: Context: This is the declaration of the field 'B1.property6'.
+//   late final int? property6;
+//                   ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+//   int? get property6; // error
+//            ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:38:12: Context: This is the declaration of the setter 'C1.property6'.
+//   late int property6;
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
+// Change to a subtype of 'int'.
+//   int? get property6; // error
+//            ^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:38:12: Context: This is the overridden method ('property6').
+//   late int property6;
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  late field core::int property4;
+  late field core::int? property5;
+  late covariant-by-declaration field core::int property6;
+  constructor •(core::int property4, core::int? property5, core::int property6) → self::A
+    : self::A::property4 = property4, self::A::property5 = property5, self::A::property6 = property6, super core::Object::•()
+    ;
+}
+abstract class B1 extends core::Object {
+  late final [setter] field core::int property4;
+  late final [setter] field core::int property5;
+  late final [setter] field core::int? property6;
+  constructor •(core::int property4, core::int property5, core::int? property6) → self::B1
+    : self::B1::property4 = property4, self::B1::property5 = property5, self::B1::property6 = property6, super core::Object::•()
+    ;
+}
+abstract class B2 extends core::Object implements self::B1 {
+  synthetic constructor •() → self::B2
+    : super core::Object::•()
+    ;
+  abstract set property4(core::int i) → void;
+  abstract set property5(core::int? i) → void;
+  abstract set property6(core::int i) → void;
+}
+abstract class C1 extends core::Object {
+  late field core::int property4;
+  late field core::int property5;
+  late field core::int property6;
+  constructor •(core::int property4, core::int property5, core::int property6) → self::C1
+    : self::C1::property4 = property4, self::C1::property5 = property5, self::C1::property6 = property6, super core::Object::•()
+    ;
+}
+abstract class C2 extends core::Object implements self::C1 {
+  synthetic constructor •() → self::C2
+    : super core::Object::•()
+    ;
+  abstract get property4() → core::int;
+  abstract get property5() → core::int;
+  abstract get property6() → core::int?;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.modular.expect
new file mode 100644
index 0000000..1f17578
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.modular.expect
@@ -0,0 +1,284 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:21:12: Error: The type 'int?' of the getter 'A.property3' is not a subtype of the type 'int' of the setter 'A.property3'.
+//   int? get property3; // error
+//            ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:22:12: Context: This is the declaration of the setter 'A.property3'.
+//   void set property3(int i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:38:19: Error: The type 'int?' of the getter 'A.property9' is not a subtype of the type 'int' of the setter 'A.property9'.
+//   static int? get property9 => 0; // error
+//                   ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:39:19: Context: This is the declaration of the setter 'A.property9'.
+//   static void set property9(int value) {}
+//                   ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:63:12: Error: The type 'int?' of the inherited getter 'B1.property3' is not a subtype of the type 'int' of the setter 'B2.property3'.
+//   void set property3(int i); // error
+//            ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:47:12: Context: This is the declaration of the getter 'B1.property3'.
+//   int? get property3;
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:69:12: Error: The type 'int?' of the inherited field 'B1.property6' is not a subtype of the type 'int' of the setter 'B2.property6'.
+//   void set property6(int i); // error
+//            ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:53:14: Context: This is the declaration of the field 'B1.property6'.
+//   final int? property6;
+//              ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:93:12: Error: The type 'int?' of the getter 'C2.property3' is not a subtype of the type 'int' of the inherited setter 'C1.property3'.
+//   int? get property3; // error
+//            ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:77:12: Context: This is the declaration of the setter 'C1.property3'.
+//   void set property3(int i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+//   int? get property6; // error
+//            ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:83:7: Context: This is the declaration of the setter 'C1.property6'.
+//   int property6;
+//       ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
+// Change to a subtype of 'int'.
+//   int? get property6; // error
+//            ^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:83:7: Context: This is the overridden method ('property6').
+//   int property6;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:120:16: Error: The type 'int?' of the inherited getter 'D1.property3' is not a subtype of the type 'int' of the inherited setter 'D2.property3'.
+// abstract class D3 implements D1, D2 /* error on property3 */ {}
+//                ^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:109:12: Context: This is the declaration of the getter 'D1.property3'.
+//   int? get property3;
+//            ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:117:12: Context: This is the declaration of the setter 'D2.property3'.
+//   void set property3(int i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:122:16: Error: The type 'int?' of the inherited getter 'D1.property3' is not a subtype of the type 'int' of the inherited setter 'D2.property3'.
+// abstract class D4 implements D3 /* no need for error on property3 */ {}
+//                ^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:109:12: Context: This is the declaration of the getter 'D1.property3'.
+//   int? get property3;
+//            ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:117:12: Context: This is the declaration of the setter 'D2.property3'.
+//   void set property3(int i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:11:10: Error: The type 'int?' of the getter 'property3' is not a subtype of the type 'int' of the setter 'property3'.
+// int? get property3 => 0; // error
+//          ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:12:10: Context: This is the declaration of the setter 'property3'.
+// void set property3(int value) {}
+//          ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:131:12: Error: The type 'int?' of the getter 'property3' is not a subtype of the type 'int' of the setter 'property3'.
+//   int? get property3 => 0; // error
+//            ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:132:12: Context: This is the declaration of the setter 'property3'.
+//   void set property3(int i) {}
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:143:10: Error: The type 'T?' of the getter 'property6' is not a subtype of the type 'T' of the setter 'property6'.
+//   T? get property6 => 0; // error
+//          ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:144:12: Context: This is the declaration of the setter 'property6'.
+//   void set property6(T i) {}
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:152:19: Error: The type 'int?' of the getter 'property9' is not a subtype of the type 'int' of the setter 'property9'.
+//   static int? get property9 => 0; // error
+//                   ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:153:19: Context: This is the declaration of the setter 'property9'.
+//   static void set property9(int value) {}
+//                   ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:134:23: Error: A value of type 'int' can't be returned from a function with return type 'T'.
+//   T get property4a => 0; // ok
+//                       ^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:137:24: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
+//   T? get property4b => 0; // ok
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:140:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
+//   T get property5 => 0; // ok
+//                      ^
+//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:143:23: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
+//   T? get property6 => 0; // error
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  field core::int property4;
+  field core::int? property5;
+  covariant-by-declaration field core::int property6;
+  constructor •(core::int property4, core::int? property5, core::int property6) → self::A
+    : self::A::property4 = property4, self::A::property5 = property5, self::A::property6 = property6, super core::Object::•()
+    ;
+  abstract get property1() → core::int;
+  abstract set property1(core::int i) → void;
+  abstract get property2() → core::int;
+  abstract set property2(core::int? i) → void;
+  abstract get property3() → core::int?;
+  abstract set property3(core::int i) → void;
+  static get property7() → core::int
+    return 0;
+  static set property7(core::int value) → void {}
+  static get property8() → core::int
+    return 0;
+  static set property8(core::int? value) → void {}
+  static get property9() → core::int?
+    return 0;
+  static set property9(core::int value) → void {}
+}
+abstract class B1 extends core::Object {
+  final field core::int property4;
+  final field core::int property5;
+  final field core::int? property6;
+  constructor •(core::int property4, core::int property5, core::int? property6) → self::B1
+    : self::B1::property4 = property4, self::B1::property5 = property5, self::B1::property6 = property6, super core::Object::•()
+    ;
+  abstract get property1() → core::int;
+  abstract get property2() → core::int;
+  abstract get property3() → core::int?;
+}
+abstract class B2 extends core::Object implements self::B1 {
+  synthetic constructor •() → self::B2
+    : super core::Object::•()
+    ;
+  abstract set property1(core::int i) → void;
+  abstract set property2(core::int? i) → void;
+  abstract set property3(core::int i) → void;
+  abstract set property4(core::int i) → void;
+  abstract set property5(core::int? i) → void;
+  abstract set property6(core::int i) → void;
+}
+abstract class C1 extends core::Object {
+  field core::int property4;
+  field core::int? property5;
+  field core::int property6;
+  constructor •(core::int property4, core::int? property5, core::int property6) → self::C1
+    : self::C1::property4 = property4, self::C1::property5 = property5, self::C1::property6 = property6, super core::Object::•()
+    ;
+  abstract set property1(core::int i) → void;
+  abstract set property2(core::int? i) → void;
+  abstract set property3(core::int i) → void;
+}
+abstract class C2 extends core::Object implements self::C1 {
+  synthetic constructor •() → self::C2
+    : super core::Object::•()
+    ;
+  abstract get property1() → core::int;
+  abstract get property2() → core::int;
+  abstract get property3() → core::int?;
+  abstract get property4() → core::int;
+  abstract get property5() → core::int;
+  abstract get property6() → core::int?;
+}
+abstract class D1 extends core::Object {
+  synthetic constructor •() → self::D1
+    : super core::Object::•()
+    ;
+  abstract get property1() → core::int;
+  abstract get property2() → core::int;
+  abstract get property3() → core::int?;
+}
+abstract class D2 extends core::Object {
+  synthetic constructor •() → self::D2
+    : super core::Object::•()
+    ;
+  abstract set property1(core::int i) → void;
+  abstract set property2(core::int? i) → void;
+  abstract set property3(core::int i) → void;
+}
+abstract class D3 extends core::Object implements self::D1, self::D2 {
+  synthetic constructor •() → self::D3
+    : super core::Object::•()
+    ;
+}
+abstract class D4 extends core::Object implements self::D3 {
+  synthetic constructor •() → self::D4
+    : super core::Object::•()
+    ;
+}
+extension Extension<T extends core::num> on core::int {
+  get property1 = self::Extension|get#property1;
+  get property2 = self::Extension|get#property2;
+  get property3 = self::Extension|get#property3;
+  get property4a = self::Extension|get#property4a;
+  get property4b = self::Extension|get#property4b;
+  get property5 = self::Extension|get#property5;
+  get property6 = self::Extension|get#property6;
+  static get property7 = get self::Extension|property7;
+  static get property8 = get self::Extension|property8;
+  static get property9 = get self::Extension|property9;
+  set property1 = self::Extension|set#property1;
+  set property2 = self::Extension|set#property2;
+  set property3 = self::Extension|set#property3;
+  set property4a = self::Extension|set#property4a;
+  set property4b = self::Extension|set#property4b;
+  set property5 = self::Extension|set#property5;
+  set property6 = self::Extension|set#property6;
+  static set property7 = set self::Extension|property7;
+  static set property8 = set self::Extension|property8;
+  static set property9 = set self::Extension|property9;
+}
+static get property1() → core::int
+  return 0;
+static set property1(core::int value) → void {}
+static get property2() → core::int
+  return 0;
+static set property2(core::int? value) → void {}
+static get property3() → core::int?
+  return 0;
+static set property3(core::int value) → void {}
+static method Extension|get#property1<T extends core::num>(lowered final core::int #this) → core::int
+  return 0;
+static method Extension|set#property1<T extends core::num>(lowered final core::int #this, core::int i) → void {}
+static method Extension|get#property2<T extends core::num>(lowered final core::int #this) → core::int
+  return 0;
+static method Extension|set#property2<T extends core::num>(lowered final core::int #this, core::int? i) → void {}
+static method Extension|get#property3<T extends core::num>(lowered final core::int #this) → core::int?
+  return 0;
+static method Extension|set#property3<T extends core::num>(lowered final core::int #this, core::int i) → void {}
+static method Extension|get#property4a<T extends core::num>(lowered final core::int #this) → self::Extension|get#property4a::T
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:134:23: Error: A value of type 'int' can't be returned from a function with return type 'T'.
+  T get property4a => 0; // ok
+                      ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
+static method Extension|set#property4a<T extends core::num>(lowered final core::int #this, self::Extension|set#property4a::T i) → void {}
+static method Extension|get#property4b<T extends core::num>(lowered final core::int #this) → self::Extension|get#property4b::T?
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:137:24: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
+  T? get property4b => 0; // ok
+                       ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
+static method Extension|set#property4b<T extends core::num>(lowered final core::int #this, self::Extension|set#property4b::T? i) → void {}
+static method Extension|get#property5<T extends core::num>(lowered final core::int #this) → self::Extension|get#property5::T
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:140:22: Error: A value of type 'int' can't be returned from a function with return type 'T'.
+  T get property5 => 0; // ok
+                     ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
+static method Extension|set#property5<T extends core::num>(lowered final core::int #this, self::Extension|set#property5::T? i) → void {}
+static method Extension|get#property6<T extends core::num>(lowered final core::int #this) → self::Extension|get#property6::T?
+  return invalid-expression "pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:143:23: Error: A value of type 'int' can't be returned from a function with return type 'T?'.
+  T? get property6 => 0; // error
+                      ^" in 0 as{TypeError,ForNonNullableByDefault} Never;
+static method Extension|set#property6<T extends core::num>(lowered final core::int #this, self::Extension|set#property6::T i) → void {}
+static get Extension|property7() → core::int
+  return 0;
+static set Extension|property7(core::int value) → void {}
+static get Extension|property8() → core::int
+  return 0;
+static set Extension|property8(core::int? value) → void {}
+static get Extension|property9() → core::int?
+  return 0;
+static set Extension|property9(core::int value) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.weak.modular.expect
new file mode 100644
index 0000000..954dd07
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  return t;
+static method main() → dynamic {
+  late core::int local;
+  local = self::f<core::int>(0);
+}
diff --git a/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.weak.modular.expect
new file mode 100644
index 0000000..2e2a614
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_from_promoted.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/infer_from_promoted.dart:16:21: Error: A value of type 'String' can't be returned from a function with return type 'int'.
+//   d = (a, b) => '$a';
+//                     ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<invariant T extends core::Object? = dynamic> = (T%, T%) → T%;
+static method test1() → dynamic {
+  dynamic d = (core::int a, core::int b) → core::int => a;
+  d as{ForNonNullableByDefault} (core::int, core::int) → core::int;
+  d = <S extends core::Object? = dynamic>(S% a, S% b) → S% => a;
+}
+static method test2() → dynamic {
+  dynamic d = (core::int a, core::int b) → core::int => a;
+  d as{ForNonNullableByDefault} (core::int, core::int) → core::int;
+  d = (core::int a, core::int b) → core::int => invalid-expression "pkg/front_end/testcases/nnbd/infer_from_promoted.dart:16:21: Error: A value of type 'String' can't be returned from a function with return type 'int'.
+  d = (a, b) => '\$a';
+                    ^" in "${a}" as{TypeError,ForNonNullableByDefault} core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.modular.expect
new file mode 100644
index 0000000..fe4267a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_if_null.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A2 extends core::Object {
+  field core::String? foo = null;
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+}
+class A5 extends core::Object {
+  synthetic constructor •() → self::A5
+    : super core::Object::•()
+    ;
+  operator []=(core::int index, core::String? value) → void {}
+  operator [](core::int index) → core::String?
+    return null;
+}
+class B5 extends self::A5 {
+  synthetic constructor •() → self::B5
+    : super self::A5::•()
+    ;
+  method test5() → dynamic {
+    core::String s = let final core::int #t1 = 0 in let final core::String? #t2 = super.{self::A5::[]}(#t1) in #t2 == null ?{core::String} let final core::String #t3 = "bar" in let final void #t4 = super.{self::A5::[]=}(#t1, #t3) in #t3 : #t2{core::String};
+  }
+}
+class A7 extends core::Object {
+  field core::String foo = "foo";
+  field core::String? bar = null;
+  synthetic constructor •() → self::A7
+    : super core::Object::•()
+    ;
+}
+extension E6 on core::double {
+  operator []= = self::E6|[]=;
+  operator [] = self::E6|[];
+}
+static method hest1<T extends core::Object? = dynamic>() → self::hest1::T%
+  return throw "hest";
+static method test1() → dynamic {
+  function foo() → core::String?
+    return null;
+  function bar() → core::String
+    return "bar";
+  core::String s = let final core::String? #t5 = foo(){() → core::String?} in #t5 == null ?{core::String} bar(){() → core::String} : #t5{core::String};
+  core::String s2 = let final core::String? #t6 = self::hest1<core::String?>() in #t6 == null ?{core::String} "fisk" : #t6{core::String};
+}
+static method test2(self::A2 a) → dynamic {
+  core::String s = let final self::A2 #t7 = a in let final core::String? #t8 = #t7.{self::A2::foo}{core::String?} in #t8 == null ?{core::String} #t7.{self::A2::foo} = "bar" : #t8{core::String};
+}
+static method test3() → dynamic {
+  core::String? s = null;
+  core::String s2 = let final core::String? #t9 = s in #t9 == null ?{core::String} s = "bar" : #t9{core::String};
+}
+static method test4() → dynamic {
+  core::List<core::String?> list = <core::String?>[null];
+  core::String s = let final core::List<core::String?> #t10 = list in let final core::int #t11 = 0 in let final core::String? #t12 = #t10.{core::List::[]}(#t11){(core::int) → core::String?} in #t12 == null ?{core::String} let final core::String #t13 = "bar" in let final void #t14 = #t10.{core::List::[]=}(#t11, #t13){(core::int, core::String?) → void} in #t13 : #t12{core::String};
+}
+static method E6|[]=(lowered final core::double #this, core::int index, core::String? value) → void {}
+static method E6|[](lowered final core::double #this, core::int index) → core::String?
+  return null;
+static method test6() → dynamic {
+  core::String s = let final core::double #t15 = 3.14 in let final core::int #t16 = 0 in let final core::String? #t17 = self::E6|[](#t15, #t16) in #t17 == null ?{core::String} let final core::String #t18 = "bar" in let final void #t19 = self::E6|[]=(#t15, #t16, #t18) in #t18 : #t17{core::String};
+}
+static method test7(self::A7? a) → dynamic {
+  core::String? s = let final self::A7? #t20 = a in #t20 == null ?{core::String?} null : let final core::String #t21 = #t20.{self::A7::foo}{core::String} in #t21 == null ?{core::String} #t20.{self::A7::foo} = "bar" : #t21;
+  core::String? s2 = let final self::A7? #t22 = a in #t22 == null ?{core::String?} null : let final core::String? #t23 = #t22.{self::A7::bar}{core::String?} in #t23 == null ?{core::String} #t22.{self::A7::bar} = "bar" : #t23{core::String};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.modular.expect
new file mode 100644
index 0000000..d29fed9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.modular.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  abstract method m(covariant-by-declaration core::num a) → dynamic;
+}
+abstract class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  abstract method m(core::num a) → void;
+}
+abstract class D extends core::Object implements self::A {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
+}
+abstract class E extends core::Object implements self::B {
+  synthetic constructor •() → self::E
+    : super core::Object::•()
+    ;
+  abstract method m(covariant-by-declaration core::num a) → dynamic;
+}
+abstract class F extends core::Object {
+  synthetic constructor •() → self::F
+    : super core::Object::•()
+    ;
+  abstract method m(core::int a) → core::Object?;
+}
+abstract class G extends core::Object implements self::C {
+  synthetic constructor •() → self::G
+    : super core::Object::•()
+    ;
+  abstract method m(core::num a) → void;
+}
+abstract class H extends core::Object implements self::D, self::E, self::F, self::C {
+  synthetic constructor •() → self::H
+    : super core::Object::•()
+    ;
+  abstract member-signature method m(covariant-by-declaration core::num a) → core::Object?; -> self::E::m
+}
+abstract class I extends core::Object implements self::D {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
+}
+abstract class J extends core::Object implements self::H {
+  synthetic constructor •() → self::J
+    : super core::Object::•()
+    ;
+  abstract method m(covariant-by-declaration core::num a) → core::Object?;
+}
+abstract class K extends core::Object implements self::I, self::E, self::G {
+  synthetic constructor •() → self::K
+    : super core::Object::•()
+    ;
+  abstract member-signature method m(covariant-by-declaration core::num a) → core::Object?; -> self::E::m
+}
+abstract class L extends core::Object implements self::K {
+  synthetic constructor •() → self::L
+    : super core::Object::•()
+    ;
+  abstract method m(covariant-by-declaration core::num a) → core::Object?;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.modular.expect
new file mode 100644
index 0000000..4c6feac
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+//   g(v);
+//     ^
+//
+// pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+//   h(v);
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  return t;
+static method g<T extends core::Object? = dynamic>(self::g::T? t) → self::g::T%
+  return t!;
+static method h<T extends core::Object>(self::h::T? t) → self::h::T
+  return t!;
+static method foo(dynamic d, void v, core::Object? onull, core::Object o, core::String? snull, core::String s) → dynamic {
+  self::f<dynamic>(d);
+  self::f<void>(v);
+  self::f<core::Object?>(onull);
+  self::f<core::Object>(o);
+  self::f<core::String?>(snull);
+  self::f<core::String>(s);
+  self::g<core::Object>(d);
+  self::g<core::Object>(invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:20:5: Error: This expression has type 'void' and can't be used.
+  g(v);
+    ^" in v);
+  self::g<core::Object>(onull);
+  self::g<core::Object>(o);
+  self::g<core::String>(snull);
+  self::g<core::String>(s);
+  self::h<core::Object>(d);
+  self::h<core::Object>(invalid-expression "pkg/front_end/testcases/nnbd/infer_object_from_dynamic.dart:27:5: Error: This expression has type 'void' and can't be used.
+  h(v);
+    ^" in v);
+  self::h<core::Object>(onull);
+  self::h<core::Object>(o);
+  self::h<core::String>(snull);
+  self::h<core::String>(s);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.weak.modular.expect
new file mode 100644
index 0000000..75d67bf
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/injected_late_field_checks/main.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "dart:test";
+
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+
+@#C1
+class Class extends core::Object {
+  late field core::int foo /* from org-dartlang-testcase:///patch_lib.dart */;
+  constructor bar() → self2::Class
+    : super core::Object::•()
+    ;
+  constructor baz(core::int foo) → self2::Class
+    : self2::Class::foo = foo, super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = _in::_Patch {}
+}
diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.modular.expect
new file mode 100644
index 0000000..7e8a8f2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.modular.expect
@@ -0,0 +1,668 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:7:8: Error: 'methodAndField1' is already declared in this scope.
+//   int? methodAndField1;
+//        ^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:6:8: Context: Previous declaration of 'methodAndField1'.
+//   int? methodAndField1() {}
+//        ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:10:8: Error: 'methodAndField2' is already declared in this scope.
+//   int? methodAndField2() {}
+//        ^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:9:8: Context: Previous declaration of 'methodAndField2'.
+//   int? methodAndField2;
+//        ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:13:14: Error: 'methodAndFinalField1' is already declared in this scope.
+//   final int? methodAndFinalField1 = 0;
+//              ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:12:8: Context: Previous declaration of 'methodAndFinalField1'.
+//   int? methodAndFinalField1() {}
+//        ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:16:8: Error: 'methodAndFinalField2' is already declared in this scope.
+//   int? methodAndFinalField2() {}
+//        ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:15:14: Context: Previous declaration of 'methodAndFinalField2'.
+//   final int? methodAndFinalField2 = 0;
+//              ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:19:8: Error: 'methodAndFieldAndSetter1' is already declared in this scope.
+//   int? methodAndFieldAndSetter1;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:18:8: Context: Previous declaration of 'methodAndFieldAndSetter1'.
+//   int? methodAndFieldAndSetter1() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:23:8: Error: 'methodAndFieldAndSetter2' is already declared in this scope.
+//   int? methodAndFieldAndSetter2() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:22:8: Context: Previous declaration of 'methodAndFieldAndSetter2'.
+//   int? methodAndFieldAndSetter2;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:28:8: Error: 'methodAndFieldAndSetter3' is already declared in this scope.
+//   int? methodAndFieldAndSetter3;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:27:8: Context: Previous declaration of 'methodAndFieldAndSetter3'.
+//   int? methodAndFieldAndSetter3() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:32:8: Error: 'methodAndFieldAndSetter4' is already declared in this scope.
+//   int? methodAndFieldAndSetter4() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:31:8: Context: Previous declaration of 'methodAndFieldAndSetter4'.
+//   int? methodAndFieldAndSetter4;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:35:14: Error: 'methodAndFinalFieldAndSetter1' is already declared in this scope.
+//   final int? methodAndFinalFieldAndSetter1 = 0;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:34:8: Context: Previous declaration of 'methodAndFinalFieldAndSetter1'.
+//   int? methodAndFinalFieldAndSetter1() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:39:8: Error: 'methodAndFinalFieldAndSetter2' is already declared in this scope.
+//   int? methodAndFinalFieldAndSetter2() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:38:14: Context: Previous declaration of 'methodAndFinalFieldAndSetter2'.
+//   final int? methodAndFinalFieldAndSetter2 = 0;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:44:14: Error: 'methodAndFinalFieldAndSetter3' is already declared in this scope.
+//   final int? methodAndFinalFieldAndSetter3 = 0;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:43:8: Context: Previous declaration of 'methodAndFinalFieldAndSetter3'.
+//   int? methodAndFinalFieldAndSetter3() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:48:8: Error: 'methodAndFinalFieldAndSetter4' is already declared in this scope.
+//   int? methodAndFinalFieldAndSetter4() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:47:14: Context: Previous declaration of 'methodAndFinalFieldAndSetter4'.
+//   final int? methodAndFinalFieldAndSetter4 = 0;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:54:3: Error: The return type of the setter must be 'void' or absent.
+// Try removing the return type, or define a method rather than a setter.
+//   int? set methodAndSetter2() {}
+//   ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:63:14: Error: 'fieldAndFinalFieldAndSetter1' is already declared in this scope.
+//   final int? fieldAndFinalFieldAndSetter1 = 0;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:62:8: Context: Previous declaration of 'fieldAndFinalFieldAndSetter1'.
+//   int? fieldAndFinalFieldAndSetter1;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:67:8: Error: 'fieldAndFinalFieldAndSetter2' is already declared in this scope.
+//   int? fieldAndFinalFieldAndSetter2;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:66:14: Context: Previous declaration of 'fieldAndFinalFieldAndSetter2'.
+//   final int? fieldAndFinalFieldAndSetter2 = 0;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:72:14: Error: 'fieldAndFinalFieldAndSetter3' is already declared in this scope.
+//   final int? fieldAndFinalFieldAndSetter3 = 0;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:71:8: Context: Previous declaration of 'fieldAndFinalFieldAndSetter3'.
+//   int? fieldAndFinalFieldAndSetter3;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:76:8: Error: 'fieldAndFinalFieldAndSetter4' is already declared in this scope.
+//   int? fieldAndFinalFieldAndSetter4;
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:75:14: Context: Previous declaration of 'fieldAndFinalFieldAndSetter4'.
+//   final int? fieldAndFinalFieldAndSetter4 = 0;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:20:12: Error: Conflicts with the implicit setter of the field 'methodAndFieldAndSetter1'.
+//   void set methodAndFieldAndSetter1(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:19:8: Error: Conflicts with setter 'methodAndFieldAndSetter1'.
+//   int? methodAndFieldAndSetter1;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:24:12: Error: Conflicts with the implicit setter of the field 'methodAndFieldAndSetter2'.
+//   void set methodAndFieldAndSetter2(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:22:8: Error: Conflicts with setter 'methodAndFieldAndSetter2'.
+//   int? methodAndFieldAndSetter2;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:26:12: Error: Conflicts with the implicit setter of the field 'methodAndFieldAndSetter3'.
+//   void set methodAndFieldAndSetter3(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:28:8: Error: Conflicts with setter 'methodAndFieldAndSetter3'.
+//   int? methodAndFieldAndSetter3;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:30:12: Error: Conflicts with the implicit setter of the field 'methodAndFieldAndSetter4'.
+//   void set methodAndFieldAndSetter4(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:31:8: Error: Conflicts with setter 'methodAndFieldAndSetter4'.
+//   int? methodAndFieldAndSetter4;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:57:12: Error: Conflicts with the implicit setter of the field 'fieldAndSetter1'.
+//   void set fieldAndSetter1(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:56:8: Error: Conflicts with setter 'fieldAndSetter1'.
+//   int? fieldAndSetter1;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:60:12: Error: Conflicts with the implicit setter of the field 'fieldAndSetter2'.
+//   void set fieldAndSetter2(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:59:8: Error: Conflicts with setter 'fieldAndSetter2'.
+//   int? fieldAndSetter2;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:64:12: Error: Conflicts with the implicit setter of the field 'fieldAndFinalFieldAndSetter1'.
+//   void set fieldAndFinalFieldAndSetter1(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:62:8: Error: Conflicts with setter 'fieldAndFinalFieldAndSetter1'.
+//   int? fieldAndFinalFieldAndSetter1;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:68:12: Error: Conflicts with the implicit setter of the field 'fieldAndFinalFieldAndSetter2'.
+//   void set fieldAndFinalFieldAndSetter2(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:67:8: Error: Conflicts with setter 'fieldAndFinalFieldAndSetter2'.
+//   int? fieldAndFinalFieldAndSetter2;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:70:12: Error: Conflicts with the implicit setter of the field 'fieldAndFinalFieldAndSetter3'.
+//   void set fieldAndFinalFieldAndSetter3(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:71:8: Error: Conflicts with setter 'fieldAndFinalFieldAndSetter3'.
+//   int? fieldAndFinalFieldAndSetter3;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:74:12: Error: Conflicts with the implicit setter of the field 'fieldAndFinalFieldAndSetter4'.
+//   void set fieldAndFinalFieldAndSetter4(int? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:76:8: Error: Conflicts with setter 'fieldAndFinalFieldAndSetter4'.
+//   int? fieldAndFinalFieldAndSetter4;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:40:12: Error: 'methodAndFinalFieldAndSetter2' is already declared in this scope.
+//   void set methodAndFinalFieldAndSetter2(int? value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:39:8: Context: Previous declaration of 'methodAndFinalFieldAndSetter2'.
+//   int? methodAndFinalFieldAndSetter2() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:51:12: Error: 'methodAndSetter1' is already declared in this scope.
+//   void set methodAndSetter1(int? value) {}
+//            ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:50:8: Context: Previous declaration of 'methodAndSetter1'.
+//   int? methodAndSetter1() {}
+//        ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:54:12: Error: 'methodAndSetter2' is already declared in this scope.
+//   int? set methodAndSetter2() {}
+//            ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:53:8: Context: Previous declaration of 'methodAndSetter2'.
+//   void methodAndSetter2(int? value) {}
+//        ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:54:28: Error: A setter should have exactly one formal parameter.
+//   int? set methodAndSetter2() {}
+//                            ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:80:5: Error: Can't use 'methodAndField1' because it is declared more than once.
+//   c.methodAndField1 = c.methodAndField1;
+//     ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:80:25: Error: Can't use 'methodAndField1' because it is declared more than once.
+//   c.methodAndField1 = c.methodAndField1;
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:80:25: Error: The getter 'methodAndField1' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndField1'.
+//   c.methodAndField1 = c.methodAndField1;
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:80:5: Error: The setter 'methodAndField1' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndField1'.
+//   c.methodAndField1 = c.methodAndField1;
+//     ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:81:5: Error: Can't use 'methodAndField2' because it is declared more than once.
+//   c.methodAndField2 = c.methodAndField2;
+//     ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:81:25: Error: Can't use 'methodAndField2' because it is declared more than once.
+//   c.methodAndField2 = c.methodAndField2;
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:81:25: Error: The getter 'methodAndField2' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndField2'.
+//   c.methodAndField2 = c.methodAndField2;
+//                         ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:81:5: Error: The setter 'methodAndField2' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndField2'.
+//   c.methodAndField2 = c.methodAndField2;
+//     ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:82:5: Error: Can't use 'methodAndFinalField1' because it is declared more than once.
+//   c.methodAndFinalField1;
+//     ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:82:5: Error: The getter 'methodAndFinalField1' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalField1'.
+//   c.methodAndFinalField1;
+//     ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:83:5: Error: Can't use 'methodAndFinalField2' because it is declared more than once.
+//   c.methodAndFinalField2;
+//     ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:83:5: Error: The getter 'methodAndFinalField2' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalField2'.
+//   c.methodAndFinalField2;
+//     ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:84:5: Error: Can't use 'methodAndFieldAndSetter1' because it is declared more than once.
+//   c.methodAndFieldAndSetter1 = c.methodAndFieldAndSetter1;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:84:34: Error: Can't use 'methodAndFieldAndSetter1' because it is declared more than once.
+//   c.methodAndFieldAndSetter1 = c.methodAndFieldAndSetter1;
+//                                  ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:84:34: Error: The getter 'methodAndFieldAndSetter1' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter1'.
+//   c.methodAndFieldAndSetter1 = c.methodAndFieldAndSetter1;
+//                                  ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:84:5: Error: The setter 'methodAndFieldAndSetter1' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter1'.
+//   c.methodAndFieldAndSetter1 = c.methodAndFieldAndSetter1;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:85:5: Error: Can't use 'methodAndFieldAndSetter2' because it is declared more than once.
+//   c.methodAndFieldAndSetter2 = c.methodAndFieldAndSetter2;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:85:34: Error: Can't use 'methodAndFieldAndSetter2' because it is declared more than once.
+//   c.methodAndFieldAndSetter2 = c.methodAndFieldAndSetter2;
+//                                  ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:85:34: Error: The getter 'methodAndFieldAndSetter2' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter2'.
+//   c.methodAndFieldAndSetter2 = c.methodAndFieldAndSetter2;
+//                                  ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:85:5: Error: The setter 'methodAndFieldAndSetter2' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter2'.
+//   c.methodAndFieldAndSetter2 = c.methodAndFieldAndSetter2;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:86:5: Error: Can't use 'methodAndFieldAndSetter3' because it is declared more than once.
+//   c.methodAndFieldAndSetter3 = c.methodAndFieldAndSetter3;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:86:34: Error: Can't use 'methodAndFieldAndSetter3' because it is declared more than once.
+//   c.methodAndFieldAndSetter3 = c.methodAndFieldAndSetter3;
+//                                  ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:86:34: Error: The getter 'methodAndFieldAndSetter3' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter3'.
+//   c.methodAndFieldAndSetter3 = c.methodAndFieldAndSetter3;
+//                                  ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:86:5: Error: The setter 'methodAndFieldAndSetter3' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter3'.
+//   c.methodAndFieldAndSetter3 = c.methodAndFieldAndSetter3;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:87:5: Error: Can't use 'methodAndFieldAndSetter4' because it is declared more than once.
+//   c.methodAndFieldAndSetter4 = c.methodAndFieldAndSetter4;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:87:34: Error: Can't use 'methodAndFieldAndSetter4' because it is declared more than once.
+//   c.methodAndFieldAndSetter4 = c.methodAndFieldAndSetter4;
+//                                  ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:87:34: Error: The getter 'methodAndFieldAndSetter4' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter4'.
+//   c.methodAndFieldAndSetter4 = c.methodAndFieldAndSetter4;
+//                                  ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:87:5: Error: The setter 'methodAndFieldAndSetter4' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter4'.
+//   c.methodAndFieldAndSetter4 = c.methodAndFieldAndSetter4;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:88:39: Error: Can't use 'methodAndFinalFieldAndSetter1' because it is declared more than once.
+//   c.methodAndFinalFieldAndSetter1 = c.methodAndFinalFieldAndSetter1;
+//                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:88:39: Error: The getter 'methodAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter1'.
+//   c.methodAndFinalFieldAndSetter1 = c.methodAndFinalFieldAndSetter1;
+//                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:89:39: Error: Can't use 'methodAndFinalFieldAndSetter2' because it is declared more than once.
+//   c.methodAndFinalFieldAndSetter2 = c.methodAndFinalFieldAndSetter2;
+//                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:89:39: Error: The getter 'methodAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter2'.
+//   c.methodAndFinalFieldAndSetter2 = c.methodAndFinalFieldAndSetter2;
+//                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:90:39: Error: Can't use 'methodAndFinalFieldAndSetter3' because it is declared more than once.
+//   c.methodAndFinalFieldAndSetter3 = c.methodAndFinalFieldAndSetter3;
+//                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:90:39: Error: The getter 'methodAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter3'.
+//   c.methodAndFinalFieldAndSetter3 = c.methodAndFinalFieldAndSetter3;
+//                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:91:39: Error: Can't use 'methodAndFinalFieldAndSetter4' because it is declared more than once.
+//   c.methodAndFinalFieldAndSetter4 = c.methodAndFinalFieldAndSetter4;
+//                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:91:39: Error: The getter 'methodAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter4'.
+//   c.methodAndFinalFieldAndSetter4 = c.methodAndFinalFieldAndSetter4;
+//                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:92:26: Error: A value of type 'int? Function()' can't be assigned to a variable of type 'int?'.
+//   c.methodAndSetter1 = c.methodAndSetter1;
+//                          ^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:96:5: Error: Can't use 'fieldAndFinalFieldAndSetter1' because it is declared more than once.
+//   c.fieldAndFinalFieldAndSetter1 = c.fieldAndFinalFieldAndSetter1;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:96:38: Error: Can't use 'fieldAndFinalFieldAndSetter1' because it is declared more than once.
+//   c.fieldAndFinalFieldAndSetter1 = c.fieldAndFinalFieldAndSetter1;
+//                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:96:38: Error: The getter 'fieldAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter1'.
+//   c.fieldAndFinalFieldAndSetter1 = c.fieldAndFinalFieldAndSetter1;
+//                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:96:5: Error: The setter 'fieldAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter1'.
+//   c.fieldAndFinalFieldAndSetter1 = c.fieldAndFinalFieldAndSetter1;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:97:5: Error: Can't use 'fieldAndFinalFieldAndSetter2' because it is declared more than once.
+//   c.fieldAndFinalFieldAndSetter2 = c.fieldAndFinalFieldAndSetter2;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:97:38: Error: Can't use 'fieldAndFinalFieldAndSetter2' because it is declared more than once.
+//   c.fieldAndFinalFieldAndSetter2 = c.fieldAndFinalFieldAndSetter2;
+//                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:97:38: Error: The getter 'fieldAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter2'.
+//   c.fieldAndFinalFieldAndSetter2 = c.fieldAndFinalFieldAndSetter2;
+//                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:97:5: Error: The setter 'fieldAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter2'.
+//   c.fieldAndFinalFieldAndSetter2 = c.fieldAndFinalFieldAndSetter2;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:98:5: Error: Can't use 'fieldAndFinalFieldAndSetter3' because it is declared more than once.
+//   c.fieldAndFinalFieldAndSetter3 = c.fieldAndFinalFieldAndSetter3;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:98:38: Error: Can't use 'fieldAndFinalFieldAndSetter3' because it is declared more than once.
+//   c.fieldAndFinalFieldAndSetter3 = c.fieldAndFinalFieldAndSetter3;
+//                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:98:38: Error: The getter 'fieldAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter3'.
+//   c.fieldAndFinalFieldAndSetter3 = c.fieldAndFinalFieldAndSetter3;
+//                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:98:5: Error: The setter 'fieldAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter3'.
+//   c.fieldAndFinalFieldAndSetter3 = c.fieldAndFinalFieldAndSetter3;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:99:5: Error: Can't use 'fieldAndFinalFieldAndSetter4' because it is declared more than once.
+//   c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:99:38: Error: Can't use 'fieldAndFinalFieldAndSetter4' because it is declared more than once.
+//   c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
+//                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:99:38: Error: The getter 'fieldAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter4'.
+//   c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
+//                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:99:5: Error: The setter 'fieldAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter4'.
+//   c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:66:14: Error: Final field 'fieldAndFinalFieldAndSetter2' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int? fieldAndFinalFieldAndSetter2 = 0;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/instance_duplicates.dart:75:14: Error: Final field 'fieldAndFinalFieldAndSetter4' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int? fieldAndFinalFieldAndSetter4 = 0;
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? methodAndField2 = null;
+  final field core::int? methodAndFinalField2 = null;
+  field core::int? methodAndFieldAndSetter2 = null;
+  field core::int? methodAndFieldAndSetter4 = null;
+  final field core::int? methodAndFinalFieldAndSetter2 = null;
+  final field core::int? methodAndFinalFieldAndSetter4 = null;
+  field core::int? fieldAndSetter1 = null;
+  field core::int? fieldAndSetter2 = null;
+  field core::int? fieldAndFinalFieldAndSetter1 = null;
+  final field core::int? fieldAndFinalFieldAndSetter2 = null;
+  field core::int? fieldAndFinalFieldAndSetter3 = null;
+  final field core::int? fieldAndFinalFieldAndSetter4 = null;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method methodAndField1() → core::int? {}
+  method methodAndFinalField1() → core::int? {}
+  method methodAndFieldAndSetter1() → core::int? {}
+  method methodAndFieldAndSetter3() → core::int? {}
+  method methodAndFinalFieldAndSetter1() → core::int? {}
+  set methodAndFinalFieldAndSetter1(core::int? value) → void {}
+  set methodAndFinalFieldAndSetter2(core::int? value) → void {}
+  set methodAndFinalFieldAndSetter3(core::int? value) → void {}
+  method methodAndFinalFieldAndSetter3() → core::int? {}
+  set methodAndFinalFieldAndSetter4(core::int? value) → void {}
+  method methodAndSetter1() → core::int? {}
+  set methodAndSetter1(core::int? value) → void {}
+  method methodAndSetter2(core::int? value) → void {}
+  set methodAndSetter2(dynamic #synthetic) → void {
+    invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:54:28: Error: A setter should have exactly one formal parameter.
+  int? set methodAndSetter2() {}
+                           ^";
+    {}
+  }
+}
+static method test(self::Class c) → dynamic {
+  invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:80:5: Error: The setter 'methodAndField1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndField1'.
+  c.methodAndField1 = c.methodAndField1;
+    ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:80:25: Error: The getter 'methodAndField1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndField1'.
+  c.methodAndField1 = c.methodAndField1;
+                        ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField1;
+  invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:81:5: Error: The setter 'methodAndField2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndField2'.
+  c.methodAndField2 = c.methodAndField2;
+    ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField2 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:81:25: Error: The getter 'methodAndField2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndField2'.
+  c.methodAndField2 = c.methodAndField2;
+                        ^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndField2;
+  invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:82:5: Error: The getter 'methodAndFinalField1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalField1'.
+  c.methodAndFinalField1;
+    ^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalField1;
+  invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:83:5: Error: The getter 'methodAndFinalField2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalField2'.
+  c.methodAndFinalField2;
+    ^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalField2;
+  invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:84:5: Error: The setter 'methodAndFieldAndSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter1'.
+  c.methodAndFieldAndSetter1 = c.methodAndFieldAndSetter1;
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:84:34: Error: The getter 'methodAndFieldAndSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter1'.
+  c.methodAndFieldAndSetter1 = c.methodAndFieldAndSetter1;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter1;
+  invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:85:5: Error: The setter 'methodAndFieldAndSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter2'.
+  c.methodAndFieldAndSetter2 = c.methodAndFieldAndSetter2;
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:85:34: Error: The getter 'methodAndFieldAndSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter2'.
+  c.methodAndFieldAndSetter2 = c.methodAndFieldAndSetter2;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter2;
+  invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:86:5: Error: The setter 'methodAndFieldAndSetter3' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter3'.
+  c.methodAndFieldAndSetter3 = c.methodAndFieldAndSetter3;
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter3 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:86:34: Error: The getter 'methodAndFieldAndSetter3' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter3'.
+  c.methodAndFieldAndSetter3 = c.methodAndFieldAndSetter3;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter3;
+  invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:87:5: Error: The setter 'methodAndFieldAndSetter4' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'methodAndFieldAndSetter4'.
+  c.methodAndFieldAndSetter4 = c.methodAndFieldAndSetter4;
+    ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter4 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:87:34: Error: The getter 'methodAndFieldAndSetter4' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFieldAndSetter4'.
+  c.methodAndFieldAndSetter4 = c.methodAndFieldAndSetter4;
+                                 ^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFieldAndSetter4;
+  c.{self::Class::methodAndFinalFieldAndSetter1} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:88:39: Error: The getter 'methodAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter1'.
+  c.methodAndFinalFieldAndSetter1 = c.methodAndFinalFieldAndSetter1;
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+  c.{self::Class::methodAndFinalFieldAndSetter2} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:89:39: Error: The getter 'methodAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter2'.
+  c.methodAndFinalFieldAndSetter2 = c.methodAndFinalFieldAndSetter2;
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+  c.{self::Class::methodAndFinalFieldAndSetter3} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:90:39: Error: The getter 'methodAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter3'.
+  c.methodAndFinalFieldAndSetter3 = c.methodAndFinalFieldAndSetter3;
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+  c.{self::Class::methodAndFinalFieldAndSetter4} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:91:39: Error: The getter 'methodAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'methodAndFinalFieldAndSetter4'.
+  c.methodAndFinalFieldAndSetter4 = c.methodAndFinalFieldAndSetter4;
+                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.methodAndFinalFieldAndSetter4 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?;
+  c.{self::Class::methodAndSetter1} = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:92:26: Error: A value of type 'int? Function()' can't be assigned to a variable of type 'int?'.
+  c.methodAndSetter1 = c.methodAndSetter1;
+                         ^" in c.{self::Class::methodAndSetter1}{() → core::int?} as{TypeError,ForNonNullableByDefault} core::int?;
+  c.{self::Class::methodAndSetter2} = c.{self::Class::methodAndSetter2}{(core::int?) → void};
+  c.{self::Class::fieldAndSetter1} = c.{self::Class::fieldAndSetter1}{core::int?};
+  c.{self::Class::fieldAndSetter2} = c.{self::Class::fieldAndSetter2}{core::int?};
+  invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:96:5: Error: The setter 'fieldAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter1'.
+  c.fieldAndFinalFieldAndSetter1 = c.fieldAndFinalFieldAndSetter1;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter1 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:96:38: Error: The getter 'fieldAndFinalFieldAndSetter1' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter1'.
+  c.fieldAndFinalFieldAndSetter1 = c.fieldAndFinalFieldAndSetter1;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter1;
+  invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:97:5: Error: The setter 'fieldAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter2'.
+  c.fieldAndFinalFieldAndSetter2 = c.fieldAndFinalFieldAndSetter2;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter2 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:97:38: Error: The getter 'fieldAndFinalFieldAndSetter2' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter2'.
+  c.fieldAndFinalFieldAndSetter2 = c.fieldAndFinalFieldAndSetter2;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter2;
+  invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:98:5: Error: The setter 'fieldAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter3'.
+  c.fieldAndFinalFieldAndSetter3 = c.fieldAndFinalFieldAndSetter3;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter3 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:98:38: Error: The getter 'fieldAndFinalFieldAndSetter3' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter3'.
+  c.fieldAndFinalFieldAndSetter3 = c.fieldAndFinalFieldAndSetter3;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter3;
+  invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:99:5: Error: The setter 'fieldAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'fieldAndFinalFieldAndSetter4'.
+  c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter4 = invalid-expression "pkg/front_end/testcases/nnbd/instance_duplicates.dart:99:38: Error: The getter 'fieldAndFinalFieldAndSetter4' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/instance_duplicates.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'fieldAndFinalFieldAndSetter4'.
+  c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
+                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.fieldAndFinalFieldAndSetter4;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.modular.expect
new file mode 100644
index 0000000..9723009
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class Foo<T extends self::A?> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::T%>
+    : super core::Object::•()
+    ;
+  method doPromotionsToNullable(covariant-by-class self::Foo::T% t) → dynamic {
+    if(t is{ForNonNullableByDefault} self::B?) {
+      self::Foo::T% bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
+      if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is{ForNonNullableByDefault} self::C?) {
+        self::Foo::T% baz = t{self::Foo::T% & self::C? /* '%' & '?' = '%' */};
+      }
+    }
+  }
+  method doPromotionsToNonNullable(covariant-by-class self::Foo::T% t) → dynamic {
+    if(t is{ForNonNullableByDefault} self::B) {
+      self::Foo::T% bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
+      if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is{ForNonNullableByDefault} self::C) {
+        self::Foo::T baz = t{self::Foo::T & self::C /* '!' & '!' = '!' */};
+      }
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/invalid_combined_member_signature.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/invalid_combined_member_signature.dart.weak.modular.expect
new file mode 100644
index 0000000..c80806c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/invalid_combined_member_signature.dart.weak.modular.expect
@@ -0,0 +1,52 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/invalid_combined_member_signature.dart:11:16: Error: Type 'Unresolved' not found.
+//   void method1(Unresolved c) {}
+//                ^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/invalid_combined_member_signature.dart:17:16: Error: Class 'D' inherits multiple members named 'method2' with incompatible signatures.
+// Try adding a declaration of 'method2' to 'D'.
+// abstract class D implements A, B {}
+//                ^
+// pkg/front_end/testcases/nnbd/invalid_combined_member_signature.dart:7:8: Context: This is one of the overridden members.
+//   void method2(int a, int b) {}
+//        ^^^^^^^
+// pkg/front_end/testcases/nnbd/invalid_combined_member_signature.dart:12:8: Context: This is one of the overridden members.
+//   void method2(int a) {}
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/invalid_combined_member_signature.dart:11:16: Error: 'Unresolved' isn't a type.
+//   void method1(Unresolved c) {}
+//                ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method method1(self::C c) → void {}
+  method method2(core::int a, core::int b) → void {}
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  method method1(invalid-type c) → void {}
+  method method2(core::int a) → void {}
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+abstract class D extends core::Object implements self::A, self::B {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+  abstract member-signature method method1(invalid-type c) → void; -> self::A::method1
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue34803.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue34803.dart.weak.modular.expect
new file mode 100644
index 0000000..fc4163c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue34803.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue34803.dart:7:9: Error: Type variables can't have generic function types in their bounds.
+// class A<X extends G<num>> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef G<invariant X extends core::Object? = dynamic> = <Y extends X% = dynamic>() → void;
+class A<X extends <Y extends core::num = dynamic>() → void = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue39659.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue39659.dart.weak.modular.expect
new file mode 100644
index 0000000..910ce4f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue39659.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue39659.dart:8:9: Error: Can't throw a value of 'String?' since it is neither dynamic nor non-nullable.
+//   throw bar();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method foo() → dynamic {
+  invalid-expression "pkg/front_end/testcases/nnbd/issue39659.dart:8:9: Error: Can't throw a value of 'String?' since it is neither dynamic nor non-nullable.
+  throw bar();
+        ^";
+}
+static method bar() → core::String?
+  return "asdf";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue39822.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue39822.dart.weak.modular.expect
new file mode 100644
index 0000000..5ffa759
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue39822.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+static method foo(Null x) → dynamic {
+  self::bar(let final Never #t1 = x! in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+}
+static method bar(core::int y) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue40093.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue40093.dart.weak.modular.expect
new file mode 100644
index 0000000..f083d82
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue40093.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue40093.dart:6:8: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+//   for (late int i = 0; i < 10; ++i) {
+//        ^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40093.dart:9:8: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+//   for (late int i in <int>[]) {
+//        ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method error() → dynamic {
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    core::print(i);
+  }
+  for (core::int i in <core::int>[]) {
+    core::print(i);
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue40134.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue40134.dart.weak.modular.expect
new file mode 100644
index 0000000..4f69681
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue40134.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class GenericMethodBounds<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericMethodBounds<self::GenericMethodBounds::T%>
+    : super core::Object::•()
+    ;
+  get t() → core::Type
+    return self::GenericMethodBounds::T%;
+  method foo<covariant-by-class E extends self::GenericMethodBounds::T%>() → self::GenericMethodBounds<self::GenericMethodBounds::foo::E%>
+    return new self::GenericMethodBounds::•<self::GenericMethodBounds::foo::E%>();
+  method bar<E extends (self::GenericMethodBounds::T%) → void>() → self::GenericMethodBounds<self::GenericMethodBounds::bar::E>
+    return new self::GenericMethodBounds::•<self::GenericMethodBounds::bar::E>();
+}
+class GenericMethodBoundsDerived extends self::GenericMethodBounds<core::num> {
+  synthetic constructor •() → self::GenericMethodBoundsDerived
+    : super self::GenericMethodBounds::•()
+    ;
+  method foo<covariant-by-class E extends core::num>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::foo::E>
+    return new self::GenericMethodBounds::•<self::GenericMethodBoundsDerived::foo::E>();
+  method bar<E extends (core::num) → void>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::bar::E>
+    return new self::GenericMethodBounds::•<self::GenericMethodBoundsDerived::bar::E>();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.modular.expect
new file mode 100644
index 0000000..90f9674
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class B<Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::Y%>
+    : super core::Object::•()
+    ;
+  method bar(covariant-by-class FutureOr<self::B::Y%>y) → dynamic {}
+}
+class A<X extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class final field self::B<self::A::X%> b = new self::B::•<self::A::X%>();
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+  method foo([covariant-by-class FutureOr<self::A::X%>? x = #C1]) → dynamic {
+    if(x is{ForNonNullableByDefault} asy::Future<self::A::X%>) {
+      this.{self::A::b}{self::B<self::A::X%>}.{self::B::bar}(x{asy::Future<self::A::X%>} as{ForNonNullableByDefault} FutureOr<self::A::X%>){(FutureOr<self::A::X%>) → dynamic};
+    }
+  }
+}
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  method baz<covariant-by-class X extends FutureOr<self::C::T%>>(covariant-by-class FutureOr<self::C::T%>x) → FutureOr<self::C::T%>
+    return x;
+}
+class D<T extends core::Object? = dynamic> extends self::C<self::D::T%> {
+  synthetic constructor •() → self::D<self::D::T%>
+    : super self::C::•()
+    ;
+  method baz<covariant-by-class X extends FutureOr<self::D::T%>>(covariant-by-class FutureOr<self::D::T%>x) → FutureOr<self::D::T%>
+    return x;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/issue40601.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue40601.dart.weak.modular.expect
new file mode 100644
index 0000000..8fd86fa
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue40601.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  abstract method baz() → self::A::T%;
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
+  method foo() → dynamic {
+    late self::A::T% value;
+    () → dynamic result = () → dynamic => this.{self::A::bar}(value){(self::A::T%) → dynamic};
+    (() → Null {
+      value = this.{self::A::baz}(){() → self::A::T%};
+    })(){() → Null};
+    return result;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue40805.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue40805.dart.weak.modular.expect
new file mode 100644
index 0000000..0eacd23
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue40805.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  late covariant-by-declaration final [setter] field core::int x;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+class D extends self::C {
+  synthetic constructor •() → self::D
+    : super self::C::•()
+    ;
+  set x(covariant-by-declaration core::num value) → void {
+    super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
+  }
+}
+static method main() → dynamic {
+  new self::D::•().{self::D::x} = 3.14;
+}
diff --git a/pkg/front_end/testcases/nnbd/issue40945.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue40945.dart.weak.modular.expect
new file mode 100644
index 0000000..f441fd5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue40945.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue40945.dart:7:15: Error: The type 'dynamic' of the getter 'C.test' is not a subtype of the type 'int' of the setter 'C.test'.
+//   dynamic get test => 3.14;
+//               ^^^^
+// pkg/front_end/testcases/nnbd/issue40945.dart:6:12: Context: This is the declaration of the setter 'C.test'.
+//   void set test(int v) {}
+//            ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  set test(core::int v) → void {}
+  get test() → dynamic
+    return 3.14;
+}
+static method test() → dynamic {
+  self::C c = new self::C::•();
+  c.{self::C::test} = 1;
+  c.{self::C::test}{dynamic};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue40951.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue40951.dart.weak.modular.expect
new file mode 100644
index 0000000..42868d7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue40951.dart.weak.modular.expect
@@ -0,0 +1,206 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:9:3: Error: This constructor should initialize field 'field1' because its type 'num' doesn't allow null.
+//   A() {}
+//   ^
+// pkg/front_end/testcases/nnbd/issue40951.dart:6:7: Context: 'field1' is defined here.
+//   num field1;
+//       ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:9:3: Error: This constructor should initialize field 'field2' because its type 'num' doesn't allow null.
+//   A() {}
+//   ^
+// pkg/front_end/testcases/nnbd/issue40951.dart:7:7: Context: 'field2' is defined here.
+//   num field2;
+//       ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:10:3: Error: This constructor should initialize field 'field1' because its type 'num' doesn't allow null.
+//   A.foo() {}
+//   ^
+// pkg/front_end/testcases/nnbd/issue40951.dart:6:7: Context: 'field1' is defined here.
+//   num field1;
+//       ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:10:3: Error: This constructor should initialize field 'field2' because its type 'num' doesn't allow null.
+//   A.foo() {}
+//   ^
+// pkg/front_end/testcases/nnbd/issue40951.dart:7:7: Context: 'field2' is defined here.
+//   num field2;
+//       ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:11:3: Error: This constructor should initialize field 'field2' because its type 'num' doesn't allow null.
+//   A.bar(this.field1) {}
+//   ^
+// pkg/front_end/testcases/nnbd/issue40951.dart:7:7: Context: 'field2' is defined here.
+//   num field2;
+//       ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:19:3: Error: This constructor should initialize field 'field1' because its type 'num' doesn't allow null.
+//   B() {}
+//   ^
+// pkg/front_end/testcases/nnbd/issue40951.dart:16:7: Context: 'field1' is defined here.
+//   num field1;
+//       ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:19:3: Error: This constructor should initialize field 'field2' because its type 'num' doesn't allow null.
+//   B() {}
+//   ^
+// pkg/front_end/testcases/nnbd/issue40951.dart:17:7: Context: 'field2' is defined here.
+//   num field2;
+//       ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:20:3: Error: This constructor should initialize field 'field1' because its type 'num' doesn't allow null.
+//   B.foo() {}
+//   ^
+// pkg/front_end/testcases/nnbd/issue40951.dart:16:7: Context: 'field1' is defined here.
+//   num field1;
+//       ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:20:3: Error: This constructor should initialize field 'field2' because its type 'num' doesn't allow null.
+//   B.foo() {}
+//   ^
+// pkg/front_end/testcases/nnbd/issue40951.dart:17:7: Context: 'field2' is defined here.
+//   num field2;
+//       ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:21:3: Error: This constructor should initialize field 'field2' because its type 'num' doesn't allow null.
+//   B.bar(this.field1) {}
+//   ^
+// pkg/front_end/testcases/nnbd/issue40951.dart:17:7: Context: 'field2' is defined here.
+//   num field2;
+//       ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:29:3: Error: Final field 'field1' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   C() {}
+//   ^
+// pkg/front_end/testcases/nnbd/issue40951.dart:26:14: Context: 'field1' is defined here.
+//   final num? field1;
+//              ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:29:3: Error: Final field 'field2' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   C() {}
+//   ^
+// pkg/front_end/testcases/nnbd/issue40951.dart:27:14: Context: 'field2' is defined here.
+//   final num? field2;
+//              ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:30:3: Error: Final field 'field1' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   C.foo() {}
+//   ^^^
+// pkg/front_end/testcases/nnbd/issue40951.dart:26:14: Context: 'field1' is defined here.
+//   final num? field1;
+//              ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:30:3: Error: Final field 'field2' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   C.foo() {}
+//   ^^^
+// pkg/front_end/testcases/nnbd/issue40951.dart:27:14: Context: 'field2' is defined here.
+//   final num? field2;
+//              ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:31:3: Error: Final field 'field2' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   C.bar(this.field1) {}
+//   ^^^
+// pkg/front_end/testcases/nnbd/issue40951.dart:27:14: Context: 'field2' is defined here.
+//   final num? field2;
+//              ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:39:3: Error: Final field 'field1' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   D() {}
+//   ^
+// pkg/front_end/testcases/nnbd/issue40951.dart:36:14: Context: 'field1' is defined here.
+//   final num? field1;
+//              ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:39:3: Error: Final field 'field2' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   D() {}
+//   ^
+// pkg/front_end/testcases/nnbd/issue40951.dart:37:14: Context: 'field2' is defined here.
+//   final num? field2;
+//              ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:40:3: Error: Final field 'field1' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   D.foo() {}
+//   ^^^
+// pkg/front_end/testcases/nnbd/issue40951.dart:36:14: Context: 'field1' is defined here.
+//   final num? field1;
+//              ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:40:3: Error: Final field 'field2' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   D.foo() {}
+//   ^^^
+// pkg/front_end/testcases/nnbd/issue40951.dart:37:14: Context: 'field2' is defined here.
+//   final num? field2;
+//              ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue40951.dart:41:3: Error: Final field 'field2' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   D.bar(this.field1) {}
+//   ^^^
+// pkg/front_end/testcases/nnbd/issue40951.dart:37:14: Context: 'field2' is defined here.
+//   final num? field2;
+//              ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::num field1;
+  field core::num field2;
+  constructor •() → self::A
+    : self::A::field2 = null, self::A::field1 = null, super core::Object::•() {}
+  constructor foo() → self::A
+    : self::A::field2 = null, self::A::field1 = null, super core::Object::•() {}
+  constructor bar(core::num field1) → self::A
+    : self::A::field2 = null, self::A::field1 = field1, super core::Object::•() {}
+  constructor baz(core::num field1, core::num field2) → self::A
+    : self::A::field1 = field1, self::A::field2 = field2, super core::Object::•() {}
+}
+abstract class B extends core::Object {
+  field core::num field1;
+  field core::num field2;
+  constructor •() → self::B
+    : self::B::field2 = null, self::B::field1 = null, super core::Object::•() {}
+  constructor foo() → self::B
+    : self::B::field2 = null, self::B::field1 = null, super core::Object::•() {}
+  constructor bar(core::num field1) → self::B
+    : self::B::field2 = null, self::B::field1 = field1, super core::Object::•() {}
+  constructor baz(core::num field1, core::num field2) → self::B
+    : self::B::field1 = field1, self::B::field2 = field2, super core::Object::•() {}
+}
+class C extends core::Object {
+  final field core::num? field1;
+  final field core::num? field2;
+  constructor •() → self::C
+    : self::C::field2 = null, self::C::field1 = null, super core::Object::•() {}
+  constructor foo() → self::C
+    : self::C::field2 = null, self::C::field1 = null, super core::Object::•() {}
+  constructor bar(core::num? field1) → self::C
+    : self::C::field2 = null, self::C::field1 = field1, super core::Object::•() {}
+  constructor baz(core::num? field1, core::num? field2) → self::C
+    : self::C::field1 = field1, self::C::field2 = field2, super core::Object::•() {}
+}
+abstract class D extends core::Object {
+  final field core::num? field1;
+  final field core::num? field2;
+  constructor •() → self::D
+    : self::D::field2 = null, self::D::field1 = null, super core::Object::•() {}
+  constructor foo() → self::D
+    : self::D::field2 = null, self::D::field1 = null, super core::Object::•() {}
+  constructor bar(core::num? field1) → self::D
+    : self::D::field2 = null, self::D::field1 = field1, super core::Object::•() {}
+  constructor baz(core::num? field1, core::num? field2) → self::D
+    : self::D::field1 = field1, self::D::field2 = field2, super core::Object::•() {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue40954.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue40954.dart.weak.modular.expect
new file mode 100644
index 0000000..cbfe037
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue40954.dart.weak.modular.expect
@@ -0,0 +1,64 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue40954.dart:8:31: Error: The parameter 'a' can't have a value of 'null' because of its type 'A', but the implicit default value is 'null'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue40954.dart'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   static void test1(var v, [A a]) {}
+//                               ^
+//
+// pkg/front_end/testcases/nnbd/issue40954.dart:10:31: Error: The parameter 'a' can't have a value of 'null' because of its type 'A', but the implicit default value is 'null'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue40954.dart'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   static void test2(var v, {A a}) {}
+//                               ^
+//
+// pkg/front_end/testcases/nnbd/issue40954.dart:12:25: Error: The parameter 'a' can't have a value of 'null' because of its type 'A', but the implicit default value is 'null'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue40954.dart'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void test11(var v, [A a]) {}
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/issue40954.dart:14:25: Error: The parameter 'a' can't have a value of 'null' because of its type 'A', but the implicit default value is 'null'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue40954.dart'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void test22(var v, {A a}) {}
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/issue40954.dart:17:22: Error: The parameter 'a' can't have a value of 'null' because of its type 'A', but the implicit default value is 'null'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue40954.dart'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// void test1(var v, [A a]) {}
+//                      ^
+//
+// pkg/front_end/testcases/nnbd/issue40954.dart:19:22: Error: The parameter 'a' can't have a value of 'null' because of its type 'A', but the implicit default value is 'null'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue40954.dart'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// void test2(var v, {A a}) {}
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  static method test1(dynamic v, [self::A a = #C1]) → void {}
+  static method test2(dynamic v, {self::A a = #C1}) → void {}
+  method test11(dynamic v, [self::A a = #C1]) → void {}
+  method test22(dynamic v, {self::A a = #C1}) → void {}
+}
+static method test1(dynamic v, [self::A a = #C1]) → void {}
+static method test2(dynamic v, {self::A a = #C1}) → void {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41102.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41102.dart.weak.modular.expect
new file mode 100644
index 0000000..e9cdc2d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41102.dart.weak.modular.expect
@@ -0,0 +1,130 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:15:12: Warning: Operand of null-aware operation '?.' has type 'List<dynamic>' which excludes null.
+//  - 'List' is from 'dart:core'.
+// final s2 = s1?.length;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:17:36: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+// final s3 = new List<int>.filled(2, null);
+//                                    ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:22:5: Error: Switch case may fall through to the next case.
+//     case 0:
+//     ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:25:10: Error: Type 'String' of the case expression is not a subtype of type 'int' of this switch expression.
+//     case '':
+//          ^
+// pkg/front_end/testcases/nnbd/issue41102.dart:21:11: Context: The switch expression is here.
+//   switch (e) {
+//           ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+// final s6 = s5 + 0;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
+//  - 'List' is from 'dart:core'.
+// final s8 = s7[0];
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
+//  - 'List' is from 'dart:core'.
+// final s9 = s7[0] = 0;
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+//  - 'List' is from 'dart:core'.
+// Try accessing using ?. instead.
+// final s10 = s7.length;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+//  - 'List' is from 'dart:core'.
+// Try accessing using ?. instead.
+// final s11 = s7.length = 0;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+// final s12 = -s5;
+//             ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+// final s14 = (s13)();
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:49:19: Error: Can't throw a value of 'Null' since it is neither dynamic nor non-nullable.
+// final s15 = throw null;
+//                   ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data){(core::Object?) → void}), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}(){() → void}));
+static final field core::List<dynamic> s1 = <dynamic>[];
+static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1 == null ?{core::int?} null : #t1.{core::List::length}{core::int};
+static final field core::List<core::int> s3 = core::List::filled<core::int>(2, invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:36: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+final s3 = new List<int>.filled(2, null);
+                                   ^" in null as{TypeError,ForNonNullableByDefault} core::int);
+static final field dynamic s4 = (() → Null {
+  core::int e = 0;
+  switch(e) {
+    #L1:
+    case #C1:
+      {
+        core::print("fallthrough");
+      }
+    #L2:
+    case #C2:
+    case #C3:
+      {}
+  }
+})(){() → Null};
+static field core::int? s5;
+static final field core::num s6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+final s6 = s5 + 0;
+              ^" in self::s5.{core::num::+}(0){(core::num) → core::num};
+static field core::List<dynamic>? s7;
+static final field dynamic s8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
+ - 'List' is from 'dart:core'.
+final s8 = s7[0];
+             ^" in self::s7.{core::List::[]}{<nullable>}.(0){(core::int) → dynamic};
+static final field core::int s9 = let final core::List<dynamic>? #t2 = self::s7 in let final core::int #t3 = 0 in let final core::int #t4 = 0 in let final void #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
+ - 'List' is from 'dart:core'.
+final s9 = s7[0] = 0;
+             ^" in #t2.{core::List::[]=}{<nullable>}.(#t3, #t4){(core::int, dynamic) → void} in #t4;
+static final field core::int s10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+ - 'List' is from 'dart:core'.
+Try accessing using ?. instead.
+final s10 = s7.length;
+               ^^^^^^" in self::s7.{core::List::length}{<nullable>}.{core::int};
+static final field core::int s11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+ - 'List' is from 'dart:core'.
+Try accessing using ?. instead.
+final s11 = s7.length = 0;
+               ^^^^^^" in self::s7.{core::List::length}{<nullable>}. = 0;
+static final field core::int s12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+final s12 = -s5;
+            ^" in self::s5.{core::int::unary-}(){() → core::int};
+static field () →? core::int s13;
+static final field core::int s14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+final s14 = (s13)();
+                 ^" in self::s13{<nullable>}.(){() →? core::int};
+static final field Never s15 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:49:19: Error: Can't throw a value of 'Null' since it is neither dynamic nor non-nullable.
+final s15 = throw null;
+                  ^" as{TypeError,ForDynamic,ForNonNullableByDefault} Never;
+static method main() → void {}
+
+constants  {
+  #C1 = 0
+  #C2 = 1
+  #C3 = ""
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41103.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41103.dart.weak.modular.expect
new file mode 100644
index 0000000..d5d245a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41103.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static final field asy::StreamTransformer<core::Object?, core::Object?> t = new asy::_StreamHandlerTransformer::•<core::Object?, core::Object?>(handleData: (core::Object? data, asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data){(core::Object?) → void}), handleDone: (asy::EventSink<core::Object?> sink) → void => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}(){() → void}));
+static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41108.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.modular.expect
new file mode 100644
index 0000000..3874c5a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
+//  - 'List' is from 'dart:core'.
+//   List y = await l(); // should be a List?
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static method test() → dynamic async {
+  core::List<dynamic> y = invalid-expression "pkg/front_end/testcases/nnbd/issue41108.dart:6:12: Error: A value of type 'List<dynamic>?' can't be assigned to a variable of type 'List<dynamic>' because 'List<dynamic>?' is nullable and 'List<dynamic>' isn't.
+ - 'List' is from 'dart:core'.
+  List y = await l(); // should be a List?
+           ^" in await self::l() as{TypeError,ForNonNullableByDefault} core::List<dynamic>;
+}
+static method l() → asy::Future<core::List<dynamic>>?
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41114.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.modular.expect
new file mode 100644
index 0000000..467d91a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic async {
+  core::List<core::String>? a = <core::String>[] as{ForNonNullableByDefault} core::List<core::String>?;
+  core::Iterable<core::String>? b = let final core::List<core::String>? #t1 = a in #t1 == null ?{core::Iterable<core::String>?} null : #t1{core::List<core::String>}.{core::Iterable::map}<core::String>((core::String e) → core::String => e){((core::String) → core::String) → core::Iterable<core::String>};
+  core::Iterable<core::String>? i = let final core::Iterable<core::String>? #t2 = b in #t2 == null ?{core::Iterable<core::String>?} a : #t2{core::Iterable<core::String>};
+  core::print(i);
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.modular.expect
new file mode 100644
index 0000000..9940f1b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.modular.expect
@@ -0,0 +1,155 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   String Function(int) x2 = (int v) /* error */ {
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   String Function(int) x3 = (int v) /* error */ {
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   String Function(int) x5 = (int v) /* error */ {
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   String Function(int) x6 = (int v) /* error */ {
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   Future<String> Function(int) y2 = (int v) async /* error */ {
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   Future<String> Function(int) y3 = (int v) async /* error */ {
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   Future<String> Function(int) y5 = (int v) async /* error */ {
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   Future<String> Function(int) y6 = (int v) async /* error */ {
+//                                     ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+import "dart:async" as asy;
+
+static method throwing() → Never
+  return throw "";
+static method main() → void {
+  (core::int) → core::String x1 = (core::int v) → Never => throw v;
+  (core::int) → core::String x2 = (core::int v) → Never {
+    throw v;
+  };
+  (core::int) → core::String x3 = (core::int v) → Never {
+    return throw v;
+  };
+  (core::int) → core::String x4 = (core::int v) → Never => let final Never #t1 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  (core::int) → core::String x5 = (core::int v) → Never {
+    let final Never #t2 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  };
+  (core::int) → core::String x6 = (core::int v) → Never {
+    return let final Never #t3 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  };
+  (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async => throw v;
+  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> async {
+    throw v;
+  };
+  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> async {
+    return throw v;
+  };
+  (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async => let final Never #t4 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> async {
+    let final Never #t5 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  };
+  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> async {
+    return let final Never #t6 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  };
+}
+static method errors() → void async {
+  (core::int) → core::String x2 = (core::int v) → core::String {
+    try {
+      throw v;
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  String Function(int) x2 = (int v) /* error */ {
+                            ^" in null;
+  };
+  (core::int) → core::String x3 = (core::int v) → core::String {
+    try {
+      return throw v;
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  String Function(int) x3 = (int v) /* error */ {
+                            ^" in null;
+  };
+  (core::int) → core::String x5 = (core::int v) → core::String {
+    try {
+      let final Never #t7 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  String Function(int) x5 = (int v) /* error */ {
+                            ^" in null;
+  };
+  (core::int) → core::String x6 = (core::int v) → core::String {
+    try {
+      return let final Never #t8 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  String Function(int) x6 = (int v) /* error */ {
+                            ^" in null;
+  };
+  (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<core::String> async {
+    try {
+      throw v;
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  Future<String> Function(int) y2 = (int v) async /* error */ {
+                                    ^" in null;
+  };
+  (core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> async {
+    try {
+      return throw v;
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  Future<String> Function(int) y3 = (int v) async /* error */ {
+                                    ^" in null;
+  };
+  (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> async {
+    try {
+      let final Never #t9 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  Future<String> Function(int) y5 = (int v) async /* error */ {
+                                    ^" in null;
+  };
+  (core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> async {
+    try {
+      return let final Never #t10 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    }
+    on core::Object catch(final core::Object _) {
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  Future<String> Function(int) y6 = (int v) async /* error */ {
+                                    ^" in null;
+  };
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41273.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41273.dart.weak.modular.expect
new file mode 100644
index 0000000..0bdfe20
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41273.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+static method test(dynamic x) → void {
+  if(x is{ForNonNullableByDefault} Never) {
+    Never n1 = let final Never #t1 = (let final Never #t2 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n2 = let final Never #t3 = (let final Never #t4 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n3 = let final Never #t5 = (let final Never #t6 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.someGetter in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n4 = let final Never #t7 = (let final Never #t8 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.someMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n5 = let final Never #t9 = (let final Never #t10 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(let final Never #t11 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n6 = let final Never #t12 = (let final Never #t13 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](let final Never #t14 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n7 = let final Never #t15 = (let final Never #t16 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n8 = let final Never #t17 = (let final Never #t18 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never n9 = let final Never #t19 = (let final Never #t20 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    (let final Never #t21 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType = #C1;
+    (let final Never #t22 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString = () → core::String => "";
+    Never v1 = let final Never #t23 = (let final Never #t24 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v2 = let final Never #t25 = (let final Never #t26 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v3 = let final Never #t27 = (let final Never #t28 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.someGetter in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v4 = let final Never #t29 = (let final Never #t30 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.someMethod() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v5 = let final Never #t31 = (let final Never #t32 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(let final Never #t33 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v6 = let final Never #t34 = (let final Never #t35 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](let final Never #t36 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v7 = let final Never #t37 = (let final Never #t38 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v8 = let final Never #t39 = (let final Never #t40 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    Never v9 = let final Never #t41 = (let final Never #t42 = x{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  }
+}
+static method main() → dynamic {
+  self::test(null);
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(core::Object*)
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41349.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41349.dart.weak.modular.expect
new file mode 100644
index 0000000..16cf6c9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41349.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo() → dynamic
+    return 23;
+}
+extension B on self::A? {
+  method foo = self::B|foo;
+  tearoff foo = self::B|get#foo;
+  method bar = self::B|bar;
+  tearoff bar = self::B|get#bar;
+}
+extension C on self::A {
+  method bar = self::C|bar;
+  tearoff bar = self::C|get#bar;
+}
+extension D on () →? core::int {
+  method call = self::D|call;
+  tearoff call = self::D|get#call;
+}
+static method B|foo(lowered final self::A? #this) → dynamic
+  return 42;
+static method B|get#foo(lowered final self::A? #this) → () → dynamic
+  return () → dynamic => self::B|foo(#this);
+static method B|bar(lowered final self::A? #this) → dynamic
+  return 87;
+static method B|get#bar(lowered final self::A? #this) → () → dynamic
+  return () → dynamic => self::B|bar(#this);
+static method C|bar(lowered final self::A #this) → dynamic
+  return 123;
+static method C|get#bar(lowered final self::A #this) → () → dynamic
+  return () → dynamic => self::C|bar(#this);
+static method D|call(lowered final () →? core::int #this) → core::int
+  return 76;
+static method D|get#call(lowered final () →? core::int #this) → () → core::int
+  return () → core::int => self::D|call(#this);
+static method main() → dynamic {
+  self::testA(new self::A::•());
+  self::testFunction(() → core::int => 53);
+}
+static method testA(self::A? a) → dynamic {
+  self::expect(23, let final self::A? #t1 = a in #t1 == null ?{dynamic} null : #t1{self::A}.{self::A::foo}(){() → dynamic});
+  self::expect(42, self::B|foo(a));
+  self::expect(123, let final self::A? #t2 = a in #t2 == null ?{dynamic} null : self::C|bar(#t2{self::A}));
+  self::expect(87, self::B|bar(a));
+}
+static method testFunction(() →? core::int f) → dynamic {
+  self::expect(53, let final () →? core::int #t3 = f in #t3 == null ?{core::int?} null : #t3{() → core::int}(){() → core::int});
+  self::expect(76, self::D|call(f));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41386.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41386.dart.weak.modular.expect
new file mode 100644
index 0000000..fbc0fe4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41386.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41386.dart:8:28: Error: The operator '%' isn't defined for the class 'Object?'.
+//  - 'Object' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '%' operator.
+//   print(predicate((v) => v % 2 == 1)(3));
+//                            ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method predicate<T extends core::Object? = dynamic>((self::predicate::T%) → core::bool fn) → (self::predicate::T%) → core::bool
+  return (self::predicate::T% val) → core::bool => fn(val){(self::predicate::T%) → core::bool};
+static method test() → void {
+  core::print(self::predicate<core::Object?>((core::Object? v) → core::bool => invalid-expression "pkg/front_end/testcases/nnbd/issue41386.dart:8:28: Error: The operator '%' isn't defined for the class 'Object?'.
+ - 'Object' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '%' operator.
+  print(predicate((v) => v % 2 == 1)(3));
+                           ^" in v{<unresolved>}.%(2) =={core::Object::==}{(core::Object) → core::bool} 1)(3){(core::Object?) → core::bool});
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41386b.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41386b.dart.weak.modular.expect
new file mode 100644
index 0000000..7223846
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41386b.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method test() → void {
+  core::Map<dynamic, dynamic> map = <dynamic, dynamic>{};
+  map.{core::Map::[]}(0){(core::Object?) → dynamic}{dynamic}.foo;
+  core::Iterable<core::String> elements = <core::String>[];
+  core::List<dynamic> list = core::List::from<dynamic>(elements);
+  core::List::from<dynamic>(elements).{core::Iterable::forEach}((dynamic element) → void => element{dynamic}.foo){((dynamic) → void) → void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41415.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41415.dart.weak.modular.expect
new file mode 100644
index 0000000..818e367a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41415.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {}
+static method test<X extends Null, Y extends Never?, Z extends Never>() → dynamic {
+  (Null) → core::int f = (core::Object? x) → core::int => 1;
+  (Never) → core::int g = (core::Object? x) → core::int => 1;
+  (Never?) → core::int h = (core::Object? x) → core::int => 1;
+  (core::String) → core::int i = (core::String x) → core::int => 1;
+  (self::test::X%) → core::int j = (core::Object? x) → core::int => 1;
+  (self::test::Y%) → core::int k = (core::Object? x) → core::int => 1;
+  (self::test::Z) → core::int l = (core::Object? x) → core::int => 1;
+  (self::test::Z?) → core::int m = (core::Object? x) → core::int => 1;
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.modular.expect
new file mode 100644
index 0000000..6b82704
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.modular.expect
@@ -0,0 +1,94 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+//  - 'Future' is from 'dart:async'.
+// Future<bool> test5() => getFutureNull(); // error
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+//  - 'Future' is from 'dart:async'.
+//   Future<bool> test5() => getFutureNull(); // error
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+//  - 'Future' is from 'dart:async'.
+//   Future<bool> var1 = (() async => await getNull())(); // error
+//                                                    ^
+//
+// pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+//  - 'Future' is from 'dart:async'.
+//   Future<bool> var4 = (() async => await getFutureNull())(); // error
+//                                                          ^
+//
+// pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+//  - 'Future' is from 'dart:async'.
+//   Future<bool> var5 = (() => getFutureNull())(); // error
+//                                              ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+static method getNull() → dynamic
+  return null;
+static method getFutureNull() → asy::Future<dynamic> async {
+  return null;
+}
+static method getFutureBool() → asy::Future<core::bool> async {
+  return true;
+}
+static method test1() → asy::Future<core::bool> async 
+  return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+static method test2() → asy::Future<core::bool>
+  return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
+static method test3() → core::bool
+  return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+static method test4() → asy::Future<core::bool> async 
+  return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+static method test5() → asy::Future<core::bool>
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+ - 'Future' is from 'dart:async'.
+Future<bool> test5() => getFutureNull(); // error
+                        ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+static method test6() → asy::Future<core::bool>
+  return self::getFutureBool();
+static method test7() → asy::Future<core::bool> async 
+  return self::getFutureBool();
+static method test() → dynamic async {
+  function test1() → asy::Future<core::bool> async 
+    return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+  function test2() → asy::Future<core::bool>
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
+  function test3() → core::bool
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  function test4() → asy::Future<core::bool> async 
+    return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+  function test5() → asy::Future<core::bool>
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+ - 'Future' is from 'dart:async'.
+  Future<bool> test5() => getFutureNull(); // error
+                          ^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+  function test6() → asy::Future<core::bool>
+    return self::getFutureBool();
+  function test7() → asy::Future<core::bool> async 
+    return self::getFutureBool();
+  asy::Future<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+ - 'Future' is from 'dart:async'.
+  Future<bool> var1 = (() async => await getNull())(); // error
+                                                   ^" in (() → asy::Future<dynamic> async => await self::getNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+  asy::Future<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
+  core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  asy::Future<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+ - 'Future' is from 'dart:async'.
+  Future<bool> var4 = (() async => await getFutureNull())(); // error
+                                                         ^" in (() → asy::Future<dynamic> async => await self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+  asy::Future<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+ - 'Future' is from 'dart:async'.
+  Future<bool> var5 = (() => getFutureNull())(); // error
+                                             ^" in (() → asy::Future<dynamic> => self::getFutureNull())(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+  asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool())(){() → asy::Future<core::bool>};
+  asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async => self::getFutureBool())(){() → asy::Future<core::bool>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.modular.expect
new file mode 100644
index 0000000..89bdcad
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.modular.expect
@@ -0,0 +1,121 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41437b.dart:21:10: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+//  - 'Iterable' is from 'dart:core'.
+//   yield* getIterableNull(); // error
+//          ^
+//
+// pkg/front_end/testcases/nnbd/issue41437b.dart:24:27: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
+//  - 'Iterable' is from 'dart:core'.
+// Iterable<bool> test5() => getIterableNull(); // error
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/issue41437b.dart:38:12: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+//  - 'Iterable' is from 'dart:core'.
+//     yield* getIterableNull(); // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/issue41437b.dart:41:29: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
+//  - 'Iterable' is from 'dart:core'.
+//   Iterable<bool> test5() => getIterableNull(); // error
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/issue41437b.dart:49:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+//  - 'Iterable' is from 'dart:core'.
+//   })(); // error
+//     ^
+//
+// pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+//  - 'Iterable' is from 'dart:core'.
+//   })(); // error
+//     ^
+//
+// pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+//  - 'Iterable' is from 'dart:core'.
+//   Iterable<bool> var5 = (() => getIterableNull())(); // error
+//                                                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method getNull() → dynamic
+  return null;
+static method getIterableNull() → core::Iterable<dynamic> sync* {
+  yield null;
+}
+static method getIterableBool() → core::Iterable<core::bool> sync* {
+  yield true;
+}
+static method test1() → core::Iterable<core::bool> sync* {
+  yield self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+}
+static method test2() → core::Iterable<core::bool>
+  return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
+static method test3() → core::bool
+  return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+static method test4() → core::Iterable<core::bool> sync* {
+  yield* invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:21:10: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+ - 'Iterable' is from 'dart:core'.
+  yield* getIterableNull(); // error
+         ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+}
+static method test5() → core::Iterable<core::bool>
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:24:27: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
+ - 'Iterable' is from 'dart:core'.
+Iterable<bool> test5() => getIterableNull(); // error
+                          ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+static method test6() → core::Iterable<core::bool>
+  return self::getIterableBool();
+static method test7() → core::Iterable<core::bool> sync* {
+  yield* self::getIterableBool();
+}
+static method test() → dynamic async {
+  function test1() → core::Iterable<core::bool> sync* {
+    yield self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  }
+  function test2() → core::Iterable<core::bool>
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
+  function test3() → core::bool
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  function test4() → core::Iterable<core::bool> sync* {
+    yield* invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:38:12: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+ - 'Iterable' is from 'dart:core'.
+    yield* getIterableNull(); // error
+           ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+  }
+  function test5() → core::Iterable<core::bool>
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:41:29: Error: A value of type 'Iterable<dynamic>' can't be returned from a function with return type 'Iterable<bool>'.
+ - 'Iterable' is from 'dart:core'.
+  Iterable<bool> test5() => getIterableNull(); // error
+                            ^" in self::getIterableNull() as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+  function test6() → core::Iterable<core::bool>
+    return self::getIterableBool();
+  function test7() → core::Iterable<core::bool> sync* {
+    yield* self::getIterableBool();
+  }
+  core::Iterable<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:49:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+ - 'Iterable' is from 'dart:core'.
+  })(); // error
+    ^" in (() → core::Iterable<dynamic> sync* {
+    yield self::getNull();
+  })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+  core::Iterable<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<core::bool>;
+  core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  core::Iterable<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:54:5: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+ - 'Iterable' is from 'dart:core'.
+  })(); // error
+    ^" in (() → core::Iterable<dynamic> sync* {
+    yield* self::getIterableNull();
+  })(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+  core::Iterable<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437b.dart:55:50: Error: A value of type 'Iterable<dynamic>' can't be assigned to a variable of type 'Iterable<bool>'.
+ - 'Iterable' is from 'dart:core'.
+  Iterable<bool> var5 = (() => getIterableNull())(); // error
+                                                 ^" in (() → core::Iterable<dynamic> => self::getIterableNull())(){() → core::Iterable<dynamic>} as{TypeError,ForNonNullableByDefault} core::Iterable<core::bool>;
+  core::Iterable<core::bool> var6 = (() → core::Iterable<core::bool> => self::getIterableBool())(){() → core::Iterable<core::bool>};
+  core::Iterable<core::bool> var7 = (() → core::Iterable<core::bool> sync* {
+    yield* self::getIterableBool();
+  })(){() → core::Iterable<core::bool>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.modular.expect
new file mode 100644
index 0000000..54bbc93
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.modular.expect
@@ -0,0 +1,122 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41437c.dart:21:10: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+//  - 'Stream' is from 'dart:async'.
+//   yield* getStreamNull(); // error
+//          ^
+//
+// pkg/front_end/testcases/nnbd/issue41437c.dart:24:25: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
+//  - 'Stream' is from 'dart:async'.
+// Stream<bool> test5() => getStreamNull(); // error
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/issue41437c.dart:38:12: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+//  - 'Stream' is from 'dart:async'.
+//     yield* getStreamNull(); // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/issue41437c.dart:41:27: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
+//  - 'Stream' is from 'dart:async'.
+//   Stream<bool> test5() => getStreamNull(); // error
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/issue41437c.dart:49:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+//  - 'Stream' is from 'dart:async'.
+//   })(); // error
+//     ^
+//
+// pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+//  - 'Stream' is from 'dart:async'.
+//   })(); // error
+//     ^
+//
+// pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+//  - 'Stream' is from 'dart:async'.
+//   Stream<bool> var5 = (() => getStreamNull())(); // error
+//                                              ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+static method getNull() → dynamic
+  return null;
+static method getStreamNull() → asy::Stream<dynamic> async* {
+  yield null;
+}
+static method getStreamBool() → asy::Stream<core::bool> async* {
+  yield true;
+}
+static method test1() → asy::Stream<core::bool> async* {
+  yield self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+}
+static method test2() → asy::Stream<core::bool>
+  return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
+static method test3() → core::bool
+  return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+static method test4() → asy::Stream<core::bool> async* {
+  yield* invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:21:10: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+ - 'Stream' is from 'dart:async'.
+  yield* getStreamNull(); // error
+         ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+}
+static method test5() → asy::Stream<core::bool>
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:24:25: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
+ - 'Stream' is from 'dart:async'.
+Stream<bool> test5() => getStreamNull(); // error
+                        ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+static method test6() → asy::Stream<core::bool>
+  return self::getStreamBool();
+static method test7() → asy::Stream<core::bool> async* {
+  yield* self::getStreamBool();
+}
+static method test() → dynamic async {
+  function test1() → asy::Stream<core::bool> async* {
+    yield self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  }
+  function test2() → asy::Stream<core::bool>
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
+  function test3() → core::bool
+    return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  function test4() → asy::Stream<core::bool> async* {
+    yield* invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:38:12: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+ - 'Stream' is from 'dart:async'.
+    yield* getStreamNull(); // error
+           ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  }
+  function test5() → asy::Stream<core::bool>
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:41:27: Error: A value of type 'Stream<dynamic>' can't be returned from a function with return type 'Stream<bool>'.
+ - 'Stream' is from 'dart:async'.
+  Stream<bool> test5() => getStreamNull(); // error
+                          ^" in self::getStreamNull() as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  function test6() → asy::Stream<core::bool>
+    return self::getStreamBool();
+  function test7() → asy::Stream<core::bool> async* {
+    yield* self::getStreamBool();
+  }
+  asy::Stream<core::bool> var1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:49:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+ - 'Stream' is from 'dart:async'.
+  })(); // error
+    ^" in (() → asy::Stream<dynamic> async* {
+    yield self::getNull();
+  })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  asy::Stream<core::bool> var2 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<core::bool>;
+  core::bool var3 = (() → dynamic => self::getNull())(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  asy::Stream<core::bool> var4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:54:5: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+ - 'Stream' is from 'dart:async'.
+  })(); // error
+    ^" in (() → asy::Stream<dynamic> async* {
+    yield* self::getStreamNull();
+  })(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  asy::Stream<core::bool> var5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437c.dart:55:46: Error: A value of type 'Stream<dynamic>' can't be assigned to a variable of type 'Stream<bool>'.
+ - 'Stream' is from 'dart:async'.
+  Stream<bool> var5 = (() => getStreamNull())(); // error
+                                             ^" in (() → asy::Stream<dynamic> => self::getStreamNull())(){() → asy::Stream<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Stream<core::bool>;
+  asy::Stream<core::bool> var6 = (() → asy::Stream<core::bool> => self::getStreamBool())(){() → asy::Stream<core::bool>};
+  asy::Stream<core::bool> var7 = (() → asy::Stream<core::bool> async* {
+    yield* self::getStreamBool();
+  })(){() → asy::Stream<core::bool>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41495.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41495.dart.weak.modular.expect
new file mode 100644
index 0000000..f5982c7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41495.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41495.dart:14:6: Error: Property 'c1' cannot be accessed on 'A?' because it is potentially null.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
+// Try accessing using ?. instead.
+//   a1.c1;
+//      ^^
+//
+// pkg/front_end/testcases/nnbd/issue41495.dart:15:6: Error: Property 'test' cannot be accessed on 'A?' because it is potentially null.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
+// Try accessing using ?. instead.
+//   a1.test;
+//      ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int c1 = 1;
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method test() → core::int
+    return 2;
+}
+static method main() → dynamic {}
+static method errors() → dynamic {
+  self::A? a1 = new self::A::•() as{ForNonNullableByDefault} self::A?;
+  invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:14:6: Error: Property 'c1' cannot be accessed on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
+Try accessing using ?. instead.
+  a1.c1;
+     ^^" in a1.{self::A::c1}{<nullable>}.{core::int};
+  invalid-expression "pkg/front_end/testcases/nnbd/issue41495.dart:15:6: Error: Property 'test' cannot be accessed on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/issue41495.dart'.
+Try accessing using ?. instead.
+  a1.test;
+     ^^^^" in a1.{self::A::test}{<nullable>}.{() → core::int};
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41520.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41520.dart.weak.modular.expect
new file mode 100644
index 0000000..c66c505
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41520.dart.weak.modular.expect
@@ -0,0 +1,56 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41520.dart:7:11: Error: The method 'notAMethodOnObject' isn't defined for the class 'Object'.
+//  - 'Object' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnObject'.
+//     error.notAMethodOnObject();
+//           ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue41520.dart:12:11: Error: The method 'notAMethodOnObject' isn't defined for the class 'Object'.
+//  - 'Object' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnObject'.
+//     error.notAMethodOnObject();
+//           ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue41520.dart:13:16: Error: The method 'notAMethodOnStackTrace' isn't defined for the class 'StackTrace'.
+//  - 'StackTrace' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnStackTrace'.
+//     stackTrace.notAMethodOnStackTrace();
+//                ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method errors() → void {
+  try {
+  }
+  on core::Object catch(final core::Object error) {
+    invalid-expression "pkg/front_end/testcases/nnbd/issue41520.dart:7:11: Error: The method 'notAMethodOnObject' isn't defined for the class 'Object'.
+ - 'Object' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnObject'.
+    error.notAMethodOnObject();
+          ^^^^^^^^^^^^^^^^^^" in error{<unresolved>}.notAMethodOnObject();
+    self::_takesObject(error);
+  }
+  try {
+  }
+  on core::Object catch(final core::Object error, final core::StackTrace stackTrace) {
+    invalid-expression "pkg/front_end/testcases/nnbd/issue41520.dart:12:11: Error: The method 'notAMethodOnObject' isn't defined for the class 'Object'.
+ - 'Object' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnObject'.
+    error.notAMethodOnObject();
+          ^^^^^^^^^^^^^^^^^^" in error{<unresolved>}.notAMethodOnObject();
+    invalid-expression "pkg/front_end/testcases/nnbd/issue41520.dart:13:16: Error: The method 'notAMethodOnStackTrace' isn't defined for the class 'StackTrace'.
+ - 'StackTrace' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'notAMethodOnStackTrace'.
+    stackTrace.notAMethodOnStackTrace();
+               ^^^^^^^^^^^^^^^^^^^^^^" in stackTrace{<unresolved>}.notAMethodOnStackTrace();
+    self::_takesObject(error);
+    self::_takesStackTrace(stackTrace);
+  }
+}
+static method _takesObject(core::Object o) → void {}
+static method _takesStackTrace(core::StackTrace o) → void {}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41602.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.modular.expect
new file mode 100644
index 0000000..d7d296d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41602.dart:12:9: Error: This expression has type 'void' and can't be used.
+//   await returnVoid(); // error
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue41602.dart:13:9: Error: This expression has type 'void' and can't be used.
+//   await returnVoidAsync(); // error
+//         ^
+//
+import self as self;
+import "dart:async" as asy;
+
+static method returnFutureOfVoid() → asy::Future<void> async {}
+static method returnVoid() → void {}
+static method returnVoidAsync() → void async {}
+static method test() → dynamic async {
+  await self::returnVoid();
+  await self::returnVoidAsync();
+}
+static method main() → dynamic async {
+  await self::returnFutureOfVoid();
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41657.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41657.dart.weak.modular.expect
new file mode 100644
index 0000000..d4bfe7f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41657.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static final field core::bool isLegacySubtyping1a = <Null>[] is{ForNonNullableByDefault} core::List<core::int>;
+static const field core::bool isLegacySubtyping1b = #C1;
+static final field core::bool isLegacySubtyping2a = <core::int?>[] is{ForNonNullableByDefault} core::List<core::int>;
+static const field core::bool isLegacySubtyping2b = #C1;
+static const field core::List<core::int> assertLegacySubtyping1 = #C2;
+static const field core::List<core::int> assertLegacySubtyping2 = #C3;
+static method main() → void {
+  self::expect(self::isLegacySubtyping1a, #C1);
+  self::expect(self::isLegacySubtyping2a, #C1);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = true
+  #C2 = <Null>[]
+  #C3 = <core::int?>[]
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.modular.expect
new file mode 100644
index 0000000..d7f0e7d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.modular.expect
@@ -0,0 +1,56 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+//     return s + 1; // error
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
+//     return (await t) + 1; // error
+//                      ^
+//
+// pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+// test3<S extends num?>(S s) => s + 1; // error
+//                                 ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+typedef G<invariant T extends core::Object? = dynamic> = <S extends T% = dynamic>(S%) → dynamic;
+typedef H<invariant T extends core::Object? = dynamic> = <S extends FutureOr<T%> = dynamic>(S%, FutureOr<T%>) → dynamic;
+class C<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field <S extends self::C::T% = dynamic>(S%) → dynamic field1;
+  covariant-by-class field <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2;
+  constructor •(<S extends self::C::T% = dynamic>(S%) → dynamic field1, <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2) → self::C<self::C::T%>
+    : self::C::field1 = field1, self::C::field2 = field2, super core::Object::•()
+    ;
+}
+static method test1(self::C<core::num> c) → dynamic {
+  <S extends core::num>(S) → core::num f1 = c.{self::C::field1} = <S extends core::num>(S s) → core::num {
+    return s.{core::num::+}(1){(core::num) → core::num};
+  };
+  <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> async {
+    return (await t).{core::num::+}(1){(core::num) → core::num};
+  };
+}
+static method test2(self::C<core::num?> c) → dynamic {
+  <S extends core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num?>(S% s) → core::num {
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+    return s + 1; // error
+             ^" in s.{core::num::+}(1){(core::num) → core::num};
+  };
+  <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async {
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
+    return (await t) + 1; // error
+                     ^" in (await t).{core::num::+}(1){(core::num) → core::num};
+  };
+}
+static method test3<S extends core::num?>(self::test3::S% s) → dynamic
+  return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+test3<S extends num?>(S s) => s + 1; // error
+                                ^" in s.{core::num::+}(1){(core::num) → core::num};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.modular.expect
new file mode 100644
index 0000000..e45354a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41697b.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41697b.dart:10:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+//   var t = s + 1; // error
+//             ^
+//
+// pkg/front_end/testcases/nnbd/issue41697b.dart:18:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+//   var t = s + 1; // error
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test1<S extends core::num>(self::test1::S s) → dynamic {
+  core::num t = s.{core::num::+}(1){(core::num) → core::num};
+}
+static method test2<S extends core::num?>(self::test2::S% s) → dynamic {
+  core::num t = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:10:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  var t = s + 1; // error
+            ^" in s.{core::num::+}(1){(core::num) → core::num};
+}
+static method test3<S extends core::int>(self::test3::S s) → dynamic {
+  core::int t = s.{core::num::+}(1){(core::num) → core::int};
+}
+static method test4<S extends core::int?>(self::test4::S% s) → dynamic {
+  core::num t = invalid-expression "pkg/front_end/testcases/nnbd/issue41697b.dart:18:13: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+  var t = s + 1; // error
+            ^" in s.{core::num::+}(1){(core::num) → core::num};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.modular.expect
new file mode 100644
index 0000000..25b0480
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41700a.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41700a.dart:7:5: Error: The method 'foo' isn't defined for the class 'Null'.
+// Try correcting the name to the name of an existing method, or defining a method named 'foo'.
+//   x.foo();
+//     ^^^
+//
+// pkg/front_end/testcases/nnbd/issue41700a.dart:9:5: Error: The method 'foo' isn't defined for the class 'Null'.
+// Try correcting the name to the name of an existing method, or defining a method named 'foo'.
+//   y.foo();
+//     ^^^
+//
+import self as self;
+
+static method test() → dynamic {
+  Null x = null;
+  invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:7:5: Error: The method 'foo' isn't defined for the class 'Null'.
+Try correcting the name to the name of an existing method, or defining a method named 'foo'.
+  x.foo();
+    ^^^" in x{<unresolved>}.foo();
+  Null y = null;
+  invalid-expression "pkg/front_end/testcases/nnbd/issue41700a.dart:9:5: Error: The method 'foo' isn't defined for the class 'Null'.
+Try correcting the name to the name of an existing method, or defining a method named 'foo'.
+  y.foo();
+    ^^^" in y{<unresolved>}.foo();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.modular.expect
new file mode 100644
index 0000000..bf9a0db
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41700b.dart.weak.modular.expect
@@ -0,0 +1,47 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41700b.dart:8:12: Error: The value 'null' can't be assigned to a variable of type 'Null' because 'Null' is not nullable.
+//  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
+//   Null x = null;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/issue41700b.dart:9:5: Error: The method 'foo' isn't defined for the class 'Null'.
+//  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'foo'.
+//   x.foo();
+//     ^^^
+//
+// pkg/front_end/testcases/nnbd/issue41700b.dart:11:5: Error: The method 'foo' isn't defined for the class 'Null?'.
+//  - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'foo'.
+//   y.foo();
+//     ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Null extends core::Object {
+  synthetic constructor •() → self::Null
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  self::Null x = invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:8:12: Error: The value 'null' can't be assigned to a variable of type 'Null' because 'Null' is not nullable.
+ - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
+  Null x = null;
+           ^" in null as{TypeError,ForNonNullableByDefault} self::Null;
+  invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:9:5: Error: The method 'foo' isn't defined for the class 'Null'.
+ - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'foo'.
+  x.foo();
+    ^^^" in x{<unresolved>}.foo();
+  self::Null? y = null;
+  invalid-expression "pkg/front_end/testcases/nnbd/issue41700b.dart:11:5: Error: The method 'foo' isn't defined for the class 'Null?'.
+ - 'Null' is from 'pkg/front_end/testcases/nnbd/issue41700b.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'foo'.
+  y.foo();
+    ^^^" in y{<unresolved>}.foo();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41952.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue41952.dart.weak.modular.expect
new file mode 100644
index 0000000..3952efc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41952.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method i1<R extends core::Object? = dynamic>() → <S2 extends self::i1::R? = dynamic>() → void
+  return <S2 extends self::i1::R?>() → void {};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42089.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42089.dart.weak.modular.expect
new file mode 100644
index 0000000..1c01411
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42089.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue42089.dart:7:16: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
+//  - 'Object' is from 'dart:core'.
+//     Object o = x;
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue42089.dart:8:9: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
+//  - 'Object' is from 'dart:core'.
+//     o = x;
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test<X extends core::Object? = dynamic>(self::test::X? x) → dynamic {
+  if(x is{ForNonNullableByDefault} core::String?) {
+    core::Object o = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:7:16: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
+ - 'Object' is from 'dart:core'.
+    Object o = x;
+               ^" in x{self::test::X? & core::String? /* '?' & '?' = '?' */} as{TypeError,ForNonNullableByDefault} core::Object;
+    o = invalid-expression "pkg/front_end/testcases/nnbd/issue42089.dart:8:9: Error: A value of type 'X?' can't be assigned to a variable of type 'Object' because 'X?' is nullable and 'Object' isn't.
+ - 'Object' is from 'dart:core'.
+    o = x;
+        ^" in x{self::test::X? & core::String? /* '?' & '?' = '?' */} as{TypeError,ForNonNullableByDefault} core::Object;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42143.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42143.dart.weak.modular.expect
new file mode 100644
index 0000000..dd9388c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42143.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "dart:async";
+
+static method h1<T extends FutureOr<self::h1::T?>? = FutureOr<dynamic>?>(self::h1::T? t) → void {}
+static method h2<S extends FutureOr<self::h2::S?> = FutureOr<dynamic>>(self::h2::S? s) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42199.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42199.dart.weak.modular.expect
new file mode 100644
index 0000000..3ae4f33
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42199.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  abstract operator ==(dynamic other) → core::bool;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42362.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.modular.expect
new file mode 100644
index 0000000..b233a23
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42362.dart.weak.modular.expect
@@ -0,0 +1,233 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:45:16: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   method3([int i]) {} // error
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:47:16: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   method4({int i}) {} // error
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:8:24: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   A.constructor1([this.i]); // error
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:10:24: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   A.constructor2({this.i}); // error
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:12:23: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   A.constructor3([int i]) // error
+//                       ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:15:23: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   A.constructor4({int i}) // error
+//                       ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:41:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   factory A.factory8([int i]) => new A.constructor3(); // error
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:43:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   factory A.factory9({int i}) => new A.constructor4(); // error
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:106:12: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   method3([i]) {} // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:108:12: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   method4({i}) {} // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:77:24: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   C.constructor1([this.i]); // error
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:79:24: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   C.constructor2({this.i}); // error
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:81:23: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   C.constructor3([int i]) : this.i = i; // error
+//                       ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:83:23: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   C.constructor4({int i}) : this.i = i; // error
+//                       ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:102:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   factory C.factory8([int i]) => new C.constructor3(); // error
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:104:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   factory C.factory9({int i}) => new C.constructor4(); // error
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:19:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//       : this.i = i; // error
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:22:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//       : this.i = i; // error
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:85:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   C.constructor5([int? i]) : this.i = i; // error
+//                                       ^
+//
+// pkg/front_end/testcases/nnbd/issue42362.dart:87:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   C.constructor6({int? i}) : this.i = i; // error
+//                                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::int i;
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3, #C4, #C5]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::A
+    : self::A::i = i, super core::Object::•()
+    ;
+  constructor constructor2({core::int i = #C6}) → self::A
+    : self::A::i = i, super core::Object::•()
+    ;
+  constructor constructor3([core::int i = #C6]) → self::A
+    : self::A::i = i, super core::Object::•()
+    ;
+  constructor constructor4({core::int i = #C6}) → self::A
+    : self::A::i = i, super core::Object::•()
+    ;
+  constructor constructor5([core::int? i = #C6]) → self::A
+    : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:19:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+      : this.i = i; // error
+                 ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
+    ;
+  constructor constructor6({core::int? i = #C6}) → self::A
+    : self::A::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:22:18: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+      : this.i = i; // error
+                 ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
+    ;
+  constructor constructor7({required core::int i = #C6}) → self::A
+    : self::A::i = i, super core::Object::•()
+    ;
+  external constructor constructor8([core::int i = #C6]) → self::A
+    : super core::Object::•()
+    ;
+  external constructor constructor9({core::int i = #C6}) → self::A
+    : super core::Object::•()
+    ;
+  static factory factory3([core::int i = #C6]) → self::A
+    return new self::A::constructor3(i);
+  static factory factory4({core::int i = #C6}) → self::A
+    return new self::A::constructor4(i: i);
+  static factory factory5([core::int? i = #C6]) → self::A
+    return new self::A::constructor5(i);
+  static factory factory6({core::int? i = #C6}) → self::A
+    return new self::A::constructor6(i: i);
+  static factory factory7({required core::int i = #C6}) → self::A
+    return new self::A::constructor7(i: i);
+  static factory factory8([core::int i = #C6]) → self::A
+    return new self::A::constructor3();
+  static factory factory9({core::int i = #C6}) → self::A
+    return new self::A::constructor4();
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
+  external method method8([core::int i = #C6]) → dynamic;
+  external method method9({core::int i = #C6}) → dynamic;
+}
+abstract class B extends core::Object {
+  field core::int i = 42;
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  abstract method method3([core::int i = #C6]) → dynamic;
+  abstract method method4({core::int i = #C6}) → dynamic;
+  abstract method method5([core::int? i = #C6]) → dynamic;
+  abstract method method6({core::int? i = #C6}) → dynamic;
+  abstract method method7({required core::int i = #C6}) → dynamic;
+}
+class C extends core::Object implements self::B {
+  field core::int i;
+  static final field dynamic _redirecting# = <dynamic>[#C7, #C8, #C9, #C10, #C11]/*isLegacy*/;
+  constructor constructor1([core::int i = #C6]) → self::C
+    : self::C::i = i, super core::Object::•()
+    ;
+  constructor constructor2({core::int i = #C6}) → self::C
+    : self::C::i = i, super core::Object::•()
+    ;
+  constructor constructor3([core::int i = #C6]) → self::C
+    : self::C::i = i, super core::Object::•()
+    ;
+  constructor constructor4({core::int i = #C6}) → self::C
+    : self::C::i = i, super core::Object::•()
+    ;
+  constructor constructor5([core::int? i = #C6]) → self::C
+    : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:85:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  C.constructor5([int? i]) : this.i = i; // error
+                                      ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
+    ;
+  constructor constructor6({core::int? i = #C6}) → self::C
+    : self::C::i = invalid-expression "pkg/front_end/testcases/nnbd/issue42362.dart:87:39: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  C.constructor6({int? i}) : this.i = i; // error
+                                      ^" in i as{TypeError,ForNonNullableByDefault} core::int, super core::Object::•()
+    ;
+  constructor constructor7({required core::int i = #C6}) → self::C
+    : self::C::i = i, super core::Object::•()
+    ;
+  static factory factory3([core::int i = #C6]) → self::C
+    return new self::C::constructor3(i);
+  static factory factory4({core::int i = #C6}) → self::C
+    return new self::C::constructor4(i: i);
+  static factory factory5([core::int? i = #C6]) → self::C
+    return new self::C::constructor5(i);
+  static factory factory6({core::int? i = #C6}) → self::C
+    return new self::C::constructor6(i: i);
+  static factory factory7({required core::int i = #C6}) → self::C
+    return new self::C::constructor7(i: i);
+  static factory factory8([core::int i = #C6]) → self::C
+    return new self::C::constructor3();
+  static factory factory9({core::int i = #C6}) → self::C
+    return new self::C::constructor4();
+  method method3([core::int i = #C6]) → dynamic {}
+  method method4({core::int i = #C6}) → dynamic {}
+  method method5([core::int? i = #C6]) → dynamic {}
+  method method6({core::int? i = #C6}) → dynamic {}
+  method method7({required core::int i = #C6}) → dynamic {}
+}
+static method main() → void {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::factory3
+  #C2 = constructor-tearoff self::A::factory4
+  #C3 = constructor-tearoff self::A::factory5
+  #C4 = constructor-tearoff self::A::factory6
+  #C5 = constructor-tearoff self::A::factory7
+  #C6 = null
+  #C7 = constructor-tearoff self::C::factory3
+  #C8 = constructor-tearoff self::C::factory4
+  #C9 = constructor-tearoff self::C::factory5
+  #C10 = constructor-tearoff self::C::factory6
+  #C11 = constructor-tearoff self::C::factory7
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42429.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42429.dart.weak.modular.expect
new file mode 100644
index 0000000..717c859
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42429.dart.weak.modular.expect
@@ -0,0 +1,259 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:13:13: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<Object> aObject; // Error.
+//             ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<T extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:14:11: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<num?> aNumNullable; // Error.
+//           ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<T extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:15:11: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<int?> aIntNullable; // Error.
+//           ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<T extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:16:11: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'T' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<Null> aNull; // Error.
+//           ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<T extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:17:21: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<Object> fArgumentObject; // Error.
+//                     ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:18:19: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<num?> fArgumentNumNullable; // Error.
+//                   ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:19:19: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<int?> fArgumentIntNullable; // Error.
+//                   ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:20:19: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<Null> fArgumentNull; // Error.
+//                   ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:21:19: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+//   FReturn<Object> fReturnObject; // Error.
+//                   ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
+// typedef FReturn<X extends num> = X Function();
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:22:17: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// Try changing type arguments so that they conform to the bounds.
+//   FReturn<num?> fReturnNumNullable; // Error.
+//                 ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
+// typedef FReturn<X extends num> = X Function();
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:23:17: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// Try changing type arguments so that they conform to the bounds.
+//   FReturn<int?> fReturnIntNullable; // Error.
+//                 ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
+// typedef FReturn<X extends num> = X Function();
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:24:17: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FReturn'.
+// Try changing type arguments so that they conform to the bounds.
+//   FReturn<Null> fReturnNull; // Error.
+//                 ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:8:17: Context: This is the type variable whose bound isn't conformed to.
+// typedef FReturn<X extends num> = X Function();
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:25:17: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+//   FBoth<Object> fBothObject; // Error.
+//                 ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
+// typedef FBoth<X extends num> = X Function(X);
+//               ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:26:15: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// Try changing type arguments so that they conform to the bounds.
+//   FBoth<num?> fBothNumNullable; // Error.
+//               ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
+// typedef FBoth<X extends num> = X Function(X);
+//               ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:27:15: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// Try changing type arguments so that they conform to the bounds.
+//   FBoth<int?> fBothIntNullable; // Error.
+//               ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
+// typedef FBoth<X extends num> = X Function(X);
+//               ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:28:15: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FBoth'.
+// Try changing type arguments so that they conform to the bounds.
+//   FBoth<Null> fBothNull; // Error.
+//               ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:9:15: Context: This is the type variable whose bound isn't conformed to.
+// typedef FBoth<X extends num> = X Function(X);
+//               ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:29:20: Error: Type argument 'Object' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+//   FNowhere<Object> fNowhereObject; // Error.
+//                    ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
+// typedef FNowhere<X extends num> = Function();
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:30:18: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// Try changing type arguments so that they conform to the bounds.
+//   FNowhere<num?> fNowhereNumNullable; // Error.
+//                  ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
+// typedef FNowhere<X extends num> = Function();
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:31:18: Error: Type argument 'int?' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// Try changing type arguments so that they conform to the bounds.
+//   FNowhere<int?> fNowhereIntNullable; // Error.
+//                  ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
+// typedef FNowhere<X extends num> = Function();
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:32:18: Error: Type argument 'Null' doesn't conform to the bound 'num' of the type variable 'X' on 'FNowhere'.
+// Try changing type arguments so that they conform to the bounds.
+//   FNowhere<Null> fNowhereNull; // Error.
+//                  ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:10:18: Context: This is the type variable whose bound isn't conformed to.
+// typedef FNowhere<X extends num> = Function();
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:33:22: Error: Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<Object?> fArgumentObjectNullable; // Error.
+//                      ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:34:22: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<dynamic> fArgumentDynamic; // Error.
+//                      ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:35:19: Error: Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<void> fArgumentVoid; // Error.
+//                   ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef FArgument<contravariant X extends core::num> = (X) → dynamic;
+typedef FReturn<X extends core::num> = () → X;
+typedef FBoth<invariant X extends core::num> = (X) → X;
+typedef FNowhere<unrelated X extends core::num> = () → dynamic;
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
+    : super core::Object::•()
+    ;
+}
+static method foo() → dynamic {
+  self::A<core::Object> aObject;
+  self::A<core::num?> aNumNullable;
+  self::A<core::int?> aIntNullable;
+  self::A<Null> aNull;
+  (core::Object) → dynamic fArgumentObject;
+  (core::num?) → dynamic fArgumentNumNullable;
+  (core::int?) → dynamic fArgumentIntNullable;
+  (Null) → dynamic fArgumentNull;
+  () → core::Object fReturnObject;
+  () → core::num? fReturnNumNullable;
+  () → core::int? fReturnIntNullable;
+  () → Null fReturnNull;
+  (core::Object) → core::Object fBothObject;
+  (core::num?) → core::num? fBothNumNullable;
+  (core::int?) → core::int? fBothIntNullable;
+  (Null) → Null fBothNull;
+  () → dynamic fNowhereObject;
+  () → dynamic fNowhereNumNullable;
+  () → dynamic fNowhereIntNullable;
+  () → dynamic fNowhereNull;
+  (core::Object?) → dynamic fArgumentObjectNullable;
+  (dynamic) → dynamic fArgumentDynamic;
+  (void) → dynamic fArgumentVoid;
+  self::A<core::Object?> aObjectNullable;
+  self::A<dynamic> aDynamic;
+  self::A<void> aVoid;
+  self::A<core::num> aNum;
+  self::A<core::int> aInt;
+  self::A<Never> aNever;
+  (core::num) → dynamic fArgumentNum;
+  (core::int) → dynamic fArgumentInt;
+  (Never) → dynamic fArgumentNever;
+  () → core::Object? fReturnObjectNullable;
+  () → dynamic fReturnDynamic;
+  () → void fReturnVoid;
+  () → core::num fReturnNum;
+  () → core::int fReturnInt;
+  () → Never fReturnNever;
+  (core::Object?) → core::Object? fBothObjectNullable;
+  (dynamic) → dynamic fBothDynamic;
+  (void) → void fBothVoid;
+  (core::num) → core::num fBothNum;
+  (core::int) → core::int fBothInt;
+  (Never) → Never fBothNever;
+  () → dynamic fNowhereObjectNullable;
+  () → dynamic fNowhereDynamic;
+  () → dynamic fNowhereVoid;
+  () → dynamic fNowhereNum;
+  () → dynamic fNowhereInt;
+  () → dynamic fNowhereNever;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.modular.expect
new file mode 100644
index 0000000..b570b8b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef Test<contravariant T extends self::X> = (T?) → dynamic;
+class X extends core::Object {
+  synthetic constructor •() → self::X
+    : super core::Object::•()
+    ;
+}
+static method checkme<T extends self::X>(self::checkme::T? t) → dynamic {}
+static method main() → dynamic {
+  (self::X?) → dynamic t2 = #C2;
+}
+
+constants  {
+  #C1 = static-tearoff self::checkme
+  #C2 = instantiation #C1 <self::X*>
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42434.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42434.dart.weak.modular.expect
new file mode 100644
index 0000000..e263ad8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42434.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue42434.dart:7:21: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>' of the type variable 'X' on 'A'.
+//  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
+//  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue42434.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef AAlias<X> = Function<X1 extends A<X>> ();
+//                     ^
+// pkg/front_end/testcases/nnbd/issue42434.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef AAlias<invariant X extends core::Object? = dynamic> = <X1 extends self::A<X%> = dynamic>() → dynamic;
+class A<X extends self::A<self::A::X> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.modular.expect
new file mode 100644
index 0000000..88588f6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42434_2.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue42434_2.dart:5:21: Error: Type argument 'X/*1*/' doesn't conform to the bound 'B<X/*2*/>' of the type variable 'X' on 'A'.
+//  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
+//  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue42434_2.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef AAlias<X> = Function<X1 extends A<X>> ();
+//                     ^
+// pkg/front_end/testcases/nnbd/issue42434_2.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef A<X extends B<X>> = Function();
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef AAlias<unrelated X extends core::Object? = dynamic> = <X1 extends () → dynamic = dynamic>() → dynamic;
+typedef A<unrelated X extends self::B<X> = self::B<dynamic>> = () → dynamic;
+class B<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42459.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42459.dart.weak.modular.expect
new file mode 100644
index 0000000..fe7ca67
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42459.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue42459.dart:10:7: Error: A value must be explicitly returned from a non-void function.
+//       return;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test() → dynamic {
+  (dynamic x) → core::int? {
+    if(x as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+      return 1;
+    }
+    else {
+      return invalid-expression "pkg/front_end/testcases/nnbd/issue42459.dart:10:7: Error: A value must be explicitly returned from a non-void function.
+      return;
+      ^" in null;
+    }
+  };
+  function local(dynamic x) → void {
+    if(x as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+      return core::print("");
+    }
+    else {
+      return;
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42504.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42504.dart.weak.modular.expect
new file mode 100644
index 0000000..62138bc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42504.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class ImageStreamCompleter extends core::Object {
+  synthetic constructor •() → self::ImageStreamCompleter
+    : super core::Object::•()
+    ;
+  abstract method addListener() → void;
+}
+class _LiveImage extends core::Object {
+  static factory •(self::ImageStreamCompleter a) → self::_LiveImage
+    return throw new core::UnimplementedError::•();
+}
+abstract class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+  abstract get _pendingImages() → dynamic;
+  method putIfAbsent(core::Object key, () → self::ImageStreamCompleter loader) → self::ImageStreamCompleter? {
+    assert(!(key == null));
+    assert(!(loader == null));
+    self::ImageStreamCompleter? result = (let final dynamic #t1 = this.{self::Foo::_pendingImages}{dynamic}{dynamic}.[](key) in #t1 == null ?{dynamic} null : #t1{dynamic}.completer) as{TypeError,ForDynamic,ForNonNullableByDefault} self::ImageStreamCompleter?;
+    if(!(result == null)) {
+      return result{self::ImageStreamCompleter};
+    }
+    try {
+      result = loader(){() → self::ImageStreamCompleter};
+      self::_LiveImage::•(result{self::ImageStreamCompleter});
+    }
+    on core::Object catch(final core::Object error) {
+      return null;
+    }
+    result{self::ImageStreamCompleter}.{self::ImageStreamCompleter::addListener}(){() → void};
+    return result{self::ImageStreamCompleter};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.modular.expect
new file mode 100644
index 0000000..aaf931d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+static method getNull() → dynamic
+  return null;
+static method fn() → asy::Future<core::Object> async {
+  core::Object o = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object;
+  return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object>;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.modular.expect
new file mode 100644
index 0000000..8563b46
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+//  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
+//  - 'Future' is from 'dart:async'.
+//   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
+//                                                          ^
+//
+// pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
+//  - 'Future' is from 'dart:async'.
+//  - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
+//   Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
+//                                                                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class Divergent<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>> {
+  synthetic constructor •() → self::Divergent<self::Divergent::T%>
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation invocation) → dynamic
+    return super.{core::Object::noSuchMethod}(invocation);
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
+    return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 0, #C3, #C12, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
+}
+static method test() → dynamic async {
+  asy::Future<self::Divergent<self::Divergent<core::int>>> x = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
+ - 'Future' is from 'dart:async'.
+ - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
+  Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
+                                                                          ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async => invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+ - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
+ - 'Future' is from 'dart:async'.
+  Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
+                                                         ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>)(){() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>} as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = #catchError
+  #C3 = <core::Type*>[]
+  #C4 = #test
+  #C5 = #whenComplete
+  #C6 = <core::Symbol*, dynamic>{)
+  #C7 = #timeout
+  #C8 = #onTimeout
+  #C9 = #then
+  #C10 = #onError
+  #C11 = #asStream
+  #C12 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42579.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42579.dart.weak.modular.expect
new file mode 100644
index 0000000..6ee7128
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42579.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+}
+static method foo<S extends core::Object? = dynamic>() → self::foo::S%
+  return throw "foo";
+static method bar<R extends core::Object? = dynamic>(self::A<self::bar::R%> a) → dynamic {}
+static method baz() → dynamic
+  return self::bar<core::Object?>(self::foo<self::A<core::Object?>>());
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.modular.expect
new file mode 100644
index 0000000..7b83456
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42579_2.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue42579_2.dart:19:32: Error: The method 'unknown' isn't defined for the class 'Object'.
+//  - 'Object' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
+//   wrap2(() => foo()..property?.unknown());
+//                                ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  get property() → self::A::T%
+    return throw "A.property";
+}
+static method foo<S extends core::Object? = dynamic>() → self::foo::S%
+  return throw "foo";
+static method wrap<R extends core::Object? = dynamic>(() → self::wrap::R% f) → dynamic {}
+static method wrap2<R extends core::Object? = dynamic>(() → self::A<self::wrap2::R%> f) → dynamic {}
+static method bar() → dynamic {
+  new self::A::•<dynamic>().{self::A::property}{dynamic}{dynamic}.unknown();
+  self::foo<dynamic>(){dynamic}.unknown();
+  self::wrap<dynamic>(() → dynamic => let final dynamic #t1 = self::foo<dynamic>() in block {
+    #t1{dynamic}.unknown();
+  } =>#t1);
+  self::wrap2<core::Object?>(() → self::A<core::Object?> => let final self::A<core::Object?> #t2 = self::foo<self::A<core::Object?>>() in block {
+    let final core::Object? #t3 = #t2.{self::A::property}{core::Object?} in #t3 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_2.dart:19:32: Error: The method 'unknown' isn't defined for the class 'Object'.
+ - 'Object' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
+  wrap2(() => foo()..property?.unknown());
+                               ^^^^^^^" in #t3{core::Object}{<unresolved>}.unknown();
+  } =>#t2);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.modular.expect
new file mode 100644
index 0000000..2763847
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42579_3.dart.weak.modular.expect
@@ -0,0 +1,56 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue42579_3.dart:16:25: Error: The method 'unknown' isn't defined for the class 'Object'.
+//  - 'Object' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
+//   foo(() => B()..y1[0]?.unknown());
+//                         ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue42579_3.dart:17:25: Error: The method 'unknown' isn't defined for the class 'Object'.
+//  - 'Object' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
+//   foo(() => B()..y2[0]?.unknown());
+//                         ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class B<Y1 extends core::Object? = dynamic, Y2 extends core::List<self::B::Y3%> = core::List<dynamic>, Y3 extends core::Object? = dynamic> extends self::A<self::B::Y1%> {
+  synthetic constructor •() → self::B<self::B::Y1%, self::B::Y2, self::B::Y3%>
+    : super self::A::•()
+    ;
+  get y1() → self::B::Y1%
+    return throw "B.y1";
+  get y2() → self::B::Y2
+    return throw "B.y2";
+  get y3() → self::B::Y3%
+    return throw "B.y3";
+}
+static method foo<Z extends core::Object? = dynamic>(() → self::A<core::List<self::foo::Z%>> f) → dynamic {}
+static method bar() → dynamic {
+  self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t1 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
+    let final core::Object? #t2 = #t1.{self::B::y1}{core::List<core::Object?>}.{core::List::[]}(0){(core::int) → core::Object?} in #t2 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:16:25: Error: The method 'unknown' isn't defined for the class 'Object'.
+ - 'Object' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
+  foo(() => B()..y1[0]?.unknown());
+                        ^^^^^^^" in #t2{core::Object}{<unresolved>}.unknown();
+  } =>#t1);
+  self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t3 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
+    let final core::Object? #t4 = #t3.{self::B::y2}{core::List<core::Object?>}.{core::List::[]}(0){(core::int) → core::Object?} in #t4 == null ?{dynamic} null : invalid-expression "pkg/front_end/testcases/nnbd/issue42579_3.dart:17:25: Error: The method 'unknown' isn't defined for the class 'Object'.
+ - 'Object' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'unknown'.
+  foo(() => B()..y2[0]?.unknown());
+                        ^^^^^^^" in #t4{core::Object}{<unresolved>}.unknown();
+  } =>#t3);
+  self::foo<core::Object?>(() → self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> => let final self::B<core::List<core::Object?>, core::List<core::Object?>, dynamic> #t5 = new self::B::•<core::List<core::Object?>, core::List<core::Object?>, dynamic>() in block {
+    let final dynamic #t6 = #t5.{self::B::y3}{dynamic} in #t6 == null ?{dynamic} null : #t6{dynamic}.unknown();
+  } =>#t5);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42603.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42603.dart.weak.modular.expect
new file mode 100644
index 0000000..1717f29
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42603.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue42603.dart:18:17: Error: Operator '==' should have exactly one parameter.
+//   bool operator ==() => true;
+//                 ^^
+//
+// pkg/front_end/testcases/nnbd/issue42603.dart:18:17: Error: The method 'E.==' has fewer positional arguments than those of overridden method 'Object.=='.
+//   bool operator ==() => true;
+//                 ^
+// sdk/lib/_internal/vm/lib/object_patch.dart:29:26: Context: This is the overridden method ('==').
+//   external bool operator ==(Object other);
+//                          ^
+//
+// pkg/front_end/testcases/nnbd/issue42603.dart:22:17: Error: The method 'F.==' has more required arguments than those of overridden method 'E.=='.
+//   bool operator ==(Object? other) => super == other;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue42603.dart:18:17: Context: This is the overridden method ('==').
+//   bool operator ==() => true;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/issue42603.dart:22:44: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   bool operator ==(Object? other) => super == other;
+//                                            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  operator ==(core::Object other) → core::bool
+    return true;
+}
+class D extends self::C {
+  synthetic constructor •() → self::D
+    : super self::C::•()
+    ;
+  operator ==(core::Object? other) → core::bool
+    return super.{self::C::==}(other);
+  method method1(dynamic o) → core::bool
+    return super.{self::C::==}(o);
+  method method2(Null o) → core::bool
+    return super.{self::C::==}(o);
+}
+class E extends core::Object {
+  synthetic constructor •() → self::E
+    : super core::Object::•()
+    ;
+  operator ==() → core::bool
+    return true;
+}
+class F extends self::E {
+  synthetic constructor •() → self::F
+    : super self::E::•()
+    ;
+  operator ==(core::Object? other) → core::bool
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue42603.dart:22:44: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  bool operator ==(Object? other) => super == other;
+                                           ^" in super.{self::E::==}(other);
+}
+static method main() → dynamic {
+  self::expect(true, new self::D::•() =={self::D::==}{(core::Object?) → core::bool} new self::D::•());
+  self::expect(false, new self::D::•().{self::D::method1}(null){(dynamic) → core::bool});
+  self::expect(false, new self::D::•().{self::D::method2}(null){(Null) → core::bool});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42607.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42607.dart.weak.modular.expect
new file mode 100644
index 0000000..47b797f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42607.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method test() → dynamic {
+  core::int* x = 3;
+  let final core::int* #t1 = x in #t1 == null ?{core::bool*} null : #t1.{core::int::isEven}{core::bool*};
+  x = null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.modular.expect
new file mode 100644
index 0000000..3e6d749
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static method main() → dynamic async {
+  core::bool b = (() → core::bool => true)(){() → core::bool};
+  (dynamic _) → core::int? {
+    if(b)
+      return 42;
+  };
+  (dynamic _) → asy::Future<core::int?> async {
+    if(b)
+      return 42;
+  };
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42758.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42758.dart.weak.modular.expect
new file mode 100644
index 0000000..7478ccc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42758.dart.weak.modular.expect
@@ -0,0 +1,290 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:7:17: Warning: Operand of null-aware operation '...?' has type 'Never' which excludes null.
+//   var l2 = [...?n1];
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:8:16: Error: Can't spread a value with static type 'Never?'.
+//   var l3 = [...n2];
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:10:16: Error: Can't spread a value with static type 'Null'.
+//   var l5 = [...n3];
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:13:17: Warning: Operand of null-aware operation '...?' has type 'Never' which excludes null.
+//   var s2 = {...?n1, n1};
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:14:16: Error: Can't spread a value with static type 'Never?'.
+//   var s3 = {...n2, n1};
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:16:16: Error: Can't spread a value with static type 'Null'.
+//   var s5 = {...n3, n1};
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:19:17: Warning: Operand of null-aware operation '...?' has type 'Never' which excludes null.
+//   var m2 = {...?n1, n1: n1};
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:20:16: Error: Can't spread a value with static type 'Never?'.
+//   var m3 = {...n2, n1: n1};
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:22:16: Error: Can't spread a value with static type 'Null'.
+//   var m5 = {...n3, n1: n1};
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:29:17: Warning: Operand of null-aware operation '...?' has type 'N1' which excludes null.
+//   var l2 = [...?n1];
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:30:16: Error: Can't spread a value with static type 'N2'.
+//   var l3 = [...n2];
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:32:16: Error: Can't spread a value with static type 'N3'.
+//   var l5 = [...n3];
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:35:17: Warning: Operand of null-aware operation '...?' has type 'N1' which excludes null.
+//   var s2 = {...?n1, n1};
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:36:16: Error: Can't spread a value with static type 'N2'.
+//   var s3 = {...n2, n1};
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:38:16: Error: Can't spread a value with static type 'N3'.
+//   var s5 = {...n3, n1};
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:41:17: Warning: Operand of null-aware operation '...?' has type 'N1' which excludes null.
+//   var m2 = {...?n1, n1: n1};
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:42:16: Error: Can't spread a value with static type 'N2'.
+//   var m3 = {...n2, n1: n1};
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue42758.dart:44:16: Error: Can't spread a value with static type 'N3'.
+//   var m5 = {...n3, n1: n1};
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+import "dart:collection" as col;
+
+static method test1(Never n1, Never? n2, Null n3) → dynamic {
+  core::List<Never> l1 = block {
+    final core::List<Never> #t1 = core::List::of<Never>(let final Never #t2 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+  } =>#t1;
+  core::List<Never> l2 = block {
+    final core::List<Never> #t3 = <Never>[];
+    final core::Iterable<Never>? #t4 = let final Never #t5 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    if(!(#t4 == null))
+      #t3.{core::List::addAll}{Invariant}(#t4{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+  } =>#t3;
+  core::List<dynamic> l3 = <dynamic>[invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:8:16: Error: Can't spread a value with static type 'Never?'.
+  var l3 = [...n2];
+               ^"];
+  core::List<Never> l4 = block {
+    final core::List<Never> #t6 = <Never>[];
+    final core::Iterable<Never>? #t7 = n2;
+    if(!(#t7 == null))
+      #t6.{core::List::addAll}{Invariant}(#t7{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+  } =>#t6;
+  core::List<dynamic> l5 = <dynamic>[invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:10:16: Error: Can't spread a value with static type 'Null'.
+  var l5 = [...n3];
+               ^"];
+  core::List<Never> l6 = block {
+    final core::List<Never> #t8 = <Never>[];
+    final core::Iterable<Never>? #t9 = n3;
+    if(!(#t9 == null))
+      #t8.{core::List::addAll}{Invariant}(#t9{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+  } =>#t8;
+  core::Set<Never> s1 = block {
+    final core::Set<Never> #t10 = col::LinkedHashSet::of<Never>(let final Never #t11 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    #t10.{core::Set::add}{Invariant}(let final Never #t12 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never) → core::bool};
+  } =>#t10;
+  core::Set<Never> s2 = block {
+    final core::Set<Never> #t13 = col::LinkedHashSet::•<Never>();
+    final core::Iterable<Never>? #t14 = let final Never #t15 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    if(!(#t14 == null))
+      #t13.{core::Set::addAll}{Invariant}(#t14{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+    #t13.{core::Set::add}{Invariant}(let final Never #t16 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never) → core::bool};
+  } =>#t13;
+  core::Set<dynamic> s3 = block {
+    final core::Set<dynamic> #t17 = col::LinkedHashSet::•<dynamic>();
+    #t17.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:14:16: Error: Can't spread a value with static type 'Never?'.
+  var s3 = {...n2, n1};
+               ^"){(dynamic) → core::bool};
+    #t17.{core::Set::add}{Invariant}(let final Never #t18 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(dynamic) → core::bool};
+  } =>#t17;
+  core::Set<Never> s4 = block {
+    final core::Set<Never> #t19 = col::LinkedHashSet::•<Never>();
+    final core::Iterable<Never>? #t20 = n2;
+    if(!(#t20 == null))
+      #t19.{core::Set::addAll}{Invariant}(#t20{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+    #t19.{core::Set::add}{Invariant}(let final Never #t21 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never) → core::bool};
+  } =>#t19;
+  core::Set<dynamic> s5 = block {
+    final core::Set<dynamic> #t22 = col::LinkedHashSet::•<dynamic>();
+    #t22.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:16:16: Error: Can't spread a value with static type 'Null'.
+  var s5 = {...n3, n1};
+               ^"){(dynamic) → core::bool};
+    #t22.{core::Set::add}{Invariant}(let final Never #t23 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(dynamic) → core::bool};
+  } =>#t22;
+  core::Set<Never> s6 = block {
+    final core::Set<Never> #t24 = col::LinkedHashSet::•<Never>();
+    final core::Iterable<Never>? #t25 = n3;
+    if(!(#t25 == null))
+      #t24.{core::Set::addAll}{Invariant}(#t25{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+    #t24.{core::Set::add}{Invariant}(let final Never #t26 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never) → core::bool};
+  } =>#t24;
+  core::Map<Never, Never> m1 = block {
+    final core::Map<Never, Never> #t27 = <Never, Never>{};
+    for (final core::MapEntry<Never, Never> #t28 in (let final Never #t29 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+      #t27.{core::Map::[]=}{Invariant}(#t28.{core::MapEntry::key}{Never}, #t28.{core::MapEntry::value}{Never}){(Never, Never) → void};
+    #t27.{core::Map::[]=}{Invariant}(let final Never #t30 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t31 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
+  } =>#t27;
+  core::Map<Never, Never> m2 = block {
+    final core::Map<Never, Never> #t32 = <Never, Never>{};
+    final core::Map<Never, Never>? #t33 = let final Never #t34 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    if(!(#t33 == null))
+      for (final core::MapEntry<Never, Never> #t35 in #t33{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+        #t32.{core::Map::[]=}{Invariant}(#t35.{core::MapEntry::key}{Never}, #t35.{core::MapEntry::value}{Never}){(Never, Never) → void};
+    #t32.{core::Map::[]=}{Invariant}(let final Never #t36 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t37 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
+  } =>#t32;
+  core::Map<dynamic, dynamic> m3 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:20:16: Error: Can't spread a value with static type 'Never?'.
+  var m3 = {...n2, n1: n1};
+               ^": null, let final Never #t38 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."): let final Never #t39 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")};
+  core::Map<Never, Never> m4 = block {
+    final core::Map<Never, Never> #t40 = <Never, Never>{};
+    final core::Map<Never, Never>? #t41 = n2;
+    if(!(#t41 == null))
+      for (final core::MapEntry<Never, Never> #t42 in #t41{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+        #t40.{core::Map::[]=}{Invariant}(#t42.{core::MapEntry::key}{Never}, #t42.{core::MapEntry::value}{Never}){(Never, Never) → void};
+    #t40.{core::Map::[]=}{Invariant}(let final Never #t43 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t44 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
+  } =>#t40;
+  core::Map<dynamic, dynamic> m5 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:22:16: Error: Can't spread a value with static type 'Null'.
+  var m5 = {...n3, n1: n1};
+               ^": null, let final Never #t45 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."): let final Never #t46 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")};
+  core::Map<Never, Never> m6 = block {
+    final core::Map<Never, Never> #t47 = <Never, Never>{};
+    final core::Map<Never, Never>? #t48 = n3;
+    if(!(#t48 == null))
+      for (final core::MapEntry<Never, Never> #t49 in #t48{core::Map<Never, Never>}.{core::Map::entries}{core::Iterable<core::MapEntry<Never, Never>>})
+        #t47.{core::Map::[]=}{Invariant}(#t49.{core::MapEntry::key}{Never}, #t49.{core::MapEntry::value}{Never}){(Never, Never) → void};
+    #t47.{core::Map::[]=}{Invariant}(let final Never #t50 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final Never #t51 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(Never, Never) → void};
+  } =>#t47;
+}
+static method test2<N1 extends Never, N2 extends Never?, N3 extends Null>(self::test2::N1 n1, self::test2::N2% n2, self::test2::N3% n3) → dynamic {
+  core::List<Never> l1 = block {
+    final core::List<Never> #t52 = core::List::of<Never>(let final self::test2::N1 #t53 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+  } =>#t52;
+  core::List<Never> l2 = block {
+    final core::List<Never> #t54 = <Never>[];
+    final core::Iterable<Never>? #t55 = let final self::test2::N1 #t56 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    if(!(#t55 == null))
+      #t54.{core::List::addAll}{Invariant}(#t55{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+  } =>#t54;
+  core::List<dynamic> l3 = <dynamic>[invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:30:16: Error: Can't spread a value with static type 'N2'.
+  var l3 = [...n2];
+               ^"];
+  core::List<Never> l4 = block {
+    final core::List<Never> #t57 = <Never>[];
+    final core::Iterable<Never>? #t58 = n2;
+    if(!(#t58 == null))
+      #t57.{core::List::addAll}{Invariant}(#t58{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+  } =>#t57;
+  core::List<dynamic> l5 = <dynamic>[invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:32:16: Error: Can't spread a value with static type 'N3'.
+  var l5 = [...n3];
+               ^"];
+  core::List<Never> l6 = block {
+    final core::List<Never> #t59 = <Never>[];
+    final core::Iterable<Never>? #t60 = n3;
+    if(!(#t60 == null))
+      #t59.{core::List::addAll}{Invariant}(#t60{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+  } =>#t59;
+  core::Set<self::test2::N1> s1 = block {
+    final core::Set<self::test2::N1> #t61 = col::LinkedHashSet::of<self::test2::N1>(let final self::test2::N1 #t62 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+    #t61.{core::Set::add}{Invariant}(let final self::test2::N1 #t63 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1) → core::bool};
+  } =>#t61;
+  core::Set<self::test2::N1> s2 = block {
+    final core::Set<self::test2::N1> #t64 = col::LinkedHashSet::•<self::test2::N1>();
+    final core::Iterable<self::test2::N1>? #t65 = let final self::test2::N1 #t66 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    if(!(#t65 == null))
+      #t64.{core::Set::addAll}{Invariant}(#t65{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
+    #t64.{core::Set::add}{Invariant}(let final self::test2::N1 #t67 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1) → core::bool};
+  } =>#t64;
+  core::Set<dynamic> s3 = block {
+    final core::Set<dynamic> #t68 = col::LinkedHashSet::•<dynamic>();
+    #t68.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:36:16: Error: Can't spread a value with static type 'N2'.
+  var s3 = {...n2, n1};
+               ^"){(dynamic) → core::bool};
+    #t68.{core::Set::add}{Invariant}(let final self::test2::N1 #t69 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(dynamic) → core::bool};
+  } =>#t68;
+  core::Set<self::test2::N1> s4 = block {
+    final core::Set<self::test2::N1> #t70 = col::LinkedHashSet::•<self::test2::N1>();
+    final core::Iterable<self::test2::N1>? #t71 = n2;
+    if(!(#t71 == null))
+      #t70.{core::Set::addAll}{Invariant}(#t71{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
+    #t70.{core::Set::add}{Invariant}(let final self::test2::N1 #t72 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1) → core::bool};
+  } =>#t70;
+  core::Set<dynamic> s5 = block {
+    final core::Set<dynamic> #t73 = col::LinkedHashSet::•<dynamic>();
+    #t73.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:38:16: Error: Can't spread a value with static type 'N3'.
+  var s5 = {...n3, n1};
+               ^"){(dynamic) → core::bool};
+    #t73.{core::Set::add}{Invariant}(let final self::test2::N1 #t74 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(dynamic) → core::bool};
+  } =>#t73;
+  core::Set<self::test2::N1> s6 = block {
+    final core::Set<self::test2::N1> #t75 = col::LinkedHashSet::•<self::test2::N1>();
+    final core::Iterable<self::test2::N1>? #t76 = n3;
+    if(!(#t76 == null))
+      #t75.{core::Set::addAll}{Invariant}(#t76{core::Iterable<self::test2::N1>}){(core::Iterable<self::test2::N1>) → void};
+    #t75.{core::Set::add}{Invariant}(let final self::test2::N1 #t77 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1) → core::bool};
+  } =>#t75;
+  core::Map<self::test2::N1, self::test2::N1> m1 = block {
+    final core::Map<self::test2::N1, self::test2::N1> #t78 = <self::test2::N1, self::test2::N1>{};
+    for (final core::MapEntry<self::test2::N1, self::test2::N1> #t79 in (let final self::test2::N1 #t80 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")).{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+      #t78.{core::Map::[]=}{Invariant}(#t79.{core::MapEntry::key}{self::test2::N1}, #t79.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
+    #t78.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t81 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t82 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
+  } =>#t78;
+  core::Map<self::test2::N1, self::test2::N1> m2 = block {
+    final core::Map<self::test2::N1, self::test2::N1> #t83 = <self::test2::N1, self::test2::N1>{};
+    final core::Map<self::test2::N1, self::test2::N1>? #t84 = let final self::test2::N1 #t85 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+    if(!(#t84 == null))
+      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t86 in #t84{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+        #t83.{core::Map::[]=}{Invariant}(#t86.{core::MapEntry::key}{self::test2::N1}, #t86.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
+    #t83.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t87 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t88 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
+  } =>#t83;
+  core::Map<dynamic, dynamic> m3 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:42:16: Error: Can't spread a value with static type 'N2'.
+  var m3 = {...n2, n1: n1};
+               ^": null, let final self::test2::N1 #t89 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."): let final self::test2::N1 #t90 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")};
+  core::Map<self::test2::N1, self::test2::N1> m4 = block {
+    final core::Map<self::test2::N1, self::test2::N1> #t91 = <self::test2::N1, self::test2::N1>{};
+    final core::Map<self::test2::N1, self::test2::N1>? #t92 = n2;
+    if(!(#t92 == null))
+      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t93 in #t92{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+        #t91.{core::Map::[]=}{Invariant}(#t93.{core::MapEntry::key}{self::test2::N1}, #t93.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
+    #t91.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t94 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t95 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
+  } =>#t91;
+  core::Map<dynamic, dynamic> m5 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/nnbd/issue42758.dart:44:16: Error: Can't spread a value with static type 'N3'.
+  var m5 = {...n3, n1: n1};
+               ^": null, let final self::test2::N1 #t96 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."): let final self::test2::N1 #t97 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")};
+  core::Map<self::test2::N1, self::test2::N1> m6 = block {
+    final core::Map<self::test2::N1, self::test2::N1> #t98 = <self::test2::N1, self::test2::N1>{};
+    final core::Map<self::test2::N1, self::test2::N1>? #t99 = n3;
+    if(!(#t99 == null))
+      for (final core::MapEntry<self::test2::N1, self::test2::N1> #t100 in #t99{core::Map<self::test2::N1, self::test2::N1>}.{core::Map::entries}{core::Iterable<core::MapEntry<self::test2::N1, self::test2::N1>>})
+        #t98.{core::Map::[]=}{Invariant}(#t100.{core::MapEntry::key}{self::test2::N1}, #t100.{core::MapEntry::value}{self::test2::N1}){(self::test2::N1, self::test2::N1) → void};
+    #t98.{core::Map::[]=}{Invariant}(let final self::test2::N1 #t101 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."), let final self::test2::N1 #t102 = n1 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){(self::test2::N1, self::test2::N1) → void};
+  } =>#t98;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.modular.expect
new file mode 100644
index 0000000..2637180
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42844_1.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue42844_1.dart:6:9: Error: Field 'n' should be initialized because its type 'Never' doesn't allow null.
+//   Never n; // Error.
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field Never n = null;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •(Never n) → self::C
+    return new self::D::•(n);
+}
+class D extends core::Object implements self::C {
+  field Never n;
+  constructor •(Never n) → self::D
+    : self::D::n = n, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.modular.expect
new file mode 100644
index 0000000..d84e75e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42844_2.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue42844_2.dart:6:17: Error: Final field 'n' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final dynamic n; // Error.
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  final field dynamic n = null;
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •(dynamic n) → self::C
+    return new self::D::•(n);
+}
+class D extends core::Object implements self::C {
+  final field dynamic n;
+  constructor •(dynamic n) → self::D
+    : self::D::n = n, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue42967.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue42967.dart.weak.modular.expect
new file mode 100644
index 0000000..3995dbf
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue42967.dart.weak.modular.expect
@@ -0,0 +1,86 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue42967.dart:7:7: Error: Field 'fieldNonNullableOfA' should be initialized because its type 'num' doesn't allow null.
+//   num fieldNonNullableOfA; // Error.
+//       ^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue42967.dart:10:17: Error: Final field 'fieldFinalDynamicOfA' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final dynamic fieldFinalDynamicOfA; // Error.
+//                 ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue42967.dart:26:7: Error: Field 'fieldNonNullableOfB' should be initialized because its type 'num' doesn't allow null.
+//   num fieldNonNullableOfB; // Error.
+//       ^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue42967.dart:29:17: Error: Final field 'fieldFinalDynamicOfB' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final dynamic fieldFinalDynamicOfB; // Error.
+//                 ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue42967.dart:45:7: Error: Field 'fieldNonNullableOfM' should be initialized because its type 'num' doesn't allow null.
+//   num fieldNonNullableOfM; // Error.
+//       ^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue42967.dart:50:17: Error: Final field 'fieldFinalDynamicOfM' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final dynamic fieldFinalDynamicOfM; // Error.
+//                 ^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::num fieldNonNullableOfA = null;
+  late field core::num fieldLateNonNullableOfA;
+  final field dynamic fieldFinalDynamicOfA = null;
+  late final [setter] field dynamic fieldLateFinalDynamicOfA;
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractA extends core::Object {
+  synthetic constructor •() → self::AbstractA
+    : super core::Object::•()
+    ;
+  external get fieldExternalNonNullableOfAbstractA() → core::num;
+  external set fieldExternalNonNullableOfAbstractA(core::num #externalFieldValue) → void;
+  abstract get fieldAbstractNonNullableOfAbstractA() → core::num;
+  abstract set fieldAbstractNonNullableOfAbstractA(core::num #externalFieldValue) → void;
+  external get fieldExternalFinalDynamicOfAbstractA() → dynamic;
+  abstract get fieldAbstractFinalDynamicOfAbstractA() → dynamic;
+}
+class B extends core::Object {
+  field core::num fieldNonNullableOfB = null;
+  late field core::num fieldLateNonNullableOfB;
+  final field dynamic fieldFinalDynamicOfB = null;
+  late final [setter] field dynamic fieldLateFinalDynamicOfB;
+  static factory •() → self::B
+    return throw 42;
+}
+abstract class AbstractB extends core::Object {
+  synthetic constructor •() → self::AbstractB
+    : super core::Object::•()
+    ;
+  external get fieldExternalNonNullableOfAbstractB() → core::num;
+  external set fieldExternalNonNullableOfAbstractB(core::num #externalFieldValue) → void;
+  abstract get fieldAbstractNonNullableOfAbstractB() → core::num;
+  abstract set fieldAbstractNonNullableOfAbstractB(core::num #externalFieldValue) → void;
+  external get fieldExternalFinalDynamicOfAbstractB() → dynamic;
+  abstract get fieldAbstractFinalDynamicOfAbstractB() → dynamic;
+}
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+  field core::num fieldNonNullableOfM = null;
+  late field core::num fieldLateNonNullableOfM;
+  final field dynamic fieldFinalDynamicOfM = null;
+  late final [setter] field dynamic fieldLateFinalDynamicOfM;
+  external get fieldExternalNonNullableOfM() → core::num;
+  external set fieldExternalNonNullableOfM(core::num #externalFieldValue) → void;
+  abstract get fieldAbstractNonNullableOfM() → core::num;
+  abstract set fieldAbstractNonNullableOfM(core::num #externalFieldValue) → void;
+  external get fieldExternalFinalDynamicOfM() → dynamic;
+  abstract get fieldAbstractFinalDynamicOfM() → dynamic;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43174.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43174.dart.weak.modular.expect
new file mode 100644
index 0000000..2bc396c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43174.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue43174.dart:17:12: Error: Can't return a value from a void function.
+//     return 42; // error
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method method(() → void f) → dynamic {
+  f(){() → void};
+}
+static method method2(() → FutureOr<void>f) → dynamic {
+  f(){() → FutureOr<void>};
+}
+static method test() → dynamic {
+  self::method(() → void {
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue43174.dart:17:12: Error: Can't return a value from a void function.
+    return 42; // error
+           ^" in 42;
+  });
+  self::method2(() → core::int {
+    return 42;
+  });
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43211.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.modular.expect
new file mode 100644
index 0000000..46f6782
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43211.dart.weak.modular.expect
@@ -0,0 +1,265 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:10:53: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Y>?>(A<Y> a, A<A<Null>>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:15:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:21:39: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A'.
+//  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// extension ext2<X extends A<Null>?> on A<X> {}
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:23:7: Error: Type argument 'X/*1*/' doesn't conform to the bound 'A<X/*2*/>?' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+//  - 'X/*1*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+//  - 'X/*2*/' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class B<X extends A<Null>?> implements A<X> {
+//       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:41: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                         ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:24:56: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method1<Y extends A<Null>?>(A<Y> a, A<A<Null>>? b) {
+//                                                        ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:39: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                       ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:29:53: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//   void method2<Y extends String>(D<Y> a, D<String>? b) {
+//                                                     ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:36:34: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   factory C.redirect(A<A<Null>>? a) = C.internal;
+//                                  ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:38:30: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   factory C.fact(A<A<Null>>? a) {
+//                              ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:12:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? d;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:16:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<Y>? c;
+//           ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:17:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? d;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:25:11: Error: Type argument 'Y' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<Y>? c;
+//           ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:26:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? d;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:30:11: Error: Type argument 'Y' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<Y>? c;
+//           ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:31:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? d;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:39:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? b;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:40:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? c;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:45:17: Error: Type argument 'A<Null>' doesn't conform to the bound 'A<X>?' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43211.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//     A<A<Null>>? a;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>?> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43211.dart:46:16: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'X' on 'D'.
+// Try changing type arguments so that they conform to the bounds.
+//     D<String>? b;
+//                ^
+// pkg/front_end/testcases/nnbd/issue43211.dart:7:9: Context: This is the type variable whose bound isn't conformed to.
+// class D<X extends num> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends self::A<self::A::X%>? = self::A<dynamic>?> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class D<X extends core::num> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X>
+    : super core::Object::•()
+    ;
+}
+class B<X extends self::A<Null>?> extends core::Object implements self::A<self::B::X%> {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super core::Object::•()
+    ;
+  method method1<Y extends self::A<Null>?>(self::A<self::B::method1::Y%> a, self::A<self::A<Null>>? b) → void {
+    self::A<self::B::method1::Y%>? c;
+    self::A<self::A<Null>>? d;
+  }
+  method method2<Y extends core::String>(self::D<self::B::method2::Y> a, self::D<core::String>? b) → void {
+    self::D<self::B::method2::Y>? c;
+    self::D<core::String>? d;
+  }
+}
+class C extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor internal(dynamic _) → self::C
+    : super core::Object::•() {
+    self::A<self::A<Null>>? a;
+    self::D<core::String>? b;
+  }
+  static factory redirect(self::A<self::A<Null>>? a) → self::C
+    return new self::C::internal(a);
+  static factory fact(self::A<self::A<Null>>? a) → self::C {
+    self::A<self::A<Null>>? b;
+    self::D<core::String>? c;
+    return new self::C::internal(a);
+  }
+}
+extension Extension1<X extends self::A<X%>? = self::A<dynamic>?> on self::A<X%> {
+  method method1 = self::Extension1|method1;
+  tearoff method1 = self::Extension1|get#method1;
+  method method2 = self::Extension1|method2;
+  tearoff method2 = self::Extension1|get#method2;
+}
+extension ext2<X extends self::A<Null>?> on self::A<X%> {
+}
+static method Extension1|method1<X extends self::A<self::Extension1|method1::X%>? = self::A<dynamic>?, Y extends self::A<self::Extension1|method1::Y%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|method1::X%> #this, self::A<self::Extension1|method1::Y%> a, self::A<self::A<Null>>? b) → void {
+  self::A<self::Extension1|method1::Y%>? c;
+  self::A<self::A<Null>>? d;
+}
+static method Extension1|get#method1<X extends self::A<self::Extension1|get#method1::X%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|get#method1::X%> #this) → <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%>, self::A<self::A<Null>>?) → void
+  return <Y extends self::A<Y%>? = self::A<dynamic>?>(self::A<Y%> a, self::A<self::A<Null>>? b) → void => self::Extension1|method1<self::Extension1|get#method1::X%, Y%>(#this, a, b);
+static method Extension1|method2<X extends self::A<self::Extension1|method2::X%>? = self::A<dynamic>?, Y extends core::String>(lowered final self::A<self::Extension1|method2::X%> #this, self::D<self::Extension1|method2::Y> a, self::D<core::String>? b) → void {
+  self::D<self::Extension1|method2::Y>? c;
+  self::D<core::String>? d;
+}
+static method Extension1|get#method2<X extends self::A<self::Extension1|get#method2::X%>? = self::A<dynamic>?>(lowered final self::A<self::Extension1|get#method2::X%> #this) → <Y extends core::String>(self::D<Y>, self::D<core::String>?) → void
+  return <Y extends core::String>(self::D<Y> a, self::D<core::String>? b) → void => self::Extension1|method2<self::Extension1|get#method2::X%, Y>(#this, a, b);
+static method test() → dynamic {
+  self::A<Null> a = new self::A::•<Null>();
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::redirect
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43256.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43256.dart.weak.modular.expect
new file mode 100644
index 0000000..097a586
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43256.dart.weak.modular.expect
@@ -0,0 +1,142 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue43256.dart:16:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//   if (i > 0) ...nullableMap, // error
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/issue43256.dart:23:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//   if (i > 0) ...nullableList, // error
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/issue43256.dart:29:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//   if (i > 0) ...nullableList, // error
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/issue43256.dart:37:19: Error: Unexpected type 'X' of a map spread entry.  Expected 'dynamic' or a Map.
+//     if (i > 0) ...x, // error
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue43256.dart:38:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     if (i > 0) ...y, // error
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue43256.dart:48:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     if (i > 0) ...x, // error
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue43256.dart:48:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
+//     if (i > 0) ...x, // error
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue43256.dart:49:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     if (i > 0) ...y, // error
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue43256.dart:53:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     if (i > 0) ...x, // error
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue43256.dart:53:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
+//     if (i > 0) ...x, // error
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue43256.dart:54:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     if (i > 0) ...y, // error
+//                   ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static field core::int i = 1;
+static field core::Map<core::int, core::String>? nullableMap = <core::int, core::String>{1: "Let", 2: "it", 3: "be"};
+static field core::List<core::int>? nullableList = <core::int>[1, 2, 3];
+static field dynamic dynamicMap = <core::int, core::String>{1: "Let", 2: "it", 3: "be"};
+static field dynamic dynamicList = <core::int>[1, 2, 3];
+static field core::Map<dynamic, dynamic> map1 = block {
+  final core::Map<dynamic, dynamic> #t1 = <dynamic, dynamic>{};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t1.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:16:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  if (i > 0) ...nullableMap, // error
+                ^", null){(dynamic, dynamic) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    for (final core::MapEntry<dynamic, dynamic> #t2 in (self::dynamicMap as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    for (final core::MapEntry<dynamic, dynamic> #t3 in self::nullableMap!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t1.{core::Map::[]=}{Invariant}(#t3.{core::MapEntry::key}{dynamic}, #t3.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+} =>#t1;
+static field core::Set<dynamic> set1 = block {
+  final core::Set<dynamic> #t4 = col::LinkedHashSet::•<dynamic>();
+  #t4.{core::Set::add}{Invariant}(0){(dynamic) → core::bool};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t4.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:23:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  if (i > 0) ...nullableList, // error
+                ^"){(dynamic) → core::bool};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t4.{core::Set::addAll}{Invariant}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t4.{core::Set::addAll}{Invariant}(self::nullableList!){(core::Iterable<dynamic>) → void};
+} =>#t4;
+static field core::List<dynamic> list1 = block {
+  final core::List<dynamic> #t5 = <dynamic>[];
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t5.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:29:17: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+  if (i > 0) ...nullableList, // error
+                ^"){(dynamic) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t5.{core::List::addAll}{Invariant}(self::dynamicList as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+  if(self::i.{core::num::>}(0){(core::num) → core::bool})
+    #t5.{core::List::addAll}{Invariant}(self::nullableList!){(core::Iterable<dynamic>) → void};
+} =>#t5;
+static method testMap<X extends dynamic, Y extends core::Map<core::int, core::String>?, Z extends core::Map<core::int, core::String>>(self::testMap::X% x, self::testMap::Y% y, self::testMap::Z z) → dynamic {
+  core::Map<dynamic, dynamic> map2 = block {
+    final core::Map<dynamic, dynamic> #t6 = <dynamic, dynamic>{};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t6.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:37:19: Error: Unexpected type 'X' of a map spread entry.  Expected 'dynamic' or a Map.
+    if (i > 0) ...x, // error
+                  ^", null){(dynamic, dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t6.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:38:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    if (i > 0) ...y, // error
+                  ^", null){(dynamic, dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      for (final core::MapEntry<dynamic, dynamic> #t7 in z.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+        #t6.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      for (final core::MapEntry<dynamic, dynamic> #t8 in y!.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+        #t6.{core::Map::[]=}{Invariant}(#t8.{core::MapEntry::key}{dynamic}, #t8.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+  } =>#t6;
+}
+static method testIterables<X extends dynamic, Y extends core::List<core::int>?, Z extends core::List<core::int>>(self::testIterables::X% x, self::testIterables::Y% y, self::testIterables::Z z) → dynamic {
+  core::Set<dynamic> set2 = block {
+    final core::Set<dynamic> #t9 = col::LinkedHashSet::•<dynamic>();
+    #t9.{core::Set::add}{Invariant}(0){(dynamic) → core::bool};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t9.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:48:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
+    if (i > 0) ...x, // error
+                  ^"){(dynamic) → core::bool};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t9.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:49:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    if (i > 0) ...y, // error
+                  ^"){(dynamic) → core::bool};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t9.{core::Set::addAll}{Invariant}(z){(core::Iterable<dynamic>) → void};
+  } =>#t9;
+  core::List<dynamic> list2 = block {
+    final core::List<dynamic> #t10 = <dynamic>[];
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t10.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:53:19: Error: Unexpected type 'X' of a spread.  Expected 'dynamic' or an Iterable.
+    if (i > 0) ...x, // error
+                  ^"){(dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t10.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43256.dart:54:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    if (i > 0) ...y, // error
+                  ^"){(dynamic) → void};
+    if(self::i.{core::num::>}(0){(core::num) → core::bool})
+      #t10.{core::List::addAll}{Invariant}(z){(core::Iterable<dynamic>) → void};
+  } =>#t10;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43276.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.modular.expect
new file mode 100644
index 0000000..6fe128e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43276.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue43276.dart:6:14: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   C.gen({int i}); // error
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue43276.dart:8:23: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   factory C.fact({int i}) /* error */ {
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor gen({core::int i = #C2}) → self::C
+    : super core::Object::•()
+    ;
+  static factory fact({core::int i = #C2}) → self::C {
+    return new self::C::gen();
+  }
+  static factory redirect({core::int i = #C2}) → self::C
+    return new self::C::gen(i: i);
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C::redirect
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43278.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43278.dart.weak.modular.expect
new file mode 100644
index 0000000..c69ecec
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43278.dart.weak.modular.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
+// Try accessing using ?. instead.
+//   a.foo ??= x; // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
+// Try accessing using ?. instead.
+//   t.foo ??= x; // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
+// Try accessing using ?. instead.
+//   b.fooExtension ??= x; // Error.
+//     ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
+// Try accessing using ?. instead.
+//   t.fooExtension ??= x; // Error.
+//     ^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int? foo = null;
+  field self::A bar;
+  constructor •(self::A bar) → self::A
+    : self::A::bar = bar, super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+extension Extension on self::B {
+  get fooExtension = self::Extension|get#fooExtension;
+  get barExtension = self::Extension|get#barExtension;
+  set fooExtension = self::Extension|set#fooExtension;
+}
+static method test<T extends self::A?>(self::A? a, self::test::T% t, dynamic d, core::int x) → dynamic {
+  let final self::A? #t1 = a in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
+Try accessing using ?. instead.
+  a.foo ??= x; // Error.
+    ^^^" in #t1.{self::A::foo}{<nullable>}.{core::int?} == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:13:5: Error: Property 'foo' cannot be accessed on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
+Try accessing using ?. instead.
+  a.foo ??= x; // Error.
+    ^^^" in #t1.{self::A::foo}{<nullable>}. = x : null;
+  let final self::test::T% #t2 = t in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
+Try accessing using ?. instead.
+  t.foo ??= x; // Error.
+    ^^^" in #t2.{self::A::foo}{<nullable>}.{core::int?} == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:14:5: Error: Property 'foo' cannot be accessed on 'T' because it is potentially null.
+Try accessing using ?. instead.
+  t.foo ??= x; // Error.
+    ^^^" in #t2.{self::A::foo}{<nullable>}. = x : null;
+  let final dynamic #t3 = d in #t3{dynamic}.foo == null ?{dynamic} #t3{dynamic}.foo = x : null;
+  let final self::A? #t4 = a in #t4 == null ?{core::int?} null : let final self::A #t5 = #t4{self::A}.{self::A::bar}{self::A} in #t5.{self::A::foo}{core::int?} == null ?{core::int} #t5.{self::A::foo} = x : null;
+}
+static method Extension|get#fooExtension(lowered final self::B #this) → core::int?
+  return null;
+static method Extension|set#fooExtension(lowered final self::B #this, core::int? value) → void {}
+static method Extension|get#barExtension(lowered final self::B #this) → self::B
+  return new self::B::•();
+static method testExtension<T extends self::B?>(self::B? b, self::testExtension::T% t, core::int x) → dynamic {
+  let final self::B? #t6 = b in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
+Try accessing using ?. instead.
+  b.fooExtension ??= x; // Error.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t6) == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:28:5: Error: Property 'fooExtension' cannot be accessed on 'B?' because it is potentially null.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/issue43278.dart'.
+Try accessing using ?. instead.
+  b.fooExtension ??= x; // Error.
+    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t6, x) : null;
+  let final self::testExtension::T% #t7 = t in invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
+Try accessing using ?. instead.
+  t.fooExtension ??= x; // Error.
+    ^^^^^^^^^^^^" in self::Extension|get#fooExtension(#t7) == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/issue43278.dart:29:5: Error: Property 'fooExtension' cannot be accessed on 'T' because it is potentially null.
+Try accessing using ?. instead.
+  t.fooExtension ??= x; // Error.
+    ^^^^^^^^^^^^" in self::Extension|set#fooExtension(#t7, x) : null;
+  let final self::B? #t8 = b in #t8 == null ?{core::int?} null : let final self::B #t9 = self::Extension|get#barExtension(#t8{self::B}) in self::Extension|get#fooExtension(#t9) == null ?{core::int} self::Extension|set#fooExtension(#t9, x) : null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43354.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43354.dart.weak.modular.expect
new file mode 100644
index 0000000..b068885
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43354.dart.weak.modular.expect
@@ -0,0 +1,82 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue43354.dart:8:18: Error: Can't have a late final field in a class with a const constructor.
+//   late final int foo = 42;
+//                  ^
+// pkg/front_end/testcases/nnbd/issue43354.dart:9:9: Context: This constructor is const.
+//   const A();
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43354.dart:13:18: Error: Can't have a late final field in a class with a const constructor.
+//   late final int foo = 42;
+//                  ^
+// pkg/front_end/testcases/nnbd/issue43354.dart:15:9: Context: This constructor is const.
+//   const B();
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43354.dart:14:21: Error: Can't have a late final field in a class with a const constructor.
+//   late final String bar = "foobar";
+//                     ^
+// pkg/front_end/testcases/nnbd/issue43354.dart:15:9: Context: This constructor is const.
+//   const B();
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43354.dart:19:18: Error: Can't have a late final field in a class with a const constructor.
+//   late final int foo = 42;
+//                  ^
+// pkg/front_end/testcases/nnbd/issue43354.dart:20:9: Context: This constructor is const.
+//   const C();
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43354.dart:25:18: Error: Can't have a late final field in a class with a const constructor.
+//   late final int foo = 42;
+//                  ^
+// pkg/front_end/testcases/nnbd/issue43354.dart:27:9: Context: This constructor is const.
+//   const D();
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43354.dart:26:21: Error: Can't have a late final field in a class with a const constructor.
+//   late final String bar = "foobar";
+//                     ^
+// pkg/front_end/testcases/nnbd/issue43354.dart:27:9: Context: This constructor is const.
+//   const D();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  late final field core::int foo = 42;
+  const constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object /*hasConstConstructor*/  {
+  late final field core::int foo = 42;
+  late final field core::String bar = "foobar";
+  const constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object /*hasConstConstructor*/  {
+  late final field core::int foo = 42;
+  const constructor •() → self::C
+    : super core::Object::•()
+    ;
+  const constructor another() → self::C
+    : super core::Object::•()
+    ;
+}
+class D extends core::Object /*hasConstConstructor*/  {
+  late final field core::int foo = 42;
+  late final field core::String bar = "foobar";
+  const constructor •() → self::D
+    : super core::Object::•()
+    ;
+  const constructor another() → self::D
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43455.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43455.dart.weak.modular.expect
new file mode 100644
index 0000000..2815e55
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43455.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+class C<X extends core::Object?, Y extends core::Object> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y>
+    : super core::Object::•()
+    ;
+  method test(covariant-by-class self::C::X% x, covariant-by-class self::C::Y? y) → dynamic {
+    core::Set<core::Object?> v = block {
+      final core::Set<core::Object?> #t1 = col::LinkedHashSet::•<core::Object?>();
+      #t1.{core::Set::add}{Invariant}(x){(core::Object?) → core::bool};
+      #t1.{core::Set::add}{Invariant}(42){(core::Object?) → core::bool};
+    } =>#t1;
+    core::Set<core::Object?> w = block {
+      final core::Set<core::Object?> #t2 = col::LinkedHashSet::•<core::Object?>();
+      #t2.{core::Set::add}{Invariant}(42){(core::Object?) → core::bool};
+      #t2.{core::Set::add}{Invariant}(x){(core::Object?) → core::bool};
+    } =>#t2;
+    core::Set<core::Object?> p = block {
+      final core::Set<core::Object?> #t3 = col::LinkedHashSet::•<core::Object?>();
+      #t3.{core::Set::add}{Invariant}(y){(core::Object?) → core::bool};
+      #t3.{core::Set::add}{Invariant}(42){(core::Object?) → core::bool};
+    } =>#t3;
+    core::Set<core::Object?> q = block {
+      final core::Set<core::Object?> #t4 = col::LinkedHashSet::•<core::Object?>();
+      #t4.{core::Set::add}{Invariant}(42){(core::Object?) → core::bool};
+      #t4.{core::Set::add}{Invariant}(y){(core::Object?) → core::bool};
+    } =>#t4;
+    self::assertRightSubtype(v);
+    self::assertLeftSubtype<core::Set<core::Object?>>(v);
+    self::assertRightSubtype(w);
+    self::assertLeftSubtype<core::Set<core::Object?>>(w);
+    self::assertRightSubtype(p);
+    self::assertLeftSubtype<core::Set<core::Object?>>(p);
+    self::assertRightSubtype(q);
+    self::assertLeftSubtype<core::Set<core::Object?>>(q);
+    if(x is{ForNonNullableByDefault} core::Object?) {
+      core::Set<core::Object?> v = block {
+        final core::Set<core::Object?> #t5 = col::LinkedHashSet::•<core::Object?>();
+        #t5.{core::Set::add}{Invariant}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */}){(core::Object?) → core::bool};
+        #t5.{core::Set::add}{Invariant}(42){(core::Object?) → core::bool};
+      } =>#t5;
+      core::Set<core::Object?> w = block {
+        final core::Set<core::Object?> #t6 = col::LinkedHashSet::•<core::Object?>();
+        #t6.{core::Set::add}{Invariant}(42){(core::Object?) → core::bool};
+        #t6.{core::Set::add}{Invariant}(x{self::C::X% & core::Object? /* '%' & '?' = '%' */}){(core::Object?) → core::bool};
+      } =>#t6;
+      self::assertRightSubtype(v);
+      self::assertLeftSubtype<core::Set<core::Object?>>(v);
+      self::assertRightSubtype(w);
+      self::assertLeftSubtype<core::Set<core::Object?>>(w);
+    }
+  }
+}
+static method assertRightSubtype(dynamic x) → dynamic {
+  x as{ForNonNullableByDefault} core::Set<core::Object?>;
+}
+static method assertLeftSubtype<X extends core::Object? = dynamic>(self::assertLeftSubtype::X% x) → dynamic {
+  col::LinkedHashSet::•<core::Object?>() as{ForNonNullableByDefault} self::assertLeftSubtype::X%;
+}
+static method main() → dynamic {
+  new self::C::•<core::int?, core::int>().{self::C::test}(42, null){(core::int?, core::int?) → dynamic};
+  new self::C::•<core::int?, core::int>().{self::C::test}(null, null){(core::int?, core::int?) → dynamic};
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43495.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43495.dart.weak.modular.expect
new file mode 100644
index 0000000..e415041
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43495.dart.weak.modular.expect
@@ -0,0 +1,731 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:8:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {...a}, // Error.
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:9:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {...b}, // Error.
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:10:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {...c}, // Error.
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:11:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {...d}, // Error.
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:12:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     <int, int>{...a}, // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:12:19: Error: Unexpected type 'List<int>?' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//     <int, int>{...a}, // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:13:14: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     <int>{...d}, // Error.
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:13:14: Error: Unexpected type 'Map<int, int>?' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//     <int>{...d}, // Error.
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:14:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {if (condition) ...a}, // Error.
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:15:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {if (condition) ...b}, // Error.
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:16:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {if (condition) ...c}, // Error.
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:17:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {if (condition) ...d}, // Error.
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:18:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {for (dynamic e in iterable) ...a}, // Error.
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:19:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {for (dynamic e in iterable) ...b}, // Error.
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:20:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {for (dynamic e in iterable) ...c}, // Error.
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:21:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {for (dynamic e in iterable) ...d}, // Error.
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {for (int i = 0; i < 42; ++i) ...a}, // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {for (int i = 0; i < 42; ++i) ...b}, // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {for (int i = 0; i < 42; ++i) ...c}, // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:25:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {for (int i = 0; i < 42; ++i) ...d}, // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:50:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {...x}, // Error.
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:51:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {...y}, // Error.
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:52:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {...z}, // Error.
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:53:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {...w}, // Error.
+//         ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:54:19: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     <int, int>{...x}, // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:54:19: Error: Unexpected type 'X' of a map spread entry.  Expected 'dynamic' or a Map.
+//     <int, int>{...x}, // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:55:14: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     <int>{...w}, // Error.
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:55:14: Error: Unexpected type 'W' of a spread.  Expected 'dynamic' or an Iterable.
+//     <int>{...w}, // Error.
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:56:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {if (condition) ...x}, // Error.
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:57:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {if (condition) ...y}, // Error.
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:58:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {if (condition) ...z}, // Error.
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:59:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {if (condition) ...w}, // Error.
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:60:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {for (dynamic e in iterable) ...x}, // Error.
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:61:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {for (dynamic e in iterable) ...y}, // Error.
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:62:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {for (dynamic e in iterable) ...z}, // Error.
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:63:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {for (dynamic e in iterable) ...w}, // Error.
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {for (int i = 0; i < 42; ++i) ...x}, // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {for (int i = 0; i < 42; ++i) ...y}, // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {for (int i = 0; i < 42; ++i) ...z}, // Error.
+//                                      ^
+//
+// pkg/front_end/testcases/nnbd/issue43495.dart:67:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+//     {for (int i = 0; i < 42; ++i) ...w}, // Error.
+//                                      ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method foo(core::bool condition, core::Iterable<dynamic> iterable, core::List<core::int>? a, core::Set<core::int>? b, core::Iterable<core::int>? c, core::Map<core::int, core::int>? d) → dynamic {
+  return <core::Object>[ block {
+    final core::Set<core::int> #t1 = col::LinkedHashSet::•<core::int>();
+    for (final dynamic #t2 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:8:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {...a}, // Error.
+        ^") {
+      final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
+      #t1.{core::Set::add}{Invariant}(#t3){(core::int) → core::bool};
+    }
+  } =>#t1, block {
+    final core::Set<core::int> #t4 = col::LinkedHashSet::•<core::int>();
+    for (final dynamic #t5 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:9:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {...b}, // Error.
+        ^") {
+      final core::int #t6 = #t5 as{TypeError,ForNonNullableByDefault} core::int;
+      #t4.{core::Set::add}{Invariant}(#t6){(core::int) → core::bool};
+    }
+  } =>#t4, block {
+    final core::Set<core::int> #t7 = col::LinkedHashSet::•<core::int>();
+    for (final dynamic #t8 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:10:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {...c}, // Error.
+        ^") {
+      final core::int #t9 = #t8 as{TypeError,ForNonNullableByDefault} core::int;
+      #t7.{core::Set::add}{Invariant}(#t9){(core::int) → core::bool};
+    }
+  } =>#t7, <core::int, core::int>{invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:11:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {...d}, // Error.
+        ^": null}, <core::int, core::int>{invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:12:19: Error: Unexpected type 'List<int>?' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+    <int, int>{...a}, // Error.
+                  ^": null}, block {
+    final core::Set<core::int> #t10 = col::LinkedHashSet::•<core::int>();
+    #t10.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:13:14: Error: Unexpected type 'Map<int, int>?' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+    <int>{...d}, // Error.
+             ^"){(core::int) → core::bool};
+  } =>#t10, block {
+    final core::Set<core::int> #t11 = col::LinkedHashSet::•<core::int>();
+    if(condition)
+      for (final dynamic #t12 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:14:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {if (condition) ...a}, // Error.
+                       ^") {
+        final core::int #t13 = #t12 as{TypeError,ForNonNullableByDefault} core::int;
+        #t11.{core::Set::add}{Invariant}(#t13){(core::int) → core::bool};
+      }
+  } =>#t11, block {
+    final core::Set<core::int> #t14 = col::LinkedHashSet::•<core::int>();
+    if(condition)
+      for (final dynamic #t15 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:15:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {if (condition) ...b}, // Error.
+                       ^") {
+        final core::int #t16 = #t15 as{TypeError,ForNonNullableByDefault} core::int;
+        #t14.{core::Set::add}{Invariant}(#t16){(core::int) → core::bool};
+      }
+  } =>#t14, block {
+    final core::Set<core::int> #t17 = col::LinkedHashSet::•<core::int>();
+    if(condition)
+      for (final dynamic #t18 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:16:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {if (condition) ...c}, // Error.
+                       ^") {
+        final core::int #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::int;
+        #t17.{core::Set::add}{Invariant}(#t19){(core::int) → core::bool};
+      }
+  } =>#t17, block {
+    final core::Map<core::int, core::int> #t20 = <core::int, core::int>{};
+    if(condition)
+      #t20.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:17:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {if (condition) ...d}, // Error.
+                       ^", null){(core::int, core::int) → void};
+  } =>#t20, block {
+    final core::Set<core::int> #t21 = col::LinkedHashSet::•<core::int>();
+    for (dynamic e in iterable)
+      for (final dynamic #t22 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:18:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {for (dynamic e in iterable) ...a}, // Error.
+                                    ^") {
+        final core::int #t23 = #t22 as{TypeError,ForNonNullableByDefault} core::int;
+        #t21.{core::Set::add}{Invariant}(#t23){(core::int) → core::bool};
+      }
+  } =>#t21, block {
+    final core::Set<core::int> #t24 = col::LinkedHashSet::•<core::int>();
+    for (dynamic e in iterable)
+      for (final dynamic #t25 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:19:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {for (dynamic e in iterable) ...b}, // Error.
+                                    ^") {
+        final core::int #t26 = #t25 as{TypeError,ForNonNullableByDefault} core::int;
+        #t24.{core::Set::add}{Invariant}(#t26){(core::int) → core::bool};
+      }
+  } =>#t24, block {
+    final core::Set<core::int> #t27 = col::LinkedHashSet::•<core::int>();
+    for (dynamic e in iterable)
+      for (final dynamic #t28 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:20:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {for (dynamic e in iterable) ...c}, // Error.
+                                    ^") {
+        final core::int #t29 = #t28 as{TypeError,ForNonNullableByDefault} core::int;
+        #t27.{core::Set::add}{Invariant}(#t29){(core::int) → core::bool};
+      }
+  } =>#t27, block {
+    final core::Map<core::int, core::int> #t30 = <core::int, core::int>{};
+    for (dynamic e in iterable)
+      #t30.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:21:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {for (dynamic e in iterable) ...d}, // Error.
+                                    ^", null){(core::int, core::int) → void};
+  } =>#t30, block {
+    final core::Set<core::int> #t31 = col::LinkedHashSet::•<core::int>();
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      for (final dynamic #t32 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:22:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {for (int i = 0; i < 42; ++i) ...a}, // Error.
+                                     ^") {
+        final core::int #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::int;
+        #t31.{core::Set::add}{Invariant}(#t33){(core::int) → core::bool};
+      }
+  } =>#t31, block {
+    final core::Set<core::int> #t34 = col::LinkedHashSet::•<core::int>();
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      for (final dynamic #t35 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:23:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {for (int i = 0; i < 42; ++i) ...b}, // Error.
+                                     ^") {
+        final core::int #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::int;
+        #t34.{core::Set::add}{Invariant}(#t36){(core::int) → core::bool};
+      }
+  } =>#t34, block {
+    final core::Set<core::int> #t37 = col::LinkedHashSet::•<core::int>();
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      for (final dynamic #t38 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:24:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {for (int i = 0; i < 42; ++i) ...c}, // Error.
+                                     ^") {
+        final core::int #t39 = #t38 as{TypeError,ForNonNullableByDefault} core::int;
+        #t37.{core::Set::add}{Invariant}(#t39){(core::int) → core::bool};
+      }
+  } =>#t37, block {
+    final core::Map<core::int, core::int> #t40 = <core::int, core::int>{};
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t40.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:25:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {for (int i = 0; i < 42; ++i) ...d}, // Error.
+                                     ^", null){(core::int, core::int) → void};
+  } =>#t40, block {
+    final core::Set<core::int> #t41 = col::LinkedHashSet::•<core::int>();
+    final core::Iterable<dynamic>? #t42 = a;
+    if(!(#t42 == null))
+      for (final dynamic #t43 in #t42{core::Iterable<dynamic>}) {
+        final core::int #t44 = #t43 as{TypeError,ForNonNullableByDefault} core::int;
+        #t41.{core::Set::add}{Invariant}(#t44){(core::int) → core::bool};
+      }
+  } =>#t41, block {
+    final core::Set<core::int> #t45 = col::LinkedHashSet::•<core::int>();
+    final core::Iterable<dynamic>? #t46 = b;
+    if(!(#t46 == null))
+      for (final dynamic #t47 in #t46{core::Iterable<dynamic>}) {
+        final core::int #t48 = #t47 as{TypeError,ForNonNullableByDefault} core::int;
+        #t45.{core::Set::add}{Invariant}(#t48){(core::int) → core::bool};
+      }
+  } =>#t45, block {
+    final core::Set<core::int> #t49 = col::LinkedHashSet::•<core::int>();
+    final core::Iterable<dynamic>? #t50 = c;
+    if(!(#t50 == null))
+      for (final dynamic #t51 in #t50{core::Iterable<dynamic>}) {
+        final core::int #t52 = #t51 as{TypeError,ForNonNullableByDefault} core::int;
+        #t49.{core::Set::add}{Invariant}(#t52){(core::int) → core::bool};
+      }
+  } =>#t49, block {
+    final core::Map<core::int, core::int> #t53 = <core::int, core::int>{};
+    final core::Map<core::int, core::int>? #t54 = d;
+    if(!(#t54 == null))
+      for (final core::MapEntry<core::int, core::int> #t55 in #t54{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t53.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}{core::int}, #t55.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+  } =>#t53, block {
+    final core::Set<core::int> #t56 = col::LinkedHashSet::•<core::int>();
+    if(condition) {
+      final core::Iterable<dynamic>? #t57 = a;
+      if(!(#t57 == null))
+        for (final dynamic #t58 in #t57{core::Iterable<dynamic>}) {
+          final core::int #t59 = #t58 as{TypeError,ForNonNullableByDefault} core::int;
+          #t56.{core::Set::add}{Invariant}(#t59){(core::int) → core::bool};
+        }
+    }
+  } =>#t56, block {
+    final core::Set<core::int> #t60 = col::LinkedHashSet::•<core::int>();
+    if(condition) {
+      final core::Iterable<dynamic>? #t61 = b;
+      if(!(#t61 == null))
+        for (final dynamic #t62 in #t61{core::Iterable<dynamic>}) {
+          final core::int #t63 = #t62 as{TypeError,ForNonNullableByDefault} core::int;
+          #t60.{core::Set::add}{Invariant}(#t63){(core::int) → core::bool};
+        }
+    }
+  } =>#t60, block {
+    final core::Set<core::int> #t64 = col::LinkedHashSet::•<core::int>();
+    if(condition) {
+      final core::Iterable<dynamic>? #t65 = c;
+      if(!(#t65 == null))
+        for (final dynamic #t66 in #t65{core::Iterable<dynamic>}) {
+          final core::int #t67 = #t66 as{TypeError,ForNonNullableByDefault} core::int;
+          #t64.{core::Set::add}{Invariant}(#t67){(core::int) → core::bool};
+        }
+    }
+  } =>#t64, block {
+    final core::Map<core::int, core::int> #t68 = <core::int, core::int>{};
+    if(condition) {
+      final core::Map<core::int, core::int>? #t69 = d;
+      if(!(#t69 == null))
+        for (final core::MapEntry<core::int, core::int> #t70 in #t69{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t68.{core::Map::[]=}{Invariant}(#t70.{core::MapEntry::key}{core::int}, #t70.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    }
+  } =>#t68, block {
+    final core::Set<core::int> #t71 = col::LinkedHashSet::•<core::int>();
+    for (dynamic e in iterable) {
+      final core::Iterable<dynamic>? #t72 = a;
+      if(!(#t72 == null))
+        for (final dynamic #t73 in #t72{core::Iterable<dynamic>}) {
+          final core::int #t74 = #t73 as{TypeError,ForNonNullableByDefault} core::int;
+          #t71.{core::Set::add}{Invariant}(#t74){(core::int) → core::bool};
+        }
+    }
+  } =>#t71, block {
+    final core::Set<core::int> #t75 = col::LinkedHashSet::•<core::int>();
+    for (dynamic e in iterable) {
+      final core::Iterable<dynamic>? #t76 = b;
+      if(!(#t76 == null))
+        for (final dynamic #t77 in #t76{core::Iterable<dynamic>}) {
+          final core::int #t78 = #t77 as{TypeError,ForNonNullableByDefault} core::int;
+          #t75.{core::Set::add}{Invariant}(#t78){(core::int) → core::bool};
+        }
+    }
+  } =>#t75, block {
+    final core::Set<core::int> #t79 = col::LinkedHashSet::•<core::int>();
+    for (dynamic e in iterable) {
+      final core::Iterable<dynamic>? #t80 = c;
+      if(!(#t80 == null))
+        for (final dynamic #t81 in #t80{core::Iterable<dynamic>}) {
+          final core::int #t82 = #t81 as{TypeError,ForNonNullableByDefault} core::int;
+          #t79.{core::Set::add}{Invariant}(#t82){(core::int) → core::bool};
+        }
+    }
+  } =>#t79, block {
+    final core::Map<core::int, core::int> #t83 = <core::int, core::int>{};
+    for (dynamic e in iterable) {
+      final core::Map<core::int, core::int>? #t84 = d;
+      if(!(#t84 == null))
+        for (final core::MapEntry<core::int, core::int> #t85 in #t84{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t83.{core::Map::[]=}{Invariant}(#t85.{core::MapEntry::key}{core::int}, #t85.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    }
+  } =>#t83, block {
+    final core::Set<core::int> #t86 = col::LinkedHashSet::•<core::int>();
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      final core::Iterable<dynamic>? #t87 = a;
+      if(!(#t87 == null))
+        for (final dynamic #t88 in #t87{core::Iterable<dynamic>}) {
+          final core::int #t89 = #t88 as{TypeError,ForNonNullableByDefault} core::int;
+          #t86.{core::Set::add}{Invariant}(#t89){(core::int) → core::bool};
+        }
+    }
+  } =>#t86, block {
+    final core::Set<core::int> #t90 = col::LinkedHashSet::•<core::int>();
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      final core::Iterable<dynamic>? #t91 = b;
+      if(!(#t91 == null))
+        for (final dynamic #t92 in #t91{core::Iterable<dynamic>}) {
+          final core::int #t93 = #t92 as{TypeError,ForNonNullableByDefault} core::int;
+          #t90.{core::Set::add}{Invariant}(#t93){(core::int) → core::bool};
+        }
+    }
+  } =>#t90, block {
+    final core::Set<core::int> #t94 = col::LinkedHashSet::•<core::int>();
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      final core::Iterable<dynamic>? #t95 = c;
+      if(!(#t95 == null))
+        for (final dynamic #t96 in #t95{core::Iterable<dynamic>}) {
+          final core::int #t97 = #t96 as{TypeError,ForNonNullableByDefault} core::int;
+          #t94.{core::Set::add}{Invariant}(#t97){(core::int) → core::bool};
+        }
+    }
+  } =>#t94, block {
+    final core::Map<core::int, core::int> #t98 = <core::int, core::int>{};
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      final core::Map<core::int, core::int>? #t99 = d;
+      if(!(#t99 == null))
+        for (final core::MapEntry<core::int, core::int> #t100 in #t99{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t98.{core::Map::[]=}{Invariant}(#t100.{core::MapEntry::key}{core::int}, #t100.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    }
+  } =>#t98];
+}
+static method bar<X extends core::List<core::int>?, Y extends core::Set<core::int>?, Z extends core::Iterable<core::int>?, W extends core::Map<core::int, core::int>?>(core::bool condition, core::Iterable<dynamic> iterable, self::bar::X% x, self::bar::Y% y, self::bar::Z% z, self::bar::W% w) → dynamic {
+  return <core::Object>[ block {
+    final core::Set<core::int> #t101 = col::LinkedHashSet::•<core::int>();
+    for (final dynamic #t102 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:50:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {...x}, // Error.
+        ^") {
+      final core::int #t103 = #t102 as{TypeError,ForNonNullableByDefault} core::int;
+      #t101.{core::Set::add}{Invariant}(#t103){(core::int) → core::bool};
+    }
+  } =>#t101, block {
+    final core::Set<core::int> #t104 = col::LinkedHashSet::•<core::int>();
+    for (final dynamic #t105 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:51:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {...y}, // Error.
+        ^") {
+      final core::int #t106 = #t105 as{TypeError,ForNonNullableByDefault} core::int;
+      #t104.{core::Set::add}{Invariant}(#t106){(core::int) → core::bool};
+    }
+  } =>#t104, block {
+    final core::Set<core::int> #t107 = col::LinkedHashSet::•<core::int>();
+    for (final dynamic #t108 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:52:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {...z}, // Error.
+        ^") {
+      final core::int #t109 = #t108 as{TypeError,ForNonNullableByDefault} core::int;
+      #t107.{core::Set::add}{Invariant}(#t109){(core::int) → core::bool};
+    }
+  } =>#t107, <core::int, core::int>{invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:53:9: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {...w}, // Error.
+        ^": null}, <core::int, core::int>{invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:54:19: Error: Unexpected type 'X' of a map spread entry.  Expected 'dynamic' or a Map.
+    <int, int>{...x}, // Error.
+                  ^": null}, block {
+    final core::Set<core::int> #t110 = col::LinkedHashSet::•<core::int>();
+    #t110.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:55:14: Error: Unexpected type 'W' of a spread.  Expected 'dynamic' or an Iterable.
+    <int>{...w}, // Error.
+             ^"){(core::int) → core::bool};
+  } =>#t110, block {
+    final core::Set<core::int> #t111 = col::LinkedHashSet::•<core::int>();
+    if(condition)
+      for (final dynamic #t112 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:56:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {if (condition) ...x}, // Error.
+                       ^") {
+        final core::int #t113 = #t112 as{TypeError,ForNonNullableByDefault} core::int;
+        #t111.{core::Set::add}{Invariant}(#t113){(core::int) → core::bool};
+      }
+  } =>#t111, block {
+    final core::Set<core::int> #t114 = col::LinkedHashSet::•<core::int>();
+    if(condition)
+      for (final dynamic #t115 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:57:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {if (condition) ...y}, // Error.
+                       ^") {
+        final core::int #t116 = #t115 as{TypeError,ForNonNullableByDefault} core::int;
+        #t114.{core::Set::add}{Invariant}(#t116){(core::int) → core::bool};
+      }
+  } =>#t114, block {
+    final core::Set<core::int> #t117 = col::LinkedHashSet::•<core::int>();
+    if(condition)
+      for (final dynamic #t118 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:58:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {if (condition) ...z}, // Error.
+                       ^") {
+        final core::int #t119 = #t118 as{TypeError,ForNonNullableByDefault} core::int;
+        #t117.{core::Set::add}{Invariant}(#t119){(core::int) → core::bool};
+      }
+  } =>#t117, block {
+    final core::Map<core::int, core::int> #t120 = <core::int, core::int>{};
+    if(condition)
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:59:24: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {if (condition) ...w}, // Error.
+                       ^", null){(core::int, core::int) → void};
+  } =>#t120, block {
+    final core::Set<core::int> #t121 = col::LinkedHashSet::•<core::int>();
+    for (dynamic e in iterable)
+      for (final dynamic #t122 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:60:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {for (dynamic e in iterable) ...x}, // Error.
+                                    ^") {
+        final core::int #t123 = #t122 as{TypeError,ForNonNullableByDefault} core::int;
+        #t121.{core::Set::add}{Invariant}(#t123){(core::int) → core::bool};
+      }
+  } =>#t121, block {
+    final core::Set<core::int> #t124 = col::LinkedHashSet::•<core::int>();
+    for (dynamic e in iterable)
+      for (final dynamic #t125 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:61:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {for (dynamic e in iterable) ...y}, // Error.
+                                    ^") {
+        final core::int #t126 = #t125 as{TypeError,ForNonNullableByDefault} core::int;
+        #t124.{core::Set::add}{Invariant}(#t126){(core::int) → core::bool};
+      }
+  } =>#t124, block {
+    final core::Set<core::int> #t127 = col::LinkedHashSet::•<core::int>();
+    for (dynamic e in iterable)
+      for (final dynamic #t128 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:62:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {for (dynamic e in iterable) ...z}, // Error.
+                                    ^") {
+        final core::int #t129 = #t128 as{TypeError,ForNonNullableByDefault} core::int;
+        #t127.{core::Set::add}{Invariant}(#t129){(core::int) → core::bool};
+      }
+  } =>#t127, block {
+    final core::Map<core::int, core::int> #t130 = <core::int, core::int>{};
+    for (dynamic e in iterable)
+      #t130.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:63:37: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {for (dynamic e in iterable) ...w}, // Error.
+                                    ^", null){(core::int, core::int) → void};
+  } =>#t130, block {
+    final core::Set<core::int> #t131 = col::LinkedHashSet::•<core::int>();
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      for (final dynamic #t132 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:64:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {for (int i = 0; i < 42; ++i) ...x}, // Error.
+                                     ^") {
+        final core::int #t133 = #t132 as{TypeError,ForNonNullableByDefault} core::int;
+        #t131.{core::Set::add}{Invariant}(#t133){(core::int) → core::bool};
+      }
+  } =>#t131, block {
+    final core::Set<core::int> #t134 = col::LinkedHashSet::•<core::int>();
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      for (final dynamic #t135 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:65:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {for (int i = 0; i < 42; ++i) ...y}, // Error.
+                                     ^") {
+        final core::int #t136 = #t135 as{TypeError,ForNonNullableByDefault} core::int;
+        #t134.{core::Set::add}{Invariant}(#t136){(core::int) → core::bool};
+      }
+  } =>#t134, block {
+    final core::Set<core::int> #t137 = col::LinkedHashSet::•<core::int>();
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      for (final dynamic #t138 in invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:66:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {for (int i = 0; i < 42; ++i) ...z}, // Error.
+                                     ^") {
+        final core::int #t139 = #t138 as{TypeError,ForNonNullableByDefault} core::int;
+        #t137.{core::Set::add}{Invariant}(#t139){(core::int) → core::bool};
+      }
+  } =>#t137, block {
+    final core::Map<core::int, core::int> #t140 = <core::int, core::int>{};
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t140.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/nnbd/issue43495.dart:67:38: Error: An expression whose value can be 'null' must be null-checked before it can be dereferenced.
+    {for (int i = 0; i < 42; ++i) ...w}, // Error.
+                                     ^", null){(core::int, core::int) → void};
+  } =>#t140, block {
+    final core::Set<core::int> #t141 = col::LinkedHashSet::•<core::int>();
+    final core::Iterable<dynamic>? #t142 = x;
+    if(!(#t142 == null))
+      for (final dynamic #t143 in #t142{core::Iterable<dynamic>}) {
+        final core::int #t144 = #t143 as{TypeError,ForNonNullableByDefault} core::int;
+        #t141.{core::Set::add}{Invariant}(#t144){(core::int) → core::bool};
+      }
+  } =>#t141, block {
+    final core::Set<core::int> #t145 = col::LinkedHashSet::•<core::int>();
+    final core::Iterable<dynamic>? #t146 = y;
+    if(!(#t146 == null))
+      for (final dynamic #t147 in #t146{core::Iterable<dynamic>}) {
+        final core::int #t148 = #t147 as{TypeError,ForNonNullableByDefault} core::int;
+        #t145.{core::Set::add}{Invariant}(#t148){(core::int) → core::bool};
+      }
+  } =>#t145, block {
+    final core::Set<core::int> #t149 = col::LinkedHashSet::•<core::int>();
+    final core::Iterable<dynamic>? #t150 = z;
+    if(!(#t150 == null))
+      for (final dynamic #t151 in #t150{core::Iterable<dynamic>}) {
+        final core::int #t152 = #t151 as{TypeError,ForNonNullableByDefault} core::int;
+        #t149.{core::Set::add}{Invariant}(#t152){(core::int) → core::bool};
+      }
+  } =>#t149, block {
+    final core::Map<core::int, core::int> #t153 = <core::int, core::int>{};
+    final core::Map<core::int, core::int>? #t154 = w;
+    if(!(#t154 == null))
+      for (final core::MapEntry<core::int, core::int> #t155 in #t154{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t153.{core::Map::[]=}{Invariant}(#t155.{core::MapEntry::key}{core::int}, #t155.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+  } =>#t153, block {
+    final core::Set<core::int> #t156 = col::LinkedHashSet::•<core::int>();
+    if(condition) {
+      final core::Iterable<dynamic>? #t157 = x;
+      if(!(#t157 == null))
+        for (final dynamic #t158 in #t157{core::Iterable<dynamic>}) {
+          final core::int #t159 = #t158 as{TypeError,ForNonNullableByDefault} core::int;
+          #t156.{core::Set::add}{Invariant}(#t159){(core::int) → core::bool};
+        }
+    }
+  } =>#t156, block {
+    final core::Set<core::int> #t160 = col::LinkedHashSet::•<core::int>();
+    if(condition) {
+      final core::Iterable<dynamic>? #t161 = y;
+      if(!(#t161 == null))
+        for (final dynamic #t162 in #t161{core::Iterable<dynamic>}) {
+          final core::int #t163 = #t162 as{TypeError,ForNonNullableByDefault} core::int;
+          #t160.{core::Set::add}{Invariant}(#t163){(core::int) → core::bool};
+        }
+    }
+  } =>#t160, block {
+    final core::Set<core::int> #t164 = col::LinkedHashSet::•<core::int>();
+    if(condition) {
+      final core::Iterable<dynamic>? #t165 = z;
+      if(!(#t165 == null))
+        for (final dynamic #t166 in #t165{core::Iterable<dynamic>}) {
+          final core::int #t167 = #t166 as{TypeError,ForNonNullableByDefault} core::int;
+          #t164.{core::Set::add}{Invariant}(#t167){(core::int) → core::bool};
+        }
+    }
+  } =>#t164, block {
+    final core::Map<core::int, core::int> #t168 = <core::int, core::int>{};
+    if(condition) {
+      final core::Map<core::int, core::int>? #t169 = w;
+      if(!(#t169 == null))
+        for (final core::MapEntry<core::int, core::int> #t170 in #t169{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t168.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}{core::int}, #t170.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    }
+  } =>#t168, block {
+    final core::Set<core::int> #t171 = col::LinkedHashSet::•<core::int>();
+    for (dynamic e in iterable) {
+      final core::Iterable<dynamic>? #t172 = x;
+      if(!(#t172 == null))
+        for (final dynamic #t173 in #t172{core::Iterable<dynamic>}) {
+          final core::int #t174 = #t173 as{TypeError,ForNonNullableByDefault} core::int;
+          #t171.{core::Set::add}{Invariant}(#t174){(core::int) → core::bool};
+        }
+    }
+  } =>#t171, block {
+    final core::Set<core::int> #t175 = col::LinkedHashSet::•<core::int>();
+    for (dynamic e in iterable) {
+      final core::Iterable<dynamic>? #t176 = y;
+      if(!(#t176 == null))
+        for (final dynamic #t177 in #t176{core::Iterable<dynamic>}) {
+          final core::int #t178 = #t177 as{TypeError,ForNonNullableByDefault} core::int;
+          #t175.{core::Set::add}{Invariant}(#t178){(core::int) → core::bool};
+        }
+    }
+  } =>#t175, block {
+    final core::Set<core::int> #t179 = col::LinkedHashSet::•<core::int>();
+    for (dynamic e in iterable) {
+      final core::Iterable<dynamic>? #t180 = z;
+      if(!(#t180 == null))
+        for (final dynamic #t181 in #t180{core::Iterable<dynamic>}) {
+          final core::int #t182 = #t181 as{TypeError,ForNonNullableByDefault} core::int;
+          #t179.{core::Set::add}{Invariant}(#t182){(core::int) → core::bool};
+        }
+    }
+  } =>#t179, block {
+    final core::Map<core::int, core::int> #t183 = <core::int, core::int>{};
+    for (dynamic e in iterable) {
+      final core::Map<core::int, core::int>? #t184 = w;
+      if(!(#t184 == null))
+        for (final core::MapEntry<core::int, core::int> #t185 in #t184{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t183.{core::Map::[]=}{Invariant}(#t185.{core::MapEntry::key}{core::int}, #t185.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    }
+  } =>#t183, block {
+    final core::Set<core::int> #t186 = col::LinkedHashSet::•<core::int>();
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      final core::Iterable<dynamic>? #t187 = x;
+      if(!(#t187 == null))
+        for (final dynamic #t188 in #t187{core::Iterable<dynamic>}) {
+          final core::int #t189 = #t188 as{TypeError,ForNonNullableByDefault} core::int;
+          #t186.{core::Set::add}{Invariant}(#t189){(core::int) → core::bool};
+        }
+    }
+  } =>#t186, block {
+    final core::Set<core::int> #t190 = col::LinkedHashSet::•<core::int>();
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      final core::Iterable<dynamic>? #t191 = y;
+      if(!(#t191 == null))
+        for (final dynamic #t192 in #t191{core::Iterable<dynamic>}) {
+          final core::int #t193 = #t192 as{TypeError,ForNonNullableByDefault} core::int;
+          #t190.{core::Set::add}{Invariant}(#t193){(core::int) → core::bool};
+        }
+    }
+  } =>#t190, block {
+    final core::Set<core::int> #t194 = col::LinkedHashSet::•<core::int>();
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      final core::Iterable<dynamic>? #t195 = z;
+      if(!(#t195 == null))
+        for (final dynamic #t196 in #t195{core::Iterable<dynamic>}) {
+          final core::int #t197 = #t196 as{TypeError,ForNonNullableByDefault} core::int;
+          #t194.{core::Set::add}{Invariant}(#t197){(core::int) → core::bool};
+        }
+    }
+  } =>#t194, block {
+    final core::Map<core::int, core::int> #t198 = <core::int, core::int>{};
+    for (core::int i = 0; i.{core::num::<}(42){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      final core::Map<core::int, core::int>? #t199 = w;
+      if(!(#t199 == null))
+        for (final core::MapEntry<core::int, core::int> #t200 in #t199{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+          #t198.{core::Map::[]=}{Invariant}(#t200.{core::MapEntry::key}{core::int}, #t200.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    }
+  } =>#t198];
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43536.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43536.dart.weak.modular.expect
new file mode 100644
index 0000000..fc2321b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43536.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  method foo<covariant-by-class E extends self::C::T%>(core::List<self::C::foo::E%> list) → dynamic {
+    core::List<self::C::foo::E%> variable = this.{self::C::method}<self::C::foo::E%>(list){(core::List<self::C::foo::E%>) → core::List<self::C::foo::E%>};
+  }
+  method method<covariant-by-class F extends self::C::T%>(core::List<self::C::method::F%> list) → core::List<self::C::method::F%>
+    return list;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43591.dart.weak.modular.expect
new file mode 100644
index 0000000..7bb6ecb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension E<T extends core::Object? = dynamic> on T% {
+  get f = self::E|get#f;
+}
+static method E|get#f<T extends core::Object? = dynamic>(lowered final self::E|get#f::T% #this) → (self::E|get#f::T%) → self::E|get#f::T%
+  return (self::E|get#f::T% t) → self::E|get#f::T% => t;
+static method method1<S extends core::Object? = dynamic>(self::method1::S% s) → dynamic {
+  (self::method1::S%) → self::method1::S% f = self::E|get#f<self::method1::S%>(s);
+}
+static method method2<S extends dynamic>(self::method2::S% s) → dynamic {
+  self::throws(() → void => s{dynamic}.f);
+}
+static method main() → dynamic {}
+static method throws(() → void f) → dynamic {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object e) {
+    return;
+  }
+  throw "Expected exception";
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43689.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43689.dart.weak.modular.expect
new file mode 100644
index 0000000..aa327e3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43689.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue43689.dart:6:17: Error: 'y' is already declared in this scope.
+// late final int? y;
+//                 ^
+// pkg/front_end/testcases/nnbd/issue43689.dart:5:16: Context: Previous declaration of 'y'.
+// late final int y;
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue43689.dart:10:19: Error: 'x' is already declared in this scope.
+//   late final int? x;
+//                   ^
+// pkg/front_end/testcases/nnbd/issue43689.dart:9:18: Context: Previous declaration of 'x'.
+//   late final int x;
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/issue43689.dart:12:8: Error: 'z' is already declared in this scope.
+//   int? z;
+//        ^
+// pkg/front_end/testcases/nnbd/issue43689.dart:11:7: Context: Previous declaration of 'z'.
+//   int z;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+late static final [setter] field core::int y;
+static method test() → dynamic {
+  late final core::int x;
+  late final core::int? x = invalid-expression "pkg/front_end/testcases/nnbd/issue43689.dart:10:19: Error: 'x' is already declared in this scope.
+  late final int? x;
+                  ^";
+  core::int z;
+  core::int? z = invalid-expression "pkg/front_end/testcases/nnbd/issue43689.dart:12:8: Error: 'z' is already declared in this scope.
+  int? z;
+       ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.modular.expect
new file mode 100644
index 0000000..2ed0f16
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue43716a.dart:15:14: Error: A value of type 'Object?' can't be returned from a function with return type 'Object' because 'Object?' is nullable and 'Object' isn't.
+//  - 'Object' is from 'dart:core'.
+//     return z.x; // Error.
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<X extends self::C<self::C::X%, self::C::X%>? = self::C<dynamic, dynamic>?, Y extends self::C<self::C::Y%, self::C::Y%>? = self::C<dynamic, dynamic>?> extends core::Object {
+  covariant-by-class field self::C::X% x;
+  constructor •(self::C::X% x) → self::C<self::C::X%, self::C::Y%>
+    : self::C::x = x, super core::Object::•()
+    ;
+  method m(covariant-by-class self::C::X% x, covariant-by-class self::C::Y% y) → core::Object {
+    self::C<core::Object?, core::Object?>? z = self::b ?{self::C<core::Object?, core::Object?>?} x : y;
+    if(z == null)
+      throw 0;
+    return invalid-expression "pkg/front_end/testcases/nnbd/issue43716a.dart:15:14: Error: A value of type 'Object?' can't be returned from a function with return type 'Object' because 'Object?' is nullable and 'Object' isn't.
+ - 'Object' is from 'dart:core'.
+    return z.x; // Error.
+             ^" in z{self::C<core::Object?, core::Object?>}.{self::C::x}{core::Object?} as{TypeError,ForNonNullableByDefault} core::Object;
+  }
+}
+static field core::bool b = true;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.modular.expect
new file mode 100644
index 0000000..98741d8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
+//     z(42); // Error.
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<X extends (self::C::X%) →? void = (Never) →? void> extends core::Object {
+  covariant-by-class field self::C::X% x;
+  constructor •(self::C::X% x) → self::C<self::C::X%>
+    : self::C::x = x, super core::Object::•()
+    ;
+  method m() → void {
+    (Never) →? void z = self::b ?{(Never) →? void} this.{self::C::x}{self::C::X%} : #C1;
+    if(z == null)
+      return;
+    z{(Never) → void}(invalid-expression "pkg/front_end/testcases/nnbd/issue43716b.dart:17:7: Error: The argument type 'int' can't be assigned to the parameter type 'Never'.
+    z(42); // Error.
+      ^" in 42 as{TypeError,ForNonNullableByDefault} Never){(Never) → void};
+  }
+}
+static field core::bool b = true;
+static method f(core::Object o) → void {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::f
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43721.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43721.dart.weak.modular.expect
new file mode 100644
index 0000000..da9759d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43721.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue43721.dart:13:7: Error: The argument type 'FutureOr<num?>' can't be assigned to the parameter type 'Object' because 'num?' is nullable and 'Object' isn't.
+//  - 'Object' is from 'dart:core'.
+//   foo(z); // Error.
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method foo(core::Object x) → dynamic {}
+static method bar(core::bool condition) → dynamic {
+  FutureOr<core::int?>x = null;
+  core::num n = 1;
+  FutureOr<core::num?>z = condition ?{FutureOr<core::num?>} x : n;
+  self::foo(invalid-expression "pkg/front_end/testcases/nnbd/issue43721.dart:13:7: Error: The argument type 'FutureOr<num?>' can't be assigned to the parameter type 'Object' because 'num?' is nullable and 'Object' isn't.
+ - 'Object' is from 'dart:core'.
+  foo(z); // Error.
+      ^" in z as{TypeError,ForNonNullableByDefault} core::Object);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43918.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.modular.expect
new file mode 100644
index 0000000..9882343
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43918.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •<T extends core::Object? = dynamic>(self::A::•::T% value) → self::A<self::A::•::T%>
+    return new self::_A::•<self::A::•::T%>(value);
+}
+class _A<T extends core::Object? = dynamic> extends core::Object implements self::A<self::_A::T%> {
+  constructor •(self::_A::T% value) → self::_A<self::_A::T%>
+    : super core::Object::•()
+    ;
+}
+abstract class B<T extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  static factory •<T extends core::Object? = dynamic>(core::int value) → self::B<self::B::•::T%>
+    return new self::_B::•<self::B::•::T%>(value);
+}
+class _B<T extends core::Object? = dynamic> extends core::Object implements self::B<self::_B::T%> {
+  constructor •(core::int value) → self::_B<self::_B::T%>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::B::•
+}
diff --git a/pkg/front_end/testcases/nnbd/issue44276.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue44276.dart.weak.modular.expect
new file mode 100644
index 0000000..ce89c73
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44276.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  field core::int? value1 = null;
+  field core::int? value2 = null;
+  synthetic constructor •() → self::Base
+    : super core::Object::•()
+    ;
+}
+static method main() → void {
+  self::fun();
+}
+static method fun() → core::int? {
+  self::Base? a;
+  final core::int? b = let final core::int? #t1 = let final self::Base? #t2 = a in #t2 == null ?{core::int?} null : #t2{self::Base}.{self::Base::value1}{core::int?} in #t1 == null ?{core::int?} let final self::Base? #t3 = a in #t3 == null ?{core::int?} null : #t3{self::Base}.{self::Base::value2}{core::int?} : #t1{core::int};
+  return b;
+}
diff --git a/pkg/front_end/testcases/nnbd/issue44362.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue44362.dart.weak.modular.expect
new file mode 100644
index 0000000..3e32ea9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44362.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method foo<X extends core::Object? = dynamic>(self::foo::X? x) → dynamic {
+  if(x is{ForNonNullableByDefault} core::int) {
+    self::bar<dynamic>(x{self::foo::X? & core::int /* '?' & '!' = '!' */});
+  }
+}
+static method bar<Y extends core::Object? = dynamic>(dynamic y) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue44455.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue44455.dart.weak.modular.expect
new file mode 100644
index 0000000..d0065b3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44455.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue44455.dart:6:9: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F'.
+// Try changing type arguments so that they conform to the bounds.
+// class A<X extends F<X>> {}
+//         ^
+// pkg/front_end/testcases/nnbd/issue44455.dart:5:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<Y extends num> = Y Function();
+//           ^
+//
+// pkg/front_end/testcases/nnbd/issue44455.dart:8:10: Error: Type argument 'X' doesn't conform to the bound 'num' of the type variable 'Y' on 'F2'.
+// Try changing type arguments so that they conform to the bounds.
+// class A2<X extends F2<X>> {}
+//          ^
+// pkg/front_end/testcases/nnbd/issue44455.dart:9:12: Context: This is the type variable whose bound isn't conformed to.
+// typedef F2<Y extends num> = Y Function();
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<Y extends core::num> = () → Y;
+typedef F2<Y extends core::num> = () → Y;
+class A<X extends () → self::A::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+}
+class A2<X extends () → self::A2::X = () → dynamic> extends core::Object {
+  synthetic constructor •() → self::A2<self::A2::X>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue44595.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.modular.expect
new file mode 100644
index 0000000..150af53
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef Exactly<invariant T extends core::Object? = dynamic> = (T%) → T%;
+extension _extension#0<T extends core::Object? = dynamic> on T% {
+  method checkStaticType = self::_extension#0|checkStaticType;
+  tearoff checkStaticType = self::_extension#0|get#checkStaticType;
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% value) → self::id::T%
+  return value;
+static method main() → dynamic async {
+  FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int};
+  FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int} in block {
+    self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t1);
+  } =>#t1;
+  FutureOr<core::int>z = let final core::int #t2 = 1.{core::num::+}(self::contextType<core::int>(1)){(core::num) → core::int} in block {
+    self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t2);
+  } =>#t2;
+}
+static method _extension#0|checkStaticType<T extends core::Object? = dynamic, R extends (self::_extension#0|checkStaticType::T%) → self::_extension#0|checkStaticType::T% = (dynamic) → dynamic>(lowered final self::_extension#0|checkStaticType::T% #this) → void {}
+static method _extension#0|get#checkStaticType<T extends core::Object? = dynamic>(lowered final self::_extension#0|get#checkStaticType::T% #this) → <R extends (self::_extension#0|get#checkStaticType::T%) → self::_extension#0|get#checkStaticType::T% = (dynamic) → dynamic>() → void
+  return <R extends (self::_extension#0|get#checkStaticType::T%) → self::_extension#0|get#checkStaticType::T% = (dynamic) → dynamic>() → void => self::_extension#0|checkStaticType<self::_extension#0|get#checkStaticType::T%, R>(#this);
+static method contextType<T extends core::Object? = dynamic>(core::Object? o) → self::contextType::T%
+  return o as{ForNonNullableByDefault} self::contextType::T%;
diff --git a/pkg/front_end/testcases/nnbd/issue44857.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue44857.dart.weak.modular.expect
new file mode 100644
index 0000000..528dcbd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue44857.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef F = (<T extends Never = dynamic>(T) → void) → Never;
+static method main() → void {
+  core::print("Are ${#C1}, ${#C1} identical?");
+  core::print(core::identical(#C1, #C1));
+}
+
+constants  {
+  #C1 = TypeLiteralConstant((<T extends Never* = dynamic>(Never*) →* void) →* Never*)
+}
diff --git a/pkg/front_end/testcases/nnbd/issue45598.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue45598.dart.weak.modular.expect
new file mode 100644
index 0000000..b03a7ab
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue45598.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method foo(<X extends Z% = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>({m: core::Map<Y%, Z%>}) → dynamic bar, core::Map<core::String, core::String> m) → dynamic {
+  bar<core::String, core::String, core::String>(m: m){({m: core::Map<core::String, core::String>}) → dynamic};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue45598_2.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue45598_2.dart.weak.modular.expect
new file mode 100644
index 0000000..f0813ae
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue45598_2.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method foo(core::Map<core::String, core::String> m) → dynamic {
+  function bar<X extends Z% = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic>({required core::Map<Y%, Z%> m = #C1}) → void {}
+  bar<core::String, core::String, core::String>(m: m){({required m: core::Map<core::String, core::String>}) → void};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/issue47311.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue47311.dart.weak.modular.expect
new file mode 100644
index 0000000..baea864
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue47311.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef Baz<invariant T extends core::Object? = dynamic> = (T%) → T%;
+class Foo1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo1<self::Foo1::T%>
+    : super core::Object::•()
+    ;
+  method method<covariant-by-class S extends self::Foo1::T%>((self::Foo1::method::S%) → self::Foo1::method::S% x) → void {}
+}
+class Bar1 extends core::Object implements self::Foo1<core::Object> {
+  synthetic constructor •() → self::Bar1
+    : super core::Object::•()
+    ;
+  method method<covariant-by-class T extends core::Object>((self::Bar1::method::T) → self::Bar1::method::T x) → void {}
+}
+class Foo2<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo2<self::Foo2::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends self::Foo2::method::S% = self::Foo2::T%, covariant-by-class S extends self::Foo2::T%>((self::Foo2::method::S%) → self::Foo2::method::S% x, (self::Foo2::method::V%) → self::Foo2::method::V% y) → void {}
+}
+class Bar2 extends core::Object implements self::Foo2<core::Object> {
+  synthetic constructor •() → self::Bar2
+    : super core::Object::•()
+    ;
+  method method<V extends self::Bar2::method::T = core::Object, covariant-by-class T extends core::Object>((self::Bar2::method::T) → self::Bar2::method::T x, (self::Bar2::method::V) → self::Bar2::method::V y) → void {}
+}
+class Foo3<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo3<self::Foo3::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends self::Foo3::method::S% = FutureOr<self::Foo3::T%>, covariant-by-class S extends FutureOr<self::Foo3::T%>>((self::Foo3::method::S%) → self::Foo3::method::S% x, (self::Foo3::method::V%) → self::Foo3::method::V% y) → void {}
+}
+class Bar3 extends core::Object implements self::Foo3<core::Object> {
+  synthetic constructor •() → self::Bar3
+    : super core::Object::•()
+    ;
+  method method<V extends self::Bar3::method::T = FutureOr<core::Object>, covariant-by-class T extends FutureOr<core::Object>>((self::Bar3::method::T) → self::Bar3::method::T x, (self::Bar3::method::V) → self::Bar3::method::V y) → void {}
+}
+class Foo4<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo4<self::Foo4::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Foo4::method::S%> = FutureOr<self::Foo4::T%>, covariant-by-class S extends self::Foo4::T%>((self::Foo4::method::S%) → self::Foo4::method::S% x, (self::Foo4::method::V%) → self::Foo4::method::V% y) → void {}
+}
+class Bar4 extends core::Object implements self::Foo4<core::Object> {
+  synthetic constructor •() → self::Bar4
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Bar4::method::T> = FutureOr<core::Object>, covariant-by-class T extends core::Object>((self::Bar4::method::T) → self::Bar4::method::T x, (self::Bar4::method::V) → self::Bar4::method::V y) → void {}
+}
+class Foo5<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo5<self::Foo5::T%>
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Foo5::method::S%> = FutureOr<FutureOr<self::Foo5::T%>>, covariant-by-class S extends FutureOr<self::Foo5::T%>>((self::Foo5::method::S%) → self::Foo5::method::S% x, (self::Foo5::method::V%) → self::Foo5::method::V% y) → void {}
+}
+class Bar5 extends core::Object implements self::Foo5<core::Object> {
+  synthetic constructor •() → self::Bar5
+    : super core::Object::•()
+    ;
+  method method<V extends FutureOr<self::Bar5::method::T> = FutureOr<FutureOr<core::Object>>, covariant-by-class T extends FutureOr<core::Object>>((self::Bar5::method::T) → self::Bar5::method::T x, (self::Bar5::method::V) → self::Bar5::method::V y) → void {}
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue_39286.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue_39286.dart.weak.modular.expect
new file mode 100644
index 0000000..ebe9eae
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue_39286.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method f() → self::D?
+    return new self::D::•();
+  method h() → void {}
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+  method g() → void {}
+}
+static method test(self::C x) → void {
+  let final self::C #t1 = x in block {
+    #t1.{self::C::f}(){() → self::D?}!.{self::D::g}(){() → void};
+    #t1.{self::C::h}(){() → void};
+  } =>#t1;
+}
+static method main() → dynamic {
+  self::test(new self::C::•());
+}
diff --git a/pkg/front_end/testcases/nnbd/issue_39286_2.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue_39286_2.dart.weak.modular.expect
new file mode 100644
index 0000000..261dcc1
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue_39286_2.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue_39286_2.dart:15:14: Warning: Operand of null-aware operation '!' has type 'String' which excludes null.
+//   x..f()!.g()['Hi!']!..h()!.y = 2;
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue_39286_2.dart:15:24: Warning: Operand of null-aware operation '!' has type 'C' which excludes null.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/issue_39286_2.dart'.
+//   x..f()!.g()['Hi!']!..h()!.y = 2;
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int y = 42;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method f() → self::D?
+    return new self::D::•();
+  method h() → self::C
+    return this;
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+  method g() → self::D
+    return this;
+  operator [](core::String s) → core::String {
+    return "!${s}!";
+  }
+}
+static method test(self::C x) → void {
+  let final self::C #t1 = x in block {
+    #t1.{self::C::f}(){() → self::D?}!.{self::D::g}(){() → self::D}.{self::D::[]}("Hi!"){(core::String) → core::String}!;
+    #t1.{self::C::h}(){() → self::C}!.{self::C::y} = 2;
+  } =>#t1;
+}
+static method main() → dynamic {
+  self::test(new self::C::•());
+}
diff --git a/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.modular.expect
new file mode 100644
index 0000000..aa91968
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo<S extends core::num> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::S>
+    : super core::Object::•()
+    ;
+  method test1(covariant-by-class self::Foo::S x) → void {
+    (self::Foo::S) → self::Foo::S f = self::Test|get#test<self::Foo::S>(x);
+  }
+}
+extension Test<T extends core::Object? = dynamic> on T% {
+  get test = self::Test|get#test;
+}
+static method Test|get#test<T extends core::Object? = dynamic>(lowered final self::Test|get#test::T% #this) → (self::Test|get#test::T%) → self::Test|get#test::T%
+  return (self::Test|get#test::T% a) → self::Test|get#test::T% => #this;
+static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/late.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/late.dart.weak.modular.expect
new file mode 100644
index 0000000..3eaeb2c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/late.dart.weak.modular.expect
@@ -0,0 +1,105 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/late.dart:40:5: Error: Can't assign to the final variable 'lateFinalVariableWithInit'.
+//     lateFinalVariableWithInit = 0;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/late.dart:44:5: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
+//     lateFinalStaticFieldWithInit = 0;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/late.dart:42:5: Error: The setter 'lateFinalInstanceFieldWithInit' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/late.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
+//     lateFinalInstanceFieldWithInit = 0;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/late.dart:63:3: Error: Setter not found: 'lateFinalTopLevelFieldWithInit'.
+//   lateFinalTopLevelFieldWithInit = 0;
+//   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/late.dart:67:9: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
+//   Class.lateFinalStaticFieldWithInit = 0;
+//         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/late.dart:65:5: Error: The setter 'lateFinalInstanceFieldWithInit' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/late.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
+//   c.lateFinalInstanceFieldWithInit = 0;
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  late field core::int lateInstanceField;
+  late final [setter] field core::int lateFinalInstanceField1;
+  late final [setter] field core::int lateFinalInstanceField2;
+  late final field core::int lateFinalInstanceFieldWithInit = 0;
+  late field self::Class lateInstanceFieldThis = this;
+  late final field self::Class lateFinalInstanceFieldThis = this;
+  late static field core::int lateStaticField;
+  late static final [setter] field core::int lateFinalStaticField1;
+  late static final [setter] field core::int lateFinalStaticField2;
+  late static final field core::int lateFinalStaticFieldWithInit = 0;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    late core::int lateVariable;
+    late final core::int lateFinalVariable;
+    late final core::int lateFinalVariableWithInit = 0;
+    lateVariable = 0;
+    lateFinalVariable = 0;
+    this.{self::Class::lateInstanceField} = 0;
+    this.{self::Class::lateFinalInstanceField1} = 0;
+    self::Class::lateStaticField = 0;
+    self::Class::lateFinalStaticField1 = 0;
+  }
+  method methodWithErrors() → dynamic {
+    late final core::int lateFinalVariableWithInit = 0;
+    invalid-expression "pkg/front_end/testcases/nnbd/late.dart:40:5: Error: Can't assign to the final variable 'lateFinalVariableWithInit'.
+    lateFinalVariableWithInit = 0;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^";
+    invalid-expression "pkg/front_end/testcases/nnbd/late.dart:42:5: Error: The setter 'lateFinalInstanceFieldWithInit' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/late.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
+    lateFinalInstanceFieldWithInit = 0;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in this{<unresolved>}.lateFinalInstanceFieldWithInit = 0;
+    invalid-expression "pkg/front_end/testcases/nnbd/late.dart:44:5: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
+    lateFinalStaticFieldWithInit = 0;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+  }
+}
+late static field core::int lateTopLevelField;
+late static final [setter] field core::int lateFinalTopLevelField;
+late static final field core::int lateFinalTopLevelFieldWithInit = 0;
+static method main() → dynamic {}
+static method noErrors() → dynamic {
+  self::lateTopLevelField = 0;
+  self::lateFinalTopLevelField = 0;
+  self::Class c1 = new self::Class::•();
+  c1.{self::Class::method}(){() → dynamic};
+  self::Class c2 = new self::Class::•();
+  c2.{self::Class::lateInstanceField} = 0;
+  c2.{self::Class::lateFinalInstanceField2} = 0;
+  self::Class::lateStaticField = 0;
+  self::Class::lateFinalStaticField2 = 0;
+}
+static method errors() → dynamic {
+  invalid-expression "pkg/front_end/testcases/nnbd/late.dart:63:3: Error: Setter not found: 'lateFinalTopLevelFieldWithInit'.
+  lateFinalTopLevelFieldWithInit = 0;
+  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+  self::Class c = new self::Class::•();
+  invalid-expression "pkg/front_end/testcases/nnbd/late.dart:65:5: Error: The setter 'lateFinalInstanceFieldWithInit' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/late.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'lateFinalInstanceFieldWithInit'.
+  c.lateFinalInstanceFieldWithInit = 0;
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in c{<unresolved>}.lateFinalInstanceFieldWithInit = 0;
+  c.{self::Class::methodWithErrors}(){() → dynamic};
+  invalid-expression "pkg/front_end/testcases/nnbd/late.dart:67:9: Error: Setter not found: 'lateFinalStaticFieldWithInit'.
+  Class.lateFinalStaticFieldWithInit = 0;
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+}
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.modular.expect
new file mode 100644
index 0000000..63fc71a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.modular.expect
@@ -0,0 +1,138 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/later.dart:12:7: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+//   foo(late int x) {}
+//       ^^^^
+//
+// pkg/front_end/testcases/nnbd/later.dart:15:5: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+// bar(late int x) {}
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/later.dart:20:28: Error: 'catch' must be followed by '(identifier)' or '(identifier, identifier)'.
+// No types are needed, the first is given by 'on', the second is always 'StackTrace'.
+//   } on dynamic catch (late e, late t) {}
+//                            ^
+//
+// pkg/front_end/testcases/nnbd/later.dart:20:31: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+//   } on dynamic catch (late e, late t) {}
+//                               ^^^^
+//
+// pkg/front_end/testcases/nnbd/later.dart:20:36: Error: 'catch' must be followed by '(identifier)' or '(identifier, identifier)'.
+// No types are needed, the first is given by 'on', the second is always 'StackTrace'.
+//   } on dynamic catch (late e, late t) {}
+//                                    ^
+//
+// pkg/front_end/testcases/nnbd/later.dart:21:8: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+//   for (late int i = 0; i < 10; ++i) {
+//        ^^^^
+//
+// pkg/front_end/testcases/nnbd/later.dart:24:8: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+//   for (late String s in ["baz"]) {
+//        ^^^^
+//
+// pkg/front_end/testcases/nnbd/later.dart:27:9: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+//   [for (late int i = 0; i < 10; ++i) i];
+//         ^^^^
+//
+// pkg/front_end/testcases/nnbd/later.dart:31:14: Error: Can't have modifier 'late' here.
+// Try removing 'late'.
+//   await for (late String s in new Stream.fromIterable(["hest"])) {
+//              ^^^^
+//
+// pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
+//   late String s1 = await hest();
+//                    ^^^^^
+//
+// pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
+//   late String s2 = '${fisk}${await hest()}${fisk}';
+//                              ^^^^^
+//
+// pkg/front_end/testcases/nnbd/later.dart:44:18: Error: Can't have a late final field in a class with a const constructor.
+//   late final int x = 42;
+//                  ^
+// pkg/front_end/testcases/nnbd/later.dart:46:9: Context: This constructor is const.
+//   const B();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+class A extends core::Object {
+  field core::int a = 42;
+  late field core::int b = this.{self::A::a}{core::int}.{core::num::*}(2){(core::num) → core::int}.{core::int::>>}(1){(core::int) → core::int};
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo(core::int x) → dynamic {}
+}
+class B extends core::Object /*hasConstConstructor*/  {
+  late final field core::int x = 42;
+  const constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  late final [setter] field core::int x;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method initVars() → dynamic {
+    this.{self::C::x} = 42;
+  }
+}
+static method bar(core::int x) → dynamic {}
+static method baz() → dynamic {
+  {
+    {
+      invalid-expression "pkg/front_end/testcases/nnbd/later.dart:20:36: Error: 'catch' must be followed by '(identifier)' or '(identifier, identifier)'.
+No types are needed, the first is given by 'on', the second is always 'StackTrace'.
+  } on dynamic catch (late e, late t) {}
+                                   ^";
+    }
+    try {
+      throw "baz";
+    }
+    on dynamic catch(final dynamic late, final core::StackTrace e) {
+    }
+  }
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    core::print("baz");
+  }
+  for (core::String s in <core::String>["baz"]) {
+    core::print(s);
+  }
+  block {
+    final core::List<core::int> #t1 = <core::int>[];
+    for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t1.{core::List::add}{Invariant}(i){(core::int) → void};
+  } =>#t1;
+}
+static method hest() → dynamic async {
+  await for (core::String s in asy::Stream::fromIterable<core::String>(<core::String>["hest"])) {
+    core::print(s);
+  }
+  return "hest";
+}
+static method fisk() → dynamic async {
+  late core::String s1 = invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
+  late String s1 = await hest();
+                   ^^^^^";
+  late core::String s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
+  late String s2 = '\${fisk}\${await hest()}\${fisk}';
+                             ^^^^^"}${#C1}";
+  late core::Function f = () → asy::Future<dynamic> async => await self::hest();
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::fisk
+}
diff --git a/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.weak.modular.expect
new file mode 100644
index 0000000..42bf683
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/lhs_of_if_null.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method f() → core::Object
+  return let final core::Object? #t1 = self::g<core::Object?>(null) in #t1 == null ?{core::Object} 0 : #t1{core::Object};
+static method g<T extends core::Object? = dynamic>(self::g::T% t) → self::g::T%
+  return t;
+static method main() → dynamic {
+  core::print(self::f());
+}
diff --git a/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..6ebdc4c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/list_constructor.dart:9:7: Error: Can't use the default List constructor.
+// Try using List.filled instead.
+//   new List<T>(42);
+//       ^
+//
+// pkg/front_end/testcases/nnbd/list_constructor.dart:10:7: Error: Can't use the default List constructor.
+// Try using List.filled instead.
+//   new List<int?>(42);
+//       ^
+//
+// pkg/front_end/testcases/nnbd/list_constructor.dart:11:7: Error: Can't use the default List constructor.
+// Try using List.filled instead.
+//   new List<int>(42);
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method foo<T extends core::Object?>() → dynamic {
+  invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:9:7: Error: Can't use the default List constructor.
+Try using List.filled instead.
+  new List<T>(42);
+      ^" in core::List::•<self::foo::T%>(42);
+  invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:10:7: Error: Can't use the default List constructor.
+Try using List.filled instead.
+  new List<int?>(42);
+      ^" in core::List::•<core::int?>(42);
+  invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:11:7: Error: Can't use the default List constructor.
+Try using List.filled instead.
+  new List<int>(42);
+      ^" in core::List::•<core::int>(42);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/load_library.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/load_library.dart.weak.modular.expect
new file mode 100644
index 0000000..885e631
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/load_library.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:math" deferred as math;
+
+static method main() → dynamic {
+  asy::Future<dynamic> v1 = LoadLibrary(math);
+  v1.{asy::Future::then}<Null>((dynamic _) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
+  () → asy::Future<dynamic> v2 = #C1;
+  v2(){() → asy::Future<dynamic>}.{asy::Future::then}<Null>((dynamic _) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
+}
+static method _#loadLibrary_math() → asy::Future<dynamic>
+  return LoadLibrary(math);
+
+constants  {
+  #C1 = static-tearoff self::_#loadLibrary_math
+}
diff --git a/pkg/front_end/testcases/nnbd/main_declaration.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/main_declaration.dart.weak.modular.expect
new file mode 100644
index 0000000..9319364
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/main_declaration.dart.weak.modular.expect
@@ -0,0 +1,189 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "org-dartlang-testcase:///main_declaration_class_lib.dart" as class_lib;
+import "org-dartlang-testcase:///main_declaration_extension_lib.dart" as extension_lib;
+import "org-dartlang-testcase:///main_declaration_field_lib.dart" as field_lib;
+import "org-dartlang-testcase:///main_declaration_getter_lib.dart" as getter_lib;
+import "org-dartlang-testcase:///main_declaration_method_extra_optional_parameters_lib.dart" as method_extra_optional_parameters_lib;
+import "org-dartlang-testcase:///main_declaration_method_named_parameters_lib.dart" as method_named_parameters_lib;
+import "org-dartlang-testcase:///main_declaration_method_one_optional_parameter_lib.dart" as method_one_optional_parameter_lib;
+import "org-dartlang-testcase:///main_declaration_method_one_parameter_lib.dart" as method_one_parameter_lib;
+import "org-dartlang-testcase:///main_declaration_method_one_required_optional_lib.dart" as method_one_required_optional_lib;
+import "org-dartlang-testcase:///main_declaration_method_required_named_parameters_lib.dart" as method_required_named_parameters_lib;
+import "org-dartlang-testcase:///main_declaration_method_too_many_parameters_lib.dart" as method_too_many_parameters_lib;
+import "org-dartlang-testcase:///main_declaration_method_two_optional_parameters_lib.dart" as method_two_optional_parameters_lib;
+import "org-dartlang-testcase:///main_declaration_method_two_parameters_lib.dart" as method_two_parameters_lib;
+import "org-dartlang-testcase:///main_declaration_method_wrong_parameter_type_lib.dart" as method_wrong_parameter_type_lib;
+import "org-dartlang-testcase:///main_declaration_setter_lib.dart" as setter_lib;
+import "org-dartlang-testcase:///main_declaration_typedef_lib.dart" as typedef_lib;
+
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_class_lib.dart:5:7: Error: The 'main' declaration must be a function declaration.
+// class main /* error */ {}
+//       ^
+//
+import self as self2;
+import "dart:core" as core;
+
+class main extends core::Object {
+  synthetic constructor •() → self2::main
+    : super core::Object::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_extension_lib.dart:5:11: Error: The 'main' declaration must be a function declaration.
+// extension main /* error */ on Object {}
+//           ^
+//
+import self as self3;
+import "dart:core" as core;
+
+extension main on core::Object {
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_field_lib.dart:5:17: Error: The 'main' declaration must be a function declaration.
+// void Function() main /* error */ = () {};
+//                 ^^^^
+//
+import self as self4;
+
+static field () → void main = () → void {};
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_getter_lib.dart:5:21: Error: The 'main' declaration must be a function declaration.
+// void Function() get main /* error */ => () {};
+//                     ^^^^
+//
+import self as self5;
+
+static get main() → () → void
+  return () → void {};
+
+library /*isNonNullableByDefault*/;
+import self as self6;
+import "dart:core" as core;
+
+static method main(core::List<core::String> args, dynamic other, [dynamic extra = #C1]) → void {}
+
+library /*isNonNullableByDefault*/;
+import self as self7;
+import "dart:core" as core;
+
+static method main({core::List<core::String> args = #C2}) → void {}
+
+library /*isNonNullableByDefault*/;
+import self as self8;
+import "dart:core" as core;
+
+static method main([core::List<core::String>? args = #C1]) → void {}
+
+library /*isNonNullableByDefault*/;
+import self as self9;
+import "dart:core" as core;
+
+static method main(core::List<core::String> args) → void {}
+
+library /*isNonNullableByDefault*/;
+import self as self10;
+import "dart:core" as core;
+
+static method main(core::List<core::String> args, [dynamic other = #C1]) → void {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_method_required_named_parameters_lib.dart:5:6: Error: The 'main' method cannot have required named parameters.
+// void main({required List<String> args}) /* error */ {}
+//      ^^^^
+//
+import self as self11;
+import "dart:core" as core;
+
+static method main({required core::List<core::String> args = #C1}) → void {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_method_too_many_parameters_lib.dart:5:6: Error: The 'main' method must have at most 2 required parameters.
+// void main(List<String> args, a, b) /* error */ {}
+//      ^^^^
+//
+import self as self12;
+import "dart:core" as core;
+
+static method main(core::List<core::String> args, dynamic a, dynamic b) → void {}
+
+library /*isNonNullableByDefault*/;
+import self as self13;
+import "dart:core" as core;
+
+static method main([core::List<core::String> args = #C2, dynamic other = #C1]) → void {}
+
+library /*isNonNullableByDefault*/;
+import self as self14;
+import "dart:core" as core;
+
+static method main(core::List<core::String> args, dynamic other) → void {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_method_wrong_parameter_type_lib.dart:5:6: Error: The type 'Set<String>' of the first parameter of the 'main' method is not a supertype of 'List<String>'.
+//  - 'Set' is from 'dart:core'.
+//  - 'List' is from 'dart:core'.
+// void main(Set<String> args) /* error */ {}
+//      ^^^^
+//
+import self as self15;
+import "dart:core" as core;
+
+static method main(core::Set<core::String> args) → void {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_setter_lib.dart:5:10: Error: The 'main' declaration must be a function declaration.
+// void set main(void Function() f) /* error */ {}
+//          ^^^^
+//
+import self as self16;
+
+static set main(() → void f) → void {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/main_declaration_typedef_lib.dart:5:9: Error: The 'main' declaration must be a function declaration.
+// typedef main /* error */ = void Function();
+//         ^
+//
+import self as self17;
+
+typedef main = () → void;
+
+constants  {
+  #C1 = null
+  #C2 = <core::String*>[]
+}
diff --git a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.modular.expect
new file mode 100644
index 0000000..a736a23
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.modular.expect
@@ -0,0 +1,65 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:15:6: Error: Required named parameter 's' must be provided.
+//   foo();
+//      ^
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:5:6: Context: Found this candidate, but the arguments don't match.
+// void foo({required String s}) {}
+//      ^^^
+//
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:16:8: Error: Required named parameter 'x' must be provided.
+//   new A();
+//        ^
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:9:3: Context: Found this candidate, but the arguments don't match.
+//   A({required int x});
+//   ^
+//
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
+//   a.foo();
+//        ^
+//
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
+//   a.f();
+//      ^
+//
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
+//   g();
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field ({required s: core::String}) → void f = ({required core::String s = #C1}) → void {};
+  constructor •({required core::int x = #C1}) → self::A
+    : super core::Object::•()
+    ;
+  method foo({required core::int y = #C1}) → dynamic {}
+}
+static field ({required s: core::String}) → void g = ({required core::String s = #C1}) → void {};
+static method foo({required core::String s = #C1}) → void {}
+static method bar() → dynamic {
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:15:6: Error: Required named parameter 's' must be provided.
+  foo();
+     ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:16:8: Error: Required named parameter 'x' must be provided.
+  new A();
+       ^";
+  self::A a = new self::A::•(x: 42);
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
+  a.foo();
+       ^" in a.{self::A::foo}{<inapplicable>}.(){() → invalid-type};
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
+  a.f();
+     ^" in a.{self::A::f}{({required s: core::String}) → void}{<inapplicable>}.();
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
+  g();
+   ^" in self::g{<inapplicable>}.();
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/mix_in_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/mix_in_field.dart.weak.modular.expect
new file mode 100644
index 0000000..8015a15
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/mix_in_field.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+class Mixin extends core::Object {
+  field FutureOr<Null>m = null;
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+}
+abstract class _Class&Object&Mixin = core::Object with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Object&Mixin
+    : super core::Object::•()
+    ;
+  mixin-super-stub get m() → FutureOr<Null>
+    return super.{self::Mixin::m};
+  mixin-super-stub set m(FutureOr<Null>value) → void
+    return super.{self::Mixin::m} = value;
+}
+class Class extends self::_Class&Object&Mixin {
+  synthetic constructor •() → self::Class
+    : super self::_Class&Object&Mixin::•()
+    ;
+  method test(dynamic t1) → dynamic {
+    this.{self::_Class&Object&Mixin::m} = t1 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<Null>;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.weak.modular.expect
new file mode 100644
index 0000000..b9ee95d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:21:16: Error: Can't return a value from a void function.
+//     return new Future<Null>.value(null); // error
+//                ^
+//
+// pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:25:16: Error: Can't return a value from a void function.
+//     return new Future<Null>.value(null); // error
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method method1() → void {}
+  method method2() → FutureOr<void> {}
+  method method3() → FutureOr<void> {}
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  method method1() → void {}
+  method method2() → void {}
+  method method3() → FutureOr<void> {}
+}
+class C extends core::Object implements self::A, self::B {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method method1() → void {
+    return invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:21:16: Error: Can't return a value from a void function.
+    return new Future<Null>.value(null); // error
+               ^" in asy::Future::value<Null>(null);
+  }
+  method method2() → void {
+    return invalid-expression "pkg/front_end/testcases/nnbd/mutual_subtype_norm.dart:25:16: Error: Can't return a value from a void function.
+    return new Future<Null>.value(null); // error
+               ^" in asy::Future::value<Null>(null);
+  }
+  method method3() → FutureOr<void> {
+    return asy::Future::value<Null>(null);
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/never_bound.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/never_bound.dart.weak.modular.expect
new file mode 100644
index 0000000..08602d8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/never_bound.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/never_bound.dart:10:3: Error: Type argument 'Null' doesn't conform to the bound 'Never' of the type variable 'T' on 'GenericNever'.
+// Try changing type arguments so that they conform to the bounds.
+//   GenericNever<Null>();
+//   ^
+// pkg/front_end/testcases/nnbd/never_bound.dart:5:20: Context: This is the type variable whose bound isn't conformed to.
+// class GenericNever<T extends Never> {
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/never_bound.dart:11:3: Error: Type argument 'void' doesn't conform to the bound 'Never' of the type variable 'T' on 'GenericNever'.
+// Try changing type arguments so that they conform to the bounds.
+//   GenericNever<void>();
+//   ^
+// pkg/front_end/testcases/nnbd/never_bound.dart:5:20: Context: This is the type variable whose bound isn't conformed to.
+// class GenericNever<T extends Never> {
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/never_bound.dart:12:3: Error: Type argument 'int' doesn't conform to the bound 'Never' of the type variable 'T' on 'GenericNever'.
+// Try changing type arguments so that they conform to the bounds.
+//   GenericNever<int>();
+//   ^
+// pkg/front_end/testcases/nnbd/never_bound.dart:5:20: Context: This is the type variable whose bound isn't conformed to.
+// class GenericNever<T extends Never> {
+//                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class GenericNever<T extends Never> extends core::Object {
+  synthetic constructor •() → self::GenericNever<self::GenericNever::T>
+    : super core::Object::•()
+    ;
+  method getParamType() → dynamic
+    return self::GenericNever::T;
+}
+static method errors() → dynamic {
+  new self::GenericNever::•<Null>();
+  new self::GenericNever::•<void>();
+  new self::GenericNever::•<core::int>();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/never_calls.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/never_calls.dart.weak.modular.expect
new file mode 100644
index 0000000..a1ee958
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/never_calls.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+static method propertyGet(Never never) → dynamic {
+  Never v1 = let final Never #t1 = (let final Never #t2 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v2 = let final Never #t3 = (let final Never #t4 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.hashCode in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v3 = let final Never #t5 = (let final Never #t6 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v4 = let final Never #t7 = (let final Never #t8 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v5 = let final Never #t9 = (let final Never #t10 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.noSuchMethod in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+}
+static method propertySet(Never never) → dynamic {
+  core::int v1 = (let final Never #t11 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo = 42;
+}
+static method methodInvocation(Never never, core::Invocation invocation) → dynamic {
+  Never v1 = let final Never #t12 = (let final Never #t13 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v2 = let final Never #t14 = (let final Never #t15 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.hashCode() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v3 = let final Never #t16 = (let final Never #t17 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.runtimeType() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v4 = let final Never #t18 = (let final Never #t19 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v5 = let final Never #t20 = (let final Never #t21 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString(foo: 42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v6 = let final Never #t22 = (let final Never #t23 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.noSuchMethod(invocation) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v7 = let final Never #t24 = (let final Never #t25 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.noSuchMethod(42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+}
+static method equals(Never never) → dynamic {
+  core::bool v1 = (let final Never #t26 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null;
+  Never v2 = let final Never #t27 = (let final Never #t28 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} (let final Never #t29 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+}
+static method operator(Never never) → dynamic {
+  Never v1 = let final Never #t30 = (let final Never #t31 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(let final Never #t32 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v2 = let final Never #t33 = (let final Never #t34 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.unary-() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v3 = let final Never #t35 = (let final Never #t36 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](let final Never #t37 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  Never v4 = let final Never #t38 = let final Never #t39 = let final Never #t40 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final Never #t41 = let final Never #t42 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final Never #t43 = let final Never #t44 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final void #t45 = #t39{Never}.[]=(#t41, #t43) in #t43 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/never_equals.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/never_equals.dart.weak.modular.expect
new file mode 100644
index 0000000..3863424
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/never_equals.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+static method test(Never nonNullableNever, Never? nullableNever) → dynamic {
+  Never v1 = let final Never #t1 = (let final Never #t2 = nonNullableNever in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} (let final Never #t3 = nonNullableNever in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::bool v2 = nullableNever =={core::Object::==}{(core::Object) → core::bool} nullableNever;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.modular.expect
new file mode 100644
index 0000000..910a2cd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.modular.expect
@@ -0,0 +1,124 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/never_receiver.dart:24:3: Warning: Operand of null-aware operation '?.' has type 'Never' which excludes null.
+//   x?.foo(); // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/never_receiver.dart:25:3: Warning: Operand of null-aware operation '?.' has type 'Never' which excludes null.
+//   x?.bar; // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/never_receiver.dart:26:3: Warning: Operand of null-aware operation '?.' has type 'Never' which excludes null.
+//   x?.baz = 42; // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/never_receiver.dart:27:3: Warning: Operand of null-aware operation '?.' has type 'Never' which excludes null.
+//   x?[42]; // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/never_receiver.dart:28:3: Warning: Operand of null-aware operation '?.' has type 'Never' which excludes null.
+//   x?[42] = 42; // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/never_receiver.dart:30:5: Error: The method 'foo' isn't defined for the class 'Never?'.
+// Try correcting the name to the name of an existing method, or defining a method named 'foo'.
+//   y.foo(); // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/nnbd/never_receiver.dart:31:5: Error: The getter 'bar' isn't defined for the class 'Never?'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'bar'.
+//   y.bar; // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/nnbd/never_receiver.dart:32:5: Error: The setter 'baz' isn't defined for the class 'Never?'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
+//   y.baz = 42; // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/nnbd/never_receiver.dart:33:4: Error: The method 'call' isn't defined for the class 'Never?'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//   y(); // Error.
+//    ^
+//
+// pkg/front_end/testcases/nnbd/never_receiver.dart:34:4: Error: The operator '+' isn't defined for the class 'Never?'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//   y++; // Error.
+//    ^
+//
+// pkg/front_end/testcases/nnbd/never_receiver.dart:35:5: Error: The operator '+' isn't defined for the class 'Never?'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//   y += 1; // Error.
+//     ^
+//
+// pkg/front_end/testcases/nnbd/never_receiver.dart:36:4: Error: The operator '[]' isn't defined for the class 'Never?'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
+//   y[42]; // Error.
+//    ^
+//
+// pkg/front_end/testcases/nnbd/never_receiver.dart:37:4: Error: The operator '[]=' isn't defined for the class 'Never?'.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
+//   y[42] = 42; // Error.
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method foo(Never x, Never? y) → dynamic {
+  core::String local0 = y.{core::Object::toString}(){() → core::String};
+  core::int local1 = y.{core::Object::hashCode}{core::int};
+  let final Never #t1 = (let final Never #t2 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t3 = (let final Never #t4 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.bar in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  (let final Never #t5 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.baz = 42;
+  let final Never #t6 = (let final Never #t7 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t8 = (let final Never #t9 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  (let final Never #t10 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[]=(42, 42);
+  let final Never #t11 = x = let final Never #t12 = (let final Never #t13 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(1) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t14 = x = let final Never #t15 = (let final Never #t16 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(1) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never? #t17 = y in #t17 == null ?{Null} null : let final Never #t18 = (let final Never #t19 = #t17{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never? #t20 = y in #t20 == null ?{Null} null : let final Never #t21 = (let final Never #t22 = #t20{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.bar in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never? #t23 = y in #t23 == null ?{core::int?} null : (let final Never #t24 = #t23{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.baz = 42;
+  let final Never? #t25 = y in #t25 == null ?{Null} null : let final Never #t26 = (let final Never #t27 = #t25{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.call() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never? #t28 = y in #t28 == null ?{Null} null : let final Never #t29 = (let final Never #t30 = #t28{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never? #t31 = y in #t31 == null ?{core::int?} null : (let final Never #t32 = #t31{Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[]=(42, 42);
+  let final Never #t33 = let final Never #t34 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t33 == null ?{Null} null : let final Never #t35 = (let final Never #t36 = #t33 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.foo() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t37 = let final Never #t38 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t37 == null ?{Null} null : let final Never #t39 = (let final Never #t40 = #t37 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.bar in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t41 = let final Never #t42 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t41 == null ?{core::int?} null : (let final Never #t43 = #t41 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.baz = 42;
+  let final Never #t44 = let final Never #t45 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t44 == null ?{Null} null : let final Never #t46 = (let final Never #t47 = #t44 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](42) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t48 = let final Never #t49 = x in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t48 == null ?{core::int?} null : (let final Never #t50 = #t48 in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[]=(42, 42);
+  invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:5: Error: The method 'foo' isn't defined for the class 'Never?'.
+Try correcting the name to the name of an existing method, or defining a method named 'foo'.
+  y.foo(); // Error.
+    ^^^" in y{<unresolved>}.foo();
+  invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:5: Error: The getter 'bar' isn't defined for the class 'Never?'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'bar'.
+  y.bar; // Error.
+    ^^^" in y{<unresolved>}.bar;
+  invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:32:5: Error: The setter 'baz' isn't defined for the class 'Never?'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
+  y.baz = 42; // Error.
+    ^^^" in y{<unresolved>}.baz = 42;
+  invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:33:4: Error: The method 'call' isn't defined for the class 'Never?'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+  y(); // Error.
+   ^" in y{<unresolved>}.call();
+  y = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:34:4: Error: The operator '+' isn't defined for the class 'Never?'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+  y++; // Error.
+   ^" in y{<unresolved>}.+(1) as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
+  y = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:35:5: Error: The operator '+' isn't defined for the class 'Never?'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+  y += 1; // Error.
+    ^" in y{<unresolved>}.+(1) as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
+  invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:36:4: Error: The operator '[]' isn't defined for the class 'Never?'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
+  y[42]; // Error.
+   ^" in y{<unresolved>}.[](42);
+  invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:37:4: Error: The operator '[]=' isn't defined for the class 'Never?'.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
+  y[42] = 42; // Error.
+   ^" in y{<unresolved>}.[]=(42, 42);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.weak.modular.expect
new file mode 100644
index 0000000..ce4e2f2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart.weak.modular.expect
@@ -0,0 +1,131 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:7:6: Error: Expected an identifier, but got '['.
+// Try inserting an identifier before '['.
+//   c?.[42];
+//      ^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:8:6: Error: Expected an identifier, but got '['.
+// Try inserting an identifier before '['.
+//   c?.[42] = 42;
+//      ^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:8:11: Error: Can't assign to this.
+//   c?.[42] = 42;
+//           ^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:9:6: Error: Expected an identifier, but got '['.
+// Try inserting an identifier before '['.
+//   c?.[42]++;
+//      ^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:9:6: Error: Can't assign to this.
+//   c?.[42]++;
+//      ^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:10:8: Error: Expected an identifier, but got '['.
+// Try inserting an identifier before '['.
+//   ++c?.[42];
+//        ^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:10:8: Error: Can't assign to this.
+//   ++c?.[42];
+//        ^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:11:6: Error: Expected an identifier, but got '['.
+// Try inserting an identifier before '['.
+//   c?.[42]?.[0];
+//      ^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:11:12: Error: Expected an identifier, but got '['.
+// Try inserting an identifier before '['.
+//   c?.[42]?.[0];
+//            ^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:12:6: Error: Expected an identifier, but got '['.
+// Try inserting an identifier before '['.
+//   c?.[42]?.[0] ??= 42;
+//      ^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:12:12: Error: Expected an identifier, but got '['.
+// Try inserting an identifier before '['.
+//   c?.[42]?.[0] ??= 42;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:12:16: Error: Can't assign to this.
+//   c?.[42]?.[0] ??= 42;
+//                ^^^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:6: Error: Expected an identifier, but got '['.
+// Try inserting an identifier before '['.
+//   c?.[42]?.[0]++;
+//      ^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:12: Error: Expected an identifier, but got '['.
+// Try inserting an identifier before '['.
+//   c?.[42]?.[0]++;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:12: Error: Can't assign to this.
+//   c?.[42]?.[0]++;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:8: Error: Expected an identifier, but got '['.
+// Try inserting an identifier before '['.
+//   ++c?.[42]?.[0];
+//        ^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:14: Error: Expected an identifier, but got '['.
+// Try inserting an identifier before '['.
+//   ++c?.[42]?.[0];
+//              ^
+//
+// pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:14: Error: Can't assign to this.
+//   ++c?.[42]?.[0];
+//              ^
+//
+import self as self;
+
+static method main() → dynamic {
+  dynamic c;
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:7:6: Error: Expected an identifier, but got '['.
+Try inserting an identifier before '['.
+  c?.[42];
+     ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:8:11: Error: Can't assign to this.
+  c?.[42] = 42;
+          ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:9:6: Error: Can't assign to this.
+  c?.[42]++;
+     ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:9:6: Error: Expected an identifier, but got '['.
+Try inserting an identifier before '['.
+  c?.[42]++;
+     ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:10:8: Error: Can't assign to this.
+  ++c?.[42];
+       ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:10:8: Error: Expected an identifier, but got '['.
+Try inserting an identifier before '['.
+  ++c?.[42];
+       ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:11:12: Error: Expected an identifier, but got '['.
+Try inserting an identifier before '['.
+  c?.[42]?.[0];
+           ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:12:16: Error: Can't assign to this.
+  c?.[42]?.[0] ??= 42;
+               ^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:12: Error: Can't assign to this.
+  c?.[42]?.[0]++;
+           ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:13:12: Error: Expected an identifier, but got '['.
+Try inserting an identifier before '['.
+  c?.[42]?.[0]++;
+           ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:14: Error: Can't assign to this.
+  ++c?.[42]?.[0];
+             ^" in invalid-expression "pkg/front_end/testcases/nnbd/no_support_for_old_null_aware_index_access_syntax.dart:14:14: Error: Expected an identifier, but got '['.
+Try inserting an identifier before '['.
+  ++c?.[42]?.[0];
+             ^";
+}
diff --git a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.modular.expect
new file mode 100644
index 0000000..ecbc399
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.modular.expect
@@ -0,0 +1,141 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:7:5: Error: Field 'topLevelField' should be initialized because its type 'int' doesn't allow null.
+// int topLevelField; // Error.
+//     ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:10:14: Error: Field 'staticFieldOfA' should be initialized because its type 'int' doesn't allow null.
+//   static int staticFieldOfA; // Error.
+//              ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:24:14: Error: Field 'staticFieldOfM' should be initialized because its type 'int' doesn't allow null.
+//   static int staticFieldOfM; // Error.
+//              ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:34:14: Error: Field 'staticFieldOfE' should be initialized because its type 'int' doesn't allow null.
+//   static int staticFieldOfE; // Error.
+//              ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:12:3: Error: This constructor should initialize field 'fieldOfA' because its type 'int' doesn't allow null.
+//   A.foo();
+//   ^
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:11:7: Context: 'fieldOfA' is defined here.
+//   int fieldOfA; // Error.
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:19:3: Error: This constructor should initialize field 'fieldOfB' because its type 'X' doesn't allow null.
+//   B.foo();
+//   ^
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:17:5: Context: 'fieldOfB' is defined here.
+//   X fieldOfB; // Error.
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:19:3: Error: This constructor should initialize field 'fieldOfB2' because its type 'Y' doesn't allow null.
+//   B.foo();
+//   ^
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:18:5: Context: 'fieldOfB2' is defined here.
+//   Y fieldOfB2; // Error.
+//     ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:25:7: Error: Field 'fieldOfM' should be initialized because its type 'int' doesn't allow null.
+//   int fieldOfM; // Error.
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:29:5: Error: Field 'fieldOfN' should be initialized because its type 'X' doesn't allow null.
+//   X fieldOfN; // Error.
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:30:5: Error: Field 'fieldOfN2' should be initialized because its type 'Y' doesn't allow null.
+//   Y fieldOfN2; // Error.
+//     ^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+}
+class A extends core::Object {
+  static field core::int staticFieldOfA = null;
+  field core::int fieldOfA;
+  constructor foo() → self::A
+    : self::A::fieldOfA = null, super core::Object::•()
+    ;
+  constructor bar(core::int fieldOfA) → self::A
+    : self::A::fieldOfA = fieldOfA, super core::Object::•()
+    ;
+}
+class B<X extends core::Object?, Y extends core::Object> extends core::Object {
+  covariant-by-class field self::B::X% fieldOfB;
+  covariant-by-class field self::B::Y fieldOfB2;
+  constructor foo() → self::B<self::B::X%, self::B::Y>
+    : self::B::fieldOfB2 = null, self::B::fieldOfB = null, super core::Object::•()
+    ;
+  constructor bar(self::B::X% fieldOfB, self::B::Y fieldOfB2) → self::B<self::B::X%, self::B::Y>
+    : self::B::fieldOfB = fieldOfB, self::B::fieldOfB2 = fieldOfB2, super core::Object::•()
+    ;
+}
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+  static field core::int staticFieldOfM = null;
+  field core::int fieldOfM = null;
+}
+abstract class N<X extends core::Object?, Y extends core::Object> extends core::Object /*isMixinDeclaration*/  {
+  covariant-by-class field self::N::X% fieldOfN = null;
+  covariant-by-class field self::N::Y fieldOfN2 = null;
+}
+class C<X extends core::Object?, Y extends core::Object> extends core::Object {
+  static field core::int? staticFieldOfX = null;
+  static field core::int staticFieldOfXInitialized = 42;
+  covariant-by-class field self::C::X? fieldOfX = null;
+  field core::int? fieldOfX2 = null;
+  field dynamic fieldOfX3 = null;
+  field Null fieldOfX4 = null;
+  field () →? core::int fieldOfX5 = null;
+  covariant-by-class field self::C::Y? fieldOfX6 = null;
+  late static field core::int lateStaticFieldOfC;
+  late field core::int fieldOfC7;
+  late covariant-by-class field self::C::X% fieldOfC8;
+  late covariant-by-class field self::C::Y fieldOfC9;
+  field core::int fieldOfC10;
+  constructor foo(core::int fieldOfC10) → self::C<self::C::X%, self::C::Y>
+    : self::C::fieldOfC10 = fieldOfC10, super core::Object::•()
+    ;
+  constructor bar(core::int fieldOfC10) → self::C<self::C::X%, self::C::Y>
+    : self::C::fieldOfC10 = fieldOfC10, super core::Object::•()
+    ;
+}
+abstract class L<X extends core::Object?, Y extends core::Object> extends core::Object /*isMixinDeclaration*/  {
+  static field core::int? staticFieldOfL = null;
+  static field core::int staticFieldOfLInitialized = 42;
+  covariant-by-class field self::L::X? fieldOfL = null;
+  field core::int? fieldOfL2 = null;
+  field dynamic fieldOfL3 = null;
+  field Null fieldOfL4 = null;
+  field () →? core::int fieldOfL5 = null;
+  covariant-by-class field self::L::Y? fieldOfL6 = null;
+  late static field core::int lateStaticFieldOfM;
+  late field core::int fieldOfM7;
+  late covariant-by-class field self::L::X% fieldOfM8;
+  late covariant-by-class field self::L::Y fieldOfM9;
+}
+extension P on self::Foo {
+  static field staticFieldOfE = self::P|staticFieldOfE;
+}
+extension Q on self::Foo {
+  static field staticFieldOfQ = self::Q|staticFieldOfQ;
+  static field lateStaticFieldOfQ = self::Q|lateStaticFieldOfQ;
+  static field staticFieldOfQInitialized = self::Q|staticFieldOfQInitialized;
+}
+static field core::int topLevelField;
+static field core::int P|staticFieldOfE;
+static field core::int? nullableTopLevelField;
+late static field core::int lateTopLevelField;
+static field core::int topLevelFieldWithInitializer = 42;
+static field core::int? Q|staticFieldOfQ;
+late static field core::int Q|lateStaticFieldOfQ;
+static field core::int Q|staticFieldOfQInitialized = 42;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/non_nullable_optional.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/non_nullable_optional.dart.weak.modular.expect
new file mode 100644
index 0000000..f03bd13
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/non_nullable_optional.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/non_nullable_optional.dart:9:14: Error: The parameter 'a' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// method1({int a}) {}
+//              ^
+//
+// pkg/front_end/testcases/nnbd/non_nullable_optional.dart:11:14: Error: The parameter 'a' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// method2([int a]) {}
+//              ^
+//
+// pkg/front_end/testcases/nnbd/non_nullable_optional_part.dart:7:14: Error: The parameter 'a' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// method3({int a}) {}
+//              ^
+//
+// pkg/front_end/testcases/nnbd/non_nullable_optional_part.dart:9:14: Error: The parameter 'a' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// method4([int a]) {}
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+part non_nullable_optional_part.dart;
+static method main() → dynamic {}
+static method method1({core::int a = #C1}) → dynamic {}
+static method method2([core::int a = #C1]) → dynamic {}
+static method /* from org-dartlang-testcase:///non_nullable_optional_part.dart */ method3({core::int a = #C1}) → dynamic {}
+static method /* from org-dartlang-testcase:///non_nullable_optional_part.dart */ method4([core::int a = #C1]) → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..abcb54d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart.weak.modular.expect
@@ -0,0 +1,220 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:9:10: Error: 'topLevelMethodAndSetter' is already declared in this scope.
+// void set topLevelMethodAndSetter(value) {}
+//          ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:6:10: Context: Previous declaration of 'topLevelMethodAndSetter'.
+// void set topLevelMethodAndSetter(value) {}
+//          ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:29:12: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   void set Class(value) {}
+//            ^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart: Error: 'topLevelMethodAndSetter' is exported from both 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:9:10: Error: Conflicts with member 'topLevelMethodAndSetter'.
+// void set topLevelMethodAndSetter(value) {}
+//          ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:6:10: Error: Conflicts with member 'topLevelMethodAndSetter'.
+// void set topLevelMethodAndSetter(value) {}
+//          ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:5:1: Error: Conflicts with setter 'topLevelMethodAndSetter'.
+// topLevelMethodAndSetter() {}
+// ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:13:10: Error: Conflicts with member 'classAndSetter'.
+// void set classAndSetter(value) {}
+//          ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:11:7: Error: Conflicts with setter 'classAndSetter'.
+// class classAndSetter {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:34:12: Error: Conflicts with member 'extensionInstanceMethodAndSetter'.
+//   void set extensionInstanceMethodAndSetter(value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:33:3: Error: Conflicts with setter 'extensionInstanceMethodAndSetter'.
+//   extensionInstanceMethodAndSetter() {}
+//   ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:37:19: Error: Conflicts with member 'extensionStaticMethodAndSetter'.
+//   static void set extensionStaticMethodAndSetter(value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:36:10: Error: Conflicts with setter 'extensionStaticMethodAndSetter'.
+//   static extensionStaticMethodAndSetter() {}
+//          ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:40:19: Error: Conflicts with member 'extensionInstanceMethodAndStaticSetter'.
+//   static void set extensionInstanceMethodAndStaticSetter(value) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:39:3: Error: Conflicts with setter 'extensionInstanceMethodAndStaticSetter'.
+//   extensionInstanceMethodAndStaticSetter() {}
+//   ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:43:12: Error: Conflicts with member 'extensionStaticMethodAndInstanceSetter'.
+//   void set extensionStaticMethodAndInstanceSetter(value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:42:10: Error: Conflicts with setter 'extensionStaticMethodAndInstanceSetter'.
+//   static extensionStaticMethodAndInstanceSetter() {}
+//          ^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:17:12: Error: 'instanceMethodAndSetter' is already declared in this scope.
+//   void set instanceMethodAndSetter(value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:16:3: Context: Previous declaration of 'instanceMethodAndSetter'.
+//   instanceMethodAndSetter() {}
+//   ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:20:19: Error: 'staticMethodAndSetter' is already declared in this scope.
+//   static void set staticMethodAndSetter(value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:19:10: Context: Previous declaration of 'staticMethodAndSetter'.
+//   static staticMethodAndSetter() {}
+//          ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:23:19: Error: This static member conflicts with an instance member.
+//   static void set instanceMethodAndStaticSetter(value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:22:3: Context: This is the instance member.
+//   instanceMethodAndStaticSetter() {}
+//   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:25:10: Error: This static member conflicts with an instance member.
+//   static staticMethodAndInstanceSetter() {}
+//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:26:12: Context: This is the instance member.
+//   void set staticMethodAndInstanceSetter(value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:47:3: Error: Setter not found: 'topLevelMethodAndSetter'.
+//   topLevelMethodAndSetter = topLevelMethodAndSetter();
+//   ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:22: Error: Couldn't find constructor 'typedefAndSetter'.
+//   typedefAndSetter = typedefAndSetter();
+//                      ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:3: Error: Can't assign to a type literal.
+//   typedefAndSetter = typedefAndSetter();
+//   ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:49:3: Error: Can't assign to a type literal.
+//   classAndSetter = classAndSetter();
+//   ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:55:9: Error: Setter not found: 'staticMethodAndSetter'.
+//   Class.staticMethodAndSetter = Class.staticMethodAndSetter();
+//         ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:65:13: Error: Setter not found: 'extensionStaticMethodAndSetter'.
+//   Extension.extensionStaticMethodAndSetter =
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:61:15: Error: The getter 'Class' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
+//   c.Class = c.Class;
+//               ^^^^^
+//
+// pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:63:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
+//   0.extensionInstanceFieldAndSetter = 0.extensionInstanceMethodAndSetter();
+//     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef typedefAndSetter = () → dynamic;
+class classAndSetter extends core::Object {
+  synthetic constructor •() → self::classAndSetter
+    : super core::Object::•()
+    ;
+}
+class Class extends core::Object {
+  constructor •() → self::Class
+    : super core::Object::•() {}
+  method instanceMethodAndSetter() → dynamic {}
+  set instanceMethodAndSetter(dynamic value) → void {}
+  static method staticMethodAndSetter() → dynamic {}
+  static set staticMethodAndSetter(dynamic value) → void {}
+  method instanceMethodAndStaticSetter() → dynamic {}
+  static set instanceMethodAndStaticSetter(dynamic value) → void {}
+  static method staticMethodAndInstanceSetter() → dynamic {}
+  set staticMethodAndInstanceSetter(dynamic value) → void {}
+  set Class(dynamic value) → void {}
+}
+extension Extension on core::int? {
+  method extensionInstanceMethodAndSetter = self::Extension|extensionInstanceMethodAndSetter;
+  tearoff extensionInstanceMethodAndSetter = self::Extension|get#extensionInstanceMethodAndSetter;
+  static method extensionStaticMethodAndSetter = self::Extension|extensionStaticMethodAndSetter;
+  method extensionInstanceMethodAndStaticSetter = self::Extension|extensionInstanceMethodAndStaticSetter;
+  tearoff extensionInstanceMethodAndStaticSetter = self::Extension|get#extensionInstanceMethodAndStaticSetter;
+  static method extensionStaticMethodAndInstanceSetter = self::Extension|extensionStaticMethodAndInstanceSetter;
+  set extensionInstanceMethodAndSetter = self::Extension|set#extensionInstanceMethodAndSetter;
+  static set extensionStaticMethodAndSetter = set self::Extension|extensionStaticMethodAndSetter;
+  static set extensionInstanceMethodAndStaticSetter = set self::Extension|extensionInstanceMethodAndStaticSetter;
+  set extensionStaticMethodAndInstanceSetter = self::Extension|set#extensionStaticMethodAndInstanceSetter;
+}
+static const field dynamic _exports# = #C1 /*isLegacy*/;
+static method topLevelMethodAndSetter() → dynamic {}
+static set topLevelMethodAndSetter(dynamic value) → void {}
+static set classAndSetter(dynamic value) → void {}
+static method Extension|extensionInstanceMethodAndSetter(lowered final core::int? #this) → dynamic {}
+static method Extension|get#extensionInstanceMethodAndSetter(lowered final core::int? #this) → () → dynamic
+  return () → dynamic => self::Extension|extensionInstanceMethodAndSetter(#this);
+static method Extension|set#extensionInstanceMethodAndSetter(lowered final core::int? #this, dynamic value) → void {}
+static method Extension|extensionStaticMethodAndSetter() → dynamic {}
+static set Extension|extensionStaticMethodAndSetter(dynamic value) → void {}
+static method Extension|extensionInstanceMethodAndStaticSetter(lowered final core::int? #this) → dynamic {}
+static method Extension|get#extensionInstanceMethodAndStaticSetter(lowered final core::int? #this) → () → dynamic
+  return () → dynamic => self::Extension|extensionInstanceMethodAndStaticSetter(#this);
+static set Extension|extensionInstanceMethodAndStaticSetter(dynamic value) → void {}
+static method Extension|extensionStaticMethodAndInstanceSetter() → dynamic {}
+static method Extension|set#extensionStaticMethodAndInstanceSetter(lowered final core::int? #this, dynamic value) → void {}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:47:3: Error: Setter not found: 'topLevelMethodAndSetter'.
+  topLevelMethodAndSetter = topLevelMethodAndSetter();
+  ^^^^^^^^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:48:3: Error: Can't assign to a type literal.
+  typedefAndSetter = typedefAndSetter();
+  ^^^^^^^^^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:49:3: Error: Can't assign to a type literal.
+  classAndSetter = classAndSetter();
+  ^^^^^^^^^^^^^^";
+  self::Class c = new self::Class::•();
+  c.{self::Class::instanceMethodAndSetter} = c.{self::Class::instanceMethodAndSetter}(){() → dynamic};
+  invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:55:9: Error: Setter not found: 'staticMethodAndSetter'.
+  Class.staticMethodAndSetter = Class.staticMethodAndSetter();
+        ^^^^^^^^^^^^^^^^^^^^^";
+  c.{self::Class::staticMethodAndInstanceSetter} = self::Class::staticMethodAndInstanceSetter();
+  self::Class::instanceMethodAndStaticSetter = c.{self::Class::instanceMethodAndStaticSetter}(){() → dynamic};
+  c.{self::Class::Class} = invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:61:15: Error: The getter 'Class' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'Class'.
+  c.Class = c.Class;
+              ^^^^^" in c{<unresolved>}.Class;
+  invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:63:5: Error: The setter 'extensionInstanceFieldAndSetter' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'extensionInstanceFieldAndSetter'.
+  0.extensionInstanceFieldAndSetter = 0.extensionInstanceMethodAndSetter();
+    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" in 0{<unresolved>}.extensionInstanceFieldAndSetter = self::Extension|extensionInstanceMethodAndSetter(0);
+  invalid-expression "pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart:65:13: Error: Setter not found: 'extensionStaticMethodAndSetter'.
+  Extension.extensionStaticMethodAndSetter =
+            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
+  self::Extension|set#extensionStaticMethodAndInstanceSetter(0, self::Extension|extensionStaticMethodAndInstanceSetter());
+  self::Extension|extensionInstanceMethodAndStaticSetter = self::Extension|extensionInstanceMethodAndStaticSetter(0);
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "{\"topLevelMethodAndSetter\":\"'topLevelMethodAndSetter' is exported from both 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart' and 'pkg/front_end/testcases/nnbd/nonfield_vs_setter.dart'.\"}"
+}
diff --git a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.modular.expect
new file mode 100644
index 0000000..682b905
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  abstract method baz() → self::A::T%;
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
+  method barInt(core::int value) → dynamic {}
+  method foo() → dynamic {
+    late self::A::T% value;
+    late core::int intValue;
+    () → Null result = () → Null {
+      this.{self::A::bar}(value){(self::A::T%) → dynamic};
+      this.{self::A::barInt}(intValue){(core::int) → dynamic};
+    };
+    (() → Null {
+      value = this.{self::A::baz}(){() → self::A::T%};
+      intValue = 42;
+    })(){() → Null};
+    return result;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/null_access.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/null_access.dart.weak.modular.expect
new file mode 100644
index 0000000..e32613c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/null_access.dart.weak.modular.expect
@@ -0,0 +1,204 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+//   -nullableInt; // error
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+//   nullableInt + 2; // error
+//               ^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+//   nullableClass[nonNullableInt]; // error
+//                ^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+//   nullableClass[nonNullableInt] = nonNullableInt; // error
+//                ^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+//   nullableClass[nonNullableInt] += nonNullableInt; // error
+//                ^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+//   nullableClass[nonNullableInt] += nonNullableInt; // error
+//                ^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
+//  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+//   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
+//  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+//   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+// Try accessing using ?. instead.
+//   nullableClass.nonNullableField; // error
+//                 ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+// Try accessing using ?. instead.
+//   nullableClass.nonNullableField = 2; // error
+//                 ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+// Try accessing using ?. instead.
+//   nullableClass.nonNullableField += 2; // error
+//                 ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+//   nonNullableClass.nullableField += 2; // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
+//   nonNullableClass.nullableField += 2; // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+//   nullableClass?.nullableField += 2; // error
+//                                ^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
+//   nullableClass?.nullableField += 2; // error
+//                                ^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:54:35: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   nullableClass?.nonNullableClass.nonNullableField ??= 0; // ok
+//                                   ^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+// Try calling using ?.call instead.
+//   nullableClass(); // error
+//                ^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:59:3: Warning: Operand of null-aware operation '?.' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+//   nonNullableClass?.nonNullableClass(); // ok
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_access.dart:60:3: Warning: Operand of null-aware operation '?.' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+//   nonNullableClass?.nonNullableClass.nonNullableClass(); // ok
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int nonNullableField = 0;
+  field core::int? nullableField = null;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  operator [](core::int key) → core::int
+    return key;
+  operator []=(core::int key, core::int value) → void {}
+  get nonNullableClass() → self::Class
+    return this;
+  method call() → self::Class
+    return this;
+  get nonNullableNullableIndexClass() → self::NullableIndexClass
+    return new self::NullableIndexClass::•();
+}
+class NullableIndexClass extends core::Object {
+  synthetic constructor •() → self::NullableIndexClass
+    : super core::Object::•()
+    ;
+  operator [](core::int key) → core::int?
+    return key;
+  operator []=(core::int key, core::int value) → void {}
+}
+static method main() → dynamic {}
+static method errors(self::Class? nullableClass, self::Class nonNullableClass, core::int? nullableInt, core::int nonNullableInt, self::NullableIndexClass? nullableNullableIndexClass) → dynamic {
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  -nullableInt; // error
+  ^" in nullableInt.{core::int::unary-}(){() → core::int};
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  nullableInt + 2; // error
+              ^" in nullableInt.{core::num::+}(2){(core::num) → core::num};
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableClass[nonNullableInt]; // error
+               ^" in nullableClass.{self::Class::[]}{<nullable>}.(nonNullableInt){(core::int) → core::int};
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableClass[nonNullableInt] = nonNullableInt; // error
+               ^" in nullableClass.{self::Class::[]=}{<nullable>}.(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
+  let final self::Class? #t1 = nullableClass in let final core::int #t2 = nonNullableInt in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableClass[nonNullableInt] += nonNullableInt; // error
+               ^" in #t1.{self::Class::[]=}{<nullable>}.(#t2, invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableClass[nonNullableInt] += nonNullableInt; // error
+               ^" in #t1.{self::Class::[]}{<nullable>}.(#t2){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::NullableIndexClass? #t3 = nullableNullableIndexClass in let final core::int #t4 = nonNullableInt in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
+ - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
+                            ^" in #t3.{self::NullableIndexClass::[]}{<nullable>}.(#t4){(core::int) → core::int?} == null ?{core::int} invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
+ - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
+                            ^" in #t3.{self::NullableIndexClass::[]=}{<nullable>}.(#t4, nonNullableInt){(core::int, core::int) → void} : null;
+  let final self::Class? #t5 = nullableClass in #t5 == null ?{core::int?} null : #t5{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]}(nonNullableInt){(core::int) → core::int};
+  let final self::Class? #t6 = nullableClass in #t6 == null ?{core::int?} null : #t6{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::[]=}(nonNullableInt, nonNullableInt){(core::int, core::int) → void};
+  let final self::Class? #t7 = nullableClass in #t7 == null ?{core::int?} null : let final self::Class #t8 = #t7{self::Class}.{self::Class::nonNullableClass}{self::Class} in let final core::int #t9 = nonNullableInt in #t8.{self::Class::[]=}(#t9, #t8.{self::Class::[]}(#t9){(core::int) → core::int}.{core::num::+}(nonNullableInt){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class? #t10 = nullableClass in #t10 == null ?{core::int?} null : let final self::NullableIndexClass #t11 = #t10{self::Class}.{self::Class::nonNullableNullableIndexClass}{self::NullableIndexClass} in let final core::int #t12 = nonNullableInt in #t11.{self::NullableIndexClass::[]}(#t12){(core::int) → core::int?} == null ?{core::int} #t11.{self::NullableIndexClass::[]=}(#t12, nonNullableInt){(core::int, core::int) → void} : null;
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+Try accessing using ?. instead.
+  nullableClass.nonNullableField; // error
+                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}.{core::int};
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+Try accessing using ?. instead.
+  nullableClass.nonNullableField = 2; // error
+                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField}{<nullable>}. = 2;
+  let final self::Class? #t13 = nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+Try accessing using ?. instead.
+  nullableClass.nonNullableField += 2; // error
+                ^^^^^^^^^^^^^^^^" in #t13.{self::Class::nonNullableField}{<nullable>}. = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+Try accessing using ?. instead.
+  nullableClass.nonNullableField += 2; // error
+                ^^^^^^^^^^^^^^^^" in #t13.{self::Class::nonNullableField}{<nullable>}.{core::int}.{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t14 = nullableClass in #t14 == null ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t15 = nullableClass in #t15 == null ?{core::int?} null : #t15{self::Class}.{self::Class::nonNullableField} = 2;
+  let final self::Class? #t16 = nullableClass in #t16 == null ?{core::int?} null : #t16.{self::Class::nonNullableField} = #t16.{self::Class::nonNullableField}{core::int}.{core::num::+}(2){(core::num) → core::int};
+  let final self::Class? #t17 = nullableClass in #t17 == null ?{core::int?} null : #t17{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField}{core::int};
+  let final self::Class? #t18 = nullableClass in #t18 == null ?{core::int?} null : #t18{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableField} = 2;
+  let final self::Class #t19 = nonNullableClass in #t19.{self::Class::nullableField} = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
+  nonNullableClass.nullableField += 2; // error
+                                 ^" in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  nonNullableClass.nullableField += 2; // error
+                                 ^" in #t19.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int?;
+  let final self::Class? #t20 = nullableClass in #t20 == null ?{core::num?} null : #t20.{self::Class::nullableField} = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: A value of type 'num' can't be assigned to a variable of type 'int?'.
+  nullableClass?.nullableField += 2; // error
+                               ^" in invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  nullableClass?.nullableField += 2; // error
+                               ^" in #t20.{self::Class::nullableField}{core::int?}.{core::num::+}(2){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int?;
+  let final self::Class? #t21 = nullableClass in #t21 == null ?{core::int?} null : #t21.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t21.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t22 = nullableClass in #t22 == null ?{core::int?} null : #t22.{self::Class::nullableField}{core::int?} == null ?{core::int} #t22.{self::Class::nullableField} = 0 : null;
+  let final self::Class? #t23 = nullableClass in #t23 == null ?{core::int?} null : let final self::Class #t24 = #t23{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t24.{self::Class::nonNullableField}{core::int} == null ?{core::int} #t24.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t25 = nullableClass in #t25 == null ?{core::int?} null : let final self::Class #t26 = #t25{self::Class}.{self::Class::nonNullableClass}{self::Class} in #t26.{self::Class::nullableField}{core::int?} == null ?{core::int} #t26.{self::Class::nullableField} = 0 : null;
+  invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+Try calling using ?.call instead.
+  nullableClass(); // error
+               ^" in nullableClass.{self::Class::call}{<nullable>}.(){() → self::Class};
+  nonNullableClass.{self::Class::call}(){() → self::Class};
+  let final self::Class #t27 = nonNullableClass in #t27 == null ?{self::Class?} null : #t27.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
+  let final self::Class #t28 = nonNullableClass in #t28 == null ?{self::Class?} null : #t28.{self::Class::nonNullableClass}{self::Class}.{self::Class::nonNullableClass}{self::Class}.{self::Class::call}(){() → self::Class};
+}
diff --git a/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.modular.expect
new file mode 100644
index 0000000..ce3973c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/null_aware_chain.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field self::Class? field;
+  constructor •([self::Class? field = #C1]) → self::Class
+    : self::Class::field = field, super core::Object::•()
+    ;
+  get getter1() → self::Class
+    return this;
+  get getter2() → self::Class?
+    return this.{self::Class::field}{self::Class?};
+}
+static method main() → dynamic {
+  self::Class? c = new self::Class::•() as{ForNonNullableByDefault} self::Class?;
+  let final self::Class? #t1 = c in #t1 == null ?{self::Class?} null : let final self::Class? #t2 = #t1{self::Class}.{self::Class::getter1}{self::Class}.{self::Class::getter2}{self::Class?} in #t2 == null ?{self::Class?} null : let final self::Class? #t3 = #t2{self::Class}.{self::Class::getter1}{self::Class}.{self::Class::getter2}{self::Class?} in #t3 == null ?{self::Class?} null : #t3{self::Class}.{self::Class::field} = c{self::Class};
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.weak.modular.expect
new file mode 100644
index 0000000..9811bce
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/null_aware_static_access.dart.weak.modular.expect
@@ -0,0 +1,98 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/null_aware_static_access.dart:17:3: Warning: The class 'C' cannot be null.
+// Try replacing '?.' with '.'
+//   C?.staticMember;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_aware_static_access.dart:18:3: Warning: The class 'C' cannot be null.
+// Try replacing '?.' with '.'
+//   C?.staticMember;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_aware_static_access.dart:19:3: Warning: The class 'C' cannot be null.
+// Try replacing '?.' with '.'
+//   C?.staticMember = 42;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_aware_static_access.dart:21:3: Warning: The class 'C' cannot be null.
+// Try replacing '?.' with '.'
+//   C?.staticMember.isEven;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_aware_static_access.dart:22:3: Warning: The class 'C' cannot be null.
+// Try replacing '?.' with '.'
+//   C?.staticMember.toString();
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_aware_static_access.dart:23:3: Warning: The class 'C' cannot be null.
+// Try replacing '?.' with '.'
+//   C?.property[0];
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_aware_static_access.dart:24:3: Warning: The class 'C' cannot be null.
+// Try replacing '?.' with '.'
+//   C?.property[0] = 0;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_aware_static_access.dart:25:3: Warning: The class 'C' cannot be null.
+// Try replacing '?.' with '.'
+//   C?.property2[0] ??= 0;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_aware_static_access.dart:26:3: Warning: The class 'C' cannot be null.
+// Try replacing '?.' with '.'
+//   C?.staticMember2 ??= 42;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_aware_static_access.dart:27:3: Warning: The class 'C' cannot be null.
+// Try replacing '?.' with '.'
+//   C?.staticMember += 2;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_aware_static_access.dart:28:3: Warning: The class 'C' cannot be null.
+// Try replacing '?.' with '.'
+//   C?.staticMember++;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_aware_static_access.dart:29:5: Warning: The class 'C' cannot be null.
+// Try replacing '?.' with '.'
+//   --C?.staticMember;
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  static get staticMember() → core::int
+    return 0;
+  static set staticMember(core::int value) → void {}
+  static get staticMember2() → core::int?
+    return 0;
+  static set staticMember2(core::int? value) → void {}
+  static method staticMethod() → void {}
+  static get property() → core::List<core::int>
+    return <core::int>[0];
+  static get property2() → core::Map<core::int, core::int?>
+    return <core::int, core::int?>{};
+}
+static method main() → void {
+  self::C::staticMember;
+  self::C::staticMember;
+  self::C::staticMember = 42;
+  self::C::staticMethod();
+  self::C::staticMember.{core::int::isEven}{core::bool};
+  self::C::staticMember.{core::int::toString}(){() → core::String};
+  self::C::property.{core::List::[]}(0){(core::int) → core::int};
+  self::C::property.{core::List::[]=}(0, 0){(core::int, core::int) → void};
+  let final core::Map<core::int, core::int?> #t1 = self::C::property2 in let final core::int #t2 = 0 in #t1.{core::Map::[]}(#t2){(core::Object?) → core::int?} == null ?{core::int} #t1.{core::Map::[]=}(#t2, 0){(core::int, core::int?) → void} : null;
+  self::C::staticMember2 == null ?{core::int} self::C::staticMember2 = 42 : null;
+  self::C::staticMember = self::C::staticMember.{core::num::+}(2){(core::num) → core::int};
+  self::C::staticMember = self::C::staticMember.{core::num::+}(1){(core::num) → core::int};
+  self::C::staticMember = self::C::staticMember.{core::num::-}(1){(core::num) → core::int};
+}
diff --git a/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.weak.modular.expect
new file mode 100644
index 0000000..aac887e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/null_aware_this_access.dart.weak.modular.expect
@@ -0,0 +1,170 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:12:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?.m1;
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:13:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?.m1 = 42;
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:14:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?.method();
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:15:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?.property.m1;
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:16:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?.property.method();
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:17:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?[0];
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:18:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?[0] = 0;
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:19:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?[0] ??= 0;
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:20:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?.property[0];
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:21:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?.property[0] = 0;
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:22:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?.property[0] ??= 0;
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:23:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?.m1 ??= 42;
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:24:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?.m2 += 2;
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:25:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?.m2++;
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:26:7: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     --this?.m2;
+//       ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:27:5: Warning: Operand of null-aware operation '??' has type 'C' which excludes null.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd/null_aware_this_access.dart'.
+//     this ?? new C();
+//     ^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:41:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?[0];
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:42:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?[0] = 0;
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:43:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?[0] += 0;
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:44:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?.property[0];
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:45:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?.property[0] = 0;
+//     ^^^^
+//
+// pkg/front_end/testcases/nnbd/null_aware_this_access.dart:46:5: Warning: The receiver 'this' cannot be null.
+// Try replacing '?.' with '.'
+//     this?.property[0] += 0;
+//     ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int? m1 = null;
+  field core::int m2 = 0;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  get property() → self::C
+    return this;
+  method test() → dynamic {
+    this.{self::C::m1}{core::int?};
+    this.{self::C::m1} = 42;
+    this.{self::C::method}(){() → dynamic};
+    this.{self::C::property}{self::C}.{self::C::m1}{core::int?};
+    this.{self::C::property}{self::C}.{self::C::method}(){() → dynamic};
+    this.{self::C::[]}(0){(core::int) → core::int?};
+    this.{self::C::[]=}(0, 0){(core::int, core::int) → void};
+    let final core::int #t1 = 0 in this.{self::C::[]}(#t1){(core::int) → core::int?} == null ?{core::int} this.{self::C::[]=}(#t1, 0){(core::int, core::int) → void} : null;
+    this.{self::C::property}{self::C}.{self::C::[]}(0){(core::int) → core::int?};
+    this.{self::C::property}{self::C}.{self::C::[]=}(0, 0){(core::int, core::int) → void};
+    let final self::C #t2 = this.{self::C::property}{self::C} in let final core::int #t3 = 0 in #t2.{self::C::[]}(#t3){(core::int) → core::int?} == null ?{core::int} #t2.{self::C::[]=}(#t3, 0){(core::int, core::int) → void} : null;
+    this.{self::C::m1}{core::int?} == null ?{core::int} this.{self::C::m1} = 42 : null;
+    this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(2){(core::num) → core::int};
+    this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::+}(1){(core::num) → core::int};
+    this.{self::C::m2} = this.{self::C::m2}{core::int}.{core::num::-}(1){(core::num) → core::int};
+    this;
+  }
+  operator [](core::int index) → core::int?
+    return 0;
+  operator []=(core::int index, core::int value) → void {}
+  method method() → dynamic {}
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+  get property() → self::D
+    return this;
+  method test() → dynamic {
+    this.{self::D::[]}(0){(core::int) → core::int};
+    this.{self::D::[]=}(0, 0){(core::int, core::int) → void};
+    let final core::int #t4 = 0 in this.{self::D::[]=}(#t4, this.{self::D::[]}(#t4){(core::int) → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int, core::int) → void};
+    this.{self::D::property}{self::D}.{self::D::[]}(0){(core::int) → core::int};
+    this.{self::D::property}{self::D}.{self::D::[]=}(0, 0){(core::int, core::int) → void};
+    let final self::D #t5 = this.{self::D::property}{self::D} in let final core::int #t6 = 0 in #t5.{self::D::[]=}(#t6, #t5.{self::D::[]}(#t6){(core::int) → core::int}.{core::num::+}(0){(core::num) → core::int}){(core::int, core::int) → void};
+  }
+  operator [](core::int index) → core::int
+    return 0;
+  operator []=(core::int index, core::int value) → void {}
+}
+static method main() → dynamic {
+  new self::C::•().{self::C::test}(){() → dynamic};
+  new self::D::•().{self::D::test}(){() → dynamic};
+}
diff --git a/pkg/front_end/testcases/nnbd/null_check.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/null_check.dart.weak.modular.expect
new file mode 100644
index 0000000..bbfe2d7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/null_check.dart.weak.modular.expect
@@ -0,0 +1,117 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:14:3: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
+//   c!.field;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:15:3: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
+//   c!.field = 42;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:16:3: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
+//   c!.method;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:17:3: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
+//   c!.method();
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:18:3: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
+//   c!.field!.toString();
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:19:3: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
+//   c!.method()!.toString();
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:20:3: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
+//   c! + c;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:21:3: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
+//   c! + c!;
+//   ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:21:8: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
+//   c! + c!;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:22:7: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
+//   c + c!;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:23:6: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
+//   (c + c)!;
+//      ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:26:10: Warning: Operand of null-aware operation '!' has type 'bool' which excludes null.
+//   !o! ? !o! : !!o!!;
+//          ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:26:17: Warning: Operand of null-aware operation '!' has type 'bool' which excludes null.
+//   !o! ? !o! : !!o!!;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:26:18: Warning: Operand of null-aware operation '!' has type 'bool' which excludes null.
+//   !o! ? !o! : !!o!!;
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:27:5: Warning: Operand of null-aware operation '!' has type 'bool' which excludes null.
+//   !(o!) ? (!o)! : (!(!o)!)!;
+//     ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:27:12: Warning: Operand of null-aware operation '!' has type 'bool' which excludes null.
+//   !(o!) ? (!o)! : (!(!o)!)!;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:27:22: Warning: Operand of null-aware operation '!' has type 'bool' which excludes null.
+//   !(o!) ? (!o)! : (!(!o)!)!;
+//                      ^
+//
+// pkg/front_end/testcases/nnbd/null_check.dart:27:20: Warning: Operand of null-aware operation '!' has type 'bool' which excludes null.
+//   !(o!) ? (!o)! : (!(!o)!)!;
+//                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? field = null;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method method() → core::int?
+    return this.{self::Class::field}{core::int?};
+  operator +(self::Class other) → self::Class
+    return new self::Class::•();
+}
+static method main() → dynamic {
+  self::Class? c = new self::Class::•() as{ForNonNullableByDefault} self::Class?;
+  c!;
+  c{self::Class}!.{self::Class::field}{core::int?};
+  c{self::Class}!.{self::Class::field} = 42;
+  c{self::Class}!.{self::Class::method}{() → core::int?};
+  c{self::Class}!.{self::Class::method}(){() → core::int?};
+  c{self::Class}!.{self::Class::field}{core::int?}!.{core::int::toString}(){() → core::String};
+  c{self::Class}!.{self::Class::method}(){() → core::int?}!.{core::int::toString}(){() → core::String};
+  c{self::Class}!.{self::Class::+}(c{self::Class}){(self::Class) → self::Class};
+  c{self::Class}!.{self::Class::+}(c{self::Class}!){(self::Class) → self::Class};
+  c{self::Class}.{self::Class::+}(c{self::Class}!){(self::Class) → self::Class};
+  c{self::Class}.{self::Class::+}(c{self::Class}){(self::Class) → self::Class}!;
+  core::bool? o = true as{ForNonNullableByDefault} core::bool?;
+  !o! ?{core::bool} !o{core::bool}! : !!o{core::bool}!!;
+  !o{core::bool}! ?{core::bool} (!o{core::bool})! : (!(!o{core::bool})!)!;
+}
diff --git a/pkg/front_end/testcases/nnbd/null_check_context.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/null_check_context.dart.weak.modular.expect
new file mode 100644
index 0000000..010a0ff
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/null_check_context.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  abstract method bar<T extends core::Object? = dynamic>() → self::A::bar::T%;
+  method foo() → core::String
+    return this.{self::A::bar}<core::String?>(){() → core::String?}!;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.modular.expect
new file mode 100644
index 0000000..6be85bf
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.modular.expect
@@ -0,0 +1,269 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+//  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
+// Try accessing using ?. instead.
+//   throws(() => (n1?.nullable1 = new Class1()).nullable1);
+//                                               ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+//  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
+// Try accessing using ?. instead.
+//   throws(() => (n1?.nonNullable1Method()).nullable1);
+//                                           ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+//  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
+//   throws(() => n1?.nonNullable1 + 0);
+//                                 ^
+//
+// pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+//  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
+//   throws(() => -n1?.nonNullable1);
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+  get property() → self::Class1?
+    return null;
+  set property(self::Class1? value) → void {}
+  get property1() → self::Class1
+    return new self::Class1::•();
+  get property2() → self::Class2
+    return new self::Class2::•();
+  get nullable1() → self::Class1?
+    return this.{self::Class1::property1}{self::Class1};
+  set nullable1(self::Class1? value) → void {
+    this.{self::Class1::property} = value;
+  }
+  method nonNullable1Method() → self::Class1
+    return this.{self::Class1::nonNullable1}{self::Class1};
+  operator [](self::Class1? key) → self::Class1?
+    return this.{self::Class1::nullable1}{self::Class1?};
+  operator []=(self::Class1? key, self::Class1? value) → void {
+    this.{self::Class1::property} = value;
+  }
+  operator +(core::int value) → self::Class1?
+    return this.{self::Class1::nullable1}{self::Class1?};
+  operator unary-() → self::Class1?
+    return this.{self::Class1::nullable1}{self::Class1?};
+  get nonNullable1() → self::Class1
+    return this.{self::Class1::property1}{self::Class1};
+  get nonNullable2() → self::Class2
+    return this.{self::Class1::property2}{self::Class2};
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+  get property() → self::Class2
+    return this;
+  set property(self::Class2 value) → void {}
+  method nonNullable2Method() → self::Class2
+    return this.{self::Class2::nonNullable2}{self::Class2};
+  operator [](self::Class2? key) → self::Class2
+    return this.{self::Class2::property}{self::Class2};
+  operator []=(self::Class2? key, self::Class2? value) → void
+    return this.{self::Class2::property}{self::Class2};
+  operator +(core::int value) → self::Class2
+    return this.{self::Class2::property}{self::Class2};
+  operator unary-() → self::Class2
+    return this.{self::Class2::property}{self::Class2};
+  get nonNullable2() → self::Class2
+    return this.{self::Class2::property}{self::Class2};
+  set nonNullable2(self::Class2 value) → void {
+    this.{self::Class2::property} = value;
+  }
+}
+class Class3 extends core::Object {
+  synthetic constructor •() → self::Class3
+    : super core::Object::•()
+    ;
+  get property() → self::Class2?
+    return null;
+  operator [](self::Class3? key) → self::Class2?
+    return this.{self::Class3::property}{self::Class2?};
+}
+static method main() → dynamic {
+  self::propertyAccess(null);
+  self::indexAccess(null, null, null);
+  self::operatorAccess(null, null);
+  self::ifNull(null);
+}
+static method propertyAccess(self::Class1? n1) → void {
+  self::Class1? nullable1 = n1;
+  let final self::Class1? #t1 = n1 in #t1 == null ?{self::Class1?} null : #t1{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t2 = n1 in #t2 == null ?{self::Class1?} null : #t2{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t3 = n1 in #t3 == null ?{self::Class1?} null : #t3{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t4 = n1 in #t4 == null ?{self::Class1?} null : #t4{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t5 = n1 in #t5 == null ?{self::Class1?} null : #t5{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t6 = n1 in #t6 == null ?{self::Class1?} null : let final self::Class1? #t7 = #t6{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t7 == null ?{self::Class1?} null : #t7{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t8 = n1 in #t8 == null ?{self::Class1?} null : let final self::Class1? #t9 = #t8{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t9 == null ?{self::Class1?} null : #t9{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t10 = n1 in #t10 == null ?{self::Class1?} null : #t10{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t11 = n1 in #t11 == null ?{self::Class1?} null : let final self::Class1? #t12 = #t11{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t12 == null ?{self::Class1?} null : #t12{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = #t13{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t14 == null ?{self::Class1?} null : #t14{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t15 = let final self::Class1? #t16 = n1 in #t16 == null ?{self::Class1?} null : #t16{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t15 == null ?{self::Class1?} null : #t15{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
+Try accessing using ?. instead.
+  throws(() => (n1?.nullable1 = new Class1()).nullable1);
+                                              ^^^^^^^^^" in (let final self::Class1? #t17 = n1 in #t17 == null ?{self::Class1?} null : #t17{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
+Try accessing using ?. instead.
+  throws(() => (n1?.nonNullable1Method()).nullable1);
+                                          ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}).{self::Class1::nullable1}{<nullable>}.{self::Class1?});
+  nullable1 = let final self::Class1? #t19 = n1 in #t19 == null ?{self::Class1?} null : #t19{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t20 = n1 in #t20 == null ?{self::Class1?} null : let final self::Class1? #t21 = #t20{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t21 == null ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t23 == null ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t24 = n1 in #t24 == null ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t25 == null ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : #t26{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t27 = n1 in #t27 == null ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t28 = n1 in #t28 == null ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t29 = n1 in #t29 == null ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t31 = n1 in #t31 == null ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t32 = n1 in #t32 == null ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t33 = n1 in #t33 == null ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t35 = n1 in #t35 == null ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t38 = n1 in #t38 == null ?{self::Class1?} null : let final self::Class1? #t39 = #t38{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?} in #t39 == null ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : #t40{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t41 = n1 in #t41 == null ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t42 = n1 in #t42 == null ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t44 = n1 in #t44 == null ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t45 = n1 in #t45 == null ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t46 = n1 in #t46 == null ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t47 = n1 in #t47 == null ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t50 = n1 in #t50 == null ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t51 = n1 in #t51 == null ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t58 = n1 in #t58 == null ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t59 = n1 in #t59 == null ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t61 = n1 in #t61 == null ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t64 = n1 in #t64 == null ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t65 = n1 in #t65 == null ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t67 = n1 in #t67 == null ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t68 = n1 in #t68 == null ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t70 = n1 in #t70 == null ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t71 = n1 in #t71 == null ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  nullable1 = let final self::Class1? #t72 = n1 in #t72 == null ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t73 = n1 in #t73 == null ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t76 = n1 in #t76 == null ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t77 = n1 in #t77 == null ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1}{self::Class1?};
+  let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : let final self::Class1? #t81 = #t80{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1} in #t81 == null ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+}
+static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
+  self::Class1? nullable1 = n1;
+  self::Class2? nullable2 = n2;
+  self::Class3? nullable3 = n3;
+  let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : #t82{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t83 = n1 in #t83 == null ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  let final self::Class1? #t84 = n1 in #t84 == null ?{self::Class1?} null : let final self::Class1? #t85 = #t84{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t85 == null ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t86 = n1 in #t86 == null ?{self::Class1?} null : #t86{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t87 = n1 in #t87 == null ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : let final self::Class1 #t89 = #t88{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t90 = nullable1 in let final self::Class1 #t91 = new self::Class1::•() in let final void #t92 = #t89.{self::Class1::[]=}(#t90, #t91){(self::Class1?, self::Class1?) → void} in #t91;
+  let final self::Class1? #t93 = n1 in #t93 == null ?{self::Class1?} null : let final self::Class1? #t94 = #t93{self::Class1}.{self::Class1::nonNullable1}{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t94 == null ?{self::Class1?} null : #t94{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t95 = n1 in #t95 == null ?{self::Class2?} null : let final self::Class2 #t96 = #t95{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t97 = nullable2 in #t96.{self::Class2::[]=}(#t97, #t96.{self::Class2::[]}(#t97){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t98 = n1 in #t98 == null ?{self::Class2?} null : let final self::Class2 #t99 = #t98{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t100 = nullable2 in let final self::Class2 #t101 = #t99.{self::Class2::[]}(#t100){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t102 = #t99.{self::Class2::[]=}(#t100, #t101){(self::Class2?, self::Class2?) → void} in #t101;
+  let final self::Class1? #t103 = n1 in #t103 == null ?{self::Class1?} null : let final self::Class1? #t104 = nullable1 in #t103{self::Class1}.{self::Class1::[]}(#t104){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t103{self::Class1}.{self::Class1::[]=}(#t104, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in let final self::Class1? #t107 = #t105{self::Class1}.{self::Class1::[]}(#t106){(self::Class1?) → self::Class1?} in #t107 == null ?{self::Class1?} let final self::Class1? #t108 = nullable1 in let final void #t109 = #t105{self::Class1}.{self::Class1::[]=}(#t106, #t108){(self::Class1?, self::Class1?) → void} in #t108 : #t107{self::Class1};
+  let final self::Class2? #t110 = n2 in #t110 == null ?{self::Class2?} null : let final self::Class2? #t111 = nullable2 in #t110{self::Class2}.{self::Class2::[]=}(#t111, #t110{self::Class2}.{self::Class2::[]}(#t111){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t112 = n2 in #t112 == null ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in let final self::Class2 #t114 = #t112{self::Class2}.{self::Class2::[]}(#t113){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t115 = #t112{self::Class2}.{self::Class2::[]=}(#t113, #t114){(self::Class2?, self::Class2?) → void} in #t114;
+  let final self::Class2? #t116 = n2 in #t116 == null ?{self::Class2?} null : let final self::Class2? #t117 = nullable2 in #t116{self::Class2}.{self::Class2::[]=}(#t117, #t116{self::Class2}.{self::Class2::[]}(#t117){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t118 = n2 in #t118 == null ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in let final self::Class2 #t120 = #t118{self::Class2}.{self::Class2::[]}(#t119){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t121 = #t118{self::Class2}.{self::Class2::[]=}(#t119, #t120){(self::Class2?, self::Class2?) → void} in #t120;
+  let final self::Class2? #t122 = n2 in #t122 == null ?{self::Class2?} null : let final self::Class2? #t123 = nullable2 in #t122{self::Class2}.{self::Class2::[]=}(#t123, #t122{self::Class2}.{self::Class2::[]}(#t123){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class2? #t124 = n2 in #t124 == null ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in let final self::Class2 #t126 = #t124{self::Class2}.{self::Class2::[]}(#t125){(self::Class2?) → self::Class2} in let final void #t127 = #t124{self::Class2}.{self::Class2::[]=}(#t125, #t126.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t126;
+  let final self::Class2? #t128 = n2 in #t128 == null ?{self::Class2?} null : let final self::Class2? #t129 = nullable2 in let final self::Class2 #t130 = #t128{self::Class2}.{self::Class2::[]}(#t129){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t131 = #t128{self::Class2}.{self::Class2::[]=}(#t129, #t130){(self::Class2?, self::Class2?) → void} in #t130;
+  nullable2 = let final self::Class2? #t132 = n2 in #t132 == null ?{self::Class2?} null : let final self::Class2? #t133 = nullable2 in let final self::Class2 #t134 = #t132{self::Class2}.{self::Class2::[]}(#t133){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t135 = #t132{self::Class2}.{self::Class2::[]=}(#t133, #t134){(self::Class2?, self::Class2?) → void} in #t134;
+  let final self::Class1? #t136 = n1 in #t136 == null ?{self::Class2?} null : let final self::Class2 #t137 = #t136{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t138 = nullable2 in #t137.{self::Class2::[]=}(#t138, #t137.{self::Class2::[]}(#t138){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t139 = n1 in #t139 == null ?{self::Class2?} null : let final self::Class2 #t140 = #t139{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t141 = nullable2 in let final self::Class2 #t142 = #t140.{self::Class2::[]}(#t141){(self::Class2?) → self::Class2} in let final void #t143 = #t140.{self::Class2::[]=}(#t141, #t142.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t142;
+  let final self::Class1? #t144 = n1 in #t144 == null ?{self::Class2?} null : let final self::Class2 #t145 = #t144{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t146 = nullable2 in let final self::Class2 #t147 = #t145.{self::Class2::[]}(#t146){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t148 = #t145.{self::Class2::[]=}(#t146, #t147){(self::Class2?, self::Class2?) → void} in #t147;
+  nullable2 = let final self::Class1? #t149 = n1 in #t149 == null ?{self::Class2?} null : let final self::Class2 #t150 = #t149{self::Class1}.{self::Class1::nonNullable2}{self::Class2} in let final self::Class2? #t151 = nullable2 in let final self::Class2 #t152 = #t150.{self::Class2::[]}(#t151){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t153 = #t150.{self::Class2::[]=}(#t151, #t152){(self::Class2?, self::Class2?) → void} in #t152;
+  let final self::Class1? #t154 = n1 in #t154 == null ?{self::Class2?} null : #t154{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2};
+  let final self::Class1? #t155 = n1 in #t155 == null ?{self::Class2?} null : #t155{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]=}(nullable2, new self::Class2::•()){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t156 = n1 in #t156 == null ?{self::Class2?} null : let final self::Class2 #t157 = #t156{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t158 = nullable2 in let final self::Class2 #t159 = new self::Class2::•() in let final void #t160 = #t157.{self::Class2::[]=}(#t158, #t159){(self::Class2?, self::Class2?) → void} in #t159;
+  let final self::Class1? #t161 = n1 in #t161 == null ?{self::Class2?} null : let final self::Class2? #t162 = #t161{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in #t162 == null ?{self::Class2?} null : #t162{self::Class2}.{self::Class2::nonNullable2Method}(){() → self::Class2};
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class2?} null : let final self::Class2 #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t165 = nullable2 in #t164.{self::Class2::[]=}(#t165, #t164.{self::Class2::[]}(#t165){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class2?} null : let final self::Class2 #t167 = #t166{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t168 = nullable2 in let final self::Class2 #t169 = #t167.{self::Class2::[]}(#t168){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t170 = #t167.{self::Class2::[]=}(#t168, #t169){(self::Class2?, self::Class2?) → void} in #t169;
+  let final self::Class1? #t171 = n1 in #t171 == null ?{self::Class2?} null : let final self::Class2 #t172 = #t171{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t173 = nullable2 in #t172.{self::Class2::[]=}(#t173, #t172.{self::Class2::[]}(#t173){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class2?} null : let final self::Class2 #t175 = #t174{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t176 = nullable2 in let final self::Class2 #t177 = #t175.{self::Class2::[]}(#t176){(self::Class2?) → self::Class2} in let final void #t178 = #t175.{self::Class2::[]=}(#t176, #t177.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t177;
+  let final self::Class1? #t179 = n1 in #t179 == null ?{self::Class2?} null : let final self::Class2 #t180 = #t179{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t181 = nullable2 in let final self::Class2 #t182 = #t180.{self::Class2::[]}(#t181){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t183 = #t180.{self::Class2::[]=}(#t181, #t182){(self::Class2?, self::Class2?) → void} in #t182;
+  nullable2 = let final self::Class1? #t184 = n1 in #t184 == null ?{self::Class2?} null : let final self::Class2 #t185 = #t184{self::Class1}.{self::Class1::nonNullable2}{self::Class2}.{self::Class2::[]}(nullable2){(self::Class2?) → self::Class2} in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = #t185.{self::Class2::[]}(#t186){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t188 = #t185.{self::Class2::[]=}(#t186, #t187){(self::Class2?, self::Class2?) → void} in #t187;
+  let final self::Class1? #t189 = n1 in #t189 == null ?{self::Class1?} null : let final self::Class1? #t190 = #t189{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t190 == null ?{self::Class1?} null : #t190{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?};
+  let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t192 == null ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•()){(self::Class1?, self::Class1?) → void};
+  nullable1 = let final self::Class1? #t193 = n1 in #t193 == null ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t194 == null ?{self::Class1?} null : let final self::Class1? #t195 = nullable1 in let final self::Class1 #t196 = new self::Class1::•() in let final void #t197 = #t194{self::Class1}.{self::Class1::[]=}(#t195, #t196){(self::Class1?, self::Class1?) → void} in #t196;
+  let final self::Class1? #t198 = n1 in #t198 == null ?{self::Class1?} null : let final self::Class1? #t199 = #t198{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t199 == null ?{self::Class1?} null : let final self::Class1? #t200 = #t199{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t200 == null ?{self::Class1?} null : #t200{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  nullable1 = let final self::Class1? #t201 = n1 in #t201 == null ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t202 == null ?{self::Class1?} null : let final self::Class1? #t203 = #t202{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t203 == null ?{self::Class1?} null : #t203{self::Class1}.{self::Class1::nonNullable1Method}(){() → self::Class1};
+  let final self::Class1? #t204 = n1 in #t204 == null ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t205 == null ?{self::Class1?} null : let final self::Class1? #t206 = nullable1 in #t205{self::Class1}.{self::Class1::[]}(#t206){(self::Class1?) → self::Class1?} == null ?{self::Class1?} #t205{self::Class1}.{self::Class1::[]=}(#t206, nullable1){(self::Class1?, self::Class1?) → void} : null;
+  nullable1 = let final self::Class1? #t207 = n1 in #t207 == null ?{self::Class1?} null : let final self::Class1? #t208 = #t207{self::Class1}.{self::Class1::[]}(nullable1){(self::Class1?) → self::Class1?} in #t208 == null ?{self::Class1?} null : let final self::Class1? #t209 = nullable1 in let final self::Class1? #t210 = #t208{self::Class1}.{self::Class1::[]}(#t209){(self::Class1?) → self::Class1?} in #t210 == null ?{self::Class1?} let final self::Class1? #t211 = nullable1 in let final void #t212 = #t208{self::Class1}.{self::Class1::[]=}(#t209, #t211){(self::Class1?, self::Class1?) → void} in #t211 : #t210{self::Class1};
+  let final self::Class3? #t213 = n3 in #t213 == null ?{self::Class2?} null : let final self::Class2? #t214 = #t213{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t214 == null ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in #t214{self::Class2}.{self::Class2::[]=}(#t215, #t214{self::Class2}.{self::Class2::[]}(#t215){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t216 = n3 in #t216 == null ?{self::Class2?} null : let final self::Class2? #t217 = #t216{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t217 == null ?{self::Class2?} null : let final self::Class2? #t218 = nullable2 in let final self::Class2 #t219 = #t217{self::Class2}.{self::Class2::[]}(#t218){(self::Class2?) → self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t220 = #t217{self::Class2}.{self::Class2::[]=}(#t218, #t219){(self::Class2?, self::Class2?) → void} in #t219;
+  let final self::Class3? #t221 = n3 in #t221 == null ?{self::Class2?} null : let final self::Class2? #t222 = #t221{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t222 == null ?{self::Class2?} null : let final self::Class2? #t223 = nullable2 in #t222{self::Class2}.{self::Class2::[]=}(#t223, #t222{self::Class2}.{self::Class2::[]}(#t223){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void};
+  nullable2 = let final self::Class3? #t224 = n3 in #t224 == null ?{self::Class2?} null : let final self::Class2? #t225 = #t224{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t225 == null ?{self::Class2?} null : let final self::Class2? #t226 = nullable2 in let final self::Class2 #t227 = #t225{self::Class2}.{self::Class2::[]}(#t226){(self::Class2?) → self::Class2} in let final void #t228 = #t225{self::Class2}.{self::Class2::[]=}(#t226, #t227.{self::Class2::+}(1){(core::int) → self::Class2}){(self::Class2?, self::Class2?) → void} in #t227;
+  let final self::Class3? #t229 = n3 in #t229 == null ?{self::Class2?} null : let final self::Class2? #t230 = #t229{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t230 == null ?{self::Class2?} null : let final self::Class2? #t231 = nullable2 in let final self::Class2 #t232 = #t230{self::Class2}.{self::Class2::[]}(#t231){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t233 = #t230{self::Class2}.{self::Class2::[]=}(#t231, #t232){(self::Class2?, self::Class2?) → void} in #t232;
+  nullable2 = let final self::Class3? #t234 = n3 in #t234 == null ?{self::Class2?} null : let final self::Class2? #t235 = #t234{self::Class3}.{self::Class3::[]}(nullable3){(self::Class3?) → self::Class2?} in #t235 == null ?{self::Class2?} null : let final self::Class2? #t236 = nullable2 in let final self::Class2 #t237 = #t235{self::Class2}.{self::Class2::[]}(#t236){(self::Class2?) → self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t238 = #t235{self::Class2}.{self::Class2::[]=}(#t236, #t237){(self::Class2?, self::Class2?) → void} in #t237;
+}
+static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
+  self::Class2? nullable2 = n2;
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
+  throws(() => n1?.nonNullable1 + 0);
+                                ^" in (let final self::Class1? #t239 = n1 in #t239 == null ?{self::Class1?} null : #t239{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::+}(0){(core::int) → self::Class1?});
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
+  throws(() => -n1?.nonNullable1);
+               ^" in (let final self::Class1? #t240 = n1 in #t240 == null ?{self::Class1?} null : #t240{self::Class1}.{self::Class1::nonNullable1}{self::Class1}).{self::Class1::unary-}(){() → self::Class1?});
+  let final self::Class2? #t241 = n2 in #t241 == null ?{self::Class2?} null : #t241.{self::Class2::nonNullable2} = #t241.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t242 = n2 in #t242 == null ?{self::Class2?} null : let final self::Class2 #t243 = #t242.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2} in let final void #t244 = #t242.{self::Class2::nonNullable2} = #t243 in #t243;
+  let final self::Class2? #t245 = n2 in #t245 == null ?{self::Class2?} null : let final self::Class2 #t246 = #t245{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t246.{self::Class2::nonNullable2} = #t246.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t247 = n2 in #t247 == null ?{self::Class2?} null : let final self::Class2 #t248 = #t247{self::Class2}.{self::Class2::nonNullable2}{self::Class2} in #t248.{self::Class2::nonNullable2} = #t248.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(0){(core::int) → self::Class2};
+  let final self::Class2? #t249 = n2 in #t249 == null ?{self::Class2?} null : #t249.{self::Class2::nonNullable2} = #t249.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2};
+  nullable2 = let final self::Class2? #t250 = n2 in #t250 == null ?{self::Class2?} null : let final self::Class2 #t251 = #t250.{self::Class2::nonNullable2}{self::Class2} in let final void #t252 = #t250.{self::Class2::nonNullable2} = #t251.{self::Class2::+}(1){(core::int) → self::Class2} in #t251;
+  let final self::Class2? #t253 = n2 in #t253 == null ?{self::Class2?} null : let final self::Class2 #t254 = #t253.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t255 = #t253.{self::Class2::nonNullable2} = #t254 in #t254;
+  nullable2 = let final self::Class2? #t256 = n2 in #t256 == null ?{self::Class2?} null : let final self::Class2 #t257 = #t256.{self::Class2::nonNullable2}{self::Class2}.{self::Class2::+}(1){(core::int) → self::Class2} in let final void #t258 = #t256.{self::Class2::nonNullable2} = #t257 in #t257;
+}
+static method ifNull(self::Class1? n1) → void {
+  self::Class1? nullable1 = n1;
+  let final self::Class1? #t259 = n1 in #t259 == null ?{self::Class1?} null : #t259.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t259.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t260 = n1 in #t260 == null ?{self::Class1?} null : let final self::Class1? #t261 = #t260.{self::Class1::nullable1}{self::Class1?} in #t261 == null ?{self::Class1} #t260.{self::Class1::nullable1} = n1{self::Class1} : #t261{self::Class1};
+  let final self::Class1? #t262 = n1 in #t262 == null ?{self::Class1?} null : let final self::Class1 #t263 = #t262{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in #t263.{self::Class1::nullable1}{self::Class1?} == null ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t264 = n1 in #t264 == null ?{self::Class1?} null : let final self::Class1 #t265 = #t264{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1? #t266 = #t265.{self::Class1::nullable1}{self::Class1?} in #t266 == null ?{self::Class1} #t265.{self::Class1::nullable1} = n1{self::Class1} : #t266{self::Class1};
+  let final self::Class1? #t267 = n1 in #t267 == null ?{self::Class1?} null : let final self::Class1 #t268 = #t267{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t269 = n1{self::Class1} in #t268.{self::Class1::[]}(#t269){(self::Class1?) → self::Class1?} == null ?{self::Class1} #t268.{self::Class1::[]=}(#t269, n1{self::Class1}){(self::Class1?, self::Class1?) → void} : null;
+  n1 = let final self::Class1? #t270 = n1 in #t270 == null ?{self::Class1?} null : let final self::Class1 #t271 = #t270{self::Class1}.{self::Class1::nonNullable1}{self::Class1} in let final self::Class1 #t272 = n1{self::Class1} in let final self::Class1? #t273 = #t271.{self::Class1::[]}(#t272){(self::Class1?) → self::Class1?} in #t273 == null ?{self::Class1} let final self::Class1 #t274 = n1{self::Class1} in let final void #t275 = #t271.{self::Class1::[]=}(#t272, #t274){(self::Class1?, self::Class1?) → void} in #t274 : #t273{self::Class1};
+}
+static method throws(() → void f) → void {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object _) {
+    return;
+  }
+  throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.modular.expect
new file mode 100644
index 0000000..740e044
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/null_shorting_cascade.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method method() → self::Class
+    return this;
+}
+extension Extension on self::Class {
+  method extensionMethod = self::Extension|extensionMethod;
+  tearoff extensionMethod = self::Extension|get#extensionMethod;
+}
+static method Extension|extensionMethod(lowered final self::Class #this) → self::Class
+  return #this;
+static method Extension|get#extensionMethod(lowered final self::Class #this) → () → self::Class
+  return () → self::Class => self::Extension|extensionMethod(#this);
+static method main() → dynamic {
+  self::Class? c;
+  let final self::Class? #t1 = c in #t1 == null ?{self::Class?} null : block {
+    #t1{self::Class}.{self::Class::method}(){() → self::Class};
+  } =>#t1;
+  let final self::Class? #t2 = c in #t2 == null ?{self::Class?} null : block {
+    #t2{self::Class}.{self::Class::method}(){() → self::Class};
+    #t2{self::Class}.{self::Class::method}(){() → self::Class};
+  } =>#t2;
+  let final self::Class? #t3 = c in #t3 == null ?{self::Class?} null : block {
+    self::Extension|extensionMethod(#t3{self::Class});
+  } =>#t3;
+  let final self::Class? #t4 = c in #t4 == null ?{self::Class?} null : block {
+    self::Extension|extensionMethod(#t4{self::Class});
+    self::Extension|extensionMethod(#t4{self::Class});
+  } =>#t4;
+}
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.modular.expect
new file mode 100644
index 0000000..410df6c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.modular.expect
@@ -0,0 +1,298 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+//  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
+// Try accessing using ?. instead.
+//   throws(() => (Extension1(n1)?.nullable1 = new Class1()).nullable1);
+//                                                           ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+//  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
+// Try accessing using ?. instead.
+//   throws(() => (Extension1(n1)?.nonNullable1Method()).nullable1);
+//                                                       ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+//  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
+//   throws(() => Extension1(n1)?.nonNullable1 + 0);
+//                                             ^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+//  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
+//   throws(() => -Extension1(n1)?.nonNullable1);
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+  get property() → self::Class1?
+    return null;
+  set property(self::Class1? value) → void {}
+  get property1() → self::Class1
+    return new self::Class1::•();
+  get property2() → self::Class2
+    return new self::Class2::•();
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+  get property() → self::Class2
+    return this;
+  set property(self::Class2 value) → void {}
+}
+class Class3 extends core::Object {
+  synthetic constructor •() → self::Class3
+    : super core::Object::•()
+    ;
+  get property() → self::Class2?
+    return null;
+}
+extension Extension1 on self::Class1 {
+  get nullable1 = self::Extension1|get#nullable1;
+  method nonNullable1Method = self::Extension1|nonNullable1Method;
+  tearoff nonNullable1Method = self::Extension1|get#nonNullable1Method;
+  operator [] = self::Extension1|[];
+  operator []= = self::Extension1|[]=;
+  operator + = self::Extension1|+;
+  operator unary- = self::Extension1|unary-;
+  get nonNullable1 = self::Extension1|get#nonNullable1;
+  get nonNullable2 = self::Extension1|get#nonNullable2;
+  set nullable1 = self::Extension1|set#nullable1;
+}
+extension Extension2 on self::Class2 {
+  method nonNullable2Method = self::Extension2|nonNullable2Method;
+  tearoff nonNullable2Method = self::Extension2|get#nonNullable2Method;
+  operator [] = self::Extension2|[];
+  operator []= = self::Extension2|[]=;
+  operator + = self::Extension2|+;
+  operator unary- = self::Extension2|unary-;
+  get nonNullable2 = self::Extension2|get#nonNullable2;
+  set nonNullable2 = self::Extension2|set#nonNullable2;
+}
+extension Extension3 on self::Class3 {
+  operator [] = self::Extension3|[];
+}
+static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
+  return #this.{self::Class1::property1}{self::Class1};
+static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
+  #this.{self::Class1::property} = value;
+}
+static method Extension1|nonNullable1Method(lowered final self::Class1 #this) → self::Class1
+  return self::Extension1|get#nonNullable1(#this);
+static method Extension1|get#nonNullable1Method(lowered final self::Class1 #this) → () → self::Class1
+  return () → self::Class1 => self::Extension1|nonNullable1Method(#this);
+static method Extension1|[](lowered final self::Class1 #this, self::Class1? key) → self::Class1?
+  return self::Extension1|get#nullable1(#this);
+static method Extension1|[]=(lowered final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
+  #this.{self::Class1::property} = value;
+}
+static method Extension1|+(lowered final self::Class1 #this, core::int value) → self::Class1?
+  return self::Extension1|get#nullable1(#this);
+static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
+  return self::Extension1|get#nullable1(#this);
+static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
+  return #this.{self::Class1::property1}{self::Class1};
+static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
+  return #this.{self::Class1::property2}{self::Class2};
+static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
+  return self::Extension2|get#nonNullable2(#this);
+static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
+  return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
+static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
+  return #this.{self::Class2::property}{self::Class2};
+static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
+  return #this.{self::Class2::property}{self::Class2};
+static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
+  return #this.{self::Class2::property}{self::Class2};
+static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
+  return #this.{self::Class2::property}{self::Class2};
+static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
+  return #this.{self::Class2::property}{self::Class2};
+static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
+  #this.{self::Class2::property} = value;
+}
+static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
+  return #this.{self::Class3::property}{self::Class2?};
+static method main() → dynamic {
+  self::propertyAccess(null);
+  self::indexAccess(null, null, null);
+  self::operatorAccess(null, null);
+  self::ifNull(null);
+}
+static method propertyAccess(self::Class1? n1) → void {
+  self::Class1? nullable1 = n1;
+  let final self::Class1? #t1 = n1 in #t1 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
+  let final self::Class1? #t2 = n1 in #t2 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
+  nullable1 = let final self::Class1? #t3 = n1 in #t3 == null ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
+  let final self::Class1? #t6 = n1 in #t6 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
+  let final self::Class1? #t7 = n1 in #t7 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
+  let final self::Class1? #t8 = n1 in #t8 == null ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
+  let final self::Class1? #t10 = n1 in #t10 == null ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
+  let final self::Class1? #t12 = n1 in #t12 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
+Try accessing using ?. instead.
+  throws(() => (Extension1(n1)?.nullable1 = new Class1()).nullable1);
+                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t19 = n1 in #t19 == null ?{self::Class1?} null : let final self::Class1 #t20 = new self::Class1::•() in let final void #t21 = self::Extension1|set#nullable1(#t19{self::Class1}, #t20) in #t20));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
+Try accessing using ?. instead.
+  throws(() => (Extension1(n1)?.nonNullable1Method()).nullable1);
+                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t22{self::Class1})));
+  nullable1 = let final self::Class1? #t23 = n1 in #t23 == null ?{self::Class1?} null : let final self::Class1 #t24 = new self::Class1::•() in let final void #t25 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t23{self::Class1}), #t24) in #t24;
+  nullable1 = let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = self::Extension1|get#nullable1(#t26{self::Class1}) in #t27 == null ?{self::Class1?} null : let final self::Class1 #t28 = new self::Class1::•() in let final void #t29 = self::Extension1|set#nullable1(#t27{self::Class1}, #t28) in #t28;
+  nullable1 = let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : let final self::Class1? #t31 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t30{self::Class1})) in #t31 == null ?{self::Class1?} null : let final self::Class1 #t32 = new self::Class1::•() in let final void #t33 = self::Extension1|set#nullable1(#t31{self::Class1}, #t32) in #t32;
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : let final self::Class1? #t35 = self::Extension1|get#nullable1(#t34{self::Class1}) in #t35 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t35{self::Class1});
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t36{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : let final self::Class1? #t38 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t39 = self::Extension1|set#nullable1(#t37{self::Class1}, #t38) in #t38;
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t40{self::Class1}, let final self::Class1 #t41 = new self::Class1::•() in let final void #t42 = self::Extension1|set#nullable1(new self::Class1::•(), #t41) in #t41);
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : let final self::Class1 #t44 = let final self::Class1 #t45 = new self::Class1::•() in let final void #t46 = self::Extension1|set#nullable1(new self::Class1::•(), #t45) in #t45 in let final void #t47 = self::Extension1|set#nullable1(#t43{self::Class1}, #t44) in #t44;
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t48{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : let final self::Class1 #t50 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t51 = self::Extension1|set#nullable1(#t49{self::Class1}, #t50) in #t50;
+  let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t52{self::Class1}));
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t53{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t55{self::Class1})));
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t56{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : let final self::Class1 #t58 = new self::Class1::•() in let final void #t59 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})), #t58) in #t58;
+  let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : let final self::Class1? #t61 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t60{self::Class1})) in #t61 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t61{self::Class1});
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t62{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : let final self::Class1? #t64 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t65 = self::Extension1|set#nullable1(#t63{self::Class1}, #t64) in #t64;
+  let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t66{self::Class1}, let final self::Class1 #t67 = new self::Class1::•() in let final void #t68 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t67) in #t67);
+  nullable1 = let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : let final self::Class1 #t70 = let final self::Class1 #t71 = new self::Class1::•() in let final void #t72 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t71) in #t71 in let final void #t73 = self::Extension1|set#nullable1(#t69{self::Class1}, #t70) in #t70;
+  let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t74{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : let final self::Class1 #t76 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t77 = self::Extension1|set#nullable1(#t75{self::Class1}, #t76) in #t76;
+  let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t78{self::Class1})));
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t79{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t81{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t84 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t82{self::Class1}), #t83) in #t83;
+  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t85{self::Class1}), let final self::Class1 #t86 = new self::Class1::•() in let final void #t87 = self::Extension1|set#nullable1(new self::Class1::•(), #t86) in #t86);
+  nullable1 = let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : let final self::Class1 #t89 = let final self::Class1 #t90 = new self::Class1::•() in let final void #t91 = self::Extension1|set#nullable1(new self::Class1::•(), #t90) in #t90 in let final void #t92 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t88{self::Class1}), #t89) in #t89;
+  let final self::Class1? #t93 = n1 in #t93 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t93{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t94 = n1 in #t94 == null ?{self::Class1?} null : let final self::Class1 #t95 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t96 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t94{self::Class1}), #t95) in #t95;
+  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t97{self::Class1}, let final self::Class1? #t98 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t99 = self::Extension1|set#nullable1(new self::Class1::•(), #t98) in #t98);
+  nullable1 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class1?} null : let final self::Class1? #t101 = let final self::Class1? #t102 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t103 = self::Extension1|set#nullable1(new self::Class1::•(), #t102) in #t102 in let final void #t104 = self::Extension1|set#nullable1(#t100{self::Class1}, #t101) in #t101;
+  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t105{self::Class1}, let final self::Class1 #t106 = let final self::Class1 #t107 = new self::Class1::•() in let final void #t108 = self::Extension1|set#nullable1(new self::Class1::•(), #t107) in #t107 in let final void #t109 = self::Extension1|set#nullable1(new self::Class1::•(), #t106) in #t106);
+  nullable1 = let final self::Class1? #t110 = n1 in #t110 == null ?{self::Class1?} null : let final self::Class1 #t111 = let final self::Class1 #t112 = let final self::Class1 #t113 = new self::Class1::•() in let final void #t114 = self::Extension1|set#nullable1(new self::Class1::•(), #t113) in #t113 in let final void #t115 = self::Extension1|set#nullable1(new self::Class1::•(), #t112) in #t112 in let final void #t116 = self::Extension1|set#nullable1(#t110{self::Class1}, #t111) in #t111;
+  let final self::Class1? #t117 = n1 in #t117 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t117{self::Class1}, let final self::Class1 #t118 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t119 = self::Extension1|set#nullable1(new self::Class1::•(), #t118) in #t118);
+  nullable1 = let final self::Class1? #t120 = n1 in #t120 == null ?{self::Class1?} null : let final self::Class1 #t121 = let final self::Class1 #t122 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t123 = self::Extension1|set#nullable1(new self::Class1::•(), #t122) in #t122 in let final void #t124 = self::Extension1|set#nullable1(#t120{self::Class1}, #t121) in #t121;
+  let final self::Class1? #t125 = n1 in #t125 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t125{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t126 = n1 in #t126 == null ?{self::Class1?} null : let final self::Class1? #t127 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t128 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t126{self::Class1}), #t127) in #t127;
+  let final self::Class1? #t129 = n1 in #t129 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t129{self::Class1}), let final self::Class1 #t130 = new self::Class1::•() in let final void #t131 = self::Extension1|set#nullable1(new self::Class1::•(), #t130) in #t130);
+  nullable1 = let final self::Class1? #t132 = n1 in #t132 == null ?{self::Class1?} null : let final self::Class1 #t133 = let final self::Class1 #t134 = new self::Class1::•() in let final void #t135 = self::Extension1|set#nullable1(new self::Class1::•(), #t134) in #t134 in let final void #t136 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t132{self::Class1}), #t133) in #t133;
+  let final self::Class1? #t137 = n1 in #t137 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t137{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class1?} null : let final self::Class1 #t139 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t140 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t138{self::Class1}), #t139) in #t139;
+  let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t141{self::Class1})));
+  let final self::Class1? #t142 = n1 in #t142 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t142{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : let final self::Class1 #t144 = new self::Class1::•() in let final void #t145 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})), #t144) in #t144;
+  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t146{self::Class1})));
+  let final self::Class1? #t147 = n1 in #t147 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t147{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : let final self::Class1? #t149 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t150 = self::Extension1|set#nullable1(#t148{self::Class1}, #t149) in #t149;
+  let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t151{self::Class1}, let final self::Class1 #t152 = new self::Class1::•() in let final void #t153 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t152) in #t152);
+  nullable1 = let final self::Class1? #t154 = n1 in #t154 == null ?{self::Class1?} null : let final self::Class1 #t155 = let final self::Class1 #t156 = new self::Class1::•() in let final void #t157 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t156) in #t156 in let final void #t158 = self::Extension1|set#nullable1(#t154{self::Class1}, #t155) in #t155;
+  let final self::Class1? #t159 = n1 in #t159 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t159{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t160 = n1 in #t160 == null ?{self::Class1?} null : let final self::Class1 #t161 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t162 = self::Extension1|set#nullable1(#t160{self::Class1}, #t161) in #t161;
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t163{self::Class1})));
+  let final self::Class1? #t164 = n1 in #t164 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t164{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : let final self::Class1? #t167 = self::Extension1|nonNullable1Method(#t166{self::Class1}) in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t167{self::Class1});
+}
+static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
+  self::Class1? nullable1 = n1;
+  self::Class2? nullable2 = n2;
+  self::Class3? nullable3 = n3;
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : self::Extension1|[](#t168{self::Class1}, nullable1);
+  let final self::Class1? #t169 = n1 in #t169 == null ?{void} null : self::Extension1|[]=(#t169{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : let final self::Class1? #t171 = self::Extension1|[](#t170{self::Class1}, nullable1) in #t171 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t171{self::Class1});
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t172{self::Class1}), nullable1);
+  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t173{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : let final self::Class1 #t175 = self::Extension1|get#nonNullable1(#t174{self::Class1}) in let final self::Class1? #t176 = nullable1 in let final self::Class1 #t177 = new self::Class1::•() in let final void #t178 = self::Extension1|[]=(#t175, #t176, #t177) in #t177;
+  let final self::Class1? #t179 = n1 in #t179 == null ?{self::Class1?} null : let final self::Class1? #t180 = self::Extension1|[](self::Extension1|get#nonNullable1(#t179{self::Class1}), nullable1) in #t180 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t180{self::Class1});
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = self::Extension1|get#nonNullable2(#t181{self::Class1}) in let final self::Class2? #t183 = nullable2 in self::Extension2|[]=(#t182, #t183, self::Extension2|+(self::Extension2|[](#t182, #t183), 0));
+  nullable2 = let final self::Class1? #t184 = n1 in #t184 == null ?{self::Class2?} null : let final self::Class2 #t185 = self::Extension1|get#nonNullable2(#t184{self::Class1}) in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = self::Extension2|+(self::Extension2|[](#t185, #t186), 0) in let final void #t188 = self::Extension2|[]=(#t185, #t186, #t187) in #t187;
+  let final self::Class1? #t189 = n1 in #t189 == null ?{self::Class1?} null : let final self::Class1? #t190 = nullable1 in self::Extension1|[](#t189{self::Class1}, #t190) == null ?{self::Class1?} self::Extension1|[]=(#t189{self::Class1}, #t190, nullable1) : null;
+  nullable1 = let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in let final self::Class1? #t193 = self::Extension1|[](#t191{self::Class1}, #t192) in #t193 == null ?{self::Class1?} let final self::Class1? #t194 = nullable1 in let final void #t195 = self::Extension1|[]=(#t191{self::Class1}, #t192, #t194) in #t194 : #t193{self::Class1};
+  let final self::Class2? #t196 = n2 in #t196 == null ?{self::Class2?} null : let final self::Class2? #t197 = nullable2 in self::Extension2|[]=(#t196{self::Class2}, #t197, self::Extension2|+(self::Extension2|[](#t196{self::Class2}, #t197), 0));
+  nullable2 = let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in let final self::Class2 #t200 = self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0) in let final void #t201 = self::Extension2|[]=(#t198{self::Class2}, #t199, #t200) in #t200;
+  let final self::Class2? #t202 = n2 in #t202 == null ?{self::Class2?} null : let final self::Class2? #t203 = nullable2 in self::Extension2|[]=(#t202{self::Class2}, #t203, self::Extension2|+(self::Extension2|[](#t202{self::Class2}, #t203), 0));
+  nullable2 = let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in let final self::Class2 #t206 = self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0) in let final void #t207 = self::Extension2|[]=(#t204{self::Class2}, #t205, #t206) in #t206;
+  let final self::Class2? #t208 = n2 in #t208 == null ?{self::Class2?} null : let final self::Class2? #t209 = nullable2 in self::Extension2|[]=(#t208{self::Class2}, #t209, self::Extension2|+(self::Extension2|[](#t208{self::Class2}, #t209), 1));
+  nullable2 = let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in let final self::Class2 #t212 = self::Extension2|[](#t210{self::Class2}, #t211) in let final void #t213 = self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(#t212, 1)) in #t212;
+  let final self::Class2? #t214 = n2 in #t214 == null ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in let final self::Class2 #t216 = self::Extension2|+(self::Extension2|[](#t214{self::Class2}, #t215), 1) in let final void #t217 = self::Extension2|[]=(#t214{self::Class2}, #t215, #t216) in #t216;
+  nullable2 = let final self::Class2? #t218 = n2 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = nullable2 in let final self::Class2 #t220 = self::Extension2|+(self::Extension2|[](#t218{self::Class2}, #t219), 1) in let final void #t221 = self::Extension2|[]=(#t218{self::Class2}, #t219, #t220) in #t220;
+  let final self::Class1? #t222 = n1 in #t222 == null ?{self::Class2?} null : let final self::Class2 #t223 = self::Extension1|get#nonNullable2(#t222{self::Class1}) in let final self::Class2? #t224 = nullable2 in self::Extension2|[]=(#t223, #t224, self::Extension2|+(self::Extension2|[](#t223, #t224), 1));
+  nullable2 = let final self::Class1? #t225 = n1 in #t225 == null ?{self::Class2?} null : let final self::Class2 #t226 = self::Extension1|get#nonNullable2(#t225{self::Class1}) in let final self::Class2? #t227 = nullable2 in let final self::Class2 #t228 = self::Extension2|[](#t226, #t227) in let final void #t229 = self::Extension2|[]=(#t226, #t227, self::Extension2|+(#t228, 1)) in #t228;
+  let final self::Class1? #t230 = n1 in #t230 == null ?{self::Class2?} null : let final self::Class2 #t231 = self::Extension1|get#nonNullable2(#t230{self::Class1}) in let final self::Class2? #t232 = nullable2 in let final self::Class2 #t233 = self::Extension2|+(self::Extension2|[](#t231, #t232), 1) in let final void #t234 = self::Extension2|[]=(#t231, #t232, #t233) in #t233;
+  nullable2 = let final self::Class1? #t235 = n1 in #t235 == null ?{self::Class2?} null : let final self::Class2 #t236 = self::Extension1|get#nonNullable2(#t235{self::Class1}) in let final self::Class2? #t237 = nullable2 in let final self::Class2 #t238 = self::Extension2|+(self::Extension2|[](#t236, #t237), 1) in let final void #t239 = self::Extension2|[]=(#t236, #t237, #t238) in #t238;
+  let final self::Class1? #t240 = n1 in #t240 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t240{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t241 = n1 in #t241 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t241{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : let final self::Class2 #t243 = self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2) in let final self::Class2? #t244 = nullable2 in let final self::Class2 #t245 = new self::Class2::•() in let final void #t246 = self::Extension2|[]=(#t243, #t244, #t245) in #t245;
+  let final self::Class1? #t247 = n1 in #t247 == null ?{self::Class2?} null : let final self::Class2? #t248 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t247{self::Class1}), nullable2), nullable2) in #t248 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t248{self::Class2});
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2) in let final self::Class2? #t251 = nullable2 in self::Extension2|[]=(#t250, #t251, self::Extension2|+(self::Extension2|[](#t250, #t251), 0));
+  nullable2 = let final self::Class1? #t252 = n1 in #t252 == null ?{self::Class2?} null : let final self::Class2 #t253 = self::Extension2|[](self::Extension1|get#nonNullable2(#t252{self::Class1}), nullable2) in let final self::Class2? #t254 = nullable2 in let final self::Class2 #t255 = self::Extension2|+(self::Extension2|[](#t253, #t254), 0) in let final void #t256 = self::Extension2|[]=(#t253, #t254, #t255) in #t255;
+  let final self::Class1? #t257 = n1 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = self::Extension2|[](self::Extension1|get#nonNullable2(#t257{self::Class1}), nullable2) in let final self::Class2? #t259 = nullable2 in self::Extension2|[]=(#t258, #t259, self::Extension2|+(self::Extension2|[](#t258, #t259), 1));
+  nullable2 = let final self::Class1? #t260 = n1 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = self::Extension2|[](self::Extension1|get#nonNullable2(#t260{self::Class1}), nullable2) in let final self::Class2? #t262 = nullable2 in let final self::Class2 #t263 = self::Extension2|[](#t261, #t262) in let final void #t264 = self::Extension2|[]=(#t261, #t262, self::Extension2|+(#t263, 1)) in #t263;
+  let final self::Class1? #t265 = n1 in #t265 == null ?{self::Class2?} null : let final self::Class2 #t266 = self::Extension2|[](self::Extension1|get#nonNullable2(#t265{self::Class1}), nullable2) in let final self::Class2? #t267 = nullable2 in let final self::Class2 #t268 = self::Extension2|+(self::Extension2|[](#t266, #t267), 1) in let final void #t269 = self::Extension2|[]=(#t266, #t267, #t268) in #t268;
+  nullable2 = let final self::Class1? #t270 = n1 in #t270 == null ?{self::Class2?} null : let final self::Class2 #t271 = self::Extension2|[](self::Extension1|get#nonNullable2(#t270{self::Class1}), nullable2) in let final self::Class2? #t272 = nullable2 in let final self::Class2 #t273 = self::Extension2|+(self::Extension2|[](#t271, #t272), 1) in let final void #t274 = self::Extension2|[]=(#t271, #t272, #t273) in #t273;
+  let final self::Class1? #t275 = n1 in #t275 == null ?{self::Class1?} null : let final self::Class1? #t276 = self::Extension1|[](#t275{self::Class1}, nullable1) in #t276 == null ?{self::Class1?} null : self::Extension1|[](#t276{self::Class1}, nullable1);
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[]=(#t278{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : let final self::Class1? #t281 = nullable1 in let final self::Class1 #t282 = new self::Class1::•() in let final void #t283 = self::Extension1|[]=(#t280{self::Class1}, #t281, #t282) in #t282;
+  let final self::Class1? #t284 = n1 in #t284 == null ?{self::Class1?} null : let final self::Class1? #t285 = self::Extension1|[](#t284{self::Class1}, nullable1) in #t285 == null ?{self::Class1?} null : let final self::Class1? #t286 = self::Extension1|[](#t285{self::Class1}, nullable1) in #t286 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t286{self::Class1});
+  nullable1 = let final self::Class1? #t287 = n1 in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : let final self::Class1? #t289 = self::Extension1|[](#t288{self::Class1}, nullable1) in #t289 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t289{self::Class1});
+  let final self::Class1? #t290 = n1 in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : let final self::Class1? #t292 = nullable1 in self::Extension1|[](#t291{self::Class1}, #t292) == null ?{self::Class1?} self::Extension1|[]=(#t291{self::Class1}, #t292, nullable1) : null;
+  nullable1 = let final self::Class1? #t293 = n1 in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = self::Extension1|[](#t293{self::Class1}, nullable1) in #t294 == null ?{self::Class1?} null : let final self::Class1? #t295 = nullable1 in let final self::Class1? #t296 = self::Extension1|[](#t294{self::Class1}, #t295) in #t296 == null ?{self::Class1?} let final self::Class1? #t297 = nullable1 in let final void #t298 = self::Extension1|[]=(#t294{self::Class1}, #t295, #t297) in #t297 : #t296{self::Class1};
+  let final self::Class3? #t299 = n3 in #t299 == null ?{self::Class2?} null : let final self::Class2? #t300 = self::Extension3|[](#t299{self::Class3}, nullable3) in #t300 == null ?{self::Class2?} null : let final self::Class2? #t301 = nullable2 in self::Extension2|[]=(#t300{self::Class2}, #t301, self::Extension2|+(self::Extension2|[](#t300{self::Class2}, #t301), 0));
+  nullable2 = let final self::Class3? #t302 = n3 in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = self::Extension3|[](#t302{self::Class3}, nullable3) in #t303 == null ?{self::Class2?} null : let final self::Class2? #t304 = nullable2 in let final self::Class2 #t305 = self::Extension2|+(self::Extension2|[](#t303{self::Class2}, #t304), 0) in let final void #t306 = self::Extension2|[]=(#t303{self::Class2}, #t304, #t305) in #t305;
+  let final self::Class3? #t307 = n3 in #t307 == null ?{self::Class2?} null : let final self::Class2? #t308 = self::Extension3|[](#t307{self::Class3}, nullable3) in #t308 == null ?{self::Class2?} null : let final self::Class2? #t309 = nullable2 in self::Extension2|[]=(#t308{self::Class2}, #t309, self::Extension2|+(self::Extension2|[](#t308{self::Class2}, #t309), 1));
+  nullable2 = let final self::Class3? #t310 = n3 in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = self::Extension3|[](#t310{self::Class3}, nullable3) in #t311 == null ?{self::Class2?} null : let final self::Class2? #t312 = nullable2 in let final self::Class2 #t313 = self::Extension2|[](#t311{self::Class2}, #t312) in let final void #t314 = self::Extension2|[]=(#t311{self::Class2}, #t312, self::Extension2|+(#t313, 1)) in #t313;
+  let final self::Class3? #t315 = n3 in #t315 == null ?{self::Class2?} null : let final self::Class2? #t316 = self::Extension3|[](#t315{self::Class3}, nullable3) in #t316 == null ?{self::Class2?} null : let final self::Class2? #t317 = nullable2 in let final self::Class2 #t318 = self::Extension2|+(self::Extension2|[](#t316{self::Class2}, #t317), 1) in let final void #t319 = self::Extension2|[]=(#t316{self::Class2}, #t317, #t318) in #t318;
+  nullable2 = let final self::Class3? #t320 = n3 in #t320 == null ?{self::Class2?} null : let final self::Class2? #t321 = self::Extension3|[](#t320{self::Class3}, nullable3) in #t321 == null ?{self::Class2?} null : let final self::Class2? #t322 = nullable2 in let final self::Class2 #t323 = self::Extension2|+(self::Extension2|[](#t321{self::Class2}, #t322), 1) in let final void #t324 = self::Extension2|[]=(#t321{self::Class2}, #t322, #t323) in #t323;
+}
+static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
+  self::Class2? nullable2 = n2;
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
+  throws(() => Extension1(n1)?.nonNullable1 + 0);
+                                            ^" in self::Extension1|+(let final self::Class1? #t325 = n1 in #t325 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t325{self::Class1}), 0));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
+  throws(() => -Extension1(n1)?.nonNullable1);
+               ^" in self::Extension1|unary-(let final self::Class1? #t326 = n1 in #t326 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t326{self::Class1})));
+  let final self::Class2? #t327 = n2 in #t327 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t327{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t327{self::Class2}), 0));
+  nullable2 = let final self::Class2? #t328 = n2 in #t328 == null ?{self::Class2?} null : let final self::Class2 #t329 = self::Extension2|+(self::Extension2|get#nonNullable2(#t328{self::Class2}), 0) in let final void #t330 = self::Extension2|set#nonNullable2(#t328{self::Class2}, #t329) in #t329;
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : let final self::Class2 #t332 = self::Extension2|get#nonNullable2(#t331{self::Class2}) in self::Extension2|set#nonNullable2(#t332, self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0));
+  nullable2 = let final self::Class2? #t333 = n2 in #t333 == null ?{self::Class2?} null : let final self::Class2 #t334 = self::Extension2|get#nonNullable2(#t333{self::Class2}) in let final self::Class2 #t335 = self::Extension2|+(self::Extension2|get#nonNullable2(#t334), 0) in let final void #t336 = self::Extension2|set#nonNullable2(#t334, #t335) in #t335;
+  let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t337{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t337{self::Class2}), 1));
+  nullable2 = let final self::Class2? #t338 = n2 in #t338 == null ?{self::Class2?} null : let final self::Class2 #t339 = self::Extension2|get#nonNullable2(#t338{self::Class2}) in let final self::Class2 #t340 = let final self::Class2 #t341 = self::Extension2|+(#t339, 1) in let final void #t342 = self::Extension2|set#nonNullable2(#t338{self::Class2}, #t341) in #t341 in #t339;
+  let final self::Class2? #t343 = n2 in #t343 == null ?{self::Class2?} null : let final self::Class2 #t344 = self::Extension2|+(self::Extension2|get#nonNullable2(#t343{self::Class2}), 1) in let final void #t345 = self::Extension2|set#nonNullable2(#t343{self::Class2}, #t344) in #t344;
+  nullable2 = let final self::Class2? #t346 = n2 in #t346 == null ?{self::Class2?} null : let final self::Class2 #t347 = self::Extension2|+(self::Extension2|get#nonNullable2(#t346{self::Class2}), 1) in let final void #t348 = self::Extension2|set#nonNullable2(#t346{self::Class2}, #t347) in #t347;
+}
+static method ifNull(self::Class1? n1) → void {
+  self::Class1? nullable1 = n1;
+  let final self::Class1? #t349 = n1 in #t349 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t349) == null ?{self::Class1} self::Extension1|set#nullable1(#t349, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t350 = n1 in #t350 == null ?{self::Class1?} null : let final self::Class1? #t351 = self::Extension1|get#nullable1(#t350) in #t351 == null ?{self::Class1} let final self::Class1 #t352 = n1{self::Class1} in let final void #t353 = self::Extension1|set#nullable1(#t350, #t352) in #t352 : #t351{self::Class1};
+  let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1 #t355 = self::Extension1|get#nonNullable1(#t354{self::Class1}) in self::Extension1|get#nullable1(#t355) == null ?{self::Class1} self::Extension1|set#nullable1(#t355, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t356 = n1 in #t356 == null ?{self::Class1?} null : let final self::Class1 #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in let final self::Class1? #t358 = self::Extension1|get#nullable1(#t357) in #t358 == null ?{self::Class1} let final self::Class1 #t359 = n1{self::Class1} in let final void #t360 = self::Extension1|set#nullable1(#t357, #t359) in #t359 : #t358{self::Class1};
+  let final self::Class1? #t361 = n1 in #t361 == null ?{self::Class1?} null : let final self::Class1 #t362 = self::Extension1|get#nonNullable1(#t361{self::Class1}) in let final self::Class1 #t363 = n1{self::Class1} in self::Extension1|[](#t362, #t363) == null ?{self::Class1} self::Extension1|[]=(#t362, #t363, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t364 = n1 in #t364 == null ?{self::Class1?} null : let final self::Class1 #t365 = self::Extension1|get#nonNullable1(#t364{self::Class1}) in let final self::Class1 #t366 = n1{self::Class1} in let final self::Class1? #t367 = self::Extension1|[](#t365, #t366) in #t367 == null ?{self::Class1} let final self::Class1 #t368 = n1{self::Class1} in let final void #t369 = self::Extension1|[]=(#t365, #t366, #t368) in #t368 : #t367{self::Class1};
+}
+static method throws(() → void f) → void {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object _) {
+    return;
+  }
+  throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.modular.expect
new file mode 100644
index 0000000..954b4c0
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.modular.expect
@@ -0,0 +1,298 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+//  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
+// Try accessing using ?. instead.
+//   throws(() => (n1?.nullable1 = new Class1()).nullable1);
+//                                               ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+//  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
+// Try accessing using ?. instead.
+//   throws(() => (n1?.nonNullable1Method()).nullable1);
+//                                           ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+//  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
+//   throws(() => n1?.nonNullable1 + 0);
+//                                 ^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+//  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
+//   throws(() => -n1?.nonNullable1);
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+  get property() → self::Class1?
+    return null;
+  set property(self::Class1? value) → void {}
+  get property1() → self::Class1
+    return new self::Class1::•();
+  get property2() → self::Class2
+    return new self::Class2::•();
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+  get property() → self::Class2
+    return this;
+  set property(self::Class2 value) → void {}
+}
+class Class3 extends core::Object {
+  synthetic constructor •() → self::Class3
+    : super core::Object::•()
+    ;
+  get property() → self::Class2?
+    return null;
+}
+extension Extension1 on self::Class1 {
+  get nullable1 = self::Extension1|get#nullable1;
+  method nonNullable1Method = self::Extension1|nonNullable1Method;
+  tearoff nonNullable1Method = self::Extension1|get#nonNullable1Method;
+  operator [] = self::Extension1|[];
+  operator []= = self::Extension1|[]=;
+  operator + = self::Extension1|+;
+  operator unary- = self::Extension1|unary-;
+  get nonNullable1 = self::Extension1|get#nonNullable1;
+  get nonNullable2 = self::Extension1|get#nonNullable2;
+  set nullable1 = self::Extension1|set#nullable1;
+}
+extension Extension2 on self::Class2 {
+  method nonNullable2Method = self::Extension2|nonNullable2Method;
+  tearoff nonNullable2Method = self::Extension2|get#nonNullable2Method;
+  operator [] = self::Extension2|[];
+  operator []= = self::Extension2|[]=;
+  operator + = self::Extension2|+;
+  operator unary- = self::Extension2|unary-;
+  get nonNullable2 = self::Extension2|get#nonNullable2;
+  set nonNullable2 = self::Extension2|set#nonNullable2;
+}
+extension Extension3 on self::Class3 {
+  operator [] = self::Extension3|[];
+}
+static method Extension1|get#nullable1(lowered final self::Class1 #this) → self::Class1?
+  return #this.{self::Class1::property1}{self::Class1};
+static method Extension1|set#nullable1(lowered final self::Class1 #this, self::Class1? value) → void {
+  #this.{self::Class1::property} = value;
+}
+static method Extension1|nonNullable1Method(lowered final self::Class1 #this) → self::Class1
+  return self::Extension1|get#nonNullable1(#this);
+static method Extension1|get#nonNullable1Method(lowered final self::Class1 #this) → () → self::Class1
+  return () → self::Class1 => self::Extension1|nonNullable1Method(#this);
+static method Extension1|[](lowered final self::Class1 #this, self::Class1? key) → self::Class1?
+  return self::Extension1|get#nullable1(#this);
+static method Extension1|[]=(lowered final self::Class1 #this, self::Class1? key, self::Class1? value) → void {
+  #this.{self::Class1::property} = value;
+}
+static method Extension1|+(lowered final self::Class1 #this, core::int value) → self::Class1?
+  return self::Extension1|get#nullable1(#this);
+static method Extension1|unary-(lowered final self::Class1 #this) → self::Class1?
+  return self::Extension1|get#nullable1(#this);
+static method Extension1|get#nonNullable1(lowered final self::Class1 #this) → self::Class1
+  return #this.{self::Class1::property1}{self::Class1};
+static method Extension1|get#nonNullable2(lowered final self::Class1 #this) → self::Class2
+  return #this.{self::Class1::property2}{self::Class2};
+static method Extension2|nonNullable2Method(lowered final self::Class2 #this) → self::Class2
+  return self::Extension2|get#nonNullable2(#this);
+static method Extension2|get#nonNullable2Method(lowered final self::Class2 #this) → () → self::Class2
+  return () → self::Class2 => self::Extension2|nonNullable2Method(#this);
+static method Extension2|[](lowered final self::Class2 #this, self::Class2? key) → self::Class2
+  return #this.{self::Class2::property}{self::Class2};
+static method Extension2|[]=(lowered final self::Class2 #this, self::Class2? key, self::Class2? value) → void
+  return #this.{self::Class2::property}{self::Class2};
+static method Extension2|+(lowered final self::Class2 #this, core::int value) → self::Class2
+  return #this.{self::Class2::property}{self::Class2};
+static method Extension2|unary-(lowered final self::Class2 #this) → self::Class2
+  return #this.{self::Class2::property}{self::Class2};
+static method Extension2|get#nonNullable2(lowered final self::Class2 #this) → self::Class2
+  return #this.{self::Class2::property}{self::Class2};
+static method Extension2|set#nonNullable2(lowered final self::Class2 #this, self::Class2 value) → void {
+  #this.{self::Class2::property} = value;
+}
+static method Extension3|[](lowered final self::Class3 #this, self::Class3? key) → self::Class2?
+  return #this.{self::Class3::property}{self::Class2?};
+static method main() → dynamic {
+  self::propertyAccess(null);
+  self::indexAccess(null, null, null);
+  self::operatorAccess(null, null);
+  self::ifNull(null);
+}
+static method propertyAccess(self::Class1? n1) → void {
+  self::Class1? nullable1 = n1;
+  let final self::Class1? #t1 = n1 in #t1 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t1{self::Class1});
+  let final self::Class1? #t2 = n1 in #t2 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t2{self::Class1}, new self::Class1::•());
+  nullable1 = let final self::Class1? #t3 = n1 in #t3 == null ?{self::Class1?} null : let final self::Class1 #t4 = new self::Class1::•() in let final void #t5 = self::Extension1|set#nullable1(#t3{self::Class1}, #t4) in #t4;
+  let final self::Class1? #t6 = n1 in #t6 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t6{self::Class1});
+  let final self::Class1? #t7 = n1 in #t7 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t7{self::Class1}));
+  let final self::Class1? #t8 = n1 in #t8 == null ?{self::Class1?} null : let final self::Class1? #t9 = self::Extension1|get#nullable1(#t8{self::Class1}) in #t9 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t9{self::Class1});
+  let final self::Class1? #t10 = n1 in #t10 == null ?{self::Class1?} null : let final self::Class1? #t11 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t10{self::Class1})) in #t11 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t11{self::Class1});
+  let final self::Class1? #t12 = n1 in #t12 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t12{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t13 = n1 in #t13 == null ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t15 = n1 in #t15 == null ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
+  let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
+Try accessing using ?. instead.
+  throws(() => (n1?.nullable1 = new Class1()).nullable1);
+                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t19 = n1 in #t19 == null ?{self::Class1?} null : let final self::Class1 #t20 = new self::Class1::•() in let final void #t21 = self::Extension1|set#nullable1(#t19{self::Class1}, #t20) in #t20));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
+Try accessing using ?. instead.
+  throws(() => (n1?.nonNullable1Method()).nullable1);
+                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t22 = n1 in #t22 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t22{self::Class1})));
+  nullable1 = let final self::Class1? #t23 = n1 in #t23 == null ?{self::Class1?} null : let final self::Class1 #t24 = new self::Class1::•() in let final void #t25 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t23{self::Class1}), #t24) in #t24;
+  nullable1 = let final self::Class1? #t26 = n1 in #t26 == null ?{self::Class1?} null : let final self::Class1? #t27 = self::Extension1|get#nullable1(#t26{self::Class1}) in #t27 == null ?{self::Class1?} null : let final self::Class1 #t28 = new self::Class1::•() in let final void #t29 = self::Extension1|set#nullable1(#t27{self::Class1}, #t28) in #t28;
+  nullable1 = let final self::Class1? #t30 = n1 in #t30 == null ?{self::Class1?} null : let final self::Class1? #t31 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t30{self::Class1})) in #t31 == null ?{self::Class1?} null : let final self::Class1 #t32 = new self::Class1::•() in let final void #t33 = self::Extension1|set#nullable1(#t31{self::Class1}, #t32) in #t32;
+  let final self::Class1? #t34 = n1 in #t34 == null ?{self::Class1?} null : let final self::Class1? #t35 = self::Extension1|get#nullable1(#t34{self::Class1}) in #t35 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t35{self::Class1});
+  let final self::Class1? #t36 = n1 in #t36 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t36{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t37 = n1 in #t37 == null ?{self::Class1?} null : let final self::Class1? #t38 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t39 = self::Extension1|set#nullable1(#t37{self::Class1}, #t38) in #t38;
+  let final self::Class1? #t40 = n1 in #t40 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t40{self::Class1}, let final self::Class1 #t41 = new self::Class1::•() in let final void #t42 = self::Extension1|set#nullable1(new self::Class1::•(), #t41) in #t41);
+  nullable1 = let final self::Class1? #t43 = n1 in #t43 == null ?{self::Class1?} null : let final self::Class1 #t44 = let final self::Class1 #t45 = new self::Class1::•() in let final void #t46 = self::Extension1|set#nullable1(new self::Class1::•(), #t45) in #t45 in let final void #t47 = self::Extension1|set#nullable1(#t43{self::Class1}, #t44) in #t44;
+  let final self::Class1? #t48 = n1 in #t48 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t48{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t49 = n1 in #t49 == null ?{self::Class1?} null : let final self::Class1 #t50 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t51 = self::Extension1|set#nullable1(#t49{self::Class1}, #t50) in #t50;
+  let final self::Class1? #t52 = n1 in #t52 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t52{self::Class1}));
+  let final self::Class1? #t53 = n1 in #t53 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t53{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t54 = n1 in #t54 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t55{self::Class1})));
+  let final self::Class1? #t56 = n1 in #t56 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t56{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t57 = n1 in #t57 == null ?{self::Class1?} null : let final self::Class1 #t58 = new self::Class1::•() in let final void #t59 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})), #t58) in #t58;
+  let final self::Class1? #t60 = n1 in #t60 == null ?{self::Class1?} null : let final self::Class1? #t61 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t60{self::Class1})) in #t61 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t61{self::Class1});
+  let final self::Class1? #t62 = n1 in #t62 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t62{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t63 = n1 in #t63 == null ?{self::Class1?} null : let final self::Class1? #t64 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t65 = self::Extension1|set#nullable1(#t63{self::Class1}, #t64) in #t64;
+  let final self::Class1? #t66 = n1 in #t66 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t66{self::Class1}, let final self::Class1 #t67 = new self::Class1::•() in let final void #t68 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t67) in #t67);
+  nullable1 = let final self::Class1? #t69 = n1 in #t69 == null ?{self::Class1?} null : let final self::Class1 #t70 = let final self::Class1 #t71 = new self::Class1::•() in let final void #t72 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t71) in #t71 in let final void #t73 = self::Extension1|set#nullable1(#t69{self::Class1}, #t70) in #t70;
+  let final self::Class1? #t74 = n1 in #t74 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t74{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t75 = n1 in #t75 == null ?{self::Class1?} null : let final self::Class1 #t76 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t77 = self::Extension1|set#nullable1(#t75{self::Class1}, #t76) in #t76;
+  let final self::Class1? #t78 = n1 in #t78 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t78{self::Class1})));
+  let final self::Class1? #t79 = n1 in #t79 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t79{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t80 = n1 in #t80 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t81{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t82 = n1 in #t82 == null ?{self::Class1?} null : let final self::Class1? #t83 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t84 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t82{self::Class1}), #t83) in #t83;
+  let final self::Class1? #t85 = n1 in #t85 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t85{self::Class1}), let final self::Class1 #t86 = new self::Class1::•() in let final void #t87 = self::Extension1|set#nullable1(new self::Class1::•(), #t86) in #t86);
+  nullable1 = let final self::Class1? #t88 = n1 in #t88 == null ?{self::Class1?} null : let final self::Class1 #t89 = let final self::Class1 #t90 = new self::Class1::•() in let final void #t91 = self::Extension1|set#nullable1(new self::Class1::•(), #t90) in #t90 in let final void #t92 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t88{self::Class1}), #t89) in #t89;
+  let final self::Class1? #t93 = n1 in #t93 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t93{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t94 = n1 in #t94 == null ?{self::Class1?} null : let final self::Class1 #t95 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t96 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t94{self::Class1}), #t95) in #t95;
+  let final self::Class1? #t97 = n1 in #t97 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t97{self::Class1}, let final self::Class1? #t98 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t99 = self::Extension1|set#nullable1(new self::Class1::•(), #t98) in #t98);
+  nullable1 = let final self::Class1? #t100 = n1 in #t100 == null ?{self::Class1?} null : let final self::Class1? #t101 = let final self::Class1? #t102 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t103 = self::Extension1|set#nullable1(new self::Class1::•(), #t102) in #t102 in let final void #t104 = self::Extension1|set#nullable1(#t100{self::Class1}, #t101) in #t101;
+  let final self::Class1? #t105 = n1 in #t105 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t105{self::Class1}, let final self::Class1 #t106 = let final self::Class1 #t107 = new self::Class1::•() in let final void #t108 = self::Extension1|set#nullable1(new self::Class1::•(), #t107) in #t107 in let final void #t109 = self::Extension1|set#nullable1(new self::Class1::•(), #t106) in #t106);
+  nullable1 = let final self::Class1? #t110 = n1 in #t110 == null ?{self::Class1?} null : let final self::Class1 #t111 = let final self::Class1 #t112 = let final self::Class1 #t113 = new self::Class1::•() in let final void #t114 = self::Extension1|set#nullable1(new self::Class1::•(), #t113) in #t113 in let final void #t115 = self::Extension1|set#nullable1(new self::Class1::•(), #t112) in #t112 in let final void #t116 = self::Extension1|set#nullable1(#t110{self::Class1}, #t111) in #t111;
+  let final self::Class1? #t117 = n1 in #t117 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t117{self::Class1}, let final self::Class1 #t118 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t119 = self::Extension1|set#nullable1(new self::Class1::•(), #t118) in #t118);
+  nullable1 = let final self::Class1? #t120 = n1 in #t120 == null ?{self::Class1?} null : let final self::Class1 #t121 = let final self::Class1 #t122 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t123 = self::Extension1|set#nullable1(new self::Class1::•(), #t122) in #t122 in let final void #t124 = self::Extension1|set#nullable1(#t120{self::Class1}, #t121) in #t121;
+  let final self::Class1? #t125 = n1 in #t125 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t125{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t126 = n1 in #t126 == null ?{self::Class1?} null : let final self::Class1? #t127 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t128 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t126{self::Class1}), #t127) in #t127;
+  let final self::Class1? #t129 = n1 in #t129 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t129{self::Class1}), let final self::Class1 #t130 = new self::Class1::•() in let final void #t131 = self::Extension1|set#nullable1(new self::Class1::•(), #t130) in #t130);
+  nullable1 = let final self::Class1? #t132 = n1 in #t132 == null ?{self::Class1?} null : let final self::Class1 #t133 = let final self::Class1 #t134 = new self::Class1::•() in let final void #t135 = self::Extension1|set#nullable1(new self::Class1::•(), #t134) in #t134 in let final void #t136 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t132{self::Class1}), #t133) in #t133;
+  let final self::Class1? #t137 = n1 in #t137 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t137{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t138 = n1 in #t138 == null ?{self::Class1?} null : let final self::Class1 #t139 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t140 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t138{self::Class1}), #t139) in #t139;
+  let final self::Class1? #t141 = n1 in #t141 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t141{self::Class1})));
+  let final self::Class1? #t142 = n1 in #t142 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t142{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t143 = n1 in #t143 == null ?{self::Class1?} null : let final self::Class1 #t144 = new self::Class1::•() in let final void #t145 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})), #t144) in #t144;
+  let final self::Class1? #t146 = n1 in #t146 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t146{self::Class1})));
+  let final self::Class1? #t147 = n1 in #t147 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t147{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t148 = n1 in #t148 == null ?{self::Class1?} null : let final self::Class1? #t149 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t150 = self::Extension1|set#nullable1(#t148{self::Class1}, #t149) in #t149;
+  let final self::Class1? #t151 = n1 in #t151 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t151{self::Class1}, let final self::Class1 #t152 = new self::Class1::•() in let final void #t153 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t152) in #t152);
+  nullable1 = let final self::Class1? #t154 = n1 in #t154 == null ?{self::Class1?} null : let final self::Class1 #t155 = let final self::Class1 #t156 = new self::Class1::•() in let final void #t157 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t156) in #t156 in let final void #t158 = self::Extension1|set#nullable1(#t154{self::Class1}, #t155) in #t155;
+  let final self::Class1? #t159 = n1 in #t159 == null ?{self::Class1?} null : self::Extension1|set#nullable1(#t159{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t160 = n1 in #t160 == null ?{self::Class1?} null : let final self::Class1 #t161 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t162 = self::Extension1|set#nullable1(#t160{self::Class1}, #t161) in #t161;
+  let final self::Class1? #t163 = n1 in #t163 == null ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t163{self::Class1})));
+  let final self::Class1? #t164 = n1 in #t164 == null ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t164{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t165 = n1 in #t165 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166 == null ?{self::Class1?} null : let final self::Class1? #t167 = self::Extension1|nonNullable1Method(#t166{self::Class1}) in #t167 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t167{self::Class1});
+}
+static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
+  self::Class1? nullable1 = n1;
+  self::Class2? nullable2 = n2;
+  self::Class3? nullable3 = n3;
+  let final self::Class1? #t168 = n1 in #t168 == null ?{self::Class1?} null : self::Extension1|[](#t168{self::Class1}, nullable1);
+  let final self::Class1? #t169 = n1 in #t169 == null ?{self::Class1?} null : self::Extension1|[]=(#t169{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t170 = n1 in #t170 == null ?{self::Class1?} null : let final self::Class1? #t171 = self::Extension1|[](#t170{self::Class1}, nullable1) in #t171 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t171{self::Class1});
+  let final self::Class1? #t172 = n1 in #t172 == null ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t172{self::Class1}), nullable1);
+  let final self::Class1? #t173 = n1 in #t173 == null ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t173{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t174 = n1 in #t174 == null ?{self::Class1?} null : let final self::Class1 #t175 = self::Extension1|get#nonNullable1(#t174{self::Class1}) in let final self::Class1? #t176 = nullable1 in let final self::Class1 #t177 = new self::Class1::•() in let final void #t178 = self::Extension1|[]=(#t175, #t176, #t177) in #t177;
+  let final self::Class1? #t179 = n1 in #t179 == null ?{self::Class1?} null : let final self::Class1? #t180 = self::Extension1|[](self::Extension1|get#nonNullable1(#t179{self::Class1}), nullable1) in #t180 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t180{self::Class1});
+  let final self::Class1? #t181 = n1 in #t181 == null ?{self::Class2?} null : let final self::Class2 #t182 = self::Extension1|get#nonNullable2(#t181{self::Class1}) in let final self::Class2? #t183 = nullable2 in self::Extension2|[]=(#t182, #t183, self::Extension2|+(self::Extension2|[](#t182, #t183), 0));
+  nullable2 = let final self::Class1? #t184 = n1 in #t184 == null ?{self::Class2?} null : let final self::Class2 #t185 = self::Extension1|get#nonNullable2(#t184{self::Class1}) in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = self::Extension2|+(self::Extension2|[](#t185, #t186), 0) in let final void #t188 = self::Extension2|[]=(#t185, #t186, #t187) in #t187;
+  let final self::Class1? #t189 = n1 in #t189 == null ?{self::Class1?} null : let final self::Class1? #t190 = nullable1 in self::Extension1|[](#t189{self::Class1}, #t190) == null ?{self::Class1?} self::Extension1|[]=(#t189{self::Class1}, #t190, nullable1) : null;
+  nullable1 = let final self::Class1? #t191 = n1 in #t191 == null ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in let final self::Class1? #t193 = self::Extension1|[](#t191{self::Class1}, #t192) in #t193 == null ?{self::Class1?} let final self::Class1? #t194 = nullable1 in let final void #t195 = self::Extension1|[]=(#t191{self::Class1}, #t192, #t194) in #t194 : #t193{self::Class1};
+  let final self::Class2? #t196 = n2 in #t196 == null ?{self::Class2?} null : let final self::Class2? #t197 = nullable2 in self::Extension2|[]=(#t196{self::Class2}, #t197, self::Extension2|+(self::Extension2|[](#t196{self::Class2}, #t197), 0));
+  nullable2 = let final self::Class2? #t198 = n2 in #t198 == null ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in let final self::Class2 #t200 = self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0) in let final void #t201 = self::Extension2|[]=(#t198{self::Class2}, #t199, #t200) in #t200;
+  let final self::Class2? #t202 = n2 in #t202 == null ?{self::Class2?} null : let final self::Class2? #t203 = nullable2 in self::Extension2|[]=(#t202{self::Class2}, #t203, self::Extension2|+(self::Extension2|[](#t202{self::Class2}, #t203), 0));
+  nullable2 = let final self::Class2? #t204 = n2 in #t204 == null ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in let final self::Class2 #t206 = self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0) in let final void #t207 = self::Extension2|[]=(#t204{self::Class2}, #t205, #t206) in #t206;
+  let final self::Class2? #t208 = n2 in #t208 == null ?{self::Class2?} null : let final self::Class2? #t209 = nullable2 in self::Extension2|[]=(#t208{self::Class2}, #t209, self::Extension2|+(self::Extension2|[](#t208{self::Class2}, #t209), 1));
+  nullable2 = let final self::Class2? #t210 = n2 in #t210 == null ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in let final self::Class2 #t212 = self::Extension2|[](#t210{self::Class2}, #t211) in let final void #t213 = self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(#t212, 1)) in #t212;
+  let final self::Class2? #t214 = n2 in #t214 == null ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in let final self::Class2 #t216 = self::Extension2|+(self::Extension2|[](#t214{self::Class2}, #t215), 1) in let final void #t217 = self::Extension2|[]=(#t214{self::Class2}, #t215, #t216) in #t216;
+  nullable2 = let final self::Class2? #t218 = n2 in #t218 == null ?{self::Class2?} null : let final self::Class2? #t219 = nullable2 in let final self::Class2 #t220 = self::Extension2|+(self::Extension2|[](#t218{self::Class2}, #t219), 1) in let final void #t221 = self::Extension2|[]=(#t218{self::Class2}, #t219, #t220) in #t220;
+  let final self::Class1? #t222 = n1 in #t222 == null ?{self::Class2?} null : let final self::Class2 #t223 = self::Extension1|get#nonNullable2(#t222{self::Class1}) in let final self::Class2? #t224 = nullable2 in self::Extension2|[]=(#t223, #t224, self::Extension2|+(self::Extension2|[](#t223, #t224), 1));
+  nullable2 = let final self::Class1? #t225 = n1 in #t225 == null ?{self::Class2?} null : let final self::Class2 #t226 = self::Extension1|get#nonNullable2(#t225{self::Class1}) in let final self::Class2? #t227 = nullable2 in let final self::Class2 #t228 = self::Extension2|[](#t226, #t227) in let final void #t229 = self::Extension2|[]=(#t226, #t227, self::Extension2|+(#t228, 1)) in #t228;
+  let final self::Class1? #t230 = n1 in #t230 == null ?{self::Class2?} null : let final self::Class2 #t231 = self::Extension1|get#nonNullable2(#t230{self::Class1}) in let final self::Class2? #t232 = nullable2 in let final self::Class2 #t233 = self::Extension2|+(self::Extension2|[](#t231, #t232), 1) in let final void #t234 = self::Extension2|[]=(#t231, #t232, #t233) in #t233;
+  nullable2 = let final self::Class1? #t235 = n1 in #t235 == null ?{self::Class2?} null : let final self::Class2 #t236 = self::Extension1|get#nonNullable2(#t235{self::Class1}) in let final self::Class2? #t237 = nullable2 in let final self::Class2 #t238 = self::Extension2|+(self::Extension2|[](#t236, #t237), 1) in let final void #t239 = self::Extension2|[]=(#t236, #t237, #t238) in #t238;
+  let final self::Class1? #t240 = n1 in #t240 == null ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t240{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t241 = n1 in #t241 == null ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t241{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t242 = n1 in #t242 == null ?{self::Class2?} null : let final self::Class2 #t243 = self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2) in let final self::Class2? #t244 = nullable2 in let final self::Class2 #t245 = new self::Class2::•() in let final void #t246 = self::Extension2|[]=(#t243, #t244, #t245) in #t245;
+  let final self::Class1? #t247 = n1 in #t247 == null ?{self::Class2?} null : let final self::Class2? #t248 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t247{self::Class1}), nullable2), nullable2) in #t248 == null ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t248{self::Class2});
+  let final self::Class1? #t249 = n1 in #t249 == null ?{self::Class2?} null : let final self::Class2 #t250 = self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2) in let final self::Class2? #t251 = nullable2 in self::Extension2|[]=(#t250, #t251, self::Extension2|+(self::Extension2|[](#t250, #t251), 0));
+  nullable2 = let final self::Class1? #t252 = n1 in #t252 == null ?{self::Class2?} null : let final self::Class2 #t253 = self::Extension2|[](self::Extension1|get#nonNullable2(#t252{self::Class1}), nullable2) in let final self::Class2? #t254 = nullable2 in let final self::Class2 #t255 = self::Extension2|+(self::Extension2|[](#t253, #t254), 0) in let final void #t256 = self::Extension2|[]=(#t253, #t254, #t255) in #t255;
+  let final self::Class1? #t257 = n1 in #t257 == null ?{self::Class2?} null : let final self::Class2 #t258 = self::Extension2|[](self::Extension1|get#nonNullable2(#t257{self::Class1}), nullable2) in let final self::Class2? #t259 = nullable2 in self::Extension2|[]=(#t258, #t259, self::Extension2|+(self::Extension2|[](#t258, #t259), 1));
+  nullable2 = let final self::Class1? #t260 = n1 in #t260 == null ?{self::Class2?} null : let final self::Class2 #t261 = self::Extension2|[](self::Extension1|get#nonNullable2(#t260{self::Class1}), nullable2) in let final self::Class2? #t262 = nullable2 in let final self::Class2 #t263 = self::Extension2|[](#t261, #t262) in let final void #t264 = self::Extension2|[]=(#t261, #t262, self::Extension2|+(#t263, 1)) in #t263;
+  let final self::Class1? #t265 = n1 in #t265 == null ?{self::Class2?} null : let final self::Class2 #t266 = self::Extension2|[](self::Extension1|get#nonNullable2(#t265{self::Class1}), nullable2) in let final self::Class2? #t267 = nullable2 in let final self::Class2 #t268 = self::Extension2|+(self::Extension2|[](#t266, #t267), 1) in let final void #t269 = self::Extension2|[]=(#t266, #t267, #t268) in #t268;
+  nullable2 = let final self::Class1? #t270 = n1 in #t270 == null ?{self::Class2?} null : let final self::Class2 #t271 = self::Extension2|[](self::Extension1|get#nonNullable2(#t270{self::Class1}), nullable2) in let final self::Class2? #t272 = nullable2 in let final self::Class2 #t273 = self::Extension2|+(self::Extension2|[](#t271, #t272), 1) in let final void #t274 = self::Extension2|[]=(#t271, #t272, #t273) in #t273;
+  let final self::Class1? #t275 = n1 in #t275 == null ?{self::Class1?} null : let final self::Class1? #t276 = self::Extension1|[](#t275{self::Class1}, nullable1) in #t276 == null ?{self::Class1?} null : self::Extension1|[](#t276{self::Class1}, nullable1);
+  let final self::Class1? #t277 = n1 in #t277 == null ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278 == null ?{self::Class1?} null : self::Extension1|[]=(#t278{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t279 = n1 in #t279 == null ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280 == null ?{self::Class1?} null : let final self::Class1? #t281 = nullable1 in let final self::Class1 #t282 = new self::Class1::•() in let final void #t283 = self::Extension1|[]=(#t280{self::Class1}, #t281, #t282) in #t282;
+  let final self::Class1? #t284 = n1 in #t284 == null ?{self::Class1?} null : let final self::Class1? #t285 = self::Extension1|[](#t284{self::Class1}, nullable1) in #t285 == null ?{self::Class1?} null : let final self::Class1? #t286 = self::Extension1|[](#t285{self::Class1}, nullable1) in #t286 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t286{self::Class1});
+  nullable1 = let final self::Class1? #t287 = n1 in #t287 == null ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288 == null ?{self::Class1?} null : let final self::Class1? #t289 = self::Extension1|[](#t288{self::Class1}, nullable1) in #t289 == null ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t289{self::Class1});
+  let final self::Class1? #t290 = n1 in #t290 == null ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291 == null ?{self::Class1?} null : let final self::Class1? #t292 = nullable1 in self::Extension1|[](#t291{self::Class1}, #t292) == null ?{self::Class1?} self::Extension1|[]=(#t291{self::Class1}, #t292, nullable1) : null;
+  nullable1 = let final self::Class1? #t293 = n1 in #t293 == null ?{self::Class1?} null : let final self::Class1? #t294 = self::Extension1|[](#t293{self::Class1}, nullable1) in #t294 == null ?{self::Class1?} null : let final self::Class1? #t295 = nullable1 in let final self::Class1? #t296 = self::Extension1|[](#t294{self::Class1}, #t295) in #t296 == null ?{self::Class1?} let final self::Class1? #t297 = nullable1 in let final void #t298 = self::Extension1|[]=(#t294{self::Class1}, #t295, #t297) in #t297 : #t296{self::Class1};
+  let final self::Class3? #t299 = n3 in #t299 == null ?{self::Class2?} null : let final self::Class2? #t300 = self::Extension3|[](#t299{self::Class3}, nullable3) in #t300 == null ?{self::Class2?} null : let final self::Class2? #t301 = nullable2 in self::Extension2|[]=(#t300{self::Class2}, #t301, self::Extension2|+(self::Extension2|[](#t300{self::Class2}, #t301), 0));
+  nullable2 = let final self::Class3? #t302 = n3 in #t302 == null ?{self::Class2?} null : let final self::Class2? #t303 = self::Extension3|[](#t302{self::Class3}, nullable3) in #t303 == null ?{self::Class2?} null : let final self::Class2? #t304 = nullable2 in let final self::Class2 #t305 = self::Extension2|+(self::Extension2|[](#t303{self::Class2}, #t304), 0) in let final void #t306 = self::Extension2|[]=(#t303{self::Class2}, #t304, #t305) in #t305;
+  let final self::Class3? #t307 = n3 in #t307 == null ?{self::Class2?} null : let final self::Class2? #t308 = self::Extension3|[](#t307{self::Class3}, nullable3) in #t308 == null ?{self::Class2?} null : let final self::Class2? #t309 = nullable2 in self::Extension2|[]=(#t308{self::Class2}, #t309, self::Extension2|+(self::Extension2|[](#t308{self::Class2}, #t309), 1));
+  nullable2 = let final self::Class3? #t310 = n3 in #t310 == null ?{self::Class2?} null : let final self::Class2? #t311 = self::Extension3|[](#t310{self::Class3}, nullable3) in #t311 == null ?{self::Class2?} null : let final self::Class2? #t312 = nullable2 in let final self::Class2 #t313 = self::Extension2|[](#t311{self::Class2}, #t312) in let final void #t314 = self::Extension2|[]=(#t311{self::Class2}, #t312, self::Extension2|+(#t313, 1)) in #t313;
+  let final self::Class3? #t315 = n3 in #t315 == null ?{self::Class2?} null : let final self::Class2? #t316 = self::Extension3|[](#t315{self::Class3}, nullable3) in #t316 == null ?{self::Class2?} null : let final self::Class2? #t317 = nullable2 in let final self::Class2 #t318 = self::Extension2|+(self::Extension2|[](#t316{self::Class2}, #t317), 1) in let final void #t319 = self::Extension2|[]=(#t316{self::Class2}, #t317, #t318) in #t318;
+  nullable2 = let final self::Class3? #t320 = n3 in #t320 == null ?{self::Class2?} null : let final self::Class2? #t321 = self::Extension3|[](#t320{self::Class3}, nullable3) in #t321 == null ?{self::Class2?} null : let final self::Class2? #t322 = nullable2 in let final self::Class2 #t323 = self::Extension2|+(self::Extension2|[](#t321{self::Class2}, #t322), 1) in let final void #t324 = self::Extension2|[]=(#t321{self::Class2}, #t322, #t323) in #t323;
+}
+static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
+  self::Class2? nullable2 = n2;
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
+  throws(() => n1?.nonNullable1 + 0);
+                                ^" in self::Extension1|+(let final self::Class1? #t325 = n1 in #t325 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t325{self::Class1}), 0));
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
+  throws(() => -n1?.nonNullable1);
+               ^" in self::Extension1|unary-(let final self::Class1? #t326 = n1 in #t326 == null ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t326{self::Class1})));
+  let final self::Class2? #t327 = n2 in #t327 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t327, self::Extension2|+(self::Extension2|get#nonNullable2(#t327), 0));
+  nullable2 = let final self::Class2? #t328 = n2 in #t328 == null ?{self::Class2?} null : let final self::Class2 #t329 = self::Extension2|+(self::Extension2|get#nonNullable2(#t328), 0) in let final void #t330 = self::Extension2|set#nonNullable2(#t328, #t329) in #t329;
+  let final self::Class2? #t331 = n2 in #t331 == null ?{self::Class2?} null : let final self::Class2 #t332 = self::Extension2|get#nonNullable2(#t331{self::Class2}) in self::Extension2|set#nonNullable2(#t332, self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0));
+  nullable2 = let final self::Class2? #t333 = n2 in #t333 == null ?{self::Class2?} null : let final self::Class2 #t334 = self::Extension2|get#nonNullable2(#t333{self::Class2}) in let final self::Class2 #t335 = self::Extension2|+(self::Extension2|get#nonNullable2(#t334), 0) in let final void #t336 = self::Extension2|set#nonNullable2(#t334, #t335) in #t335;
+  let final self::Class2? #t337 = n2 in #t337 == null ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t337, self::Extension2|+(self::Extension2|get#nonNullable2(#t337), 1));
+  nullable2 = let final self::Class2? #t338 = n2 in #t338 == null ?{self::Class2?} null : let final self::Class2 #t339 = self::Extension2|get#nonNullable2(#t338) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, self::Extension2|+(#t339, 1)) in #t339;
+  let final self::Class2? #t341 = n2 in #t341 == null ?{self::Class2?} null : let final self::Class2 #t342 = self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1) in let final void #t343 = self::Extension2|set#nonNullable2(#t341, #t342) in #t342;
+  nullable2 = let final self::Class2? #t344 = n2 in #t344 == null ?{self::Class2?} null : let final self::Class2 #t345 = self::Extension2|+(self::Extension2|get#nonNullable2(#t344), 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t344, #t345) in #t345;
+}
+static method ifNull(self::Class1? n1) → void {
+  self::Class1? nullable1 = n1;
+  let final self::Class1? #t347 = n1 in #t347 == null ?{self::Class1?} null : self::Extension1|get#nullable1(#t347) == null ?{self::Class1} self::Extension1|set#nullable1(#t347, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t348 = n1 in #t348 == null ?{self::Class1?} null : let final self::Class1? #t349 = self::Extension1|get#nullable1(#t348) in #t349 == null ?{self::Class1} let final self::Class1 #t350 = n1{self::Class1} in let final void #t351 = self::Extension1|set#nullable1(#t348, #t350) in #t350 : #t349{self::Class1};
+  let final self::Class1? #t352 = n1 in #t352 == null ?{self::Class1?} null : let final self::Class1 #t353 = self::Extension1|get#nonNullable1(#t352{self::Class1}) in self::Extension1|get#nullable1(#t353) == null ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t354 = n1 in #t354 == null ?{self::Class1?} null : let final self::Class1 #t355 = self::Extension1|get#nonNullable1(#t354{self::Class1}) in let final self::Class1? #t356 = self::Extension1|get#nullable1(#t355) in #t356 == null ?{self::Class1} let final self::Class1 #t357 = n1{self::Class1} in let final void #t358 = self::Extension1|set#nullable1(#t355, #t357) in #t357 : #t356{self::Class1};
+  let final self::Class1? #t359 = n1 in #t359 == null ?{self::Class1?} null : let final self::Class1 #t360 = self::Extension1|get#nonNullable1(#t359{self::Class1}) in let final self::Class1 #t361 = n1{self::Class1} in self::Extension1|[](#t360, #t361) == null ?{self::Class1} self::Extension1|[]=(#t360, #t361, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t362 = n1 in #t362 == null ?{self::Class1?} null : let final self::Class1 #t363 = self::Extension1|get#nonNullable1(#t362{self::Class1}) in let final self::Class1 #t364 = n1{self::Class1} in let final self::Class1? #t365 = self::Extension1|[](#t363, #t364) in #t365 == null ?{self::Class1} let final self::Class1 #t366 = n1{self::Class1} in let final void #t367 = self::Extension1|[]=(#t363, #t364, #t366) in #t366 : #t365{self::Class1};
+}
+static method throws(() → void f) → void {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object _) {
+    return;
+  }
+  throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.modular.expect
new file mode 100644
index 0000000..438791b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/null_shorting_index.dart.weak.modular.expect
@@ -0,0 +1,133 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/null_shorting_index.dart:31:6: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   c1?[0] ??= 1;
+//      ^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_index.dart:32:6: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   c1?[0] ??= 1 + c1[1];
+//      ^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_index.dart:42:6: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   c2?[0] ??= 1;
+//      ^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_index.dart:43:6: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   c2?[0] ??= 1 + c2[1];
+//      ^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_index.dart:52:17: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   Extension(c2)?[0] ??= 1;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_index.dart:53:17: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   Extension(c2)?[0] ??= 1 + Extension(c2)[1];
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_index.dart:62:13: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   c1?.field?[0] ??= 1;
+//             ^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_index.dart:63:13: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   c1?.field?[0] ??= 1 + c1[1];
+//             ^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_index.dart:67:49: Warning: Operand of null-aware operation '!' has type 'int' which excludes null.
+//   Extension(c1?.field)?[0] = 1 + (Extension(c2)?[0]! as int);
+//                                                 ^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_index.dart:69:50: Warning: Operand of null-aware operation '!' has type 'int' which excludes null.
+//   Extension(c1?.field)?[0] += 1 + (Extension(c2)?[0]! as int);
+//                                                  ^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_index.dart:72:24: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   Extension(c1?.field)?[0] ??= 1;
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_index.dart:73:24: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   Extension(c1?.field)?[0] ??= 1 + (Extension(c2)?[1]! as int);
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/null_shorting_index.dart:73:51: Warning: Operand of null-aware operation '!' has type 'int' which excludes null.
+//   Extension(c1?.field)?[0] ??= 1 + (Extension(c2)?[1]! as int);
+//                                                   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+  get field() → self::Class2?
+    return null;
+  operator [](core::int index) → core::int
+    return index;
+  operator []=(core::int index, core::int value) → void {}
+}
+class Class2 extends core::Object {
+  field core::int field = 42;
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+extension Extension on self::Class2 {
+  operator [] = self::Extension|[];
+  operator []= = self::Extension|[]=;
+}
+static method Extension|[](lowered final self::Class2 #this, core::int index) → core::int
+  return #this.{self::Class2::field}{core::int};
+static method Extension|[]=(lowered final self::Class2 #this, core::int index, core::int value) → void {
+  #this.{self::Class2::field} = value;
+}
+static method main() → dynamic {
+  self::Class1? c1;
+  let final self::Class1? #t1 = c1 in #t1 == null ?{core::int?} null : #t1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int};
+  let final self::Class1? #t2 = c1 in #t2 == null ?{core::int?} null : #t2{self::Class1}.{self::Class1::[]=}(0, 1){(core::int, core::int) → void};
+  let final self::Class1? #t3 = c1 in #t3 == null ?{core::int?} null : #t3{self::Class1}.{self::Class1::[]=}(0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t4 = c1 in #t4 == null ?{core::int?} null : let final core::int #t5 = 0 in #t4{self::Class1}.{self::Class1::[]=}(#t5, #t4{self::Class1}.{self::Class1::[]}(#t5){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t6 = c1 in #t6 == null ?{core::int?} null : let final core::int #t7 = 0 in #t6{self::Class1}.{self::Class1::[]=}(#t7, #t6{self::Class1}.{self::Class1::[]}(#t7){(core::int) → core::int}.{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int}){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t8 = c1 in #t8 == null ?{core::int?} null : let final core::int #t9 = 0 in let final core::int #t10 = #t8{self::Class1}.{self::Class1::[]}(#t9){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t11 = #t8{self::Class1}.{self::Class1::[]=}(#t9, #t10){(core::int, core::int) → void} in #t10;
+  let final self::Class1? #t12 = c1 in #t12 == null ?{core::int?} null : let final core::int #t13 = 0 in #t12{self::Class1}.{self::Class1::[]=}(#t13, #t12{self::Class1}.{self::Class1::[]}(#t13){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
+  let final self::Class1? #t14 = c1 in #t14 == null ?{core::int?} null : let final core::int #t15 = 0 in #t14{self::Class1}.{self::Class1::[]}(#t15){(core::int) → core::int} == null ?{core::int} #t14{self::Class1}.{self::Class1::[]=}(#t15, 1){(core::int, core::int) → void} : null;
+  let final self::Class1? #t16 = c1 in #t16 == null ?{core::int?} null : let final core::int #t17 = 0 in #t16{self::Class1}.{self::Class1::[]}(#t17){(core::int) → core::int} == null ?{core::int} #t16{self::Class1}.{self::Class1::[]=}(#t17, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1){(core::int) → core::int}){(core::num) → core::int}){(core::int, core::int) → void} : null;
+  self::Class2? c2;
+  let final self::Class2? #t18 = c2 in #t18 == null ?{core::int?} null : self::Extension|[](#t18{self::Class2}, 0);
+  let final self::Class2? #t19 = c2 in #t19 == null ?{core::int?} null : self::Extension|[]=(#t19{self::Class2}, 0, 1);
+  let final self::Class2? #t20 = c2 in #t20 == null ?{core::int?} null : self::Extension|[]=(#t20{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int});
+  let final self::Class2? #t21 = c2 in #t21 == null ?{core::int?} null : let final core::int #t22 = 0 in self::Extension|[]=(#t21{self::Class2}, #t22, self::Extension|[](#t21{self::Class2}, #t22).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t23 = c2 in #t23 == null ?{core::int?} null : let final core::int #t24 = 0 in self::Extension|[]=(#t23{self::Class2}, #t24, self::Extension|[](#t23{self::Class2}, #t24).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class2? #t25 = c2 in #t25 == null ?{core::int?} null : let final core::int #t26 = 0 in let final core::int #t27 = self::Extension|[](#t25{self::Class2}, #t26).{core::num::+}(1){(core::num) → core::int} in let final void #t28 = self::Extension|[]=(#t25{self::Class2}, #t26, #t27) in #t27;
+  let final self::Class2? #t29 = c2 in #t29 == null ?{core::int?} null : let final core::int #t30 = 0 in self::Extension|[]=(#t29{self::Class2}, #t30, self::Extension|[](#t29{self::Class2}, #t30).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t31 = c2 in #t31 == null ?{core::int?} null : let final core::int #t32 = 0 in self::Extension|[](#t31{self::Class2}, #t32) == null ?{core::int} self::Extension|[]=(#t31{self::Class2}, #t32, 1) : null;
+  let final self::Class2? #t33 = c2 in #t33 == null ?{core::int?} null : let final core::int #t34 = 0 in self::Extension|[](#t33{self::Class2}, #t34) == null ?{core::int} self::Extension|[]=(#t33{self::Class2}, #t34, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1)){(core::num) → core::int}) : null;
+  let final self::Class2? #t35 = c2 in #t35 == null ?{core::int?} null : self::Extension|[](#t35{self::Class2}, 0);
+  let final self::Class2? #t36 = c2 in #t36 == null ?{void} null : self::Extension|[]=(#t36{self::Class2}, 0, 1);
+  let final self::Class2? #t37 = c2 in #t37 == null ?{void} null : self::Extension|[]=(#t37{self::Class2}, 0, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int});
+  let final self::Class2? #t38 = c2 in #t38 == null ?{core::int?} null : let final core::int #t39 = 0 in self::Extension|[]=(#t38{self::Class2}, #t39, self::Extension|[](#t38{self::Class2}, #t39).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t40 = c2 in #t40 == null ?{core::int?} null : let final core::int #t41 = 0 in self::Extension|[]=(#t40{self::Class2}, #t41, self::Extension|[](#t40{self::Class2}, #t41).{core::num::+}(1.{core::num::+}(self::Extension|[](c2{self::Class2}, 0)){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class2? #t42 = c2 in #t42 == null ?{core::int?} null : let final core::int #t43 = 0 in let final core::int #t44 = self::Extension|[](#t42{self::Class2}, #t43).{core::num::+}(1){(core::num) → core::int} in let final void #t45 = self::Extension|[]=(#t42{self::Class2}, #t43, #t44) in #t44;
+  let final self::Class2? #t46 = c2 in #t46 == null ?{core::int?} null : let final core::int #t47 = 0 in self::Extension|[]=(#t46{self::Class2}, #t47, self::Extension|[](#t46{self::Class2}, #t47).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class2? #t48 = c2 in #t48 == null ?{core::int?} null : let final core::int #t49 = 0 in self::Extension|[](#t48{self::Class2}, #t49) == null ?{core::int} self::Extension|[]=(#t48{self::Class2}, #t49, 1) : null;
+  let final self::Class2? #t50 = c2 in #t50 == null ?{core::int?} null : let final core::int #t51 = 0 in self::Extension|[](#t50{self::Class2}, #t51) == null ?{core::int} self::Extension|[]=(#t50{self::Class2}, #t51, 1.{core::num::+}(self::Extension|[](c2{self::Class2}, 1)){(core::num) → core::int}) : null;
+  let final self::Class1? #t52 = c1 in #t52 == null ?{core::int?} null : let final self::Class2? #t53 = #t52{self::Class1}.{self::Class1::field}{self::Class2?} in #t53 == null ?{core::int?} null : self::Extension|[](#t53{self::Class2}, 0);
+  let final self::Class1? #t54 = c1 in #t54 == null ?{core::int?} null : let final self::Class2? #t55 = #t54{self::Class1}.{self::Class1::field}{self::Class2?} in #t55 == null ?{core::int?} null : self::Extension|[]=(#t55{self::Class2}, 0, 1);
+  let final self::Class1? #t56 = c1 in #t56 == null ?{core::int?} null : let final self::Class2? #t57 = #t56{self::Class1}.{self::Class1::field}{self::Class2?} in #t57 == null ?{core::int?} null : self::Extension|[]=(#t57{self::Class2}, 0, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int});
+  let final self::Class1? #t58 = c1 in #t58 == null ?{core::int?} null : let final self::Class2? #t59 = #t58{self::Class1}.{self::Class1::field}{self::Class2?} in #t59 == null ?{core::int?} null : let final core::int #t60 = 0 in self::Extension|[]=(#t59{self::Class2}, #t60, self::Extension|[](#t59{self::Class2}, #t60).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t61 = c1 in #t61 == null ?{core::int?} null : let final self::Class2? #t62 = #t61{self::Class1}.{self::Class1::field}{self::Class2?} in #t62 == null ?{core::int?} null : let final core::int #t63 = 0 in self::Extension|[]=(#t62{self::Class2}, #t63, self::Extension|[](#t62{self::Class2}, #t63).{core::num::+}(1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(0){(core::int) → core::int}){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class1? #t64 = c1 in #t64 == null ?{core::int?} null : let final self::Class2? #t65 = #t64{self::Class1}.{self::Class1::field}{self::Class2?} in #t65 == null ?{core::int?} null : let final core::int #t66 = 0 in let final core::int #t67 = self::Extension|[](#t65{self::Class2}, #t66).{core::num::+}(1){(core::num) → core::int} in let final void #t68 = self::Extension|[]=(#t65{self::Class2}, #t66, #t67) in #t67;
+  let final self::Class1? #t69 = c1 in #t69 == null ?{core::int?} null : let final self::Class2? #t70 = #t69{self::Class1}.{self::Class1::field}{self::Class2?} in #t70 == null ?{core::int?} null : let final core::int #t71 = 0 in self::Extension|[]=(#t70{self::Class2}, #t71, self::Extension|[](#t70{self::Class2}, #t71).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t72 = c1 in #t72 == null ?{core::int?} null : let final self::Class2? #t73 = #t72{self::Class1}.{self::Class1::field}{self::Class2?} in #t73 == null ?{core::int?} null : let final core::int #t74 = 0 in self::Extension|[](#t73{self::Class2}, #t74) == null ?{core::int} self::Extension|[]=(#t73{self::Class2}, #t74, 1) : null;
+  let final self::Class1? #t75 = c1 in #t75 == null ?{core::int?} null : let final self::Class2? #t76 = #t75{self::Class1}.{self::Class1::field}{self::Class2?} in #t76 == null ?{core::int?} null : let final core::int #t77 = 0 in self::Extension|[](#t76{self::Class2}, #t77) == null ?{core::int} self::Extension|[]=(#t76{self::Class2}, #t77, 1.{core::num::+}(c1{self::Class1}.{self::Class1::[]}(1){(core::int) → core::int}){(core::num) → core::int}) : null;
+  let final self::Class1? #t78 = c1 in #t78 == null ?{core::int?} null : let final self::Class2? #t79 = #t78{self::Class1}.{self::Class1::field}{self::Class2?} in #t79 == null ?{core::int?} null : self::Extension|[](#t79{self::Class2}, 0);
+  let final self::Class1? #t80 = c1 in #t80 == null ?{void} null : let final self::Class2? #t81 = #t80{self::Class1}.{self::Class1::field}{self::Class2?} in #t81 == null ?{void} null : self::Extension|[]=(#t81{self::Class2}, 0, 1);
+  let final self::Class1? #t82 = c1 in #t82 == null ?{void} null : let final self::Class2? #t83 = #t82{self::Class1}.{self::Class1::field}{self::Class2?} in #t83 == null ?{void} null : self::Extension|[]=(#t83{self::Class2}, 0, 1.{core::num::+}((let final self::Class2? #t84 = c2 in #t84 == null ?{core::int?} null : self::Extension|[](#t84{self::Class2}, 0)!) as{ForNonNullableByDefault} core::int){(core::num) → core::int});
+  let final self::Class1? #t85 = c1 in #t85 == null ?{core::int?} null : let final self::Class2? #t86 = #t85{self::Class1}.{self::Class1::field}{self::Class2?} in #t86 == null ?{core::int?} null : let final core::int #t87 = 0 in self::Extension|[]=(#t86{self::Class2}, #t87, self::Extension|[](#t86{self::Class2}, #t87).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t88 = c1 in #t88 == null ?{core::int?} null : let final self::Class2? #t89 = #t88{self::Class1}.{self::Class1::field}{self::Class2?} in #t89 == null ?{core::int?} null : let final core::int #t90 = 0 in self::Extension|[]=(#t89{self::Class2}, #t90, self::Extension|[](#t89{self::Class2}, #t90).{core::num::+}(1.{core::num::+}((let final self::Class2? #t91 = c2 in #t91 == null ?{core::int?} null : self::Extension|[](#t91{self::Class2}, 0)!) as{ForNonNullableByDefault} core::int){(core::num) → core::int}){(core::num) → core::int});
+  let final self::Class1? #t92 = c1 in #t92 == null ?{core::int?} null : let final self::Class2? #t93 = #t92{self::Class1}.{self::Class1::field}{self::Class2?} in #t93 == null ?{core::int?} null : let final core::int #t94 = 0 in let final core::int #t95 = self::Extension|[](#t93{self::Class2}, #t94).{core::num::+}(1){(core::num) → core::int} in let final void #t96 = self::Extension|[]=(#t93{self::Class2}, #t94, #t95) in #t95;
+  let final self::Class1? #t97 = c1 in #t97 == null ?{core::int?} null : let final self::Class2? #t98 = #t97{self::Class1}.{self::Class1::field}{self::Class2?} in #t98 == null ?{core::int?} null : let final core::int #t99 = 0 in self::Extension|[]=(#t98{self::Class2}, #t99, self::Extension|[](#t98{self::Class2}, #t99).{core::num::+}(1){(core::num) → core::int});
+  let final self::Class1? #t100 = c1 in #t100 == null ?{core::int?} null : let final self::Class2? #t101 = #t100{self::Class1}.{self::Class1::field}{self::Class2?} in #t101 == null ?{core::int?} null : let final core::int #t102 = 0 in self::Extension|[](#t101{self::Class2}, #t102) == null ?{core::int} self::Extension|[]=(#t101{self::Class2}, #t102, 1) : null;
+  let final self::Class1? #t103 = c1 in #t103 == null ?{core::int?} null : let final self::Class2? #t104 = #t103{self::Class1}.{self::Class1::field}{self::Class2?} in #t104 == null ?{core::int?} null : let final core::int #t105 = 0 in self::Extension|[](#t104{self::Class2}, #t105) == null ?{core::int} self::Extension|[]=(#t104{self::Class2}, #t105, 1.{core::num::+}((let final self::Class2? #t106 = c2 in #t106 == null ?{core::int?} null : self::Extension|[](#t106{self::Class2}, 1)!) as{ForNonNullableByDefault} core::int){(core::num) → core::int}) : null;
+}
diff --git a/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.modular.expect
new file mode 100644
index 0000000..c5958c2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nullable_access.dart:23:18: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_access.dart'.
+// Try accessing using ?. instead.
+//   throws(() => c.nonNullableField);
+//                  ^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field self::A nonNullableField = #C1;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  get nonNullableProperty() → self::A
+    return this.{self::Class::nonNullableField}{self::A};
+  set nonNullableProperty(self::A value) → void {
+    this.{self::Class::nonNullableField} = value;
+  }
+  method nonNullableMethod() → self::A
+    return this.{self::Class::nonNullableField}{self::A};
+}
+class A extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::A
+    : super core::Object::•()
+    ;
+  get nonNullableProperty() → self::A
+    return this;
+}
+static method main() → dynamic {
+  self::Class? c;
+  self::throws(() → void => invalid-expression "pkg/front_end/testcases/nnbd/nullable_access.dart:23:18: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_access.dart'.
+Try accessing using ?. instead.
+  throws(() => c.nonNullableField);
+                 ^^^^^^^^^^^^^^^^" in c.{self::Class::nonNullableField}{<nullable>}.{self::A});
+  self::expect(null, let final self::Class? #t1 = c in #t1 == null ?{self::A?} null : #t1{self::Class}.{self::Class::nonNullableField}{self::A});
+  self::expect(null, let final self::Class? #t2 = c in #t2 == null ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField}{self::A}.{self::A::nonNullableProperty}{self::A});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → void f) → dynamic {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object e) {
+    return;
+  }
+  throw "Expected throws.";
+}
+
+constants  {
+  #C1 = self::A {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///nullable_access.dart:
+- A. (from org-dartlang-testcase:///nullable_access.dart:16:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.modular.expect
new file mode 100644
index 0000000..62d3a21
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nullable_extension.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::String text = "";
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+extension _extension#0 on self::A? {
+  get text = self::_extension#0|get#text;
+}
+static method _extension#0|get#text(lowered final self::A? #this) → core::String
+  return "Lily was here";
+static method main() → void {
+  self::A? a = null;
+  self::expect("Lily was here", self::_extension#0|get#text(a));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/nnbd/nullable_null.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/nullable_null.dart.weak.modular.expect
new file mode 100644
index 0000000..82c9494
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nullable_null.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class B extends self::A<Null> {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method foo(Null n, self::A<Null> an) → Null
+    return n;
+}
+static method foo() → dynamic {
+  return <core::List<self::A<Null>?>>[<Null>[], <self::A<Null>>[]];
+}
+static method bar() → dynamic {
+  return <core::List<self::A<Null>?>>[#C1, #C2];
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <Null>[]
+  #C2 = <self::A<Null>*>[]
+}
diff --git a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.modular.expect
new file mode 100644
index 0000000..3595f53
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.modular.expect
@@ -0,0 +1,127 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:31:43: Error: The argument type 'Invocation' can't be assigned to the parameter type 'CustomInvocation'.
+//  - 'Invocation' is from 'dart:core'.
+//  - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+//   String noSuchMethod1b = c1.noSuchMethod(invocation); // error
+//                                           ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:34:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+//   c1 == ''; // error
+//         ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:42:32: Error: A value of type 'Type' can't be assigned to a variable of type 'CustomType'.
+//  - 'Type' is from 'dart:core'.
+//  - 'CustomType' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+//   CustomType runtimeType2 = c2.runtimeType; // error
+//                                ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:44:17: Error: 'runtimeType' isn't a function or method and can't be invoked.
+//   c2.runtimeType(); // error
+//                 ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:47:10: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'String Function(CustomInvocation)'.
+//  - 'Invocation' is from 'dart:core'.
+//  - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+//       c2.noSuchMethod; // error
+//          ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:56:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+//   c2 == ''; // ok or error?
+//         ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:59:53: Error: A value of type 'String Function()' can't be assigned to a variable of type 'String Function({Object o})'.
+//  - 'Object' is from 'dart:core'.
+//   String Function({Object o}) toStringTearOff2 = c2.toString; // error
+//                                                     ^
+//
+// pkg/front_end/testcases/nnbd/nullable_object_access.dart:62:15: Error: No named parameter with the name 'o'.
+//   c2.toString(o: c1); // error
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class CustomType extends core::Type {
+  synthetic constructor •() → self::CustomType
+    : super core::Type::•()
+    ;
+  method call() → void {}
+}
+abstract class CustomInvocation extends core::Object implements core::Invocation {
+  synthetic constructor •() → self::CustomInvocation
+    : super core::Object::•()
+    ;
+}
+abstract class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  abstract get runtimeType() → self::CustomType;
+  forwarding-stub forwarding-semi-stub method /* signature-type: (self::CustomInvocation) → core::String */ noSuchMethod(covariant-by-declaration core::Invocation invocation) → core::String
+    return super.{core::Object::noSuchMethod}(invocation);
+  forwarding-stub forwarding-semi-stub operator /* signature-type: (self::Class) → core::bool */ ==(covariant-by-declaration core::Object o) → core::bool
+    return super.{core::Object::==}(o);
+  abstract method toString({core::Object o = #C1}) → core::String;
+}
+static method main() → dynamic {}
+static method test(self::Class c1, self::Class? c2, core::Invocation invocation, self::CustomInvocation customInvocation) → void {
+  self::CustomType runtimeType1 = c1.{self::Class::runtimeType}{self::CustomType};
+  self::CustomType runtimeTypeVariable1 = c1.{self::Class::runtimeType}{self::CustomType};
+  c1.{self::Class::runtimeType}{self::CustomType}.{self::CustomType::call}(){() → void};
+  (self::CustomInvocation) → core::String noSuchMethodTearOff1 = c1.{self::Class::noSuchMethod}{(self::CustomInvocation) → core::String};
+  (self::CustomInvocation) → core::String noSuchMethodTearOffVariable1 = c1.{self::Class::noSuchMethod}{(self::CustomInvocation) → core::String};
+  core::String noSuchMethod1a = c1.{self::Class::noSuchMethod}(customInvocation){(self::CustomInvocation) → core::String};
+  core::String noSuchMethod1b = c1.{self::Class::noSuchMethod}(invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:31:43: Error: The argument type 'Invocation' can't be assigned to the parameter type 'CustomInvocation'.
+ - 'Invocation' is from 'dart:core'.
+ - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+  String noSuchMethod1b = c1.noSuchMethod(invocation); // error
+                                          ^" in invocation as{TypeError,ForNonNullableByDefault} self::CustomInvocation){(self::CustomInvocation) → core::String};
+  core::String noSuchMethodVariable1 = c1.{self::Class::noSuchMethod}(customInvocation){(self::CustomInvocation) → core::String};
+  c1 =={self::Class::==}{(self::Class) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:34:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+  c1 == ''; // error
+        ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?;
+  c1 =={self::Class::==}{(self::Class) → core::bool} c2;
+  ({o: core::Object}) → core::String toStringTearOff1 = c1.{self::Class::toString}{({o: core::Object}) → core::String};
+  ({o: core::Object}) → core::String toStringTearOffVariable1 = c1.{self::Class::toString}{({o: core::Object}) → core::String};
+  c1.{self::Class::toString}(o: c1){({o: core::Object}) → core::String};
+  self::CustomType runtimeType2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:42:32: Error: A value of type 'Type' can't be assigned to a variable of type 'CustomType'.
+ - 'Type' is from 'dart:core'.
+ - 'CustomType' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+  CustomType runtimeType2 = c2.runtimeType; // error
+                               ^" in c2.{core::Object::runtimeType}{core::Type} as{TypeError,ForNonNullableByDefault} self::CustomType;
+  core::Type runtimeTypeVariable2 = c2.{core::Object::runtimeType}{core::Type};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:44:17: Error: 'runtimeType' isn't a function or method and can't be invoked.
+  c2.runtimeType(); // error
+                ^^^^^^^^^^^" in c2.{core::Object::runtimeType}{core::Type}{<unresolved>}.call();
+  (self::CustomInvocation) → core::String noSuchMethodTearOff2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:47:10: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'String Function(CustomInvocation)'.
+ - 'Invocation' is from 'dart:core'.
+ - 'CustomInvocation' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+      c2.noSuchMethod; // error
+         ^" in c2.{core::Object::noSuchMethod}{(core::Invocation) → dynamic} as{TypeError,ForNonNullableByDefault} (self::CustomInvocation) → core::String;
+  (core::Invocation) → dynamic noSuchMethodTearOffVariable2 = c2.{core::Object::noSuchMethod}{(core::Invocation) → dynamic};
+  core::int noSuchMethod2 = c2.{core::Object::noSuchMethod}(invocation){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  dynamic noSuchMethodVariable2 = c2.{core::Object::noSuchMethod}(invocation){(core::Invocation) → dynamic};
+  c2 =={self::Class::==}{(self::Class) → core::bool} invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:56:9: Error: The argument type 'String' can't be assigned to the parameter type 'Class?'.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_object_access.dart'.
+  c2 == ''; // ok or error?
+        ^" in "" as{TypeError,ForNonNullableByDefault} self::Class?;
+  c2 =={self::Class::==}{(self::Class) → core::bool} c1;
+  ({o: core::Object}) → core::String toStringTearOff2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:59:53: Error: A value of type 'String Function()' can't be assigned to a variable of type 'String Function({Object o})'.
+ - 'Object' is from 'dart:core'.
+  String Function({Object o}) toStringTearOff2 = c2.toString; // error
+                                                    ^" in c2.{core::Object::toString}{() → core::String} as{TypeError,ForNonNullableByDefault} ({o: core::Object}) → core::String;
+  () → core::String toStringTearOffVariable2 = c2.{core::Object::toString}{() → core::String};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_object_access.dart:62:15: Error: No named parameter with the name 'o'.
+  c2.toString(o: c1); // error
+              ^" in c2.{core::Object::toString}{<inapplicable>}.(o: c1){({o: invalid-type}) → invalid-type};
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.modular.expect
new file mode 100644
index 0000000..1d7f270
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nullable_param.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  field core::int? field = null;
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+  method bar(core::int? x) → core::int? {}
+}
+static method main() → dynamic {
+  self::Foo foo = new self::Foo::•();
+  foo.{self::Foo::field} = 5;
+  foo.{self::Foo::bar}(6){(core::int?) → core::int?};
+  self::test_nullable_function_type_formal_param(f: () → core::int => 2);
+}
+static method test_nullable_function_type_formal_param({() →? core::int f = #C1}) → core::int {
+  return let final core::int? #t1 = let final () →? core::int #t2 = f in #t2 == null ?{core::int?} null : #t2{() → core::int}(){() → core::int} in #t1 == null ?{core::int} 1.{core::int::unary-}(){() → core::int} : #t1{core::int};
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.modular.expect
new file mode 100644
index 0000000..7274ffb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.modular.expect
@@ -0,0 +1,161 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+// Try accessing using ?. instead.
+//   s.length;
+//     ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Error: Method 'substring' cannot be called on 'String?' because it is potentially null.
+// Try calling using ?. instead.
+//   s.substring(1, 1);
+//     ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Error: Method 'foo' cannot be called on 'A?' because it is potentially null.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+// Try calling using ?. instead.
+//   a.foo();
+//     ^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Error: Property 'bar' cannot be accessed on 'A?' because it is potentially null.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+// Try accessing using ?. instead.
+//   a.bar;
+//     ^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Error: Property 'baz' cannot be accessed on 'A?' because it is potentially null.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+// Try accessing using ?. instead.
+//   a.baz = 42;
+//     ^^^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+// Try calling using ?.call instead.
+//   a();
+//    ^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:13: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   b.toString(0);
+//             ^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
+//   Function f1 = a;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
+//   void Function() f2 = a;
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
+//   void Function()? f3 = a;
+//                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {}
+  get bar() → core::int
+    return 42;
+  set baz(core::int value) → void {}
+  method call() → void {}
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  method toString([core::int extra = #C1]) → core::String
+    return super.{core::Object::toString}();
+}
+static method error(core::String? s, self::A? a, self::B? b) → dynamic {
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+Try accessing using ?. instead.
+  s.length;
+    ^^^^^^" in s.{core::String::length}{<nullable>}.{core::int};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Error: Method 'substring' cannot be called on 'String?' because it is potentially null.
+Try calling using ?. instead.
+  s.substring(1, 1);
+    ^^^^^^^^^" in s.{core::String::substring}{<nullable>}.(1, 1){(core::int, [core::int?]) → core::String};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Error: Method 'foo' cannot be called on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try calling using ?. instead.
+  a.foo();
+    ^^^" in a.{self::A::foo}{<nullable>}.(){() → dynamic};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Error: Property 'bar' cannot be accessed on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try accessing using ?. instead.
+  a.bar;
+    ^^^" in a.{self::A::bar}{<nullable>}.{core::int};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Error: Property 'baz' cannot be accessed on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try accessing using ?. instead.
+  a.baz = 42;
+    ^^^" in a.{self::A::baz}{<nullable>}. = 42;
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try calling using ?.call instead.
+  a();
+   ^" in a.{self::A::call}{<nullable>}.(){() → void};
+  invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:13: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  b.toString(0);
+            ^" in b.{core::Object::toString}{<inapplicable>}.(0){(invalid-type) → invalid-type};
+  core::Function f1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
+  Function f1 = a;
+                ^" in a as{TypeError} core::Function;
+  () → void f2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
+  void Function() f2 = a;
+                       ^" in a as{TypeError} () → void;
+  () →? void f3 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
+  void Function()? f3 = a;
+                        ^" in a as{TypeError} () →? void;
+}
+static method ok<T extends core::Object?>(core::String? s, self::A? a, self::ok::T% t, self::B? b, core::Invocation i) → dynamic {
+  s =={core::String::==}{(core::Object) → core::bool} s;
+  a =={core::Object::==}{(core::Object) → core::bool} a;
+  t =={core::Object::==}{(core::Object) → core::bool} t;
+  b =={core::Object::==}{(core::Object) → core::bool} b;
+  s.{core::Object::hashCode}{core::int};
+  a.{core::Object::hashCode}{core::int};
+  t.{core::Object::hashCode}{core::int};
+  b.{core::Object::hashCode}{core::int};
+  s.{core::Object::toString}(){() → core::String};
+  a.{core::Object::toString}(){() → core::String};
+  t.{core::Object::toString}(){() → core::String};
+  b.{core::Object::toString}(){() → core::String};
+  try {
+    s.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
+  }
+  on core::Object catch(final core::Object e, final core::StackTrace t) {
+  }
+  try {
+    a.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
+  }
+  on core::Object catch(final core::Object e, final core::StackTrace t) {
+  }
+  try {
+    t.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
+  }
+  on core::Object catch(final core::Object e, final core::StackTrace t) {
+  }
+  try {
+    b.{core::Object::noSuchMethod}(i){(core::Invocation) → dynamic};
+  }
+  on core::Object catch(final core::Object e, final core::StackTrace t) {
+  }
+  s.{core::Object::runtimeType}{core::Type};
+  a.{core::Object::runtimeType}{core::Type};
+  t.{core::Object::runtimeType}{core::Type};
+  b.{core::Object::runtimeType}{core::Type};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.weak.modular.expect
new file mode 100644
index 0000000..5e0924e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart:7:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
+import self as self;
+
+typedef F = invalid-type;
+static method foo(() → void x) → void {
+  self::bar(x);
+  self::bar(null);
+  self::baz(x);
+  self::baz(null);
+}
+static method bar(invalid-type x) → void {}
+static method baz(invalid-type x) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..297e474
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/nullable_setter.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::String m = "";
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  set setter(core::String v) → void {}
+  operator []=(core::int index, core::String value) → void {}
+}
+extension _extension#0 on self::C? {
+  operator []= = self::_extension#0|[]=;
+  set setter = self::_extension#0|set#setter;
+}
+static method _extension#0|set#setter(lowered final self::C? #this, core::String v) → void {
+  let final self::C? #t1 = #this in #t1 == null ?{core::String?} null : #t1{self::C}.{self::C::m} = v;
+}
+static method _extension#0|[]=(lowered final self::C? #this, core::int index, core::String value) → void {
+  let final self::C? #t2 = #this in #t2 == null ?{core::String?} null : #t2{self::C}.{self::C::m} = "${index}${value}";
+}
+static method main() → dynamic {
+  self::C? c = new self::C::•() as{ForNonNullableByDefault} self::C?;
+  self::expect("", let final self::C? #t3 = c in #t3 == null ?{core::String?} null : #t3{self::C}.{self::C::m}{core::String});
+  self::_extension#0|set#setter(c, "42");
+  self::expect("42", let final self::C? #t4 = c in #t4 == null ?{core::String?} null : #t4{self::C}.{self::C::m}{core::String});
+  self::_extension#0|[]=(c, 42, "87");
+  self::expect("4287", let final self::C? #t5 = c in #t5 == null ?{core::String?} null : #t5{self::C}.{self::C::m}{core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/nnbd/numbers.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/numbers.dart.weak.modular.expect
new file mode 100644
index 0000000..babfb04
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/numbers.dart.weak.modular.expect
@@ -0,0 +1,413 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method add<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::add::X x, self::add::Y y, self::add::Z z) → dynamic {
+  core::num n_n = n.{core::num::+}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::+}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::+}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::+}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::+}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::+}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::+}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::+}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::+}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::+}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::+}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::+}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::+}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::+}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::+}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::+}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::+}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::+}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::+}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::+}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::+}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::+}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::+}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::+}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::+}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::+}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::+}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::+}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::+}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::+}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::+}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::+}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::+}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::+}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::+}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::+}(z){(core::num) → core::double};
+}
+static method sub<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::sub::X x, self::sub::Y y, self::sub::Z z) → dynamic {
+  core::num n_n = n.{core::num::-}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::-}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::-}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::-}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::-}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::-}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::-}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::-}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::-}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::-}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::-}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::-}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::-}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::-}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::-}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::-}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::-}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::-}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::-}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::-}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::-}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::-}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::-}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::-}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::-}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::-}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::-}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::-}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::-}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::-}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::-}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::-}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::-}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::-}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::-}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::-}(z){(core::num) → core::double};
+}
+static method mul<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mul::X x, self::mul::Y y, self::mul::Z z) → dynamic {
+  core::num n_n = n.{core::num::*}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::*}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::*}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::*}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::*}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::*}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::*}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::*}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::*}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::*}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::*}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::*}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::*}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::*}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::*}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::*}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::*}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::*}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::*}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::*}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::*}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::*}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::*}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::*}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::*}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::*}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::*}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::*}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::*}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::*}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::*}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::*}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::*}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::*}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::*}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::*}(z){(core::num) → core::double};
+}
+static method mod<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mod::X x, self::mod::Y y, self::mod::Z z) → dynamic {
+  core::num n_n = n.{core::num::%}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::%}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::%}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::%}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::%}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::%}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::%}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::%}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::%}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::%}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::%}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::%}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::%}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::%}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::%}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::%}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::%}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::%}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::%}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::%}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::%}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::%}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::%}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::%}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::%}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::%}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::%}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::%}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::%}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::%}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::%}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::%}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::%}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::%}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::%}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::%}(z){(core::num) → core::double};
+}
+static method remainder<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::remainder::X x, self::remainder::Y y, self::remainder::Z z) → dynamic {
+  core::num n_n = n.{core::num::remainder}(n){(core::num) → core::num};
+  core::num n_i = n.{core::num::remainder}(i){(core::num) → core::num};
+  core::double n_d = n.{core::num::remainder}(d){(core::num) → core::double};
+  core::num n_x = n.{core::num::remainder}(x){(core::num) → core::num};
+  core::num n_y = n.{core::num::remainder}(y){(core::num) → core::num};
+  core::double n_z = n.{core::num::remainder}(z){(core::num) → core::double};
+  core::num i_n = i.{core::num::remainder}(n){(core::num) → core::num};
+  core::int i_i = i.{core::num::remainder}(i){(core::num) → core::int};
+  core::double i_d = i.{core::num::remainder}(d){(core::num) → core::double};
+  core::num i_x = i.{core::num::remainder}(x){(core::num) → core::num};
+  core::int i_y = i.{core::num::remainder}(y){(core::num) → core::int};
+  core::double i_z = i.{core::num::remainder}(z){(core::num) → core::double};
+  core::double d_n = d.{core::double::remainder}(n){(core::num) → core::double};
+  core::double d_i = d.{core::double::remainder}(i){(core::num) → core::double};
+  core::double d_d = d.{core::double::remainder}(d){(core::num) → core::double};
+  core::double d_x = d.{core::double::remainder}(x){(core::num) → core::double};
+  core::double d_y = d.{core::double::remainder}(y){(core::num) → core::double};
+  core::double d_z = d.{core::double::remainder}(z){(core::num) → core::double};
+  core::num x_n = x.{core::num::remainder}(n){(core::num) → core::num};
+  core::num x_i = x.{core::num::remainder}(i){(core::num) → core::num};
+  core::double x_d = x.{core::num::remainder}(d){(core::num) → core::double};
+  core::num x_x = x.{core::num::remainder}(x){(core::num) → core::num};
+  core::num x_y = x.{core::num::remainder}(y){(core::num) → core::num};
+  core::double x_z = x.{core::num::remainder}(z){(core::num) → core::double};
+  core::num y_n = y.{core::num::remainder}(n){(core::num) → core::num};
+  core::int y_i = y.{core::num::remainder}(i){(core::num) → core::int};
+  core::double y_d = y.{core::num::remainder}(d){(core::num) → core::double};
+  core::num y_x = y.{core::num::remainder}(x){(core::num) → core::num};
+  core::int y_y = y.{core::num::remainder}(y){(core::num) → core::int};
+  core::double y_z = y.{core::num::remainder}(z){(core::num) → core::double};
+  core::double z_n = z.{core::double::remainder}(n){(core::num) → core::double};
+  core::double z_i = z.{core::double::remainder}(i){(core::num) → core::double};
+  core::double z_d = z.{core::double::remainder}(d){(core::num) → core::double};
+  core::double z_x = z.{core::double::remainder}(x){(core::num) → core::double};
+  core::double z_y = z.{core::double::remainder}(y){(core::num) → core::double};
+  core::double z_z = z.{core::double::remainder}(z){(core::num) → core::double};
+}
+static method clamp<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::clamp::X x, self::clamp::Y y, self::clamp::Z z) → dynamic {
+  core::num n_n_n = n.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num n_i_n = n.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num n_d_n = n.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num n_x_n = n.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num n_y_n = n.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num n_z_n = n.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num n_n_i = n.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num n_i_i = n.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num n_d_i = n.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num n_x_i = n.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num n_y_i = n.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num n_z_i = n.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num n_n_d = n.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num n_i_d = n.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num n_d_d = n.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num n_x_d = n.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num n_y_d = n.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num n_z_d = n.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num n_n_x = n.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num n_i_x = n.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num n_d_x = n.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num n_x_x = n.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num n_y_x = n.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num n_z_x = n.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num n_n_y = n.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num n_i_y = n.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num n_d_y = n.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num n_x_y = n.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num n_y_y = n.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num n_z_y = n.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num n_n_z = n.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num n_i_z = n.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num n_d_z = n.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num n_x_z = n.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num n_y_z = n.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num n_z_z = n.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num i_n_n = i.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num i_i_n = i.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num i_d_n = i.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num i_x_n = i.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num i_y_n = i.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num i_z_n = i.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num i_n_i = i.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::int i_i_i = i.{core::num::clamp}(i, i){(core::num, core::num) → core::int};
+  core::num i_d_i = i.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num i_x_i = i.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::int i_y_i = i.{core::num::clamp}(y, i){(core::num, core::num) → core::int};
+  core::num i_z_i = i.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num i_n_d = i.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num i_i_d = i.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num i_d_d = i.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num i_x_d = i.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num i_y_d = i.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num i_z_d = i.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num i_n_x = i.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num i_i_x = i.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num i_d_x = i.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num i_x_x = i.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num i_y_x = i.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num i_z_x = i.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num i_n_y = i.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::int i_i_y = i.{core::num::clamp}(i, y){(core::num, core::num) → core::int};
+  core::num i_d_y = i.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num i_x_y = i.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::int i_y_y = i.{core::num::clamp}(y, y){(core::num, core::num) → core::int};
+  core::num i_z_y = i.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num i_n_z = i.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num i_i_z = i.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num i_d_z = i.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num i_x_z = i.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num i_y_z = i.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num i_z_z = i.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num d_n_n = d.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num d_i_n = d.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num d_d_n = d.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num d_x_n = d.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num d_y_n = d.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num d_z_n = d.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num d_n_i = d.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num d_i_i = d.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num d_d_i = d.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num d_x_i = d.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num d_y_i = d.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num d_z_i = d.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num d_n_d = d.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num d_i_d = d.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::double d_d_d = d.{core::num::clamp}(d, d){(core::num, core::num) → core::double};
+  core::num d_x_d = d.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num d_y_d = d.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::double d_z_d = d.{core::num::clamp}(z, d){(core::num, core::num) → core::double};
+  core::num d_n_x = d.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num d_i_x = d.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num d_d_x = d.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num d_x_x = d.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num d_y_x = d.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num d_z_x = d.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num d_n_y = d.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num d_i_y = d.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num d_d_y = d.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num d_x_y = d.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num d_y_y = d.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num d_z_y = d.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num d_n_z = d.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num d_i_z = d.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::double d_d_z = d.{core::num::clamp}(d, z){(core::num, core::num) → core::double};
+  core::num d_x_z = d.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num d_y_z = d.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::double d_z_z = d.{core::num::clamp}(z, z){(core::num, core::num) → core::double};
+  core::num x_n_n = x.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num x_i_n = x.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num x_d_n = x.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num x_x_n = x.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num x_y_n = x.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num x_z_n = x.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num x_n_i = x.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num x_i_i = x.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num x_d_i = x.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num x_x_i = x.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num x_y_i = x.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num x_z_i = x.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num x_n_d = x.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num x_i_d = x.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num x_d_d = x.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num x_x_d = x.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num x_y_d = x.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num x_z_d = x.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num x_n_x = x.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num x_i_x = x.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num x_d_x = x.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num x_x_x = x.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num x_y_x = x.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num x_z_x = x.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num x_n_y = x.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num x_i_y = x.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num x_d_y = x.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num x_x_y = x.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num x_y_y = x.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num x_z_y = x.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num x_n_z = x.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num x_i_z = x.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num x_d_z = x.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num x_x_z = x.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num x_y_z = x.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num x_z_z = x.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num y_n_n = y.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num y_i_n = y.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num y_d_n = y.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num y_x_n = y.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num y_y_n = y.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num y_z_n = y.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num y_n_i = y.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::int y_i_i = y.{core::num::clamp}(i, i){(core::num, core::num) → core::int};
+  core::num y_d_i = y.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num y_x_i = y.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::int y_y_i = y.{core::num::clamp}(y, i){(core::num, core::num) → core::int};
+  core::num y_z_i = y.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num y_n_d = y.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num y_i_d = y.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::num y_d_d = y.{core::num::clamp}(d, d){(core::num, core::num) → core::num};
+  core::num y_x_d = y.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num y_y_d = y.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::num y_z_d = y.{core::num::clamp}(z, d){(core::num, core::num) → core::num};
+  core::num y_n_x = y.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num y_i_x = y.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num y_d_x = y.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num y_x_x = y.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num y_y_x = y.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num y_z_x = y.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num y_n_y = y.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::int y_i_y = y.{core::num::clamp}(i, y){(core::num, core::num) → core::int};
+  core::num y_d_y = y.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num y_x_y = y.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::int y_y_y = y.{core::num::clamp}(y, y){(core::num, core::num) → core::int};
+  core::num y_z_y = y.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num y_n_z = y.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num y_i_z = y.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::num y_d_z = y.{core::num::clamp}(d, z){(core::num, core::num) → core::num};
+  core::num y_x_z = y.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num y_y_z = y.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::num y_z_z = y.{core::num::clamp}(z, z){(core::num, core::num) → core::num};
+  core::num z_n_n = z.{core::num::clamp}(n, n){(core::num, core::num) → core::num};
+  core::num z_i_n = z.{core::num::clamp}(i, n){(core::num, core::num) → core::num};
+  core::num z_d_n = z.{core::num::clamp}(d, n){(core::num, core::num) → core::num};
+  core::num z_x_n = z.{core::num::clamp}(x, n){(core::num, core::num) → core::num};
+  core::num z_y_n = z.{core::num::clamp}(y, n){(core::num, core::num) → core::num};
+  core::num z_z_n = z.{core::num::clamp}(z, n){(core::num, core::num) → core::num};
+  core::num z_n_i = z.{core::num::clamp}(n, i){(core::num, core::num) → core::num};
+  core::num z_i_i = z.{core::num::clamp}(i, i){(core::num, core::num) → core::num};
+  core::num z_d_i = z.{core::num::clamp}(d, i){(core::num, core::num) → core::num};
+  core::num z_x_i = z.{core::num::clamp}(x, i){(core::num, core::num) → core::num};
+  core::num z_y_i = z.{core::num::clamp}(y, i){(core::num, core::num) → core::num};
+  core::num z_z_i = z.{core::num::clamp}(z, i){(core::num, core::num) → core::num};
+  core::num z_n_d = z.{core::num::clamp}(n, d){(core::num, core::num) → core::num};
+  core::num z_i_d = z.{core::num::clamp}(i, d){(core::num, core::num) → core::num};
+  core::double z_d_d = z.{core::num::clamp}(d, d){(core::num, core::num) → core::double};
+  core::num z_x_d = z.{core::num::clamp}(x, d){(core::num, core::num) → core::num};
+  core::num z_y_d = z.{core::num::clamp}(y, d){(core::num, core::num) → core::num};
+  core::double z_z_d = z.{core::num::clamp}(z, d){(core::num, core::num) → core::double};
+  core::num z_n_x = z.{core::num::clamp}(n, x){(core::num, core::num) → core::num};
+  core::num z_i_x = z.{core::num::clamp}(i, x){(core::num, core::num) → core::num};
+  core::num z_d_x = z.{core::num::clamp}(d, x){(core::num, core::num) → core::num};
+  core::num z_x_x = z.{core::num::clamp}(x, x){(core::num, core::num) → core::num};
+  core::num z_y_x = z.{core::num::clamp}(y, x){(core::num, core::num) → core::num};
+  core::num z_z_x = z.{core::num::clamp}(z, x){(core::num, core::num) → core::num};
+  core::num z_n_y = z.{core::num::clamp}(n, y){(core::num, core::num) → core::num};
+  core::num z_i_y = z.{core::num::clamp}(i, y){(core::num, core::num) → core::num};
+  core::num z_d_y = z.{core::num::clamp}(d, y){(core::num, core::num) → core::num};
+  core::num z_x_y = z.{core::num::clamp}(x, y){(core::num, core::num) → core::num};
+  core::num z_y_y = z.{core::num::clamp}(y, y){(core::num, core::num) → core::num};
+  core::num z_z_y = z.{core::num::clamp}(z, y){(core::num, core::num) → core::num};
+  core::num z_n_z = z.{core::num::clamp}(n, z){(core::num, core::num) → core::num};
+  core::num z_i_z = z.{core::num::clamp}(i, z){(core::num, core::num) → core::num};
+  core::double z_d_z = z.{core::num::clamp}(d, z){(core::num, core::num) → core::double};
+  core::num z_x_z = z.{core::num::clamp}(x, z){(core::num, core::num) → core::num};
+  core::num z_y_z = z.{core::num::clamp}(y, z){(core::num, core::num) → core::num};
+  core::double z_z_z = z.{core::num::clamp}(z, z){(core::num, core::num) → core::double};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.modular.expect
new file mode 100644
index 0000000..7bd9497
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/numbers_inferred.dart.weak.modular.expect
@@ -0,0 +1,1054 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:10:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+//   int n_i = n + f();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:12:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X n_x = n + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:13:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y n_y = n + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:14:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z n_z = n + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:19:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X i_x = i + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:20:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y i_y = i + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:21:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z i_z = i + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:24:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   int d_i = d + f();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:26:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+//   X d_x = d + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:27:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+//   Y d_y = d + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:28:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+//   Z d_z = d + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:31:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+//   int x_i = x + f();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:33:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X x_x = x + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:34:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y x_y = x + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:35:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z x_z = x + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:40:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X y_x = y + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:41:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y y_y = y + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:42:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z y_z = y + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:45:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   int z_i = z + f();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:47:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+//   X z_x = z + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:48:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+//   Y z_y = z + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:49:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+//   Z z_z = z + f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:55:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+//   int n_i = n - f();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:57:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X n_x = n - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:58:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y n_y = n - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:59:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z n_z = n - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:64:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X i_x = i - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:65:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y i_y = i - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:66:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z i_z = i - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:69:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   int d_i = d - f();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:71:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+//   X d_x = d - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:72:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+//   Y d_y = d - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:73:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+//   Z d_z = d - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:76:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+//   int x_i = x - f();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:78:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X x_x = x - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:79:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y x_y = x - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:80:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z x_z = x - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:85:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X y_x = y - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:86:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y y_y = y - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:87:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z y_z = y - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:90:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   int z_i = z - f();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:92:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+//   X z_x = z - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:93:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+//   Y z_y = z - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:94:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+//   Z z_z = z - f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:100:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+//   int n_i = n * f();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:102:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X n_x = n * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:103:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y n_y = n * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:104:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z n_z = n * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:109:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X i_x = i * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:110:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y i_y = i * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:111:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z i_z = i * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:114:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   int d_i = d * f();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:116:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+//   X d_x = d * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:117:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+//   Y d_y = d * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:118:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+//   Z d_z = d * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:121:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+//   int x_i = x * f();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:123:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X x_x = x * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:124:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y x_y = x * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:125:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z x_z = x * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:130:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X y_x = y * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:131:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y y_y = y * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:132:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z y_z = y * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:135:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   int z_i = z * f();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:137:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+//   X z_x = z * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:138:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+//   Y z_y = z * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:139:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+//   Z z_z = z * f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:145:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+//   int n_i = n % f();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:147:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X n_x = n % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:148:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y n_y = n % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:149:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z n_z = n % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:154:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X i_x = i % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:155:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y i_y = i % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:156:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z i_z = i % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:159:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   int d_i = d % f();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:161:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+//   X d_x = d % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:162:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+//   Y d_y = d % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:163:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+//   Z d_z = d % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:166:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+//   int x_i = x % f();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:168:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X x_x = x % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:169:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y x_y = x % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:170:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z x_z = x % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:175:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X y_x = y % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:176:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y y_y = y % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:177:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z y_z = y % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:180:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   int z_i = z % f();
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:182:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+//   X z_x = z % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:183:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+//   Y z_y = z % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:184:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+//   Z z_z = z % f();
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:190:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+//   int n_i = n.remainder(f());
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:192:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X n_x = n.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:193:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y n_y = n.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:194:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z n_z = n.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:199:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X i_x = i.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:200:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y i_y = i.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:201:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z i_z = i.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:204:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   int d_i = d.remainder(f());
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:206:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+//   X d_x = d.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:207:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+//   Y d_y = d.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:208:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+//   Z d_z = d.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:211:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+//   int x_i = x.remainder(f());
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:213:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X x_x = x.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:214:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y x_y = x.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:215:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z x_z = x.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:220:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X y_x = y.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:221:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y y_y = y.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:222:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z y_z = y.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:225:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+//   int z_i = z.remainder(f());
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:227:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+//   X z_x = z.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:228:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+//   Y z_y = z.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:229:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+//   Z z_z = z.remainder(f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:235:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+//   int n_i = n.clamp(f(), f());
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:236:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+//   double n_d = n.clamp(f(), f());
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:237:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X n_x = n.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:238:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y n_y = n.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:239:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z n_z = n.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:243:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+//   double i_d = i.clamp(f(), f());
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:244:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X i_x = i.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:245:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y i_y = i.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:246:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z i_z = i.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:249:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+//   int d_i = d.clamp(f(), f());
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:251:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X d_x = d.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:252:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y d_y = d.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:253:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z d_z = d.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:256:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+//   int x_i = x.clamp(f(), f());
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:257:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+//   double x_d = x.clamp(f(), f());
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:258:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X x_x = x.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:259:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y x_y = x.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:260:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z x_z = x.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:264:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+//   double y_d = y.clamp(f(), f());
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:265:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X y_x = y.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:266:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y y_y = y.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:267:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z y_z = y.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:270:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+//   int z_i = z.clamp(f(), f());
+//               ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:272:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+//   X z_x = z.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:273:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+//   Y z_y = z.clamp(f(), f());
+//             ^
+//
+// pkg/front_end/testcases/nnbd/numbers_inferred.dart:274:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+//   Z z_z = z.clamp(f(), f());
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "Unsupported";
+static method add<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::add::X x, self::add::Y y, self::add::Z z) → dynamic {
+  core::num n_n = n.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:10:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  int n_i = n + f();
+              ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
+  self::add::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:12:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X n_x = n + f();
+            ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::add::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:13:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y n_y = n + f();
+            ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::add::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:14:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z n_z = n + f();
+            ^" in n.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
+  self::add::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:19:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X i_x = i + f();
+            ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::add::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:20:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y i_y = i + f();
+            ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::add::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:21:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z i_z = i + f();
+            ^" in i.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:24:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  int d_i = d + f();
+              ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
+  self::add::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:26:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  X d_x = d + f();
+            ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::add::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:27:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  Y d_y = d + f();
+            ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::add::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:28:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  Z d_z = d + f();
+            ^" in d.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:31:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  int x_i = x + f();
+              ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
+  self::add::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:33:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X x_x = x + f();
+            ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::add::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:34:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y x_y = x + f();
+            ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::add::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:35:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z x_z = x + f();
+            ^" in x.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::+}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::+}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::+}(self::f<core::double>()){(core::num) → core::double};
+  self::add::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:40:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X y_x = y + f();
+            ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::add::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:41:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y y_y = y + f();
+            ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::add::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:42:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z y_z = y + f();
+            ^" in y.{core::num::+}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:45:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  int z_i = z + f();
+              ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::+}(self::f<core::num>()){(core::num) → core::double};
+  self::add::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:47:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  X z_x = z + f();
+            ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::add::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:48:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  Y z_y = z + f();
+            ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::add::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:49:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  Z z_z = z + f();
+            ^" in z.{core::double::+}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+}
+static method sub<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::sub::X x, self::sub::Y y, self::sub::Z z) → dynamic {
+  core::num n_n = n.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:55:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  int n_i = n - f();
+              ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
+  self::sub::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:57:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X n_x = n - f();
+            ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::sub::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:58:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y n_y = n - f();
+            ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::sub::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:59:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z n_z = n - f();
+            ^" in n.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
+  self::sub::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:64:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X i_x = i - f();
+            ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::sub::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:65:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y i_y = i - f();
+            ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::sub::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:66:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z i_z = i - f();
+            ^" in i.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:69:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  int d_i = d - f();
+              ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
+  self::sub::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:71:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  X d_x = d - f();
+            ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::sub::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:72:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  Y d_y = d - f();
+            ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::sub::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:73:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  Z d_z = d - f();
+            ^" in d.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:76:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  int x_i = x - f();
+              ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
+  self::sub::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:78:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X x_x = x - f();
+            ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::sub::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:79:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y x_y = x - f();
+            ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::sub::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:80:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z x_z = x - f();
+            ^" in x.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::-}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::-}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::-}(self::f<core::double>()){(core::num) → core::double};
+  self::sub::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:85:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X y_x = y - f();
+            ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::sub::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:86:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y y_y = y - f();
+            ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::sub::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:87:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z y_z = y - f();
+            ^" in y.{core::num::-}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:90:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  int z_i = z - f();
+              ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::-}(self::f<core::num>()){(core::num) → core::double};
+  self::sub::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:92:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  X z_x = z - f();
+            ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::sub::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:93:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  Y z_y = z - f();
+            ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::sub::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:94:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  Z z_z = z - f();
+            ^" in z.{core::double::-}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+}
+static method mul<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mul::X x, self::mul::Y y, self::mul::Z z) → dynamic {
+  core::num n_n = n.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:100:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  int n_i = n * f();
+              ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
+  self::mul::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:102:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X n_x = n * f();
+            ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::mul::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:103:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y n_y = n * f();
+            ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::mul::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:104:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z n_z = n * f();
+            ^" in n.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
+  self::mul::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:109:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X i_x = i * f();
+            ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::mul::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:110:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y i_y = i * f();
+            ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::mul::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:111:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z i_z = i * f();
+            ^" in i.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:114:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  int d_i = d * f();
+              ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
+  self::mul::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:116:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  X d_x = d * f();
+            ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::mul::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:117:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  Y d_y = d * f();
+            ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::mul::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:118:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  Z d_z = d * f();
+            ^" in d.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:121:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  int x_i = x * f();
+              ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
+  self::mul::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:123:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X x_x = x * f();
+            ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::mul::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:124:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y x_y = x * f();
+            ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::mul::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:125:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z x_z = x * f();
+            ^" in x.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::*}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::*}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::*}(self::f<core::double>()){(core::num) → core::double};
+  self::mul::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:130:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X y_x = y * f();
+            ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::mul::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:131:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y y_y = y * f();
+            ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::mul::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:132:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z y_z = y * f();
+            ^" in y.{core::num::*}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:135:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  int z_i = z * f();
+              ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::*}(self::f<core::num>()){(core::num) → core::double};
+  self::mul::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:137:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  X z_x = z * f();
+            ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::mul::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:138:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  Y z_y = z * f();
+            ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::mul::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:139:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  Z z_z = z * f();
+            ^" in z.{core::double::*}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+}
+static method mod<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::mod::X x, self::mod::Y y, self::mod::Z z) → dynamic {
+  core::num n_n = n.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:145:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  int n_i = n % f();
+              ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
+  self::mod::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:147:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X n_x = n % f();
+            ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::mod::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:148:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y n_y = n % f();
+            ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::mod::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:149:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z n_z = n % f();
+            ^" in n.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
+  self::mod::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:154:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X i_x = i % f();
+            ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::mod::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:155:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y i_y = i % f();
+            ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::mod::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:156:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z i_z = i % f();
+            ^" in i.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:159:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  int d_i = d % f();
+              ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
+  self::mod::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:161:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  X d_x = d % f();
+            ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::mod::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:162:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  Y d_y = d % f();
+            ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::mod::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:163:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  Z d_z = d % f();
+            ^" in d.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:166:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  int x_i = x % f();
+              ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
+  self::mod::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:168:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X x_x = x % f();
+            ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::mod::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:169:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y x_y = x % f();
+            ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::mod::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:170:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z x_z = x % f();
+            ^" in x.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::%}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::%}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::%}(self::f<core::double>()){(core::num) → core::double};
+  self::mod::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:175:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X y_x = y % f();
+            ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::mod::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:176:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y y_y = y % f();
+            ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::mod::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:177:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z y_z = y % f();
+            ^" in y.{core::num::%}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:180:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  int z_i = z % f();
+              ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::%}(self::f<core::num>()){(core::num) → core::double};
+  self::mod::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:182:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  X z_x = z % f();
+            ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::mod::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:183:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  Y z_y = z % f();
+            ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::mod::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:184:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  Z z_z = z % f();
+            ^" in z.{core::double::%}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+}
+static method remainder<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::remainder::X x, self::remainder::Y y, self::remainder::Z z) → dynamic {
+  core::num n_n = n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:190:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  int n_i = n.remainder(f());
+              ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = n.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
+  self::remainder::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:192:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X n_x = n.remainder(f());
+            ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::remainder::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:193:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y n_y = n.remainder(f());
+            ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::remainder::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:194:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z n_z = n.remainder(f());
+            ^" in n.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
+  core::int i_i = i.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
+  core::double i_d = i.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
+  self::remainder::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:199:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X i_x = i.remainder(f());
+            ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::remainder::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:200:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y i_y = i.remainder(f());
+            ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::remainder::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:201:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z i_z = i.remainder(f());
+            ^" in i.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::double d_n = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:204:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  int d_i = d.remainder(f());
+              ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
+  self::remainder::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:206:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  X d_x = d.remainder(f());
+            ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::remainder::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:207:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  Y d_y = d.remainder(f());
+            ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::remainder::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:208:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  Z d_z = d.remainder(f());
+            ^" in d.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:211:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  int x_i = x.remainder(f());
+              ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = x.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
+  self::remainder::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:213:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X x_x = x.remainder(f());
+            ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::remainder::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:214:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y x_y = x.remainder(f());
+            ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::remainder::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:215:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z x_z = x.remainder(f());
+            ^" in x.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num};
+  core::int y_i = y.{core::num::remainder}(self::f<core::int>()){(core::num) → core::int};
+  core::double y_d = y.{core::num::remainder}(self::f<core::double>()){(core::num) → core::double};
+  self::remainder::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:220:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X y_x = y.remainder(f());
+            ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::remainder::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:221:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y y_y = y.remainder(f());
+            ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::remainder::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:222:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z y_z = y.remainder(f());
+            ^" in y.{core::num::remainder}(self::f<core::num>()){(core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::double z_n = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:225:15: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+  int z_i = z.remainder(f());
+              ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double};
+  self::remainder::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:227:13: Error: A value of type 'double' can't be assigned to a variable of type 'X'.
+  X z_x = z.remainder(f());
+            ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::remainder::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:228:13: Error: A value of type 'double' can't be assigned to a variable of type 'Y'.
+  Y z_y = z.remainder(f());
+            ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+  self::remainder::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:229:13: Error: A value of type 'double' can't be assigned to a variable of type 'Z'.
+  Z z_z = z.remainder(f());
+            ^" in z.{core::double::remainder}(self::f<core::num>()){(core::num) → core::double} as{TypeError,ForNonNullableByDefault} Never;
+}
+static method clamp<X extends core::num, Y extends core::int, Z extends core::double>(core::num n, core::int i, core::double d, self::clamp::X x, self::clamp::Y y, self::clamp::Z z) → dynamic {
+  core::num n_n = n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
+  core::int n_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:235:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  int n_i = n.clamp(f(), f());
+              ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double n_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:236:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  double n_d = n.clamp(f(), f());
+                 ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
+  self::clamp::X n_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:237:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X n_x = n.clamp(f(), f());
+            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::clamp::Y n_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:238:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y n_y = n.clamp(f(), f());
+            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::clamp::Z n_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:239:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z n_z = n.clamp(f(), f());
+            ^" in n.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num i_n = i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
+  core::int i_i = i.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
+  core::double i_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:243:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  double i_d = i.clamp(f(), f());
+                 ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
+  self::clamp::X i_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:244:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X i_x = i.clamp(f(), f());
+            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::clamp::Y i_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:245:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y i_y = i.clamp(f(), f());
+            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::clamp::Z i_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:246:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z i_z = i.clamp(f(), f());
+            ^" in i.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num d_n = d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
+  core::int d_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:249:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  int d_i = d.clamp(f(), f());
+              ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double d_d = d.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
+  self::clamp::X d_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:251:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X d_x = d.clamp(f(), f());
+            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::clamp::Y d_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:252:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y d_y = d.clamp(f(), f());
+            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::clamp::Z d_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:253:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z d_z = d.clamp(f(), f());
+            ^" in d.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num x_n = x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
+  core::int x_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:256:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  int x_i = x.clamp(f(), f());
+              ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double x_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:257:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  double x_d = x.clamp(f(), f());
+                 ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
+  self::clamp::X x_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:258:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X x_x = x.clamp(f(), f());
+            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::clamp::Y x_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:259:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y x_y = x.clamp(f(), f());
+            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::clamp::Z x_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:260:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z x_z = x.clamp(f(), f());
+            ^" in x.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num y_n = y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
+  core::int y_i = y.{core::num::clamp}(self::f<core::int>(), self::f<core::int>()){(core::num, core::num) → core::int};
+  core::double y_d = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:264:18: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  double y_d = y.clamp(f(), f());
+                 ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::double;
+  self::clamp::X y_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:265:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X y_x = y.clamp(f(), f());
+            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::clamp::Y y_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:266:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y y_y = y.clamp(f(), f());
+            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::clamp::Z y_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:267:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z y_z = y.clamp(f(), f());
+            ^" in y.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  core::num z_n = z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num};
+  core::int z_i = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:270:15: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  int z_i = z.clamp(f(), f());
+              ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} core::int;
+  core::double z_d = z.{core::num::clamp}(self::f<core::double>(), self::f<core::double>()){(core::num, core::num) → core::double};
+  self::clamp::X z_x = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:272:13: Error: A value of type 'num' can't be assigned to a variable of type 'X'.
+  X z_x = z.clamp(f(), f());
+            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::clamp::Y z_y = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:273:13: Error: A value of type 'num' can't be assigned to a variable of type 'Y'.
+  Y z_y = z.clamp(f(), f());
+            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+  self::clamp::Z z_z = invalid-expression "pkg/front_end/testcases/nnbd/numbers_inferred.dart:274:13: Error: A value of type 'num' can't be assigned to a variable of type 'Z'.
+  Z z_z = z.clamp(f(), f());
+            ^" in z.{core::num::clamp}(self::f<core::num>(), self::f<core::num>()){(core::num, core::num) → core::num} as{TypeError,ForNonNullableByDefault} Never;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.modular.expect
new file mode 100644
index 0000000..ba12861
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.modular.expect
@@ -0,0 +1,93 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/override_checks.dart:14:7: Error: The field 'B2.bar' has type 'num', which does not match the corresponding type, 'num?', in the overridden setter, 'B1.bar'.
+//   num bar = 3.14; // Error in strong mode and Warning in weak mode.
+//       ^
+// pkg/front_end/testcases/nnbd/override_checks.dart:8:12: Context: This is the overridden method ('bar').
+//   void set bar(num? value) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd/override_checks.dart:15:12: Error: The return type of the method 'B2.baz' is 'num?', which does not match the return type, 'num', of the overridden method, 'B1.baz'.
+// Change to a subtype of 'num'.
+//   num? get baz => null; // Error in strong mode and Warning in weak mode.
+//            ^
+// pkg/front_end/testcases/nnbd/override_checks.dart:9:11: Context: This is the overridden method ('baz').
+//   num get baz => 42;
+//           ^
+//
+// pkg/front_end/testcases/nnbd/override_checks.dart:16:17: Error: The parameter 'value' of the method 'B2.hest' has type 'num', which does not match the corresponding type, 'num?', in the overridden method, 'B1.hest'.
+// Change to a supertype of 'num?', or, for a covariant parameter, a subtype.
+//   void hest(num value) {} // Error in strong mode and Warning in weak mode.
+//                 ^
+// pkg/front_end/testcases/nnbd/override_checks.dart:10:8: Context: This is the overridden method ('hest').
+//   void hest(num? value) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/override_checks.dart:20:18: Error: The type 'int?' doesn't extend 'int'.
+// Try using a different type as argument.
+//   factory C1() = C2<int?>; // Error in strong mode and Warning in weak mode.
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/override_checks.dart:27:27: Error: The constructor function type 'D Function(num)' isn't a subtype of 'D Function(num?)'.
+//  - 'D' is from 'pkg/front_end/testcases/nnbd/override_checks.dart'.
+//   factory D.bar(num? x) = D.foo; // Error in strong mode and Warning in weak mode.
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+}
+class B1 extends core::Object {
+  synthetic constructor •() → self::B1
+    : super core::Object::•()
+    ;
+  set bar(core::num? value) → void {}
+  get baz() → core::num
+    return 42;
+  method hest(core::num? value) → void {}
+}
+class B2 extends self::B1 {
+  field core::num bar = 3.14;
+  synthetic constructor •() → self::B2
+    : super self::B1::•()
+    ;
+  get baz() → core::num?
+    return null;
+  method hest(core::num value) → void {}
+}
+class C1 extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  static factory •() → self::C1
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:20:18: Error: The type 'int?' doesn't extend 'int'.
+Try using a different type as argument.
+  factory C1() = C2<int?>; // Error in strong mode and Warning in weak mode.
+                 ^";
+}
+class C2<X extends core::int> extends core::Object implements self::C1 {
+  synthetic constructor •() → self::C2<self::C2::X>
+    : super core::Object::•()
+    ;
+}
+class D extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor foo(core::num x) → self::D
+    : super core::Object::•()
+    ;
+  static factory bar(core::num? x) → self::D
+    return invalid-expression "pkg/front_end/testcases/nnbd/override_checks.dart:27:27: Error: The constructor function type 'D Function(num)' isn't a subtype of 'D Function(num?)'.
+ - 'D' is from 'pkg/front_end/testcases/nnbd/override_checks.dart'.
+  factory D.bar(num? x) = D.foo; // Error in strong mode and Warning in weak mode.
+                          ^";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::C1::•
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..83ec6a1
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.modular.expect
@@ -0,0 +1,285 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:114:17: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method1c(x); // error
+//                 ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:10:8: Context: This is one of the overridden members.
+//   void method1c(int x);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:62:8: Context: This is one of the overridden members.
+//   void method1c(String x);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:115:3: Error: Can't infer a return type for 'method1d' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   method1d(); // error
+//   ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:11:10: Context: This is one of the overridden members.
+//   String method1d();
+//          ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:63:7: Context: This is one of the overridden members.
+//   int method1d();
+//       ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:122:8: Error: Can't infer types for 'method5a' as the overridden members don't have a combined signature.
+// Try adding explicit types.
+//   void method5a(x, y); // error
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:18:8: Context: This is one of the overridden members.
+//   void method5a(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:70:8: Context: This is one of the overridden members.
+//   void method5a(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:123:32: Error: Can't infer a type for 'z' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void method5b(num x, num y, [z]); // error
+//                                ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:19:8: Context: This is one of the overridden members.
+//   void method5b(int x, num y);
+//        ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:71:8: Context: This is one of the overridden members.
+//   void method5b(num x, int y);
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:130:7: Error: Can't infer a return type for 'getter1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   get getter1c; // error
+//       ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:26:14: Context: This is one of the overridden members.
+//   String get getter1c;
+//              ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:78:11: Context: This is one of the overridden members.
+//   int get getter1c;
+//           ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:142:9: Error: Can't infer a type for 'field1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field1c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:40:12: Context: This is one of the overridden members.
+//   int? get field1c;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:92:15: Context: This is one of the overridden members.
+//   double? get field1c;
+//               ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:146:9: Error: Can't infer a type for 'field2c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field2c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:44:12: Context: This is one of the overridden members.
+//   void set field2c(int? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:96:12: Context: This is one of the overridden members.
+//   void set field2c(double? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:150:9: Error: Can't infer a type for 'field3c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   final field3c = null; // error
+//         ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:48:12: Context: This is one of the overridden members.
+//   int? get field3c;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:100:15: Context: This is one of the overridden members.
+//   double? get field3c;
+//               ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:52:12: Context: This is one of the overridden members.
+//   void set field3c(Object? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:104:12: Context: This is one of the overridden members.
+//   void set field3c(Object? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:153:7: Error: Can't infer a type for 'field4b' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field4b = null; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:55:12: Context: This is one of the overridden members.
+//   num? get field4b;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:107:12: Context: This is one of the overridden members.
+//   num? get field4b;
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:56:12: Context: This is one of the overridden members.
+//   void set field4b(Object? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:108:12: Context: This is one of the overridden members.
+//   void set field4b(Object? value);
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:136:12: Error: Can't infer a return type for 'setter1c' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   void set setter1c(x); // error
+//            ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:33:12: Context: This is one of the overridden members.
+//   void set setter1c(String x);
+//            ^^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:85:12: Context: This is one of the overridden members.
+//   void set setter1c(int x);
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/override_inference.dart:111:16: Error: Class 'C' inherits multiple members named 'field2c' with incompatible signatures.
+// Try adding a declaration of 'field2c' to 'C'.
+// abstract class C implements A<int>, B<num> {
+//                ^
+// pkg/front_end/testcases/nnbd/override_inference.dart:44:12: Context: This is one of the overridden members.
+//   void set field2c(int? value);
+//            ^^^^^^^
+// pkg/front_end/testcases/nnbd/override_inference.dart:96:12: Context: This is one of the overridden members.
+//   void set field2c(double? value);
+//            ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+abstract class A<AT extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::AT%>
+    : super core::Object::•()
+    ;
+  abstract method method1a(core::Object x) → core::String;
+  abstract method method1b(core::String x) → core::Object;
+  abstract method method1c(core::int x) → void;
+  abstract method method1d() → core::String;
+  abstract method method2a(core::Object? x) → void;
+  abstract method method2b(dynamic x) → void;
+  abstract method method3a<AT3a extends core::Object? = dynamic>(self::A::method3a::AT3a% x) → void;
+  abstract method method3b<AT3b extends core::Object? = dynamic>(self::A::method3b::AT3b% x) → void;
+  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, covariant-by-class self::A::AT% y) → void;
+  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, covariant-by-class self::A::AT% y) → void;
+  abstract method method5a(core::int x, core::num y) → void;
+  abstract method method5b(core::int x, core::num y) → void;
+  abstract method method6a({core::int x = #C1, core::num y = #C1}) → void;
+  abstract method method6b({core::num y = #C1, core::int x = #C1}) → void;
+  method method7a(core::Object? o, {core::Object? named = #C1}) → core::Object? {}
+  abstract get getter1a() → core::Object;
+  abstract get getter1b() → core::String;
+  abstract get getter1c() → core::String;
+  abstract set getter1d(core::String x) → void;
+  abstract get getter1e() → core::int;
+  abstract set getter1e(core::int x) → void;
+  abstract set setter1a(core::Object x) → void;
+  abstract set setter1b(core::String x) → void;
+  abstract set setter1c(core::String x) → void;
+  abstract get setter1d() → core::String;
+  abstract get setter1e() → core::int;
+  abstract set setter1e(core::int x) → void;
+  abstract get field1a() → core::int?;
+  abstract get field1b() → core::num?;
+  abstract get field1c() → core::int?;
+  abstract set field2a(core::int? value) → void;
+  abstract set field2b(core::num? value) → void;
+  abstract set field2c(core::int? value) → void;
+  abstract get field3a() → core::int?;
+  abstract get field3b() → core::num?;
+  abstract get field3c() → core::int?;
+  abstract set field3a(core::Object? value) → void;
+  abstract set field3b(core::Object? value) → void;
+  abstract set field3c(core::Object? value) → void;
+  abstract get field4a() → core::num?;
+  abstract get field4b() → core::num?;
+  abstract set field4b(core::Object? value) → void;
+}
+abstract class B<BT extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::BT%>
+    : super core::Object::•()
+    ;
+  abstract method method1a(core::String x) → core::Object;
+  abstract method method1b(core::Object x) → core::String;
+  abstract method method1c(core::String x) → void;
+  abstract method method1d() → core::int;
+  abstract method method2a(dynamic x) → void;
+  abstract method method2b(core::Object? x) → void;
+  abstract method method3a<BT3a extends core::Object? = dynamic>(self::B::method3a::BT3a% x) → void;
+  abstract method method3b<BT3b extends core::Object? = dynamic>(self::B::method3b::BT3b% x) → void;
+  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, covariant-by-class self::B::BT% y) → void;
+  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, covariant-by-class self::B::BT% y) → void;
+  abstract method method5a(core::num x, core::int y) → void;
+  abstract method method5b(core::num x, core::int y) → void;
+  abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
+  abstract method method6b({core::int x = #C1, core::Object y = #C1}) → void;
+  abstract method method7a(FutureOr<dynamic>o, {FutureOr<dynamic>named = #C1}) → FutureOr<dynamic>;
+  abstract get getter1a() → core::String;
+  abstract get getter1b() → core::Object;
+  abstract get getter1c() → core::int;
+  abstract set getter1d(core::Object x) → void;
+  abstract get getter1e() → core::num;
+  abstract set getter1e(core::Object x) → void;
+  abstract set setter1a(core::String x) → void;
+  abstract set setter1b(core::Object x) → void;
+  abstract set setter1c(core::int x) → void;
+  abstract get setter1d() → core::Object;
+  abstract get setter1e() → core::num;
+  abstract set setter1e(core::Object x) → void;
+  abstract get field1a() → core::num?;
+  abstract get field1b() → core::int?;
+  abstract get field1c() → core::double?;
+  abstract set field2a(core::num? value) → void;
+  abstract set field2b(core::int? value) → void;
+  abstract set field2c(core::double? value) → void;
+  abstract get field3a() → core::num?;
+  abstract get field3b() → core::int?;
+  abstract get field3c() → core::double?;
+  abstract set field3a(core::Object? value) → void;
+  abstract set field3b(core::Object? value) → void;
+  abstract set field3c(core::Object? value) → void;
+  abstract set field4a(core::num? value) → void;
+  abstract get field4b() → core::num?;
+  abstract set field4b(core::Object? value) → void;
+}
+abstract class C extends core::Object implements self::A<core::int>, self::B<core::num> {
+  final field core::int? field1a = null;
+  final field core::int? field1b = null;
+  final field invalid-type field1c = null;
+  final field core::num? field2a = null;
+  final field core::num? field2b = null;
+  final field invalid-type field2c = null;
+  final field core::int? field3a = null;
+  final field core::int? field3b = null;
+  final field invalid-type field3c = null;
+  field core::num? field4a = null;
+  field invalid-type field4b = null;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  abstract method method1a(core::Object x) → core::String;
+  abstract method method1b(core::Object x) → core::String;
+  abstract method method1c(invalid-type x) → void;
+  abstract method method1d() → invalid-type;
+  abstract method method2a(core::Object? x) → void;
+  abstract method method2b(core::Object? x) → void;
+  abstract method method3a<CT3a extends core::Object? = dynamic>(self::C::method3a::CT3a% x) → void;
+  abstract method method3b<CT3b extends core::Object? = dynamic>(self::C::method3b::CT3b% x, [dynamic y = #C1]) → void;
+  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, covariant-by-class core::num y) → void;
+  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, covariant-by-class core::num y, [dynamic z = #C1]) → void;
+  abstract method method5a(invalid-type x, invalid-type y) → void;
+  abstract method method5b(core::num x, core::num y, [invalid-type z = #C1]) → void;
+  abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
+  abstract method method6b({core::int x = #C1, core::Object y = #C1, dynamic z = #C1}) → void;
+  abstract method method7a(core::Object? o, {core::Object? named = #C1}) → core::Object?;
+  abstract get getter1a() → core::String;
+  abstract get getter1b() → core::String;
+  abstract get getter1c() → invalid-type;
+  abstract get getter1d() → core::Object;
+  abstract get getter1e() → core::int;
+  abstract set setter1a(core::Object x) → void;
+  abstract set setter1b(core::Object x) → void;
+  abstract set setter1c(invalid-type x) → void;
+  abstract set setter1d(core::String x) → void;
+  abstract set setter1e(core::Object x) → void;
+  abstract member-signature set getter1d(core::Object x) → void; -> self::B::getter1d
+  abstract member-signature set getter1e(core::Object x) → void; -> self::B::getter1e
+  abstract member-signature set field2a(core::num? value) → void; -> self::B::field2a
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.weak.modular.expect
new file mode 100644
index 0000000..bb556eb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/parenthesized_stop_shorting.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  get foo() → core::int
+    return throw 42;
+}
+static method bar(core::int x) → dynamic {}
+static method test(self::A? a) → dynamic {
+  self::bar((let final self::A? #t1 = a in #t1 == null ?{core::int?} null : #t1{self::A}.{self::A::foo}{core::int})!);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.modular.expect
new file mode 100644
index 0000000..4384943
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.modular.expect
@@ -0,0 +1,124 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:test" as test;
+import "dart:core" as core;
+
+import "dart:test";
+
+static method main() → dynamic {
+  test::Class<core::num>? c;
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:15:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
+//     k;
+//     ^
+//
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+//     return k;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+//     return k;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+//   return k;
+//          ^
+//
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+//   return k;
+//          ^
+//
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:17:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
+//     k;
+//     ^
+//
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+//     return k;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+//   return k;
+//          ^
+//
+import self as test;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+
+@#C1
+class Class<T extends core::num> extends core::Object /*hasConstConstructor*/  {
+  final field core::int a;
+  final field test::Class::T b;
+  const constructor constConstructor(core::int a, test::Class::T b) → test::Class<test::Class::T>
+    : test::Class::a = a, test::Class::b = b, super core::Object::•()
+    ;
+  constructor constructor(core::int a, test::Class::T b) → test::Class<test::Class::T>
+    : test::Class::a = a, test::Class::b = b, super core::Object::•() {
+    core::int k;
+    invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:17:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    k;
+    ^" in k;
+  }
+  @#C1
+  constructor patchedConstructor(core::int i, test::Class::T j) → test::Class<test::Class::T>
+    : test::Class::a = i, test::Class::b = j, super core::Object::•() {
+    core::int k;
+    invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:15:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    k;
+    ^" in k;
+  }
+  method method(core::int a) → core::int {
+    core::int k;
+    core::int j = a;
+    return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return k;
+           ^" in k;
+  }
+  @#C1
+  method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
+    core::int k;
+    core::int j = i;
+    return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return k;
+           ^" in k;
+  }
+  method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
+    core::int k;
+    core::int j = i;
+    return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return k;
+           ^" in k;
+  }
+}
+static method method(core::int a) → core::int {
+  core::int k;
+  core::int j = a;
+  return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return k;
+         ^" in k;
+}
+@#C1
+static method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
+  core::int k;
+  core::int j = i;
+  return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return k;
+         ^" in k;
+}
+static method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
+  core::int k;
+  core::int j = i;
+  return invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return k;
+         ^" in k;
+}
+
+constants  {
+  #C1 = _in::_Patch {}
+}
diff --git a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.modular.expect
new file mode 100644
index 0000000..8aa11f6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:test" as test;
+
+import "dart:test";
+
+static method main() → dynamic {
+  test::Class1? c1;
+  test::Class2? c2;
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart:32:14: Error: Field 'staticField' should be initialized because its type 'int' doesn't allow null.
+//   static int staticField;
+//              ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart:30:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
+//   int field;
+//       ^^^^^
+//
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/origin_lib.dart:8:3: Error: This constructor should initialize field 'field' because its type 'int' doesn't allow null.
+//   Class2.constructor1();
+//   ^
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib2.dart:37:7: Context: 'field' is defined here.
+//   int field;
+//       ^^^^^
+//
+import self as test;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+
+@#C1
+class Class1 extends core::Object {
+  field core::int field = null /* from org-dartlang-testcase:///patch_lib2.dart */;
+  static field core::int staticField = null /* from org-dartlang-testcase:///patch_lib2.dart */;
+  synthetic constructor •() → test::Class1
+    : super core::Object::•()
+    ;
+}
+@#C1
+class Class2 extends core::Object {
+  field core::int field /* from org-dartlang-testcase:///patch_lib2.dart */;
+  constructor constructor2(core::int field) → test::Class2
+    : test::Class2::field = field, super core::Object::•()
+    ;
+  constructor constructor1() → test::Class2
+    : test::Class2::field = null, super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = _in::_Patch {}
+}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.modular.expect
new file mode 100644
index 0000000..2d71c44
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:test" as test;
+
+import "dart:test";
+
+static method main() → dynamic {
+  test::Class? c = new test::Class::•();
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void patchedMethod([int i]) {}
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:13:29: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void _injectedMethod([int i]) {}
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:17:25: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// void patchedMethod([int i]) {}
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:19:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// void _injectedMethod([int i]) {}
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void method([int i]) {}
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// void method([int i]) {}
+//                  ^
+//
+import self as test;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+
+@#C1
+class Class extends core::Object {
+  synthetic constructor •() → test::Class
+    : super core::Object::•()
+    ;
+  method method([core::int i = #C2]) → void {}
+  @#C1
+  method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod([core::int i = #C2]) → void {}
+  method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i = #C2]) → void {}
+}
+static method method([core::int i = #C2]) → void {}
+@#C1
+static method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod([core::int i = #C2]) → void {}
+static method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod([core::int i = #C2]) → void {}
+
+constants  {
+  #C1 = _in::_Patch {}
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.modular.expect
new file mode 100644
index 0000000..752b8a6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.modular.expect
@@ -0,0 +1,258 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:65:9: Error: Constant evaluation error:
+//   const Class<num>(''); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:16:46: Context: Expected constant '""' to be of type 'num', but was of type 'String'.
+//   const Class(dynamic value) : field = value as T;
+//                                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:66:9: Error: Constant evaluation error:
+//   const Class<int>(0.5); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:16:46: Context: Expected constant '0.5' to be of type 'int', but was of type 'double'.
+//   const Class(dynamic value) : field = value as T;
+//                                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:67:9: Error: Constant evaluation error:
+//   const Class<String>(0); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:16:46: Context: Expected constant '0' to be of type 'String', but was of type 'int'.
+//   const Class(dynamic value) : field = value as T;
+//                                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:68:9: Error: Constant evaluation error:
+//   const ClassWithBound<double>(); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:22:42: Context: Expected constant '3' to be of type 'double', but was of type 'int'.
+//   const ClassWithBound() : field = three as T;
+//                                          ^
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:69:9: Error: Constant evaluation error:
+//   const ClassWithBound<double>.withValue(0); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:24:65: Context: Expected constant '0' to be of type 'double', but was of type 'int'.
+//   const ClassWithBound.withValue(dynamic value) : field = value as T;
+//                                                                 ^
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:70:9: Error: Constant evaluation error:
+//   const ClassWithBound<double>.withValue(three); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:24:65: Context: Expected constant '3' to be of type 'double', but was of type 'int'.
+//   const ClassWithBound.withValue(dynamic value) : field = value as T;
+//                                                                 ^
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:71:9: Error: Constant evaluation error:
+//   const ClassWithBound<num>.withValue(''); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:24:65: Context: Expected constant '""' to be of type 'num', but was of type 'String'.
+//   const ClassWithBound.withValue(dynamic value) : field = value as T;
+//                                                                 ^
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:72:9: Error: Constant evaluation error:
+//   const ClassWithList(0); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:30:54: Context: Expected constant '0' to be of type 'List<dynamic>', but was of type 'int'.
+//  - 'List' is from 'dart:core'.
+//   const ClassWithList(dynamic value) : field = value as List<T>;
+//                                                      ^
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:73:9: Error: Constant evaluation error:
+//   const ClassWithList<num>(<String>['']); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:30:54: Context: Expected constant '<String>[""]' to be of type 'List<num>', but was of type 'List<String>'.
+//  - 'List' is from 'dart:core'.
+//   const ClassWithList(dynamic value) : field = value as List<T>;
+//                                                      ^
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:74:9: Error: Constant evaluation error:
+//   const ClassWithList<int>(<num>[0]); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:30:54: Context: Expected constant '<num>[0]' to be of type 'List<int>', but was of type 'List<num>'.
+//  - 'List' is from 'dart:core'.
+//   const ClassWithList(dynamic value) : field = value as List<T>;
+//                                                      ^
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:75:9: Error: Constant evaluation error:
+//   const ClassWithList<String>(<int>[0]); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:30:54: Context: Expected constant '<int>[0]' to be of type 'List<String>', but was of type 'List<int>'.
+//  - 'List' is from 'dart:core'.
+//   const ClassWithList(dynamic value) : field = value as List<T>;
+//                                                      ^
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:76:9: Error: Constant evaluation error:
+//   const ClassWithFunction(0); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:36:58: Context: Expected constant '0' to be of type 'dynamic Function(dynamic)', but was of type 'int'.
+//   const ClassWithFunction(dynamic value) : field = value as T Function(T);
+//                                                          ^
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:77:9: Error: Constant evaluation error:
+//   const ClassWithFunction(intFunction); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:36:58: Context: Expected constant 'intFunction' to be of type 'dynamic Function(dynamic)', but was of type 'int Function(int)'.
+//   const ClassWithFunction(dynamic value) : field = value as T Function(T);
+//                                                          ^
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:78:9: Error: Constant evaluation error:
+//   const ClassWithFunction<Object>(intFunction); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:36:58: Context: Expected constant 'intFunction' to be of type 'Object Function(Object)', but was of type 'int Function(int)'.
+//  - 'Object' is from 'dart:core'.
+//   const ClassWithFunction(dynamic value) : field = value as T Function(T);
+//                                                          ^
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:79:9: Error: Constant evaluation error:
+//   const ClassWithFunction<void>(intFunction); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:36:58: Context: Expected constant 'intFunction' to be of type 'void Function(void)', but was of type 'int Function(int)'.
+//   const ClassWithFunction(dynamic value) : field = value as T Function(T);
+//                                                          ^
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:80:9: Error: Constant evaluation error:
+//   const ClassWithFunction<num>(intFunction); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:36:58: Context: Expected constant 'intFunction' to be of type 'num Function(num)', but was of type 'int Function(int)'.
+//   const ClassWithFunction(dynamic value) : field = value as T Function(T);
+//                                                          ^
+//
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:81:9: Error: Constant evaluation error:
+//   const ClassWithFunction<int>(idFunction); // error
+//         ^
+// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:36:58: Context: Expected constant 'idFunction' to be of type 'int Function(int)', but was of type 'T Function<T>(T)'.
+//   const ClassWithFunction(dynamic value) : field = value as T Function(T);
+//                                                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field self::Class::T% field;
+  const constructor •(dynamic value) → self::Class<self::Class::T%>
+    : self::Class::field = value as{ForNonNullableByDefault} self::Class::T%, super core::Object::•()
+    ;
+}
+class ClassWithBound<T extends core::num> extends core::Object /*hasConstConstructor*/  {
+  final field self::ClassWithBound::T field;
+  const constructor •() → self::ClassWithBound<self::ClassWithBound::T>
+    : self::ClassWithBound::field = #C1 as{ForNonNullableByDefault} self::ClassWithBound::T, super core::Object::•()
+    ;
+  const constructor withValue(dynamic value) → self::ClassWithBound<self::ClassWithBound::T>
+    : self::ClassWithBound::field = value as{ForNonNullableByDefault} self::ClassWithBound::T, super core::Object::•()
+    ;
+}
+class ClassWithList<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field core::List<self::ClassWithList::T%> field;
+  const constructor •(dynamic value) → self::ClassWithList<self::ClassWithList::T%>
+    : self::ClassWithList::field = value as{ForNonNullableByDefault} core::List<self::ClassWithList::T%>, super core::Object::•()
+    ;
+}
+class ClassWithFunction<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field (self::ClassWithFunction::T%) → self::ClassWithFunction::T% field;
+  const constructor •(dynamic value) → self::ClassWithFunction<self::ClassWithFunction::T%>
+    : self::ClassWithFunction::field = value as{ForNonNullableByDefault} (self::ClassWithFunction::T%) → self::ClassWithFunction::T%, super core::Object::•()
+    ;
+}
+static const field core::num three = #C1;
+static const field (core::int) → core::int idAsIntFunction = #C3;
+static method dynamicFunction(dynamic d) → dynamic
+  return d;
+static method objectFunction(core::Object? o) → core::Object?
+  return o;
+static method intFunction(core::int i) → core::int
+  return i;
+static method idFunction<T extends core::Object? = dynamic>(self::idFunction::T% t) → self::idFunction::T%
+  return t;
+static method main() → void {
+  #C5;
+  #C6;
+  #C7;
+  #C9;
+  #C10;
+  #C11;
+  #C10;
+  #C13;
+  #C15;
+  #C17;
+  #C18;
+  #C20;
+  #C22;
+  #C23;
+  #C25;
+  #C26;
+  #C28;
+  #C29;
+}
+static method weakMode() → dynamic {
+  #C30;
+}
+static method errors() → dynamic {
+  invalid-expression "Expected constant '\"\"' to be of type 'num', but was of type 'String'.";
+  invalid-expression "Expected constant '0.5' to be of type 'int', but was of type 'double'.";
+  invalid-expression "Expected constant '0' to be of type 'String', but was of type 'int'.";
+  invalid-expression "Expected constant '3' to be of type 'double', but was of type 'int'.";
+  invalid-expression "Expected constant '0' to be of type 'double', but was of type 'int'.";
+  invalid-expression "Expected constant '3' to be of type 'double', but was of type 'int'.";
+  invalid-expression "Expected constant '\"\"' to be of type 'num', but was of type 'String'.";
+  invalid-expression "Expected constant '0' to be of type 'List<dynamic>', but was of type 'int'.
+ - 'List' is from 'dart:core'.";
+  invalid-expression "Expected constant '<String>[\"\"]' to be of type 'List<num>', but was of type 'List<String>'.
+ - 'List' is from 'dart:core'.";
+  invalid-expression "Expected constant '<num>[0]' to be of type 'List<int>', but was of type 'List<num>'.
+ - 'List' is from 'dart:core'.";
+  invalid-expression "Expected constant '<int>[0]' to be of type 'List<String>', but was of type 'List<int>'.
+ - 'List' is from 'dart:core'.";
+  invalid-expression "Expected constant '0' to be of type 'dynamic Function(dynamic)', but was of type 'int'.";
+  invalid-expression "Expected constant 'intFunction' to be of type 'dynamic Function(dynamic)', but was of type 'int Function(int)'.";
+  invalid-expression "Expected constant 'intFunction' to be of type 'Object Function(Object)', but was of type 'int Function(int)'.
+ - 'Object' is from 'dart:core'.";
+  invalid-expression "Expected constant 'intFunction' to be of type 'void Function(void)', but was of type 'int Function(int)'.";
+  invalid-expression "Expected constant 'intFunction' to be of type 'num Function(num)', but was of type 'int Function(int)'.";
+  invalid-expression "Expected constant 'idFunction' to be of type 'int Function(int)', but was of type 'T Function<T>(T)'.";
+}
+
+constants  {
+  #C1 = 3
+  #C2 = static-tearoff self::idFunction
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = 0
+  #C5 = self::Class<dynamic> {field:#C4}
+  #C6 = self::Class<core::num*> {field:#C4}
+  #C7 = self::Class<core::int*> {field:#C4}
+  #C8 = ""
+  #C9 = self::Class<core::String*> {field:#C8}
+  #C10 = self::ClassWithBound<core::int*> {field:#C1}
+  #C11 = self::ClassWithBound<core::int*> {field:#C4}
+  #C12 = 0.5
+  #C13 = self::ClassWithBound<core::double*> {field:#C12}
+  #C14 = <dynamic>[]
+  #C15 = self::ClassWithList<dynamic> {field:#C14}
+  #C16 = <core::int*>[#C4]
+  #C17 = self::ClassWithList<core::num*> {field:#C16}
+  #C18 = self::ClassWithList<core::int*> {field:#C16}
+  #C19 = <core::String*>[#C8]
+  #C20 = self::ClassWithList<core::String*> {field:#C19}
+  #C21 = static-tearoff self::dynamicFunction
+  #C22 = self::ClassWithFunction<dynamic> {field:#C21}
+  #C23 = self::ClassWithFunction<core::Object?> {field:#C21}
+  #C24 = static-tearoff self::objectFunction
+  #C25 = self::ClassWithFunction<dynamic> {field:#C24}
+  #C26 = self::ClassWithFunction<void> {field:#C24}
+  #C27 = static-tearoff self::intFunction
+  #C28 = self::ClassWithFunction<core::int*> {field:#C27}
+  #C29 = self::ClassWithFunction<core::int*> {field:#C3}
+  #C30 = self::ClassWithFunction<core::Object*> {field:#C24}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///potentially_constant_type_as.dart:
+- Class. (from org-dartlang-testcase:///potentially_constant_type_as.dart:16:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- ClassWithBound. (from org-dartlang-testcase:///potentially_constant_type_as.dart:22:9)
+- ClassWithBound.withValue (from org-dartlang-testcase:///potentially_constant_type_as.dart:24:9)
+- ClassWithList. (from org-dartlang-testcase:///potentially_constant_type_as.dart:30:9)
+- ClassWithFunction. (from org-dartlang-testcase:///potentially_constant_type_as.dart:36:9)
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.modular.expect
new file mode 100644
index 0000000..3b6c8a8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.modular.expect
@@ -0,0 +1,126 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field core::bool field;
+  const constructor •(dynamic value) → self::Class<self::Class::T%>
+    : self::Class::field = value is{ForNonNullableByDefault} self::Class::T%, super core::Object::•()
+    ;
+}
+class ClassWithBound<T extends core::num> extends core::Object /*hasConstConstructor*/  {
+  final field core::bool field;
+  const constructor •() → self::ClassWithBound<self::ClassWithBound::T>
+    : self::ClassWithBound::field = #C1 is{ForNonNullableByDefault} self::ClassWithBound::T, super core::Object::•()
+    ;
+  const constructor withValue(dynamic value) → self::ClassWithBound<self::ClassWithBound::T>
+    : self::ClassWithBound::field = value is{ForNonNullableByDefault} self::ClassWithBound::T, super core::Object::•()
+    ;
+}
+class ClassWithList<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field core::bool field;
+  const constructor •(dynamic value) → self::ClassWithList<self::ClassWithList::T%>
+    : self::ClassWithList::field = value is{ForNonNullableByDefault} core::List<self::ClassWithList::T%>, super core::Object::•()
+    ;
+}
+class ClassWithFunction<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field core::bool field;
+  const constructor •(dynamic value) → self::ClassWithFunction<self::ClassWithFunction::T%>
+    : self::ClassWithFunction::field = value is{ForNonNullableByDefault} (self::ClassWithFunction::T%) → self::ClassWithFunction::T%, super core::Object::•()
+    ;
+}
+static const field core::num three = #C1;
+static const field (core::int) → core::int idAsIntFunction = #C3;
+static method dynamicFunction(dynamic d) → dynamic
+  return d;
+static method objectFunction(core::Object? o) → core::Object?
+  return o;
+static method intFunction(core::int i) → core::int
+  return i;
+static method idFunction<T extends core::Object? = dynamic>(self::idFunction::T% t) → self::idFunction::T%
+  return t;
+static method main() → void {
+  #C5;
+  #C6;
+  #C7;
+  #C8;
+  #C9;
+  #C9;
+  #C9;
+  #C10;
+  #C11;
+  #C12;
+  #C13;
+  #C14;
+  #C15;
+  #C16;
+  #C15;
+  #C17;
+  #C18;
+  #C18;
+  #C19;
+  #C21;
+  #C22;
+  #C23;
+  #C24;
+  #C24;
+  #C24;
+  #C25;
+  #C26;
+  #C27;
+  #C28;
+  #C29;
+  #C30;
+  #C30;
+  #C31;
+  #C32;
+  #C33;
+  #C34;
+}
+
+constants  {
+  #C1 = 3
+  #C2 = static-tearoff self::idFunction
+  #C3 = instantiation #C2 <core::int*>
+  #C4 = true
+  #C5 = self::Class<dynamic> {field:#C4}
+  #C6 = self::Class<core::num*> {field:#C4}
+  #C7 = self::Class<core::int*> {field:#C4}
+  #C8 = self::Class<core::String*> {field:#C4}
+  #C9 = self::ClassWithBound<core::int*> {field:#C4}
+  #C10 = self::ClassWithBound<core::double*> {field:#C4}
+  #C11 = self::ClassWithList<dynamic> {field:#C4}
+  #C12 = self::ClassWithList<core::num*> {field:#C4}
+  #C13 = self::ClassWithList<core::int*> {field:#C4}
+  #C14 = self::ClassWithList<core::String*> {field:#C4}
+  #C15 = self::ClassWithFunction<dynamic> {field:#C4}
+  #C16 = self::ClassWithFunction<core::Object?> {field:#C4}
+  #C17 = self::ClassWithFunction<void> {field:#C4}
+  #C18 = self::ClassWithFunction<core::int*> {field:#C4}
+  #C19 = self::ClassWithFunction<core::Object*> {field:#C4}
+  #C20 = false
+  #C21 = self::Class<core::num*> {field:#C20}
+  #C22 = self::Class<core::int*> {field:#C20}
+  #C23 = self::Class<core::String*> {field:#C20}
+  #C24 = self::ClassWithBound<core::double*> {field:#C20}
+  #C25 = self::ClassWithBound<core::num*> {field:#C20}
+  #C26 = self::ClassWithList<dynamic> {field:#C20}
+  #C27 = self::ClassWithList<core::num*> {field:#C20}
+  #C28 = self::ClassWithList<core::int*> {field:#C20}
+  #C29 = self::ClassWithList<core::String*> {field:#C20}
+  #C30 = self::ClassWithFunction<dynamic> {field:#C20}
+  #C31 = self::ClassWithFunction<core::Object*> {field:#C20}
+  #C32 = self::ClassWithFunction<void> {field:#C20}
+  #C33 = self::ClassWithFunction<core::num*> {field:#C20}
+  #C34 = self::ClassWithFunction<core::int*> {field:#C20}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///potentially_constant_type_is.dart:
+- Class. (from org-dartlang-testcase:///potentially_constant_type_is.dart:16:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- ClassWithBound. (from org-dartlang-testcase:///potentially_constant_type_is.dart:22:9)
+- ClassWithBound.withValue (from org-dartlang-testcase:///potentially_constant_type_is.dart:24:9)
+- ClassWithList. (from org-dartlang-testcase:///potentially_constant_type_is.dart:30:9)
+- ClassWithFunction. (from org-dartlang-testcase:///potentially_constant_type_is.dart:36:9)
diff --git a/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.modular.expect
new file mode 100644
index 0000000..f8836ef
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:8:5: Error: Field 'x' should be initialized because its type 'int' doesn't allow null.
+// int x; // Error.
+//     ^
+//
+// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:13:14: Error: Field 'x' should be initialized because its type 'int' doesn't allow null.
+//   static int x; // Error.
+//              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:17:7: Error: Field 'lx' should be initialized because its type 'int' doesn't allow null.
+//   int lx; // Error.
+//       ^^
+//
+// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:23:5: Error: Field 'lt' should be initialized because its type 'T' doesn't allow null.
+//   T lt; // Error.
+//     ^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object?> extends core::Object {
+  static field core::int x = null;
+  static field core::int? y = null;
+  late static field core::int z;
+  field core::int lx = null;
+  field core::int? ly = null;
+  late field core::int? lz;
+  field core::int lv;
+  field core::int lu;
+  covariant-by-class field self::A::T% lt = null;
+  covariant-by-class field self::A::T? ls = null;
+  late covariant-by-class field self::A::T% lr;
+  covariant-by-class field self::A::T% lp;
+  covariant-by-class field self::A::T% lq;
+  constructor •(core::int lv, self::A::T% lp, self::A::T% t) → self::A<self::A::T%>
+    : self::A::lv = lv, self::A::lp = lp, self::A::lu = 42, self::A::lq = t, super core::Object::•()
+    ;
+}
+static field core::int x;
+static field core::int? y;
+late static field core::int z;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.modular.expect
new file mode 100644
index 0000000..939fe87
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/potentially_nullable_access.dart.weak.modular.expect
@@ -0,0 +1,828 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:37:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+// var topLevelBinary = nullableInt + 0;
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:38:21: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+// var topLevelUnary = -nullableInt;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:39:35: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+// var topLevelIndexGet = nullableMap[0];
+//                                   ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:40:35: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+// var topLevelIndexSet = nullableMap[0] = 1;
+//                                   ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+// var topLevelIndexGetSet = nullableMap[0] += 1;
+//                                      ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+// var topLevelIndexGetSet = nullableMap[0] += 1;
+//                                      ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:42:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelPropertyGet = nullableClass.property;
+//                                         ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:43:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelPropertySet = nullableClass.property = 1;
+//                                         ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelPropertyGetSet = nullableClass.property += 1;
+//                                            ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:45:46: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+// var topLevelMethodInvocation = nullableClass.method();
+//                                              ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:46:43: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelMethodTearOff = nullableClass.method;
+//                                           ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:47:52: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?.call instead.
+// var topLevelFunctionImplicitCall = nullableFunction();
+//                                                    ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:48:53: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?. instead.
+// var topLevelFunctionExplicitCall = nullableFunction.call();
+//                                                     ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:49:48: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try accessing using ?. instead.
+// var topLevelFunctionTearOff = nullableFunction.call;
+//                                                ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:50:60: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+// var topLevelFunctionTypeImplicitCall = nullableFunctionType();
+//                                                            ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:51:61: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+// Try calling using ?. instead.
+// var topLevelFunctionTypeExplicitCall = nullableFunctionType.call();
+//                                                             ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:52:56: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
+// Try accessing using ?. instead.
+// var topLevelFunctionTypeTearOff = nullableFunctionType.call;
+//                                                        ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:53:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelFunctionField = nullableClass.functionField();
+//                                           ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:54:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelFunctionTypeField = nullableClass.functionTypeField();
+//                                               ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:55:44: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelFunctionGetter = nullableClass.functionGetter();
+//                                            ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:56:48: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelFunctionTypeGetter = nullableClass.functionTypeGetter();
+//                                                ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:58:45: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionBinary = nullableClass + 0;
+//                                             ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:59:30: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionUnary = -nullableClass;
+//                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:60:46: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionIndexGet = nullableClass[0];
+//                                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:61:46: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionIndexSet = nullableClass[0] = 1;
+//                                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
+//                                                 ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
+//                                                 ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:63:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelExtensionPropertyGet = nullableClass.extensionProperty;
+//                                                  ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:64:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelExtensionPropertySet = nullableClass.extensionProperty = 1;
+//                                                  ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+//                                                     ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:66:55: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+// var topLevelExtensionMethodInvocation = nullableClass.extensionMethod();
+//                                                       ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:67:52: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelExtensionMethodTearOff = nullableClass.extensionMethod;
+//                                                    ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:68:62: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelExtensionFunctionTypeImplicitCall = nullableClass();
+//                                                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:69:63: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+// var topLevelExtensionFunctionTypeExplicitCall = nullableClass.call();
+//                                                               ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:70:58: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+// var topLevelExtensionFunctionTypeTearOff = nullableClass.call;
+//                                                          ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:71:53: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+// var topLevelExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
+//                                                     ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:73:19: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//     nullableClass.extensionFunctionTypeGetter();
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:76:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+//   var localBinary = nullableInt + 0;
+//                                 ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:77:20: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+//   var localUnary = -nullableInt;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:78:34: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+//   var localIndexGet = nullableMap[0];
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:79:34: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+//   var localIndexSet = nullableMap[0] = 1;
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+//   var localIndexGetSet = nullableMap[0] += 1;
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+//  - 'Map' is from 'dart:core'.
+//   var localIndexGetSet = nullableMap[0] += 1;
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:81:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localPropertyGet = nullableClass.property;
+//                                        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:82:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localPropertySet = nullableClass.property = 1;
+//                                        ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localPropertyGetSet = nullableClass.property += 1;
+//                                           ^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:84:45: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+//   var localMethodInvocation = nullableClass.method();
+//                                             ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:85:42: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localMethodTearOff = nullableClass.method;
+//                                          ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:86:51: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?.call instead.
+//   var localFunctionImplicitCall = nullableFunction();
+//                                                   ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:87:52: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?. instead.
+//   var localFunctionExplicitCall = nullableFunction.call();
+//                                                    ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:88:47: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try accessing using ?. instead.
+//   var localFunctionTearOff = nullableFunction.call;
+//                                               ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:89:59: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+//   var localFunctionTypeImplicitCall = nullableFunctionType();
+//                                                           ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:90:60: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+// Try calling using ?. instead.
+//   var localFunctionTypeExplicitCall = nullableFunctionType.call();
+//                                                            ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:91:55: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
+// Try accessing using ?. instead.
+//   var localFunctionTypeTearOff = nullableFunctionType.call;
+//                                                       ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:92:42: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localFunctionField = nullableClass.functionField();
+//                                          ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:93:46: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localFunctionTypeField = nullableClass.functionTypeField();
+//                                              ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:94:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localFunctionGetter = nullableClass.functionGetter();
+//                                           ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:95:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localFunctionTypeGetter = nullableClass.functionTypeGetter();
+//                                               ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:97:44: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionBinary = nullableClass + 0;
+//                                            ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:98:29: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionUnary = -nullableClass;
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:99:45: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionIndexGet = nullableClass[0];
+//                                             ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:100:45: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionIndexSet = nullableClass[0] = 1;
+//                                             ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionIndexGetSet = nullableClass[0] += 1;
+//                                                ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+//   var localExtensionIndexGetSet = nullableClass[0] += 1;
+//                                                ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:102:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localExtensionPropertyGet = nullableClass.extensionProperty;
+//                                                 ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:103:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localExtensionPropertySet = nullableClass.extensionProperty = 1;
+//                                                 ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+//                                                    ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:105:54: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+//   var localExtensionMethodInvocation = nullableClass.extensionMethod();
+//                                                      ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:106:51: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localExtensionMethodTearOff = nullableClass.extensionMethod;
+//                                                   ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:107:61: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localExtensionFunctionTypeImplicitCall = nullableClass();
+//                                                             ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:108:62: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?. instead.
+//   var localExtensionFunctionTypeExplicitCall = nullableClass.call();
+//                                                              ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:109:57: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try accessing using ?. instead.
+//   var localExtensionFunctionTypeTearOff = nullableClass.call;
+//                                                         ^^^^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:110:52: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//   var localExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
+//                                                    ^
+//
+// pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:112:21: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+// Try calling using ?.call instead.
+//       nullableClass.extensionFunctionTypeGetter();
+//                     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int property = 0;
+  field core::Function functionField = () → Null {};
+  field () → void functionTypeField = () → void {};
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method method() → core::int
+    return 0;
+  get functionGetter() → core::Function
+    return () → Null {};
+  get functionTypeGetter() → () → void
+    return () → void {};
+}
+extension Extension on self::Class {
+  operator + = self::Extension|+;
+  operator unary- = self::Extension|unary-;
+  operator [] = self::Extension|[];
+  operator []= = self::Extension|[]=;
+  method call = self::Extension|call;
+  tearoff call = self::Extension|get#call;
+  get extensionProperty = self::Extension|get#extensionProperty;
+  method extensionMethod = self::Extension|extensionMethod;
+  tearoff extensionMethod = self::Extension|get#extensionMethod;
+  get extensionFunctionGetter = self::Extension|get#extensionFunctionGetter;
+  get extensionFunctionTypeGetter = self::Extension|get#extensionFunctionTypeGetter;
+  set extensionProperty = self::Extension|set#extensionProperty;
+}
+static field core::num topLevelBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:37:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+var topLevelBinary = nullableInt + 0;
+                                 ^" in self::nullableInt.{core::num::+}(0){(core::num) → core::num};
+static field core::int topLevelUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:38:21: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+var topLevelUnary = -nullableInt;
+                    ^" in self::nullableInt.{core::int::unary-}(){() → core::int};
+static field dynamic topLevelIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:39:35: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+var topLevelIndexGet = nullableMap[0];
+                                  ^" in self::nullableMap.{core::Map::[]}{<nullable>}.(0){(core::Object?) → dynamic};
+static field core::int topLevelIndexSet = let final core::Map<dynamic, dynamic>? #t1 = self::nullableMap in let final core::int #t2 = 0 in let final core::int #t3 = 1 in let final void #t4 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:40:35: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+var topLevelIndexSet = nullableMap[0] = 1;
+                                  ^" in #t1.{core::Map::[]=}{<nullable>}.(#t2, #t3){(dynamic, dynamic) → void} in #t3;
+static field dynamic topLevelIndexGetSet = let final core::Map<dynamic, dynamic>? #t5 = self::nullableMap in let final core::int #t6 = 0 in let final dynamic #t7 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+var topLevelIndexGetSet = nullableMap[0] += 1;
+                                     ^" in #t5.{core::Map::[]}{<nullable>}.(#t6){(core::Object?) → dynamic}{dynamic}.+(1) in let final void #t8 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:41:38: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+var topLevelIndexGetSet = nullableMap[0] += 1;
+                                     ^" in #t5.{core::Map::[]=}{<nullable>}.(#t6, #t7){(dynamic, dynamic) → void} in #t7;
+static field core::int topLevelPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:42:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelPropertyGet = nullableClass.property;
+                                        ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}.{core::int};
+static field core::int topLevelPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:43:41: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelPropertySet = nullableClass.property = 1;
+                                        ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}. = 1;
+static field core::int topLevelPropertyGetSet = let final self::Class? #t9 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelPropertyGetSet = nullableClass.property += 1;
+                                           ^^^^^^^^" in #t9.{self::Class::property}{<nullable>}. = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:44:44: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelPropertyGetSet = nullableClass.property += 1;
+                                           ^^^^^^^^" in #t9.{self::Class::property}{<nullable>}.{core::int}.{core::num::+}(1){(core::num) → core::int};
+static field core::int topLevelMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:45:46: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+var topLevelMethodInvocation = nullableClass.method();
+                                             ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.(){() → core::int};
+static field () → core::int topLevelMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:46:43: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelMethodTearOff = nullableClass.method;
+                                          ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.{() → core::int};
+static field dynamic topLevelFunctionImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:47:52: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?.call instead.
+var topLevelFunctionImplicitCall = nullableFunction();
+                                                   ^" in self::nullableFunction{<nullable>}.();
+static field dynamic topLevelFunctionExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:48:53: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?. instead.
+var topLevelFunctionExplicitCall = nullableFunction.call();
+                                                    ^^^^" in self::nullableFunction{<nullable>}.();
+static field core::Function? topLevelFunctionTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:49:48: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
+ - 'Function' is from 'dart:core'.
+Try accessing using ?. instead.
+var topLevelFunctionTearOff = nullableFunction.call;
+                                               ^^^^" in self::nullableFunction.call;
+static field void topLevelFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:50:60: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+var topLevelFunctionTypeImplicitCall = nullableFunctionType();
+                                                           ^" in self::nullableFunctionType{<nullable>}.(){() →? void};
+static field void topLevelFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:51:61: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+Try calling using ?. instead.
+var topLevelFunctionTypeExplicitCall = nullableFunctionType.call();
+                                                            ^^^^" in self::nullableFunctionType{<nullable>}.(){() →? void};
+static field () →? void topLevelFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:52:56: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
+Try accessing using ?. instead.
+var topLevelFunctionTypeTearOff = nullableFunctionType.call;
+                                                       ^^^^" in self::nullableFunctionType.call;
+static field dynamic topLevelFunctionField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:53:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelFunctionField = nullableClass.functionField();
+                                          ^" in self::nullableClass.{self::Class::functionField}{<nullable>}.{core::Function}();
+static field void topLevelFunctionTypeField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:54:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelFunctionTypeField = nullableClass.functionTypeField();
+                                              ^" in self::nullableClass.{self::Class::functionTypeField}{<nullable>}.{() → void}(){() → void};
+static field dynamic topLevelFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:55:44: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelFunctionGetter = nullableClass.functionGetter();
+                                           ^" in self::nullableClass.{self::Class::functionGetter}{<nullable>}.{core::Function}();
+static field void topLevelFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:56:48: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelFunctionTypeGetter = nullableClass.functionTypeGetter();
+                                               ^" in self::nullableClass.{self::Class::functionTypeGetter}{<nullable>}.{() → void}(){() → void};
+static field core::int topLevelExtensionBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:58:45: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionBinary = nullableClass + 0;
+                                            ^" in self::Extension|+(self::nullableClass, 0);
+static field core::int topLevelExtensionUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:59:30: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionUnary = -nullableClass;
+                             ^" in self::Extension|unary-(self::nullableClass);
+static field core::int topLevelExtensionIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:60:46: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionIndexGet = nullableClass[0];
+                                             ^" in self::Extension|[](self::nullableClass, 0);
+static field core::int topLevelExtensionIndexSet = let final self::Class? #t10 = self::nullableClass in let final core::int #t11 = 0 in let final core::int #t12 = 1 in let final void #t13 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:61:46: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionIndexSet = nullableClass[0] = 1;
+                                             ^" in self::Extension|[]=(#t10, #t11, #t12) in #t12;
+static field core::int topLevelExtensionIndexGetSet = let final self::Class? #t14 = self::nullableClass in let final core::int #t15 = 0 in let final core::int #t16 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
+                                                ^" in self::Extension|[](#t14, #t15).{core::num::+}(1){(core::num) → core::int} in let final void #t17 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:62:49: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+var topLevelExtensionIndexGetSet = nullableClass[0] += 1;
+                                                ^" in self::Extension|[]=(#t14, #t15, #t16) in #t16;
+static field core::int topLevelExtensionPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:63:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionPropertyGet = nullableClass.extensionProperty;
+                                                 ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(self::nullableClass);
+static field core::int topLevelExtensionPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:64:50: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionPropertySet = nullableClass.extensionProperty = 1;
+                                                 ^^^^^^^^^^^^^^^^^" in let final core::int #t18 = 1 in let final void #t19 = self::Extension|set#extensionProperty(self::nullableClass, #t18) in #t18;
+static field core::int topLevelExtensionPropertyGetSet = let final self::Class? #t20 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+                                                    ^^^^^^^^^^^^^^^^^" in let final core::int #t21 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:65:53: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+                                                    ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t20).{core::num::+}(1){(core::num) → core::int} in let final void #t22 = self::Extension|set#extensionProperty(#t20, #t21) in #t21;
+static field core::int topLevelExtensionMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:66:55: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+var topLevelExtensionMethodInvocation = nullableClass.extensionMethod();
+                                                      ^^^^^^^^^^^^^^^" in self::Extension|extensionMethod(self::nullableClass);
+static field () → core::int topLevelExtensionMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:67:52: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionMethodTearOff = nullableClass.extensionMethod;
+                                                   ^^^^^^^^^^^^^^^" in self::Extension|get#extensionMethod(self::nullableClass);
+static field core::int topLevelExtensionFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:68:62: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelExtensionFunctionTypeImplicitCall = nullableClass();
+                                                             ^" in self::Extension|call(self::nullableClass);
+static field core::int topLevelExtensionFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:69:63: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+var topLevelExtensionFunctionTypeExplicitCall = nullableClass.call();
+                                                              ^^^^" in self::Extension|call(self::nullableClass);
+static field () → core::int topLevelExtensionFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:70:58: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+var topLevelExtensionFunctionTypeTearOff = nullableClass.call;
+                                                         ^^^^" in self::Extension|get#call(self::nullableClass);
+static field dynamic topLevelExtensionFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:71:53: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+var topLevelExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
+                                                    ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass)();
+static field void topLevelExtensionFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:73:19: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+    nullableClass.extensionFunctionTypeGetter();
+                  ^" in self::Extension|get#extensionFunctionTypeGetter(self::nullableClass)(){() → void};
+static method Extension|+(lowered final self::Class #this, core::int value) → core::int
+  return 0;
+static method Extension|unary-(lowered final self::Class #this) → core::int
+  return 0;
+static method Extension|[](lowered final self::Class #this, core::int index) → core::int
+  return 0;
+static method Extension|[]=(lowered final self::Class #this, core::int index, core::int value) → void {}
+static method Extension|call(lowered final self::Class #this) → core::int
+  return 0;
+static method Extension|get#call(lowered final self::Class #this) → () → core::int
+  return () → core::int => self::Extension|call(#this);
+static method Extension|get#extensionProperty(lowered final self::Class #this) → core::int
+  return 0;
+static method Extension|set#extensionProperty(lowered final self::Class #this, core::int value) → void {}
+static method Extension|extensionMethod(lowered final self::Class #this) → core::int
+  return 0;
+static method Extension|get#extensionMethod(lowered final self::Class #this) → () → core::int
+  return () → core::int => self::Extension|extensionMethod(#this);
+static method Extension|get#extensionFunctionGetter(lowered final self::Class #this) → core::Function
+  return () → Null {};
+static method Extension|get#extensionFunctionTypeGetter(lowered final self::Class #this) → () → void
+  return () → void {};
+static get nullableFunction() → core::Function?
+  return () → Null {};
+static get nullableFunctionType() → () →? void
+  return () → void {};
+static get nullableInt() → core::int?
+  return 0;
+static get nullableMap() → core::Map<dynamic, dynamic>?
+  return <dynamic, dynamic>{};
+static get nullableClass() → self::Class?
+  return new self::Class::•();
+static method test() → dynamic {
+  core::num localBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:76:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  var localBinary = nullableInt + 0;
+                                ^" in self::nullableInt.{core::num::+}(0){(core::num) → core::num};
+  core::int localUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:77:20: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  var localUnary = -nullableInt;
+                   ^" in self::nullableInt.{core::int::unary-}(){() → core::int};
+  dynamic localIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:78:34: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+  var localIndexGet = nullableMap[0];
+                                 ^" in self::nullableMap.{core::Map::[]}{<nullable>}.(0){(core::Object?) → dynamic};
+  core::int localIndexSet = let final core::Map<dynamic, dynamic>? #t23 = self::nullableMap in let final core::int #t24 = 0 in let final core::int #t25 = 1 in let final void #t26 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:79:34: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+  var localIndexSet = nullableMap[0] = 1;
+                                 ^" in #t23.{core::Map::[]=}{<nullable>}.(#t24, #t25){(dynamic, dynamic) → void} in #t25;
+  dynamic localIndexGetSet = let final core::Map<dynamic, dynamic>? #t27 = self::nullableMap in let final core::int #t28 = 0 in let final dynamic #t29 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+  var localIndexGetSet = nullableMap[0] += 1;
+                                    ^" in #t27.{core::Map::[]}{<nullable>}.(#t28){(core::Object?) → dynamic}{dynamic}.+(1) in let final void #t30 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:80:37: Error: Operator '[]=' cannot be called on 'Map<dynamic, dynamic>?' because it is potentially null.
+ - 'Map' is from 'dart:core'.
+  var localIndexGetSet = nullableMap[0] += 1;
+                                    ^" in #t27.{core::Map::[]=}{<nullable>}.(#t28, #t29){(dynamic, dynamic) → void} in #t29;
+  core::int localPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:81:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localPropertyGet = nullableClass.property;
+                                       ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}.{core::int};
+  core::int localPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:82:40: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localPropertySet = nullableClass.property = 1;
+                                       ^^^^^^^^" in self::nullableClass.{self::Class::property}{<nullable>}. = 1;
+  core::int localPropertyGetSet = let final self::Class? #t31 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localPropertyGetSet = nullableClass.property += 1;
+                                          ^^^^^^^^" in #t31.{self::Class::property}{<nullable>}. = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:83:43: Error: Property 'property' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localPropertyGetSet = nullableClass.property += 1;
+                                          ^^^^^^^^" in #t31.{self::Class::property}{<nullable>}.{core::int}.{core::num::+}(1){(core::num) → core::int};
+  core::int localMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:84:45: Error: Method 'method' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+  var localMethodInvocation = nullableClass.method();
+                                            ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.(){() → core::int};
+  () → core::int localMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:85:42: Error: Property 'method' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localMethodTearOff = nullableClass.method;
+                                         ^^^^^^" in self::nullableClass.{self::Class::method}{<nullable>}.{() → core::int};
+  dynamic localFunctionImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:86:51: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?.call instead.
+  var localFunctionImplicitCall = nullableFunction();
+                                                  ^" in self::nullableFunction{<nullable>}.();
+  dynamic localFunctionExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:87:52: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?. instead.
+  var localFunctionExplicitCall = nullableFunction.call();
+                                                   ^^^^" in self::nullableFunction{<nullable>}.();
+  core::Function? localFunctionTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:88:47: Error: Property 'call' cannot be accessed on 'Function?' because it is potentially null.
+ - 'Function' is from 'dart:core'.
+Try accessing using ?. instead.
+  var localFunctionTearOff = nullableFunction.call;
+                                              ^^^^" in self::nullableFunction.call;
+  void localFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:89:59: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  var localFunctionTypeImplicitCall = nullableFunctionType();
+                                                          ^" in self::nullableFunctionType{<nullable>}.(){() →? void};
+  void localFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:90:60: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+Try calling using ?. instead.
+  var localFunctionTypeExplicitCall = nullableFunctionType.call();
+                                                           ^^^^" in self::nullableFunctionType{<nullable>}.(){() →? void};
+  () →? void localFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:91:55: Error: Property 'call' cannot be accessed on 'void Function()?' because it is potentially null.
+Try accessing using ?. instead.
+  var localFunctionTypeTearOff = nullableFunctionType.call;
+                                                      ^^^^" in self::nullableFunctionType.call;
+  dynamic localFunctionField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:92:42: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localFunctionField = nullableClass.functionField();
+                                         ^" in self::nullableClass.{self::Class::functionField}{<nullable>}.{core::Function}();
+  void localFunctionTypeField = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:93:46: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localFunctionTypeField = nullableClass.functionTypeField();
+                                             ^" in self::nullableClass.{self::Class::functionTypeField}{<nullable>}.{() → void}(){() → void};
+  dynamic localFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:94:43: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localFunctionGetter = nullableClass.functionGetter();
+                                          ^" in self::nullableClass.{self::Class::functionGetter}{<nullable>}.{core::Function}();
+  void localFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:95:47: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localFunctionTypeGetter = nullableClass.functionTypeGetter();
+                                              ^" in self::nullableClass.{self::Class::functionTypeGetter}{<nullable>}.{() → void}(){() → void};
+  core::int localExtensionBinary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:97:44: Error: Operator '+' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionBinary = nullableClass + 0;
+                                           ^" in self::Extension|+(self::nullableClass, 0);
+  core::int localExtensionUnary = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:98:29: Error: Operator 'unary-' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionUnary = -nullableClass;
+                            ^" in self::Extension|unary-(self::nullableClass);
+  core::int localExtensionIndexGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:99:45: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionIndexGet = nullableClass[0];
+                                            ^" in self::Extension|[](self::nullableClass, 0);
+  core::int localExtensionIndexSet = let final self::Class? #t32 = self::nullableClass in let final core::int #t33 = 0 in let final core::int #t34 = 1 in let final void #t35 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:100:45: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionIndexSet = nullableClass[0] = 1;
+                                            ^" in self::Extension|[]=(#t32, #t33, #t34) in #t34;
+  core::int localExtensionIndexGetSet = let final self::Class? #t36 = self::nullableClass in let final core::int #t37 = 0 in let final core::int #t38 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionIndexGetSet = nullableClass[0] += 1;
+                                               ^" in self::Extension|[](#t36, #t37).{core::num::+}(1){(core::num) → core::int} in let final void #t39 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:101:48: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+  var localExtensionIndexGetSet = nullableClass[0] += 1;
+                                               ^" in self::Extension|[]=(#t36, #t37, #t38) in #t38;
+  core::int localExtensionPropertyGet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:102:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionPropertyGet = nullableClass.extensionProperty;
+                                                ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(self::nullableClass);
+  core::int localExtensionPropertySet = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:103:49: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionPropertySet = nullableClass.extensionProperty = 1;
+                                                ^^^^^^^^^^^^^^^^^" in let final core::int #t40 = 1 in let final void #t41 = self::Extension|set#extensionProperty(self::nullableClass, #t40) in #t40;
+  core::int localExtensionPropertyGetSet = let final self::Class? #t42 = self::nullableClass in invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+                                                   ^^^^^^^^^^^^^^^^^" in let final core::int #t43 = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:104:52: Error: Property 'extensionProperty' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionPropertyGetSet = nullableClass.extensionProperty += 1;
+                                                   ^^^^^^^^^^^^^^^^^" in self::Extension|get#extensionProperty(#t42).{core::num::+}(1){(core::num) → core::int} in let final void #t44 = self::Extension|set#extensionProperty(#t42, #t43) in #t43;
+  core::int localExtensionMethodInvocation = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:105:54: Error: Method 'extensionMethod' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+  var localExtensionMethodInvocation = nullableClass.extensionMethod();
+                                                     ^^^^^^^^^^^^^^^" in self::Extension|extensionMethod(self::nullableClass);
+  () → core::int localExtensionMethodTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:106:51: Error: Property 'extensionMethod' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionMethodTearOff = nullableClass.extensionMethod;
+                                                  ^^^^^^^^^^^^^^^" in self::Extension|get#extensionMethod(self::nullableClass);
+  core::int localExtensionFunctionTypeImplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:107:61: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localExtensionFunctionTypeImplicitCall = nullableClass();
+                                                            ^" in self::Extension|call(self::nullableClass);
+  core::int localExtensionFunctionTypeExplicitCall = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:108:62: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?. instead.
+  var localExtensionFunctionTypeExplicitCall = nullableClass.call();
+                                                             ^^^^" in self::Extension|call(self::nullableClass);
+  () → core::int localExtensionFunctionTypeTearOff = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:109:57: Error: Property 'call' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try accessing using ?. instead.
+  var localExtensionFunctionTypeTearOff = nullableClass.call;
+                                                        ^^^^" in self::Extension|get#call(self::nullableClass);
+  dynamic localExtensionFunctionGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:110:52: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+  var localExtensionFunctionGetter = nullableClass.extensionFunctionGetter();
+                                                   ^" in self::Extension|get#extensionFunctionGetter(self::nullableClass)();
+  void localExtensionFunctionTypeGetter = invalid-expression "pkg/front_end/testcases/nnbd/potentially_nullable_access.dart:112:21: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/potentially_nullable_access.dart'.
+Try calling using ?.call instead.
+      nullableClass.extensionFunctionTypeGetter();
+                    ^" in self::Extension|get#extensionFunctionTypeGetter(self::nullableClass)(){() → void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.modular.expect
new file mode 100644
index 0000000..42b09ab8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.modular.expect
@@ -0,0 +1,334 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:25:8: Warning: Operand of null-aware operation '??=' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     map[this] ??= this;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:26:8: Warning: Operand of null-aware operation '??=' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     map[self] ??= self;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:42:12: Warning: Operand of null-aware operation '??=' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     v = map[this] ??= this;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:43:12: Warning: Operand of null-aware operation '??=' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     v = map[self] ??= self;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:58:6: Warning: Operand of null-aware operation '??=' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     i[this] ??= this;
+//      ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:59:6: Warning: Operand of null-aware operation '??=' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     i[self] ??= self;
+//      ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:75:10: Warning: Operand of null-aware operation '??=' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     v = i[this] ??= this;
+//          ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:76:10: Warning: Operand of null-aware operation '??=' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     v = i[self] ??= self;
+//          ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:91:17: Warning: Operand of null-aware operation '??=' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     Extension(i)[this] ??= this;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:92:17: Warning: Operand of null-aware operation '??=' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     Extension(i)[self] ??= self;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:108:21: Warning: Operand of null-aware operation '??=' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     v = Extension(i)[this] ??= this;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:109:21: Warning: Operand of null-aware operation '??=' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     v = Extension(i)[self] ??= self;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:126:10: Warning: Operand of null-aware operation '??=' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     super[this] ??= this;
+//          ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:127:10: Warning: Operand of null-aware operation '??=' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     super[self] ??= self;
+//          ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:143:14: Warning: Operand of null-aware operation '??=' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     v = super[this] ??= this;
+//              ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:144:14: Warning: Operand of null-aware operation '??=' has type 'Class' which excludes null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     v = super[self] ??= self;
+//              ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:168:9: Warning: Operand of null-aware operation '??=' has type 'Class2' which excludes null.
+//  - 'Class2' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     this[this] ??= this;
+//         ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:169:9: Warning: Operand of null-aware operation '??=' has type 'Class2' which excludes null.
+//  - 'Class2' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     self[self] ??= self;
+//         ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:185:13: Warning: Operand of null-aware operation '??=' has type 'Class2' which excludes null.
+//  - 'Class2' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     v = this[this] ??= this;
+//             ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:186:13: Warning: Operand of null-aware operation '??=' has type 'Class2' which excludes null.
+//  - 'Class2' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     v = self[self] ??= self;
+//             ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:201:21: Warning: Operand of null-aware operation '??=' has type 'Class2' which excludes null.
+//  - 'Class2' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     Extension2(this)[this] ??= this;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:202:21: Warning: Operand of null-aware operation '??=' has type 'Class2' which excludes null.
+//  - 'Class2' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     Extension2(self)[self] ??= self;
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:218:25: Warning: Operand of null-aware operation '??=' has type 'Class2' which excludes null.
+//  - 'Class2' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     v = Extension2(this)[this] ??= this;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd/pure_index_expressions.dart:219:25: Warning: Operand of null-aware operation '??=' has type 'Class2' which excludes null.
+//  - 'Class2' is from 'pkg/front_end/testcases/nnbd/pure_index_expressions.dart'.
+//     v = Extension2(self)[self] ??= self;
+//                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Map<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Map<self::Map::K%, self::Map::V%>
+    : super core::Object::•()
+    ;
+  abstract operator [](covariant-by-class self::Map::K% index) → self::Map::V%;
+  abstract operator []=(covariant-by-class self::Map::K% index, covariant-by-class self::Map::V% value) → void;
+}
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  operator [](self::Class cls) → self::Class
+    return new self::Class::•();
+  operator []=(self::Class cls, self::Class value) → void {}
+  operator +(self::Class cls) → self::Class
+    return cls;
+  method indexGetSetForEffect(self::Map<self::Class, self::Class> map) → void {
+    late final self::Class self;
+    if(self::b)
+      self = this;
+    let final self::Map<self::Class, self::Class> #t1 = map in #t1.{self::Map::[]}(this){(self::Class) → self::Class} == null ?{self::Class} #t1.{self::Map::[]=}(this, this){(self::Class, self::Class) → void} : null;
+    let final self::Map<self::Class, self::Class> #t2 = map in let final self::Class #t3 = self in #t2.{self::Map::[]}(#t3){(self::Class) → self::Class} == null ?{self::Class} #t2.{self::Map::[]=}(#t3, self){(self::Class, self::Class) → void} : null;
+    map.{self::Map::[]=}(this, this){(self::Class, self::Class) → void};
+    map.{self::Map::[]=}(self, self){(self::Class, self::Class) → void};
+    map.{self::Map::[]}(this){(self::Class) → self::Class};
+    map.{self::Map::[]}(self){(self::Class) → self::Class};
+    let final self::Map<self::Class, self::Class> #t4 = map in #t4.{self::Map::[]=}(this, #t4.{self::Map::[]}(this){(self::Class) → self::Class}.{self::Class::+}(this){(self::Class) → self::Class}){(self::Class, self::Class) → void};
+    let final self::Map<self::Class, self::Class> #t5 = map in let final self::Class #t6 = self in #t5.{self::Map::[]=}(#t6, #t5.{self::Map::[]}(#t6){(self::Class) → self::Class}.{self::Class::+}(self){(self::Class) → self::Class}){(self::Class, self::Class) → void};
+  }
+  method indexGetSetForValue(self::Map<self::Class, self::Class> map) → void {
+    late final self::Class self;
+    if(self::b)
+      self = this;
+    dynamic v;
+    v = let final self::Map<self::Class, self::Class> #t7 = map in let final self::Class #t8 = #t7.{self::Map::[]}(this){(self::Class) → self::Class} in #t8 == null ?{self::Class} let final void #t9 = #t7.{self::Map::[]=}(this, this){(self::Class, self::Class) → void} in this : #t8;
+    v = let final self::Map<self::Class, self::Class> #t10 = map in let final self::Class #t11 = self in let final self::Class #t12 = #t10.{self::Map::[]}(#t11){(self::Class) → self::Class} in #t12 == null ?{self::Class} let final self::Class #t13 = self in let final void #t14 = #t10.{self::Map::[]=}(#t11, #t13){(self::Class, self::Class) → void} in #t13 : #t12;
+    v = let final self::Map<self::Class, self::Class> #t15 = map in let final void #t16 = #t15.{self::Map::[]=}(this, this){(self::Class, self::Class) → void} in this;
+    v = let final self::Map<self::Class, self::Class> #t17 = map in let final self::Class #t18 = self in let final self::Class #t19 = self in let final void #t20 = #t17.{self::Map::[]=}(#t18, #t19){(self::Class, self::Class) → void} in #t19;
+    v = map.{self::Map::[]}(this){(self::Class) → self::Class};
+    v = map.{self::Map::[]}(self){(self::Class) → self::Class};
+    v = let final self::Map<self::Class, self::Class> #t21 = map in let final self::Class #t22 = #t21.{self::Map::[]}(this){(self::Class) → self::Class}.{self::Class::+}(this){(self::Class) → self::Class} in let final void #t23 = #t21.{self::Map::[]=}(this, #t22){(self::Class, self::Class) → void} in #t22;
+    v = let final self::Map<self::Class, self::Class> #t24 = map in let final self::Class #t25 = self in let final self::Class #t26 = #t24.{self::Map::[]}(#t25){(self::Class) → self::Class}.{self::Class::+}(self){(self::Class) → self::Class} in let final void #t27 = #t24.{self::Map::[]=}(#t25, #t26){(self::Class, self::Class) → void} in #t26;
+  }
+  method implicitExtensionGetSetForEffect(core::int i) → void {
+    late final self::Class self;
+    if(self::b)
+      self = this;
+    let final core::int #t28 = i in self::Extension|[](#t28, this) == null ?{self::Class} self::Extension|[]=(#t28, this, this) : null;
+    let final core::int #t29 = i in let final self::Class #t30 = self in self::Extension|[](#t29, #t30) == null ?{self::Class} self::Extension|[]=(#t29, #t30, self) : null;
+    self::Extension|[]=(i, this, this);
+    self::Extension|[]=(i, self, self);
+    self::Extension|[](i, this);
+    self::Extension|[](i, self);
+    let final core::int #t31 = i in self::Extension|[]=(#t31, this, self::Extension|[](#t31, this).{self::Class::+}(this){(self::Class) → self::Class});
+    let final core::int #t32 = i in let final self::Class #t33 = self in self::Extension|[]=(#t32, #t33, self::Extension|[](#t32, #t33).{self::Class::+}(self){(self::Class) → self::Class});
+  }
+  method implicitExtensionGetSetForValue(core::int i) → void {
+    late final self::Class self;
+    if(self::b)
+      self = this;
+    dynamic v;
+    v = let final core::int #t34 = i in let final self::Class #t35 = self::Extension|[](#t34, this) in #t35 == null ?{self::Class} let final void #t36 = self::Extension|[]=(#t34, this, this) in this : #t35;
+    v = let final core::int #t37 = i in let final self::Class #t38 = self in let final self::Class #t39 = self::Extension|[](#t37, #t38) in #t39 == null ?{self::Class} let final self::Class #t40 = self in let final void #t41 = self::Extension|[]=(#t37, #t38, #t40) in #t40 : #t39;
+    v = let final core::int #t42 = i in let final void #t43 = self::Extension|[]=(#t42, this, this) in this;
+    v = let final core::int #t44 = i in let final self::Class #t45 = self in let final self::Class #t46 = self in let final void #t47 = self::Extension|[]=(#t44, #t45, #t46) in #t46;
+    v = self::Extension|[](i, this);
+    v = self::Extension|[](i, self);
+    v = let final core::int #t48 = i in let final self::Class #t49 = self::Extension|[](#t48, this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t50 = self::Extension|[]=(#t48, this, #t49) in #t49;
+    v = let final core::int #t51 = i in let final self::Class #t52 = self in let final self::Class #t53 = self::Extension|[](#t51, #t52).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t54 = self::Extension|[]=(#t51, #t52, #t53) in #t53;
+  }
+  method explicitExtensionGetSetForEffect(core::int i) → void {
+    late final self::Class self;
+    if(self::b)
+      self = this;
+    let final core::int #t55 = i in self::Extension|[](#t55, this) == null ?{self::Class} self::Extension|[]=(#t55, this, this) : null;
+    let final core::int #t56 = i in let final self::Class #t57 = self in self::Extension|[](#t56, #t57) == null ?{self::Class} self::Extension|[]=(#t56, #t57, self) : null;
+    self::Extension|[]=(i, this, this);
+    self::Extension|[]=(i, self, self);
+    self::Extension|[](i, this);
+    self::Extension|[](i, self);
+    let final core::int #t58 = i in self::Extension|[]=(#t58, this, self::Extension|[](#t58, this).{self::Class::+}(this){(self::Class) → self::Class});
+    let final core::int #t59 = i in let final self::Class #t60 = self in self::Extension|[]=(#t59, #t60, self::Extension|[](#t59, #t60).{self::Class::+}(self){(self::Class) → self::Class});
+  }
+  method explicitExtensionGetSetForValue(core::int i) → void {
+    late final self::Class self;
+    if(self::b)
+      self = this;
+    dynamic v;
+    v = let final core::int #t61 = i in let final self::Class #t62 = self::Extension|[](#t61, this) in #t62 == null ?{self::Class} let final void #t63 = self::Extension|[]=(#t61, this, this) in this : #t62;
+    v = let final core::int #t64 = i in let final self::Class #t65 = self in let final self::Class #t66 = self::Extension|[](#t64, #t65) in #t66 == null ?{self::Class} let final self::Class #t67 = self in let final void #t68 = self::Extension|[]=(#t64, #t65, #t67) in #t67 : #t66;
+    v = let final core::int #t69 = i in let final void #t70 = self::Extension|[]=(#t69, this, this) in this;
+    v = let final core::int #t71 = i in let final self::Class #t72 = self in let final void #t73 = self::Extension|[]=(#t71, self, #t72) in #t72;
+    v = self::Extension|[](i, this);
+    v = self::Extension|[](i, self);
+    v = let final core::int #t74 = i in let final self::Class #t75 = self::Extension|[](#t74, this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t76 = self::Extension|[]=(#t74, this, #t75) in #t75;
+    v = let final core::int #t77 = i in let final self::Class #t78 = self in let final self::Class #t79 = self::Extension|[](#t77, #t78).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t80 = self::Extension|[]=(#t77, #t78, #t79) in #t79;
+  }
+}
+class Subclass extends self::Class {
+  synthetic constructor •() → self::Subclass
+    : super self::Class::•()
+    ;
+  method superIndexGetSetForEffect() → void {
+    late final self::Class self;
+    if(self::b)
+      self = this;
+    super.{self::Class::[]}(this) == null ?{self::Class} super.{self::Class::[]=}(this, this) : null;
+    let final self::Class #t81 = self in super.{self::Class::[]}(#t81) == null ?{self::Class} super.{self::Class::[]=}(#t81, self) : null;
+    super.{self::Class::[]=}(this, this);
+    super.{self::Class::[]=}(self, self);
+    super.{self::Class::[]}(this);
+    super.{self::Class::[]}(self);
+    super.{self::Class::[]=}(this, super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class) → self::Class});
+    let final self::Class #t82 = self in super.{self::Class::[]=}(#t82, super.{self::Class::[]}(#t82).{self::Class::+}(self){(self::Class) → self::Class});
+  }
+  method superIndexGetSetForValue() → void {
+    late final self::Class self;
+    if(self::b)
+      self = this;
+    dynamic v;
+    v = let final self::Class #t83 = super.{self::Class::[]}(this) in #t83 == null ?{self::Class} let final void #t84 = super.{self::Class::[]=}(this, this) in this : #t83;
+    v = let final self::Class #t85 = self in let final self::Class #t86 = super.{self::Class::[]}(#t85) in #t86 == null ?{self::Class} let final self::Class #t87 = self in let final void #t88 = super.{self::Class::[]=}(#t85, #t87) in #t87 : #t86;
+    v = let final void #t89 = super.{self::Class::[]=}(this, this) in this;
+    v = let final self::Class #t90 = self in let final self::Class #t91 = self in let final void #t92 = super.{self::Class::[]=}(#t90, #t91) in #t91;
+    v = super.{self::Class::[]}(this);
+    v = super.{self::Class::[]}(self);
+    v = let final self::Class #t93 = super.{self::Class::[]}(this).{self::Class::+}(this){(self::Class) → self::Class} in let final void #t94 = super.{self::Class::[]=}(this, #t93) in #t93;
+    v = let final self::Class #t95 = self in let final self::Class #t96 = super.{self::Class::[]}(#t95).{self::Class::+}(self){(self::Class) → self::Class} in let final void #t97 = super.{self::Class::[]=}(#t95, #t96) in #t96;
+  }
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+  operator +(self::Class2 cls) → self::Class2
+    return cls;
+  method implicitExtensionGetSetForEffect() → void {
+    late final self::Class2 self;
+    if(self::b)
+      self = this;
+    self::Extension2|[](this, this) == null ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
+    let final self::Class2 #t98 = self in let final self::Class2 #t99 = self in self::Extension2|[](#t98, #t99) == null ?{self::Class2} self::Extension2|[]=(#t98, #t99, self) : null;
+    self::Extension2|[]=(this, this, this);
+    self::Extension2|[]=(self, self, self);
+    self::Extension2|[](this, this);
+    self::Extension2|[](self, self);
+    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2});
+    let final self::Class2 #t100 = self in let final self::Class2 #t101 = self in self::Extension2|[]=(#t100, #t101, self::Extension2|[](#t100, #t101).{self::Class2::+}(self){(self::Class2) → self::Class2});
+  }
+  method implicitExtensionGetSetForValue() → void {
+    late final self::Class2 self;
+    if(self::b)
+      self = this;
+    dynamic v;
+    v = let final self::Class2 #t102 = self::Extension2|[](this, this) in #t102 == null ?{self::Class2} let final void #t103 = self::Extension2|[]=(this, this, this) in this : #t102;
+    v = let final self::Class2 #t104 = self in let final self::Class2 #t105 = self in let final self::Class2 #t106 = self::Extension2|[](#t104, #t105) in #t106 == null ?{self::Class2} let final self::Class2 #t107 = self in let final void #t108 = self::Extension2|[]=(#t104, #t105, #t107) in #t107 : #t106;
+    v = let final void #t109 = self::Extension2|[]=(this, this, this) in this;
+    v = let final self::Class2 #t110 = self in let final self::Class2 #t111 = self in let final self::Class2 #t112 = self in let final void #t113 = self::Extension2|[]=(#t110, #t111, #t112) in #t112;
+    v = self::Extension2|[](this, this);
+    v = self::Extension2|[](self, self);
+    v = let final self::Class2 #t114 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2} in let final void #t115 = self::Extension2|[]=(this, this, #t114) in #t114;
+    v = let final self::Class2 #t116 = self in let final self::Class2 #t117 = self in let final self::Class2 #t118 = self::Extension2|[](#t116, #t117).{self::Class2::+}(self){(self::Class2) → self::Class2} in let final void #t119 = self::Extension2|[]=(#t116, #t117, #t118) in #t118;
+  }
+  method explicitExtensionGetSetForEffect() → void {
+    late final self::Class2 self;
+    if(self::b)
+      self = this;
+    self::Extension2|[](this, this) == null ?{self::Class2} self::Extension2|[]=(this, this, this) : null;
+    let final self::Class2 #t120 = self in let final self::Class2 #t121 = self in self::Extension2|[](#t120, #t121) == null ?{self::Class2} self::Extension2|[]=(#t120, #t121, self) : null;
+    self::Extension2|[]=(this, this, this);
+    self::Extension2|[]=(self, self, self);
+    self::Extension2|[](this, this);
+    self::Extension2|[](self, self);
+    self::Extension2|[]=(this, this, self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2});
+    let final self::Class2 #t122 = self in let final self::Class2 #t123 = self in self::Extension2|[]=(#t122, #t123, self::Extension2|[](#t122, #t123).{self::Class2::+}(self){(self::Class2) → self::Class2});
+  }
+  method explicitExtensionGetSetForValue() → void {
+    late final self::Class2 self;
+    if(self::b)
+      self = this;
+    dynamic v;
+    v = let final self::Class2 #t124 = self::Extension2|[](this, this) in #t124 == null ?{self::Class2} let final void #t125 = self::Extension2|[]=(this, this, this) in this : #t124;
+    v = let final self::Class2 #t126 = self in let final self::Class2 #t127 = self in let final self::Class2 #t128 = self::Extension2|[](#t126, #t127) in #t128 == null ?{self::Class2} let final self::Class2 #t129 = self in let final void #t130 = self::Extension2|[]=(#t126, #t127, #t129) in #t129 : #t128;
+    v = let final void #t131 = self::Extension2|[]=(this, this, this) in this;
+    v = let final self::Class2 #t132 = self in let final self::Class2 #t133 = self in let final void #t134 = self::Extension2|[]=(#t132, self, #t133) in #t133;
+    v = self::Extension2|[](this, this);
+    v = self::Extension2|[](self, self);
+    v = let final self::Class2 #t135 = self::Extension2|[](this, this).{self::Class2::+}(this){(self::Class2) → self::Class2} in let final void #t136 = self::Extension2|[]=(this, this, #t135) in #t135;
+    v = let final self::Class2 #t137 = self in let final self::Class2 #t138 = self in let final self::Class2 #t139 = self::Extension2|[](#t137, #t138).{self::Class2::+}(self){(self::Class2) → self::Class2} in let final void #t140 = self::Extension2|[]=(#t137, #t138, #t139) in #t139;
+  }
+}
+extension Extension on core::int {
+  operator [] = self::Extension|[];
+  operator []= = self::Extension|[]=;
+}
+extension Extension2 on self::Class2 {
+  operator [] = self::Extension2|[];
+  operator []= = self::Extension2|[]=;
+}
+static field core::bool b = true;
+static method Extension|[](lowered final core::int #this, self::Class cls) → self::Class
+  return new self::Class::•();
+static method Extension|[]=(lowered final core::int #this, self::Class cls, self::Class value) → void {}
+static method Extension2|[](lowered final self::Class2 #this, self::Class2 cls) → self::Class2
+  return new self::Class2::•();
+static method Extension2|[]=(lowered final self::Class2 #this, self::Class2 cls, self::Class2 value) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.modular.expect
new file mode 100644
index 0000000..1062bac
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::A::T? _current = null;
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  get current() → self::A::T%
+    return this.{self::A::_current}{self::A::T?} as{ForNonNullableByDefault} self::A::T%;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/required.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/required.dart.weak.modular.expect
new file mode 100644
index 0000000..ccce283
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/required.dart.weak.modular.expect
@@ -0,0 +1,105 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/required.dart:29:8: Error: The parameter 'x' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   foo({x}) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/required.dart:51:18: Error: Non-optional parameters can't have a default value.
+// Try removing the default value or making the parameter optional.
+//   Function(int a = 42, [int b]) f2;
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/required.dart:52:17: Error: Non-optional parameters can't have a default value.
+// Try removing the default value or making the parameter optional.
+//   void g2(int a = 42, [int b]) {}
+//                 ^
+//
+// pkg/front_end/testcases/nnbd/required.dart:53:15: Error: Non-optional parameters can't have a default value.
+// Try removing the default value or making the parameter optional.
+//   f2 = (int a = 42, [int b]) {};
+//               ^
+//
+// pkg/front_end/testcases/nnbd/required.dart:48:15: Error: The parameter 'a' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void g({int a, required int b = 42}) {}
+//               ^
+//
+// pkg/front_end/testcases/nnbd/required.dart:48:31: Error: Named parameter 'b' is required and can't have a default value.
+//   void g({int a, required int b = 42}) {}
+//                               ^
+//
+// pkg/front_end/testcases/nnbd/required.dart:49:13: Error: The parameter 'a' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   f = ({int a, required int b = 42}) {};
+//             ^
+//
+// pkg/front_end/testcases/nnbd/required.dart:49:29: Error: Named parameter 'b' is required and can't have a default value.
+//   f = ({int a, required int b = 42}) {};
+//                             ^
+//
+// pkg/front_end/testcases/nnbd/required.dart:52:28: Error: The parameter 'b' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void g2(int a = 42, [int b]) {}
+//                            ^
+//
+// pkg/front_end/testcases/nnbd/required.dart:53:26: Error: The parameter 'b' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   f2 = (int a = 42, [int b]) {};
+//                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Typedef1 = ({a: core::int, required b: core::int}) → dynamic;
+typedef Typedef2 = ({a: core::int, required b: core::int}) → dynamic;
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method method({core::int a = #C1, required core::int b = #C2, required final core::int c = #C2, required covariant-by-declaration final core::int d = #C2}) → dynamic {}
+}
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  abstract method foo({core::int x = #C2}) → dynamic;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  method foo({core::int x = #C2}) → dynamic {}
+}
+class C extends self::A {
+  synthetic constructor •() → self::C
+    : super self::A::•()
+    ;
+  method foo({core::int x = #C1}) → dynamic {}
+}
+static field ({a: core::int, required b: core::int}) → dynamic field = ({core::int a = #C1, required core::int b = #C2}) → Null {};
+static method method({core::int a = #C1, required core::int b = #C2, required final core::int c = #C2}) → dynamic {}
+static method ok() → dynamic {
+  ({a: core::int, required b: core::int}) → dynamic f;
+  function g({core::int a = #C1, required core::int b = #C2}) → void {}
+  f = ({core::int a = #C1, required core::int b = #C2}) → Null {};
+  (core::int, [core::int]) → dynamic f2;
+  function g2(core::int a, [core::int b = #C1]) → void {}
+  f2 = (core::int a, [core::int b = #C1]) → Null {};
+}
+static method error() → dynamic {
+  ({a: core::int, required b: core::int}) → dynamic f;
+  function g({core::int a = #C2, required core::int b = #C1}) → void {}
+  f = ({core::int a = #C2, required core::int b = #C1}) → Null {};
+  (core::int, [core::int]) → dynamic f2;
+  function g2(core::int a = #C1, [core::int b = #C2]) → void {}
+  f2 = (core::int a = #C1, [core::int b = #C2]) → Null {};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 42
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/required_named_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/required_named_parameter.dart.weak.modular.expect
new file mode 100644
index 0000000..0f14fea
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/required_named_parameter.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/required_named_parameter.dart:6:19: Error: Named parameter 'parameter' is required and can't have a default value.
+// foo({required int parameter = 42}) {}
+//                   ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/required_named_parameter.dart:7:11: Error: The parameter 'parameter' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// foo2({int parameter}) {}
+//           ^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd/required_named_parameter.dart:8:11: Error: The parameter 'parameter' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// foo3([int parameter]) {}
+//           ^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method foo({required core::int parameter = #C1}) → dynamic {}
+static method foo2({core::int parameter = #C2}) → dynamic {}
+static method foo3([core::int parameter = #C2]) → dynamic {}
+static method bar({required core::int parameter = #C2}) → dynamic {}
+static method bar2({core::int parameter = #C1}) → dynamic {}
+static method bar3([core::int parameter = #C1]) → dynamic {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 42
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/return_async.dart.weak.modular.expect
new file mode 100644
index 0000000..ce2f50d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method throwSync() → asy::Future<void> {
+  throw "";
+}
+static method allYield() → asy::Future<void> async {
+  await 0;
+  await self::allYield2();
+}
+static method allYield2() → asy::Future<void> async {
+  await 0;
+  await self::allYield3();
+}
+static method allYield3() → asy::Future<void> async {
+  await 0;
+  self::throwSync();
+}
+static method customErrorZone() → asy::Future<void> async {
+  final asy::Completer<void> completer = asy::Completer::•<void>();
+  asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> async {
+    await self::allYield();
+    completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
+  }, (core::Object e, core::StackTrace s) → void {
+    completer.{asy::Completer::completeError}(e, s){(core::Object, [core::StackTrace?]) → void};
+  });
+  return completer.{asy::Completer::future}{asy::Future<void>};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/return_late.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/return_late.dart.weak.modular.expect
new file mode 100644
index 0000000..e58813e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/return_late.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class<E extends core::Object? = dynamic> extends core::Object {
+  final field self::Class::E% field;
+  constructor •(self::Class::E% field) → self::Class<self::Class::E%>
+    : self::Class::field = field, super core::Object::•()
+    ;
+  method returnTypeVariable() → self::Class::E% {
+    late self::Class::E% result = this.{self::Class::field}{self::Class::E%};
+    return result;
+  }
+}
+static method returnNonNullable(core::int value) → core::int {
+  late core::int result = value;
+  return result;
+}
+static method returnNullable(core::int? value) → core::int? {
+  late core::int? result = value;
+  return result;
+}
+static method main() → dynamic {
+  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}(){() → core::int});
+  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}(){() → core::int?});
+  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}(){() → core::int?});
+  self::expect(42, self::returnNonNullable(42));
+  self::expect(87, self::returnNullable(87));
+  self::expect(null, self::returnNullable(null));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.modular.expect
new file mode 100644
index 0000000..8c3d6c3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.modular.expect
@@ -0,0 +1,244 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+// String returnImplicit() /*error*/ {
+//        ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+//   return null; // error
+//          ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+//     return null; // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+// String returnMixed(bool b) /*error*/ {
+//        ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+// FutureOr<int> returnAsync3() async {} // error
+//               ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+//  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+// Enum caseReturn2(Enum e) /* error */ {
+//      ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   String returnImplicit() /* error */ {
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+//     return null; // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+//       return null; // error
+//              ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   String returnMixed(bool b) /* error */ {
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   FutureOr<int> returnAsync3() async {} // error
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+//  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+//   Enum caseReturn2(Enum e) /* error */ {
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+import "dart:_internal" as _in;
+
+import "dart:async";
+
+class Enum extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Enum> values = #C7;
+  static const field self::Enum a = #C3;
+  static const field self::Enum b = #C6;
+  const constructor •(core::int index, core::String name) → self::Enum
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum.${this.{core::_Enum::_name}{core::String}}";
+}
+static method returnImplicit() → core::String {
+  core::print("foo");
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+String returnImplicit() /*error*/ {
+       ^" in null;
+}
+static method returnExplicit() → core::String {
+  core::print("foo");
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+  return null; // error
+         ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+}
+static method returnMixed(core::bool b) → core::String {
+  if(b) {
+    core::print("foo");
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+    return null; // error
+           ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+  }
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+String returnMixed(bool b) /*error*/ {
+       ^" in null;
+}
+static method returnAsync1() → asy::Future<dynamic> async {}
+static method returnAsync2() → FutureOr<dynamic> async {}
+static method returnAsync3() → FutureOr<core::int> async {
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+FutureOr<int> returnAsync3() async {} // error
+              ^" in null;
+}
+static method returnAsync4() → FutureOr<core::int?> async {}
+static method returnAsync5() → dynamic async {}
+static method returnAsync6() → asy::Future<core::int?> async {
+  return null;
+}
+static method returnAsync7() → asy::Future<core::int?> async {}
+static method yieldSync() → core::Iterable<dynamic> sync* {}
+static method yieldAsync() → asy::Stream<dynamic> async* {}
+static method caseReturn1(self::Enum e) → self::Enum {
+  switch(e) {
+    #L1:
+    case #C3:
+      {
+        return e;
+      }
+    #L2:
+    case #C6:
+      {
+        return e;
+      }
+    #L3:
+    default:
+      throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type.");
+  }
+}
+static method caseReturn2(self::Enum e) → self::Enum {
+  switch(e) {
+    #L4:
+    case #C3:
+      {
+        return e;
+      }
+    #L5:
+    default:
+      {}
+  }
+  return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+ - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+Enum caseReturn2(Enum e) /* error */ {
+     ^" in null;
+}
+static method localFunctions() → dynamic {
+  function returnImplicit() → core::String {
+    core::print("foo");
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  String returnImplicit() /* error */ {
+  ^" in null;
+  }
+  function returnExplicit() → core::String {
+    core::print("foo");
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+    return null; // error
+           ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+  }
+  function returnMixed(core::bool b) → core::String {
+    if(b) {
+      core::print("foo");
+      return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+      return null; // error
+             ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  String returnMixed(bool b) /* error */ {
+  ^" in null;
+  }
+  function returnAsync1() → asy::Future<dynamic> async {}
+  function returnAsync2() → FutureOr<dynamic> async {}
+  function returnAsync3() → FutureOr<core::int> async {
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  FutureOr<int> returnAsync3() async {} // error
+  ^" in null;
+  }
+  function returnAsync4() → FutureOr<core::int?> async {}
+  function returnAsync5() → asy::Future<Null> async {}
+  function returnAsync6() → asy::Future<core::int?> async {
+    return null;
+  }
+  function returnAsync7() → asy::Future<core::int?> async {}
+  function yieldSync() → core::Iterable<dynamic> sync* {}
+  function yieldAsync() → asy::Stream<dynamic> async* {}
+  function caseReturn1(self::Enum e) → self::Enum {
+    switch(e) {
+      #L6:
+      case #C3:
+        {
+          return e;
+        }
+      #L7:
+      case #C6:
+        {
+          return e;
+        }
+      #L8:
+      default:
+        throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type.");
+    }
+  }
+  function caseReturn2(self::Enum e) → self::Enum {
+    switch(e) {
+      #L9:
+      case #C3:
+        {
+          return e;
+        }
+      #L10:
+      default:
+        {}
+    }
+    return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+ - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+  Enum caseReturn2(Enum e) /* error */ {
+  ^" in null;
+  }
+  core::bool b = false;
+  core::int? local1 = (() → core::int? {
+    if(b)
+      return 0;
+  })(){() → core::int?};
+  core::int? local2 = (() → core::int? {
+    if(b)
+      return null;
+    if(!b)
+      return 0;
+  })(){() → core::int?};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::Enum {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "b"
+  #C6 = self::Enum {index:#C4, _name:#C5}
+  #C7 = <self::Enum*>[#C3, #C6]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///return_null.dart:
+- Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.modular.expect
new file mode 100644
index 0000000..a02071a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.weak.modular.expect
@@ -0,0 +1,107 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/shorting_null_check.dart:12:24: Warning: Operand of null-aware operation '!' has type 'int' which excludes null.
+// int? test1(A? a) => a?.zero!;
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/shorting_null_check.dart:14:25: Warning: Operand of null-aware operation '!' has type 'int' which excludes null.
+// bool? test3(A? a) => a?.zero!.isEven;
+//                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int zero;
+  field core::int? zeroOrNull;
+  constructor •(core::int zero, [core::int? zeroOrNull = #C1]) → self::A
+    : self::A::zero = zero, self::A::zeroOrNull = zeroOrNull, super core::Object::•()
+    ;
+}
+class Foo extends core::Object {
+  field self::Bar? bar;
+  constructor •(self::Bar? bar) → self::Foo
+    : self::Foo::bar = bar, super core::Object::•()
+    ;
+  operator [](core::int? index) → self::Bar?
+    return !(index == null) ?{self::Bar?} new self::Bar::•(index{core::int}) : null;
+}
+class Bar extends core::Object {
+  field core::int baz;
+  constructor •(core::int baz) → self::Bar
+    : self::Bar::baz = baz, super core::Object::•()
+    ;
+  operator [](core::int index) → core::int
+    return index;
+  operator ==(core::Object other) → core::bool
+    return other is{ForNonNullableByDefault} self::Bar && this.{self::Bar::baz}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Bar}.{self::Bar::baz}{core::int};
+}
+static method test1(self::A? a) → core::int?
+  return let final self::A? #t1 = a in #t1 == null ?{core::int?} null : #t1{self::A}.{self::A::zero}{core::int}!;
+static method test2(self::A? a) → core::int?
+  return let final self::A? #t2 = a in #t2 == null ?{core::int?} null : #t2{self::A}.{self::A::zeroOrNull}{core::int?}!;
+static method test3(self::A? a) → core::bool?
+  return let final self::A? #t3 = a in #t3 == null ?{core::bool?} null : #t3{self::A}.{self::A::zero}{core::int}!.{core::int::isEven}{core::bool};
+static method test4(self::A? a) → core::bool?
+  return let final self::A? #t4 = a in #t4 == null ?{core::bool?} null : #t4{self::A}.{self::A::zeroOrNull}{core::int?}!.{core::int::isEven}{core::bool};
+static method test5(self::Foo? foo) → self::Bar?
+  return let final self::Foo? #t5 = foo in #t5 == null ?{self::Bar?} null : #t5{self::Foo}.{self::Foo::bar}{self::Bar?}!;
+static method test6(self::Foo? foo) → core::int?
+  return let final self::Foo? #t6 = foo in #t6 == null ?{core::int?} null : #t6{self::Foo}.{self::Foo::bar}{self::Bar?}!.{self::Bar::baz}{core::int};
+static method test7(self::Foo? foo, core::int baz) → core::int?
+  return let final self::Foo? #t7 = foo in #t7 == null ?{core::int?} null : #t7{self::Foo}.{self::Foo::bar}{self::Bar?}!.{self::Bar::[]}(baz){(core::int) → core::int};
+static method test8(self::Foo? foo, core::int? bar) → self::Bar?
+  return let final self::Foo? #t8 = foo in #t8 == null ?{self::Bar?} null : #t8{self::Foo}.{self::Foo::[]}(bar){(core::int?) → self::Bar?}!;
+static method test9(self::Foo? foo, core::int? bar) → core::int?
+  return let final self::Foo? #t9 = foo in #t9 == null ?{core::int?} null : #t9{self::Foo}.{self::Foo::[]}(bar){(core::int?) → self::Bar?}!.{self::Bar::baz}{core::int};
+static method test10(self::Foo? foo, core::int? bar, core::int baz) → dynamic
+  return let final self::Foo? #t10 = foo in #t10 == null ?{core::int?} null : #t10{self::Foo}.{self::Foo::[]}(bar){(core::int?) → self::Bar?}!.{self::Bar::[]}(baz){(core::int) → core::int};
+static method main() → dynamic {
+  self::expect(0, self::test1(new self::A::•(0)));
+  self::expect(null, self::test1(null));
+  self::expect(0, self::test2(new self::A::•(0, 0)));
+  self::expect(null, self::test2(null));
+  self::throws(() → void => self::test2(new self::A::•(0, null)));
+  self::expect(true, self::test3(new self::A::•(0)));
+  self::expect(null, self::test3(null));
+  self::expect(true, self::test4(new self::A::•(0, 0)));
+  self::expect(null, self::test4(null));
+  self::throws(() → void => self::test4(new self::A::•(0, null)));
+  self::expect(new self::Bar::•(0), self::test5(new self::Foo::•(new self::Bar::•(0))));
+  self::expect(null, self::test5(null));
+  self::throws(() → void => self::test5(new self::Foo::•(null)));
+  self::expect(0, self::test6(new self::Foo::•(new self::Bar::•(0))));
+  self::expect(null, self::test6(null));
+  self::throws(() → void => self::test6(new self::Foo::•(null)));
+  self::expect(42, self::test7(new self::Foo::•(new self::Bar::•(0)), 42));
+  self::expect(null, self::test7(null, 42));
+  self::throws(() → void => self::test7(new self::Foo::•(null), 42));
+  self::expect(new self::Bar::•(42), self::test8(new self::Foo::•(new self::Bar::•(0)), 42));
+  self::expect(null, self::test8(null, 42));
+  self::throws(() → void => self::test8(new self::Foo::•(new self::Bar::•(0)), null));
+  self::expect(42, self::test9(new self::Foo::•(new self::Bar::•(0)), 42));
+  self::expect(null, self::test9(null, 42));
+  self::throws(() → void => self::test9(new self::Foo::•(new self::Bar::•(0)), null));
+  self::expect(87, self::test10(new self::Foo::•(new self::Bar::•(0)), 42, 87));
+  self::expect(null, self::test10(null, 42, 87));
+  self::throws(() → void => self::test10(new self::Foo::•(new self::Bar::•(0)), null, 87));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → void f) → dynamic {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object _) {
+    return;
+  }
+  throw "Missing exception";
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.modular.expect
new file mode 100644
index 0000000..0e34446
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.modular.expect
@@ -0,0 +1,113 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+//   throwsInStrong(() => c?.field + 2); // error
+//                                 ^
+//
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd/shorting_stop.dart'.
+// Try accessing using ?. instead.
+//   throwsInStrong(() => (c?.next).field); // error
+//                                  ^^^^^
+//
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+//   throwsInStrong(() => -c?.field); // error
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+//   throwsInStrong(() => c?.next[0] + 2); // error
+//                                   ^
+//
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+// Try accessing using ?. instead.
+//   throwsInStrong(() => (c?.next[0]).isEven); // error
+//                                     ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+//   throwsInStrong(() => -c?.next[0]); // error
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+// Try accessing using ?. instead.
+//     s.length; // This will be an invalid expression in strong mode.
+//       ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int field = 0;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  get next() → self::Class
+    return this;
+  operator [](core::int key) → core::int
+    return key;
+  operator []=(core::int key, core::int value) → void {}
+}
+static final field core::bool inStrongMode = self::_inStrongMode();
+static method main() → dynamic {
+  self::test(new self::Class::•());
+}
+static method test(self::Class? c) → dynamic {
+  let final self::Class? #t1 = c in #t1 == null ?{core::int?} null : #t1{self::Class}.{self::Class::next}{self::Class}.{self::Class::field}{core::int};
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  throwsInStrong(() => c?.field + 2); // error
+                                ^" in (let final self::Class? #t2 = c in #t2 == null ?{core::int?} null : #t2{self::Class}.{self::Class::field}{core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : let final core::int #t4 = #t3.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t5 = #t3.{self::Class::field} = #t4 in #t4;
+  let final self::Class? #t6 = c in #t6 == null ?{core::int?} null : #t6.{self::Class::field} = #t6.{self::Class::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/shorting_stop.dart'.
+Try accessing using ?. instead.
+  throwsInStrong(() => (c?.next).field); // error
+                                 ^^^^^" in (let final self::Class? #t7 = c in #t7 == null ?{self::Class?} null : #t7{self::Class}.{self::Class::next}{self::Class}).{self::Class::field}{<nullable>}.{core::int});
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  throwsInStrong(() => -c?.field); // error
+                       ^" in (let final self::Class? #t8 = c in #t8 == null ?{core::int?} null : #t8{self::Class}.{self::Class::field}{core::int}).{core::int::unary-}(){() → core::int});
+  let final self::Class? #t9 = c in #t9 == null ?{core::bool?} null : #t9{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}.{core::int::isEven}{core::bool};
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  throwsInStrong(() => c?.next[0] + 2); // error
+                                  ^" in (let final self::Class? #t10 = c in #t10 == null ?{core::int?} null : #t10{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::num::+}(2){(core::num) → core::num});
+  let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : let final self::Class #t12 = #t11{self::Class}.{self::Class::next}{self::Class} in let final core::int #t13 = 0 in let final core::int #t14 = #t12.{self::Class::[]}(#t13){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int} in let final void #t15 = #t12.{self::Class::[]=}(#t13, #t14){(core::int, core::int) → void} in #t14;
+  let final self::Class? #t16 = c in #t16 == null ?{core::int?} null : let final self::Class #t17 = #t16{self::Class}.{self::Class::next}{self::Class} in let final core::int #t18 = 0 in #t17.{self::Class::[]=}(#t18, #t17.{self::Class::[]}(#t18){(core::int) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::int, core::int) → void};
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+Try accessing using ?. instead.
+  throwsInStrong(() => (c?.next[0]).isEven); // error
+                                    ^^^^^^" in (let final self::Class? #t19 = c in #t19 == null ?{core::int?} null : #t19{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::isEven}{<nullable>}.{core::bool});
+  self::throwsInStrong(() → void => invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  throwsInStrong(() => -c?.next[0]); // error
+                       ^" in (let final self::Class? #t20 = c in #t20 == null ?{core::int?} null : #t20{self::Class}.{self::Class::next}{self::Class}.{self::Class::[]}(0){(core::int) → core::int}).{core::int::unary-}(){() → core::int});
+}
+static method _inStrongMode() → core::bool {
+  (core::String?) → Null f = (core::String? s) → Null {
+    invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+Try accessing using ?. instead.
+    s.length; // This will be an invalid expression in strong mode.
+      ^^^^^^" in s.{core::String::length}{<nullable>}.{core::int};
+  };
+  try {
+    f("foo"){(core::String?) → Null};
+  }
+  on core::Object catch(final core::Object e) {
+    return true;
+  }
+  return false;
+}
+static method throwsInStrong(() → void f) → void {
+  if(self::inStrongMode) {
+    try {
+      f(){() → void};
+    }
+    on core::Object catch(final core::Object e) {
+      core::print(e);
+      return;
+    }
+    throw "Expected exception.";
+  }
+  else {
+    f(){() → void};
+  }
+}
diff --git a/pkg/front_end/testcases/nnbd/simple_never.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/simple_never.dart.weak.modular.expect
new file mode 100644
index 0000000..7047a3b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/simple_never.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method foo() → Never {
+  while (true) {
+  }
+}
+static method bar() → Never?
+  return null;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.modular.expect
new file mode 100644
index 0000000..14bef22c5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/spread_if_null.dart.weak.modular.expect
@@ -0,0 +1,142 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method main() → dynamic {
+  core::List<core::int>? list = null;
+  core::print( block {
+    final core::List<core::int> #t1 = <core::int>[1, 2];
+    final core::Iterable<core::int>? #t2 = list;
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t1.{core::List::add}{Invariant}(3){(core::int) → void};
+  } =>#t1);
+  core::print( block {
+    final core::List<core::int> #t3 = <core::int>[1, 2];
+    final core::Iterable<core::int>? #t4 = null;
+    if(!(#t4 == null))
+      #t3.{core::List::addAll}{Invariant}(#t4{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t3.{core::List::add}{Invariant}(3){(core::int) → void};
+  } =>#t3);
+  core::List<core::int> list1 = block {
+    final core::List<core::int> #t5 = <core::int>[];
+    final core::Iterable<core::int>? #t6 = list;
+    if(!(#t6 == null))
+      #t5.{core::List::addAll}{Invariant}(#t6{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t5;
+  core::List<Never> list2 = block {
+    final core::List<Never> #t7 = <Never>[];
+    final core::Iterable<Never>? #t8 = null;
+    if(!(#t8 == null))
+      #t7.{core::List::addAll}{Invariant}(#t8{core::Iterable<Never>}){(core::Iterable<Never>) → void};
+  } =>#t7;
+  core::List<core::int> list3 = block {
+    final core::List<core::int> #t9 = <core::int>[1, 2];
+    final core::Iterable<core::int>? #t10 = list;
+    if(!(#t10 == null))
+      #t9.{core::List::addAll}{Invariant}(#t10{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t9.{core::List::add}{Invariant}(3){(core::int) → void};
+  } =>#t9;
+  core::List<core::int> list4 = block {
+    final core::List<core::int> #t11 = <core::int>[1, 2];
+    final core::Iterable<core::int>? #t12 = null;
+    if(!(#t12 == null))
+      #t11.{core::List::addAll}{Invariant}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t11.{core::List::add}{Invariant}(3){(core::int) → void};
+  } =>#t11;
+  core::Set<core::int>? set = null;
+  core::print( block {
+    final core::Set<core::int> #t13 = col::LinkedHashSet::•<core::int>();
+    #t13.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
+    #t13.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
+    final core::Iterable<core::int>? #t14 = set;
+    if(!(#t14 == null))
+      #t13.{core::Set::addAll}{Invariant}(#t14{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t13.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
+  } =>#t13);
+  core::print( block {
+    final core::Set<core::int> #t15 = col::LinkedHashSet::•<core::int>();
+    #t15.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
+    #t15.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
+    final core::Iterable<core::int>? #t16 = null;
+    if(!(#t16 == null))
+      #t15.{core::Set::addAll}{Invariant}(#t16{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t15.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
+  } =>#t15);
+  core::Set<core::int> set1 = block {
+    final core::Set<core::int> #t17 = col::LinkedHashSet::•<core::int>();
+    final core::Iterable<dynamic>? #t18 = set;
+    if(!(#t18 == null))
+      for (final dynamic #t19 in #t18{core::Iterable<dynamic>}) {
+        final core::int #t20 = #t19 as{TypeError,ForNonNullableByDefault} core::int;
+        #t17.{core::Set::add}{Invariant}(#t20){(core::int) → core::bool};
+      }
+  } =>#t17;
+  core::Set<core::int> set3 = block {
+    final core::Set<core::int> #t21 = col::LinkedHashSet::•<core::int>();
+    #t21.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
+    #t21.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
+    final core::Iterable<core::int>? #t22 = set;
+    if(!(#t22 == null))
+      #t21.{core::Set::addAll}{Invariant}(#t22{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t21.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
+  } =>#t21;
+  core::Set<core::int> set4 = block {
+    final core::Set<core::int> #t23 = col::LinkedHashSet::•<core::int>();
+    #t23.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
+    #t23.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
+    final core::Iterable<core::int>? #t24 = null;
+    if(!(#t24 == null))
+      #t23.{core::Set::addAll}{Invariant}(#t24{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    #t23.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
+  } =>#t23;
+  core::Map<core::int, core::int>? map = null;
+  core::print( block {
+    final core::Map<core::int, core::int> #t25 = <core::int, core::int>{};
+    #t25.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
+    #t25.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
+    final core::Map<core::int, core::int>? #t26 = map;
+    if(!(#t26 == null))
+      for (final core::MapEntry<core::int, core::int> #t27 in #t26{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t25.{core::Map::[]=}{Invariant}(#t27.{core::MapEntry::key}{core::int}, #t27.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    #t25.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
+  } =>#t25);
+  core::print( block {
+    final core::Map<core::int, core::int> #t28 = <core::int, core::int>{};
+    #t28.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
+    #t28.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
+    final core::Map<core::int, core::int>? #t29 = null;
+    if(!(#t29 == null))
+      for (final core::MapEntry<core::int, core::int> #t30 in #t29{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t28.{core::Map::[]=}{Invariant}(#t30.{core::MapEntry::key}{core::int}, #t30.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    #t28.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
+  } =>#t28);
+  core::Map<core::int, core::int> map1 = block {
+    final core::Map<core::int, core::int> #t31 = <core::int, core::int>{};
+    final core::Map<core::int, core::int>? #t32 = map;
+    if(!(#t32 == null))
+      for (final core::MapEntry<core::int, core::int> #t33 in #t32{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t31.{core::Map::[]=}{Invariant}(#t33.{core::MapEntry::key}{core::int}, #t33.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+  } =>#t31;
+  core::Map<core::int, core::int> map3 = block {
+    final core::Map<core::int, core::int> #t34 = <core::int, core::int>{};
+    #t34.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
+    #t34.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
+    final core::Map<core::int, core::int>? #t35 = map;
+    if(!(#t35 == null))
+      for (final core::MapEntry<core::int, core::int> #t36 in #t35{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t34.{core::Map::[]=}{Invariant}(#t36.{core::MapEntry::key}{core::int}, #t36.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    #t34.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
+  } =>#t34;
+  core::Map<core::int, core::int> map4 = block {
+    final core::Map<core::int, core::int> #t37 = <core::int, core::int>{};
+    #t37.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
+    #t37.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
+    final core::Map<core::int, core::int>? #t38 = null;
+    if(!(#t38 == null))
+      for (final core::MapEntry<core::int, core::int> #t39 in #t38{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>})
+        #t37.{core::Map::[]=}{Invariant}(#t39.{core::MapEntry::key}{core::int}, #t39.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
+    #t37.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
+  } =>#t37;
+}
diff --git a/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.modular.expect
new file mode 100644
index 0000000..c211559
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart.weak.modular.expect
@@ -0,0 +1,191 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:22:10: Warning: Operand of null-aware operation '??=' has type 'String' which excludes null.
+//     super[42] ??= "bar"; // Warning.
+//          ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:27:3: Warning: Operand of null-aware operation '?.' has type 'String' which excludes null.
+//   s?.length; // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:28:3: Warning: Operand of null-aware operation '?..' has type 'String' which excludes null.
+//   s?..length; // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:29:3: Warning: Operand of null-aware operation '??' has type 'String' which excludes null.
+//   s ?? "foo"; // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:30:3: Warning: Operand of null-aware operation '??=' has type 'String' which excludes null.
+//   s ??= "foo"; // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:31:8: Warning: Operand of null-aware operation '...?' has type 'List<String>' which excludes null.
+//  - 'List' is from 'dart:core'.
+//   [...?l]; // Warning.
+//        ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:32:16: Warning: Operand of null-aware operation '...?' has type 'List<String>' which excludes null.
+//  - 'List' is from 'dart:core'.
+//   var a = {...?l}; // Warning.
+//                ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:33:16: Warning: Operand of null-aware operation '...?' has type 'List<String>' which excludes null.
+//  - 'List' is from 'dart:core'.
+//   <String>{...?l}; // Warning.
+//                ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:34:16: Warning: Operand of null-aware operation '...?' has type 'Map<String, int>' which excludes null.
+//  - 'Map' is from 'dart:core'.
+//   var b = {...?m}; // Warning.
+//                ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:35:21: Warning: Operand of null-aware operation '...?' has type 'Map<String, int>' which excludes null.
+//  - 'Map' is from 'dart:core'.
+//   <String, int>{...?m}; // Warning.
+//                     ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:36:3: Warning: Operand of null-aware operation '!' has type 'String' which excludes null.
+//   s!; // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:37:3: Warning: Operand of null-aware operation '?.' has type 'String' which excludes null.
+//   s?.substring(0, 0); // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:38:3: Warning: Operand of null-aware operation '?.' has type 'List<String>' which excludes null.
+//  - 'List' is from 'dart:core'.
+//   l?.length = 42; // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:39:3: Warning: Operand of null-aware operation '?.' has type 'List<String>' which excludes null.
+//  - 'List' is from 'dart:core'.
+//   l?.length += 42; // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:40:3: Warning: Operand of null-aware operation '?.' has type 'List<String>' which excludes null.
+//  - 'List' is from 'dart:core'.
+//   l?.length ??= 42; // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:41:3: Warning: Operand of null-aware operation '?.' has type 'String' which excludes null.
+//   s?.foo; // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:42:7: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   E(s)[42] ??= 42; // Warning.
+//       ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:43:4: Warning: Operand of null-aware operation '??=' has type 'String' which excludes null.
+//   l[42] ??= "foo"; // Warning.
+//    ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:44:5: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   l.length ??= 42; // Warning.
+//     ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:45:3: Warning: Operand of null-aware operation '?..' has type 'List<String>' which excludes null.
+//  - 'List' is from 'dart:core'.
+//   l?..length = 42; // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:46:3: Warning: Operand of null-aware operation '?..' has type 'List<String>' which excludes null.
+//  - 'List' is from 'dart:core'.
+//   l?..length ??= 42; // Warning.
+//   ^
+//
+// pkg/front_end/testcases/nnbd/strictly_non_nullable_warnings.dart:46:7: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   l?..length ??= 42; // Warning.
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  operator [](core::int index) → core::String
+    return "foo";
+  operator []=(core::int index, core::String value) → void {}
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  method test() → void {
+    let final core::int #t1 = 42 in super.{self::A::[]}(#t1) == null ?{core::String} super.{self::A::[]=}(#t1, "bar") : null;
+  }
+}
+extension E on core::String {
+  get foo = self::E|get#foo;
+  operator []= = self::E|[]=;
+  operator [] = self::E|[];
+}
+static method E|get#foo(lowered final core::String #this) → core::int
+  return 42;
+static method E|[]=(lowered final core::String #this, core::int index, core::int value) → void {}
+static method E|[](lowered final core::String #this, core::int index) → core::int
+  return 42;
+static method warning(core::String s, core::List<core::String> l, core::Map<core::String, core::int> m) → dynamic {
+  let final core::String #t2 = s in #t2 == null ?{core::int?} null : #t2.{core::String::length}{core::int};
+  let final core::String #t3 = s in #t3 == null ?{core::String} null : block {
+    #t3.{core::String::length}{core::int};
+  } =>#t3;
+  let final core::String #t4 = s in #t4 == null ?{core::String} "foo" : #t4;
+  s == null ?{core::String} s = "foo" : null;
+  block {
+    final core::List<core::String> #t5 = <core::String>[];
+    final core::Iterable<core::String>? #t6 = l;
+    if(!(#t6 == null))
+      #t5.{core::List::addAll}{Invariant}(#t6{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
+  } =>#t5;
+  core::Set<core::String> a = block {
+    final core::Set<core::String> #t7 = col::LinkedHashSet::•<core::String>();
+    final core::Iterable<dynamic>? #t8 = l;
+    if(!(#t8 == null))
+      for (final dynamic #t9 in #t8{core::Iterable<dynamic>}) {
+        final core::String #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::String;
+        #t7.{core::Set::add}{Invariant}(#t10){(core::String) → core::bool};
+      }
+  } =>#t7;
+  block {
+    final core::Set<core::String> #t11 = col::LinkedHashSet::•<core::String>();
+    final core::Iterable<core::String>? #t12 = l;
+    if(!(#t12 == null))
+      #t11.{core::Set::addAll}{Invariant}(#t12{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
+  } =>#t11;
+  core::Map<core::String, core::int> b = block {
+    final core::Map<core::String, core::int> #t13 = <core::String, core::int>{};
+    final core::Map<core::String, core::int>? #t14 = m;
+    if(!(#t14 == null))
+      for (final core::MapEntry<core::String, core::int> #t15 in #t14{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+        #t13.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}{core::String}, #t15.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+  } =>#t13;
+  block {
+    final core::Map<core::String, core::int> #t16 = <core::String, core::int>{};
+    final core::Map<core::String, core::int>? #t17 = m;
+    if(!(#t17 == null))
+      for (final core::MapEntry<core::String, core::int> #t18 in #t17{core::Map<core::String, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int>>})
+        #t16.{core::Map::[]=}{Invariant}(#t18.{core::MapEntry::key}{core::String}, #t18.{core::MapEntry::value}{core::int}){(core::String, core::int) → void};
+  } =>#t16;
+  s!;
+  let final core::String #t19 = s in #t19 == null ?{core::String?} null : #t19.{core::String::substring}(0, 0){(core::int, [core::int?]) → core::String};
+  let final core::List<core::String> #t20 = l in #t20 == null ?{core::int?} null : #t20.{core::List::length} = 42;
+  let final core::List<core::String> #t21 = l in #t21 == null ?{core::int?} null : #t21.{core::List::length} = #t21.{core::List::length}{core::int}.{core::num::+}(42){(core::num) → core::int};
+  let final core::List<core::String> #t22 = l in #t22 == null ?{core::int?} null : #t22.{core::List::length}{core::int} == null ?{core::int} #t22.{core::List::length} = 42 : null;
+  let final core::String #t23 = s in #t23 == null ?{core::int?} null : self::E|get#foo(#t23);
+  let final core::String #t24 = s in let final core::int #t25 = 42 in self::E|[](#t24, #t25) == null ?{core::int} self::E|[]=(#t24, #t25, 42) : null;
+  let final core::List<core::String> #t26 = l in let final core::int #t27 = 42 in #t26.{core::List::[]}(#t27){(core::int) → core::String} == null ?{core::String} #t26.{core::List::[]=}(#t27, "foo"){(core::int, core::String) → void} : null;
+  let final core::List<core::String> #t28 = l in #t28.{core::List::length}{core::int} == null ?{core::int} #t28.{core::List::length} = 42 : null;
+  let final core::List<core::String> #t29 = l in #t29 == null ?{core::List<core::String>} null : block {
+    #t29.{core::List::length} = 42;
+  } =>#t29;
+  let final core::List<core::String> #t30 = l in #t30 == null ?{core::List<core::String>} null : block {
+    let final core::List<core::String> #t31 = #t30 in #t31.{core::List::length}{core::int} == null ?{core::int} #t31.{core::List::length} = 42 : null;
+  } =>#t30;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/strong_lib_not_ok_from_dill/strong.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/strong_lib_not_ok_from_dill/strong.dart.weak.modular.expect
new file mode 100644
index 0000000..cb27086
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/strong_lib_not_ok_from_dill/strong.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "strong_lib.dart" as str;
+
+import "org-dartlang-testcase:///strong_lib.dart";
+
+static method main() → dynamic {
+  str::foo();
+}
diff --git a/pkg/front_end/testcases/nnbd/strong_lib_not_ok_from_source/strong.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/strong_lib_not_ok_from_source/strong.dart.weak.modular.expect
new file mode 100644
index 0000000..c9d352f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/strong_lib_not_ok_from_source/strong.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "strong_lib.dart" as str;
+
+import "org-dartlang-testcase:///strong_lib.dart";
+
+static method main() → dynamic {
+  str::foo();
+}
+
+library;
+import self as str;
+import "dart:core" as core;
+
+static field core::int* x;
+static method foo() → void {
+  core::print("hello");
+}
diff --git a/pkg/front_end/testcases/nnbd/strong_ok_from_dill/strong.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/strong_ok_from_dill/strong.dart.weak.modular.expect
new file mode 100644
index 0000000..cb27086
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/strong_ok_from_dill/strong.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "strong_lib.dart" as str;
+
+import "org-dartlang-testcase:///strong_lib.dart";
+
+static method main() → dynamic {
+  str::foo();
+}
diff --git a/pkg/front_end/testcases/nnbd/strong_ok_from_source/strong.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/strong_ok_from_source/strong.dart.weak.modular.expect
new file mode 100644
index 0000000..385858b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/strong_ok_from_source/strong.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "strong_lib.dart" as str;
+
+import "org-dartlang-testcase:///strong_lib.dart";
+
+static method main() → dynamic {
+  str::foo();
+}
+
+library /*isNonNullableByDefault*/;
+import self as str;
+import "dart:core" as core;
+
+static method foo() → void {
+  core::print("hello");
+}
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.weak.modular.expect
new file mode 100644
index 0000000..ba7e12e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_dill/strong.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "package:opt_in_package/opt_in_lib.dart";
+import "package:opt_in_package/opt_out_lib.dart";
+import "package:opt_out_package/regular_lib1.dart";
+import "package:opt_out_package/regular_lib2.dart";
+
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.weak.modular.expect
new file mode 100644
index 0000000..ba7e12e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/strong_package_not_ok_from_source/strong.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "package:opt_in_package/opt_in_lib.dart";
+import "package:opt_in_package/opt_out_lib.dart";
+import "package:opt_out_package/regular_lib1.dart";
+import "package:opt_out_package/regular_lib2.dart";
+
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..b06ed29
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object?, S extends core::Object> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%, self::A::S>
+    : super core::Object::•()
+    ;
+  method hest<covariant-by-class X extends self::A::T%, Y extends core::List<self::A::hest::X%> = core::List<self::A::T%>, Z extends core::List<self::A::hest::X?> = core::List<self::A::T?>>() → dynamic
+    return null;
+  method fisk<covariant-by-class X extends self::A::S, Y extends core::List<self::A::fisk::X> = core::List<self::A::S>, Z extends core::List<self::A::fisk::X?> = core::List<self::A::S?>>() → dynamic
+    return null;
+  method mus<X extends core::Object?, Y extends core::List<self::A::mus::X%> = core::List<core::Object?>, Z extends core::List<self::A::mus::X?> = core::List<core::Object?>>() → dynamic
+    return null;
+}
+static method foo<T extends core::Object?, S extends core::List<self::foo::T%> = core::List<core::Object?>>(self::foo::T% t) → dynamic
+  return null;
+static method bar<T extends core::Object?, S extends core::List<self::bar::T?> = core::List<core::Object?>>(self::bar::T% t) → dynamic
+  return null;
+static method baz(core::int? x, core::int y) → dynamic {
+  self::foo<core::int?, core::List<core::int?>>(x);
+  self::bar<core::int, core::List<core::int?>>(y);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.modular.expect
new file mode 100644
index 0000000..5537cc3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/super_bounded_hint.dart.weak.modular.expect
@@ -0,0 +1,618 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:7: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// foo2b<X extends F>() {}
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:19:13: Error: Generic type 'F' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'F' here.
+// class Foo3b<X extends F> {}
+//             ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: Bound of this variable references variable 'X' from the same declaration.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:31: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo1a(F<A<dynamic>, A<Never>> x) {}
+//                               ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:11:31: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo1a(F<A<dynamic>, A<Never>> x) {}
+//                               ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:9: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo1b(F x) {}
+//         ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:12:9: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo1b(F x) {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:7: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo2a<X extends F<A<dynamic>, A<Never>>>() {}
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:14:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo2a<X extends F<A<dynamic>, A<Never>>>() {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:7: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo2b<X extends F>() {}
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:15:7: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo2b<X extends F>() {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:13: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class Foo3a<X extends F<A<dynamic>, A<Never>>> {}
+//             ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:17:13: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// class Foo3a<X extends F<A<dynamic>, A<Never>>> {}
+//             ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:30: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// F<A<dynamic>, A<Never>> foo4a() => throw 42;
+//                              ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:21:30: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// F<A<dynamic>, A<Never>> foo4a() => throw 42;
+//                              ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:8: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// F foo4b() => throw 42;
+//        ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:22:8: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// F foo4b() => throw 42;
+//        ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:41: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo5a({required F<A<dynamic>, A<Never>> x}) {}
+//                                         ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:24:41: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo5a({required F<A<dynamic>, A<Never>> x}) {}
+//                                         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:19: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo5b({required F x}) {}
+//                   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:25:19: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo5b({required F x}) {}
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:33: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// foo7a([F<A<dynamic>, A<Never>>? x]) {}
+//                                 ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:47:33: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo7a([F<A<dynamic>, A<Never>>? x]) {}
+//                                 ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// foo7b([F? x]) {}
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:48:11: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+// foo7b([F? x]) {}
+//           ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:54:13: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+// bar1(B<num> x) {}
+//             ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:56:6: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+// bar2<X extends B<num>>() {}
+//      ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:58:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+// class Bar3<X extends B<num>> {}
+//            ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:60:12: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the return type.
+// Try changing type arguments so that they conform to the bounds.
+// B<num> bar4() => throw 42;
+//            ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:62:23: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+// bar5({required B<num> x}) {}
+//                       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:76:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+// bar7([B<num>? x]) {}
+//               ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:78:7: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the supertype 'B' of class 'Bar8'.
+// Try changing type arguments so that they conform to the bounds.
+// class Bar8 extends B<dynamic> {}
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:27: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<A<dynamic>, A<Never>> x;
+//                           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:28:27: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F<A<dynamic>, A<Never>> x;
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:32: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   for (F<A<dynamic>, A<Never>> x in []) {}
+//                                ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:32: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   for (F<A<dynamic>, A<Never>> x in []) {}
+//                                ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:37: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   for (F<A<dynamic>, A<Never>> x in []) {}
+//                                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:29:37: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   for (F<A<dynamic>, A<Never>> x in []) {}
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:35: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
+//                                   ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:30:35: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo1(F<A<dynamic>, A<Never>> x) {}
+//                                   ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:11: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:31:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo2<X extends F<A<dynamic>, A<Never>>>() {}
+//           ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:34: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
+//                                  ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:32:34: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F<A<dynamic>, A<Never>> fooFoo4() => throw 42;
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:45: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
+//                                             ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:33:45: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo5({required F<A<dynamic>, A<Never>> x}) {}
+//                                             ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:37: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
+//                                     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:34:37: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo7([F<A<dynamic>, A<Never>>? x]) {}
+//                                     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:5: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F x;
+//     ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:38:5: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F x;
+//     ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:10: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   for (F x in []) {}
+//          ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:10: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   for (F x in []) {}
+//          ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:15: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   for (F x in []) {}
+//               ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:39:15: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   for (F x in []) {}
+//               ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:13: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo1(F x) {}
+//             ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:40:13: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo1(F x) {}
+//             ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:11: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo2<X extends F>() {}
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:41:11: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo2<X extends F>() {}
+//           ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:12: Error: Type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F' in the return type.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   F fooFoo4() => throw 42;
+//            ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:42:12: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   F fooFoo4() => throw 42;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:23: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo5({required F x}) {}
+//                       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:43:23: Context: If you want 'F<A<dynamic>, A<Never>>' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo5({required F x}) {}
+//                       ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:15: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'F'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   fooFoo7([F? x]) {}
+//               ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef F<X extends A<X>, Y extends A<Y>> = X Function(Y);
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:44:15: Context: If you want 'F<A<dynamic>, A<Never>>?' to be a super-bounded type, note that the inverted type 'F<A<Never>, A<Object?>>?' must then satisfy its bounds, which it does not.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/super_bounded_hint.dart'.
+//  - 'Object' is from 'dart:core'.
+//   fooFoo7([F? x]) {}
+//               ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:65:10: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   B<num> x;
+//          ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:15: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   for (B<num> x in []) {}
+//               ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:72:7: Error: Type argument 'dynamic' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   new B<dynamic>();
+//       ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:66:20: Error: Inferred type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   for (B<num> x in []) {}
+//                    ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:67:18: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   barBar1(B<num> x) {}
+//                  ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:68:11: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   barBar2<X extends B<num>>() {}
+//           ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:69:17: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B' in the return type.
+// Try changing type arguments so that they conform to the bounds.
+//   B<num> barBar4() => throw 42;
+//                 ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:70:28: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   barBar5({required B<num> x}) {}
+//                            ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:71:20: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+//   barBar7([B<num>? x]) {}
+//                    ^
+// pkg/front_end/testcases/nnbd/super_bounded_hint.dart:52:9: Context: This is the type variable whose bound isn't conformed to.
+// class B<X extends int> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<X extends self::A<X> = self::A<dynamic>, contravariant Y extends self::A<Y> = self::A<Never>> = (Y) → X;
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class Foo3a<X extends (self::A<Never>) → self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Foo3a<self::Foo3a::X>
+    : super core::Object::•()
+    ;
+}
+class Foo3b<X extends (self::A<Never>) → self::A<dynamic> = dynamic> extends core::Object {
+  synthetic constructor •() → self::Foo3b<self::Foo3b::X>
+    : super core::Object::•()
+    ;
+}
+class B<X extends core::int> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X>
+    : super core::Object::•()
+    ;
+}
+class Bar3<X extends self::B<core::num>> extends core::Object {
+  synthetic constructor •() → self::Bar3<self::Bar3::X>
+    : super core::Object::•()
+    ;
+}
+class Bar8 extends self::B<dynamic> {
+  synthetic constructor •() → self::Bar8
+    : super self::B::•()
+    ;
+}
+static method foo1a((self::A<Never>) → self::A<dynamic> x) → dynamic {}
+static method foo1b((self::A<Never>) → self::A<dynamic> x) → dynamic {}
+static method foo2a<X extends (self::A<Never>) → self::A<dynamic>>() → dynamic {}
+static method foo2b<X extends (self::A<Never>) → self::A<dynamic> = dynamic>() → dynamic {}
+static method foo4a() → (self::A<Never>) → self::A<dynamic>
+  return throw 42;
+static method foo4b() → (self::A<Never>) → self::A<dynamic>
+  return throw 42;
+static method foo5a({required (self::A<Never>) → self::A<dynamic> x = #C1}) → dynamic {}
+static method foo5b({required (self::A<Never>) → self::A<dynamic> x = #C1}) → dynamic {}
+static method foo6a() → dynamic {
+  (self::A<Never>) → self::A<dynamic> x;
+  for ((self::A<Never>) → self::A<dynamic> x in <(self::A<Never>) → self::A<dynamic>>[]) {
+  }
+  function fooFoo1((self::A<Never>) → self::A<dynamic> x) → Null {}
+  function fooFoo2<X extends (self::A<Never>) → self::A<dynamic>>() → Null {}
+  function fooFoo4() → (self::A<Never>) → self::A<dynamic>
+    return throw 42;
+  function fooFoo5({required (self::A<Never>) → self::A<dynamic> x = #C1}) → Null {}
+  function fooFoo7([(self::A<Never>) →? self::A<dynamic> x = #C1]) → Null {}
+}
+static method foo6b() → dynamic {
+  (self::A<Never>) → self::A<dynamic> x;
+  for ((self::A<Never>) → self::A<dynamic> x in <(self::A<Never>) → self::A<dynamic>>[]) {
+  }
+  function fooFoo1((self::A<Never>) → self::A<dynamic> x) → Null {}
+  function fooFoo2<X extends (self::A<Never>) → self::A<dynamic>>() → Null {}
+  function fooFoo4() → (self::A<Never>) → self::A<dynamic>
+    return throw 42;
+  function fooFoo5({required (self::A<Never>) → self::A<dynamic> x = #C1}) → Null {}
+  function fooFoo7([(self::A<Never>) →? self::A<dynamic> x = #C1]) → Null {}
+}
+static method foo7a([(self::A<Never>) →? self::A<dynamic> x = #C1]) → dynamic {}
+static method foo7b([(self::A<Never>) →? self::A<dynamic> x = #C1]) → dynamic {}
+static method bar1(self::B<core::num> x) → dynamic {}
+static method bar2<X extends self::B<core::num>>() → dynamic {}
+static method bar4() → self::B<core::num>
+  return throw 42;
+static method bar5({required self::B<core::num> x = #C1}) → dynamic {}
+static method bar6() → dynamic {
+  self::B<core::num> x;
+  for (self::B<core::num> x in <self::B<core::num>>[]) {
+  }
+  function barBar1(self::B<core::num> x) → Null {}
+  function barBar2<X extends self::B<core::num>>() → Null {}
+  function barBar4() → self::B<core::num>
+    return throw 42;
+  function barBar5({required self::B<core::num> x = #C1}) → Null {}
+  function barBar7([self::B<core::num>? x = #C1]) → Null {}
+  new self::B::•<dynamic>();
+  new self::A::•<self::B<dynamic>>();
+}
+static method bar7([self::B<core::num>? x = #C1]) → dynamic {}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.modular.expect
new file mode 100644
index 0000000..da9cc12
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.modular.expect
@@ -0,0 +1,121 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/switch_nullable_enum.dart:7:5: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+// int method1(Enum? e) {
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Enum extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Enum> values = #C7;
+  static const field self::Enum e1 = #C3;
+  static const field self::Enum e2 = #C6;
+  const constructor •(core::int index, core::String name) → self::Enum
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum.${this.{core::_Enum::_name}{core::String}}";
+}
+static method method1(self::Enum? e) → core::int {
+  switch(e) {
+    #L1:
+    case #C3:
+    case #C6:
+      {
+        return 0;
+      }
+  }
+  return invalid-expression "pkg/front_end/testcases/nnbd/switch_nullable_enum.dart:7:5: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+int method1(Enum? e) {
+    ^" in null;
+}
+static method method2(self::Enum? e) → core::int {
+  switch(e) {
+    #L2:
+    case #C3:
+    case #C6:
+      {
+        return 0;
+      }
+    #L3:
+    case #C8:
+      {
+        return 1;
+      }
+    #L4:
+    default:
+      throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type.");
+  }
+}
+static method method3(self::Enum? e) → core::int {
+  switch(e) {
+    #L5:
+    case #C3:
+    case #C6:
+      {
+        return 0;
+      }
+    #L6:
+    default:
+      {
+        return 1;
+      }
+  }
+}
+static method method4(self::Enum? e) → core::int {
+  switch(e) {
+    #L7:
+    case #C3:
+    case #C6:
+      {
+        return 0;
+      }
+    #L8:
+    case #C8:
+    default:
+      {
+        return 1;
+      }
+  }
+}
+static method test() → dynamic {
+  self::method1(#C3);
+}
+static method main() → dynamic {
+  self::expect(0, self::method2(#C3));
+  self::expect(0, self::method2(#C6));
+  self::expect(1, self::method2(null));
+  self::expect(0, self::method3(#C3));
+  self::expect(0, self::method3(#C6));
+  self::expect(1, self::method3(null));
+  self::expect(0, self::method4(#C3));
+  self::expect(0, self::method4(#C6));
+  self::expect(1, self::method4(null));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Expected ${expected}, actual ${actual}.";
+  }
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::Enum {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = self::Enum {index:#C4, _name:#C5}
+  #C7 = <self::Enum*>[#C3, #C6]
+  #C8 = null
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///switch_nullable_enum.dart:
+- Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.weak.modular.expect
new file mode 100644
index 0000000..e074f2a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/switch_redesign_fall_over.dart:23:5: Error: Switch case may fall through to the next case.
+//     case -42: // Error.
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo(core::int x, core::bool b) → dynamic {
+    switch(x) {
+      #L1:
+      case #C1:
+        {
+          let final Never #t1 = this.{self::A::neverReturn}(){() → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+        }
+      #L2:
+      default:
+        {
+          self::bar();
+        }
+    }
+  }
+  abstract method neverReturn() → Never;
+}
+static method bar() → dynamic {}
+static method foo(core::int x, core::bool b) → dynamic {
+  switch(x) {
+    #L3:
+    case #C1:
+      {
+        let final Never #t2 = b ?{Never} throw "hest" : throw "fisk" in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+      }
+    #L4:
+    case #C2:
+      {
+        self::bar();
+      }
+    #L5:
+    default:
+      {
+        self::bar();
+      }
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 42
+  #C2 = -42
+}
diff --git a/pkg/front_end/testcases/nnbd/switch_redesign_types.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/switch_redesign_types.dart.weak.modular.expect
new file mode 100644
index 0000000..0d7d320
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/switch_redesign_types.dart.weak.modular.expect
@@ -0,0 +1,110 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/switch_redesign_types.dart:35:16: Error: Type 'A' of the case expression is not a subtype of type 'B' of this switch expression.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd/switch_redesign_types.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/switch_redesign_types.dart'.
+//     case const A(42): // Error: not a subtype of B.
+//                ^
+// pkg/front_end/testcases/nnbd/switch_redesign_types.dart:30:11: Context: The switch expression is here.
+//   switch (b) {
+//           ^
+//
+// pkg/front_end/testcases/nnbd/switch_redesign_types.dart:39:10: Error: Type 'dynamic' of the case expression is not a subtype of type 'B' of this switch expression.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd/switch_redesign_types.dart'.
+//     case x: // Error: D has custom operator ==.
+//          ^
+// pkg/front_end/testcases/nnbd/switch_redesign_types.dart:30:11: Context: The switch expression is here.
+//   switch (b) {
+//           ^
+//
+// pkg/front_end/testcases/nnbd/switch_redesign_types.dart:37:16: Error: Case expression 'D {}' does not have a primitive operator '=='.
+//  - 'D' is from 'pkg/front_end/testcases/nnbd/switch_redesign_types.dart'.
+//     case const D(42): // Error: D has custom operator ==.
+//                ^
+//
+// pkg/front_end/testcases/nnbd/switch_redesign_types.dart:39:10: Error: Case expression 'D {}' does not have a primitive operator '=='.
+//  - 'D' is from 'pkg/front_end/testcases/nnbd/switch_redesign_types.dart'.
+//     case x: // Error: D has custom operator ==.
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object /*hasConstConstructor*/  {
+  final field core::int foo;
+  const constructor •(core::int foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+}
+class B extends self::A /*hasConstConstructor*/  {
+  const constructor •(core::int foo) → self::B
+    : super self::A::•(foo)
+    ;
+}
+class C extends self::B /*hasConstConstructor*/  {
+  const constructor •(core::int foo) → self::C
+    : super self::B::•(foo)
+    ;
+}
+class D extends self::B /*hasConstConstructor*/  {
+  const constructor •(core::int foo) → self::D
+    : super self::B::•(foo)
+    ;
+  operator ==(dynamic other) → core::bool
+    return core::identical(this, other);
+}
+static method bar(self::B b) → dynamic {
+  #L1:
+  switch(b) {
+    #L2:
+    case #C2:
+      {
+        break #L1;
+      }
+    #L3:
+    case #C3:
+      {
+        break #L1;
+      }
+    #L4:
+    case #C4:
+      {
+        break #L1;
+      }
+    #L5:
+    case #C5:
+      {
+        break #L1;
+      }
+    #L6:
+    case #C7:
+      {
+        break #L1;
+      }
+    #L7:
+    default:
+      {}
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 42
+  #C2 = self::B {foo:#C1}
+  #C3 = self::C {foo:#C1}
+  #C4 = self::A {foo:#C1}
+  #C5 = self::D {foo:#C1}
+  #C6 = 123
+  #C7 = self::D {foo:#C6}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///switch_redesign_types.dart:
+- D. (from org-dartlang-testcase:///switch_redesign_types.dart:23:9)
+- B. (from org-dartlang-testcase:///switch_redesign_types.dart:15:9)
+- A. (from org-dartlang-testcase:///switch_redesign_types.dart:11:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- C. (from org-dartlang-testcase:///switch_redesign_types.dart:19:9)
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.modular.expect
new file mode 100644
index 0000000..ad453ca
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.modular.expect
@@ -0,0 +1,93 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
+//   functionContext(null as C?); // Error.
+//                        ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
+//   nullableFunctionContext(null as C?); // Error.
+//                                ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
+//   functionContext(c); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
+//   nullableFunctionContext(c); // Error.
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+//   functionContext(t); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+//   nullableFunctionContext(t); // Error.
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
+//   functionContext(nt); // Error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
+//   nullableFunctionContext(nt); // Error.
+//                           ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+//   functionContext(t); // Shouldn't result in a compile-time error.
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+//   nullableFunctionContext(t); // Shouldn't result in a compile-time error.
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method call() → core::int
+    return 0;
+}
+static method functionContext(() → core::int f) → dynamic {}
+static method nullableFunctionContext(() →? core::int f) → dynamic {}
+static method foo<T extends self::C?>(self::C? c, self::foo::T% t, self::foo::T? nt) → dynamic {
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
+  functionContext(null as C?); // Error.
+                       ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () → core::int);
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
+  nullableFunctionContext(null as C?); // Error.
+                               ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () →? core::int);
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
+  functionContext(c); // Error.
+                  ^" in c as{TypeError} () → core::int);
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
+  nullableFunctionContext(c); // Error.
+                          ^" in c as{TypeError} () →? core::int);
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  functionContext(t); // Error.
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  nullableFunctionContext(t); // Error.
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
+  functionContext(nt); // Error.
+                  ^" in nt as{TypeError,ForNonNullableByDefault} () → core::int);
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
+  nullableFunctionContext(nt); // Error.
+                          ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
+}
+static method bar<T extends self::C>(self::C c, self::bar::T t) → dynamic {
+  self::functionContext(let final self::C #t1 = c in #t1 == null ?{() → core::int} null : #t1.{self::C::call}{() → core::int});
+  self::nullableFunctionContext(let final self::C #t2 = c in #t2 == null ?{() → core::int} null : #t2.{self::C::call}{() → core::int});
+  self::functionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  functionContext(t); // Shouldn't result in a compile-time error.
+                  ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
+  self::nullableFunctionContext(invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  nullableFunctionContext(t); // Shouldn't result in a compile-time error.
+                          ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.weak.modular.expect
new file mode 100644
index 0000000..b10539b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart:15:14: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   String s = x; // Should be an error, `T` should be int.
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<X extends core::Object? = dynamic> extends core::Object {
+  constructor •((self::C::X%) → void x) → self::C<self::C::X%>
+    : super core::Object::•()
+    ;
+}
+static method check<T extends core::Object? = dynamic>(self::C<core::List<self::check::T%>> f) → self::check::T% {
+  return null as{ForNonNullableByDefault} self::check::T%;
+}
+static method test() → void {
+  core::int x = self::check<core::int>(new self::C::•<core::List<core::int>>((core::List<core::int> x) → void {}));
+  core::String s = invalid-expression "pkg/front_end/testcases/nnbd/type_constraint_solving_closures_in_upper_and_lower_bounds.dart:15:14: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  String s = x; // Should be an error, `T` should be int.
+             ^" in x as{TypeError,ForNonNullableByDefault} core::String;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/type_parameter_types.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/type_parameter_types.dart.weak.modular.expect
new file mode 100644
index 0000000..220ce86
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/type_parameter_types.dart.weak.modular.expect
@@ -0,0 +1,56 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class A<X extends core::Object, Y extends core::Object?> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X, self::A::Y%>
+    : super core::Object::•()
+    ;
+  method foo() → self::A::X
+    return let final Never #t1 = self::never() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  method bar() → self::A::X?
+    return null;
+  method baz() → self::A::Y%
+    return let final Never #t2 = self::never() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+}
+class B<X extends core::List<self::B::Y%> = core::List<core::Object?>, Y extends core::Object?> extends core::Object {
+  synthetic constructor •() → self::B<self::B::X, self::B::Y%>
+    : super core::Object::•()
+    ;
+  method foo(covariant-by-class self::B::X x, covariant-by-class self::B::Y% y) → dynamic {}
+}
+class C<X extends core::List<self::C::Y%>? = core::List<dynamic>?, Y extends core::List<self::C::X%>? = core::List<dynamic>?> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
+    : super core::Object::•()
+    ;
+  method foo(covariant-by-class self::C::X% x, covariant-by-class self::C::Y% y) → dynamic {}
+}
+class D<X extends self::D::Y% = dynamic, Y extends self::D::Z% = dynamic, Z extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::X%, self::D::Y%, self::D::Z%>
+    : super core::Object::•()
+    ;
+  method foo(covariant-by-class self::D::X% x, covariant-by-class self::D::Y% y, covariant-by-class self::D::Z% z) → dynamic {}
+}
+static method never() → Never
+  return throw "Never";
+static method main() → dynamic {
+  function fun1<X extends core::Object, Y extends core::Object?>() → X
+    return let final Never #t3 = self::never() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  function fun2<X extends core::Object, Y extends core::Object?>() → Y%
+    return let final Never #t4 = self::never() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  function fun3<X extends core::List<Y%> = core::List<core::Object?>, Y extends core::Object?>() → X
+    return let final Never #t5 = self::never() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  function fun4<X extends core::List<Y%> = core::List<core::Object?>, Y extends core::Object?>() → Y%
+    return let final Never #t6 = self::never() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  function fun5<X extends core::List<Y%>? = core::List<dynamic>?, Y extends core::List<X%>? = core::List<dynamic>?>() → X%
+    return let final Never #t7 = self::never() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  function fun6<X extends core::List<Y%>? = core::List<dynamic>?, Y extends core::List<X%>? = core::List<dynamic>?>() → Y%
+    return let final Never #t8 = self::never() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  function fun7<X extends Y% = dynamic, Y extends Z% = dynamic, Z extends core::Object? = dynamic>() → X%
+    return let final Never #t9 = self::never() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  function fun8<X extends Y% = dynamic, Y extends Z% = dynamic, Z extends core::Object? = dynamic>() → Y%
+    return let final Never #t10 = self::never() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  function fun9<X extends Y% = dynamic, Y extends Z% = dynamic, Z extends core::Object? = dynamic>() → Z%
+    return let final Never #t11 = self::never() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+}
diff --git a/pkg/front_end/testcases/nnbd/uninitialized_non_nullable_late_fields.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/uninitialized_non_nullable_late_fields.dart.weak.modular.expect
new file mode 100644
index 0000000..bdb8fdc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/uninitialized_non_nullable_late_fields.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  late field core::int x;
+  constructor foo(core::int x) → self::A
+    : self::A::x = x, super core::Object::•()
+    ;
+  constructor bar() → self::A
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.weak.modular.expect
new file mode 100644
index 0000000..8aa9644
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/upper_bound_on_promoted_type.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  field dynamic bar = null;
+  field dynamic baz = null;
+  synthetic constructor •() → self::Foo<self::Foo::T%>
+    : super core::Object::•()
+    ;
+  method qux() → dynamic {
+    final self::Foo::T? v = this.{self::Foo::bar}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::Foo::T?;
+    if(v is{ForNonNullableByDefault} core::num) {
+      this.{self::Foo::baz}{dynamic}{dynamic}.[]=("value", v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::isFinite}{core::bool} ?{core::Object} v{self::Foo::T? & core::num /* '?' & '!' = '!' */} : v{self::Foo::T? & core::num /* '?' & '!' = '!' */}.{core::num::toString}(){() → core::String});
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/bad_mixins.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/bad_mixins.dart.weak.modular.expect
new file mode 100644
index 0000000..7245adf
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/bad_mixins.dart.weak.modular.expect
@@ -0,0 +1,698 @@
+//
+// Problems in component:
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins.dart:15:7: Error: 'B with MixinB' can't implement both 'B<num>' and 'B<int>'
+//  - 'B' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class2c extends B<num> with MixinB<int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins.dart:19:7: Error: 'B with MixinB' can't implement both 'B<Object>' and 'B<dynamic>'
+//  - 'B' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'Object' is from 'dart:core'.
+// class Class2e extends B<Object> with MixinB<dynamic> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins.dart:23:7: Error: 'C with MixinC' can't implement both 'C<num, num>' and 'C<num, int>'
+//  - 'C' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class3b extends C<num, num> with MixinC<num, int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:23:7: Error: 'B with MixinB' can't implement both 'B<int?>' and 'B<int>'
+//  - 'B' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class2b extends B<int?> with MixinB<int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:25:7: Error: 'B with MixinB' can't implement both 'B<num>' and 'B<int>'
+//  - 'B' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class2c extends B<num> with MixinB<int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:29:7: Error: 'B with MixinB' can't implement both 'B<Object>' and 'B<dynamic>'
+//  - 'B' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'Object' is from 'dart:core'.
+// class Class2e extends B<Object> with MixinB<dynamic> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:35:7: Error: 'C with MixinC' can't implement both 'C<num, num>' and 'C<num, int>'
+//  - 'C' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class3b extends C<num, num> with MixinC<num, int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:37:7: Error: 'C with MixinC' can't implement both 'C<num?, int>' and 'C<num, int>'
+//  - 'C' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class3c extends C<num?, int> with MixinC<num, int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:49:7: Error: 'ClassBa with MixinB' can't implement both 'B<int?>' and 'B<int>'
+//  - 'B' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class4a extends ClassBa with MixinB<int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:53:7: Error: 'ClassBb with MixinB' can't implement both 'B<int>' and 'B<int?>'
+//  - 'B' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class4c extends ClassBb with MixinB<int?> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:57:7: Error: 'ClassCa with MixinC' can't implement both 'C<num?, int?>' and 'C<num?, int>'
+//  - 'C' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class5a extends ClassCa with MixinC<num?, int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:61:7: Error: 'ClassCb with MixinC' can't implement both 'C<num?, int>' and 'C<num?, int?>'
+//  - 'C' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class5c extends ClassCb with MixinC<num?, int?> {} // error
+//       ^
+//
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins.dart:9:7: Error: 'Object' doesn't implement 'A' so it can't be used with 'MixinA'.
+//  - 'Object' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'MixinA' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class1a extends Object with MixinA {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins.dart:13:7: Error: 'Object' doesn't implement 'B<int>' so it can't be used with 'MixinB<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'MixinB' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class2a extends Object with MixinB<int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins.dart:15:7: Error: 'B<num>' doesn't implement 'B<int>' so it can't be used with 'MixinB<int>'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'MixinB' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class2c extends B<num> with MixinB<int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins.dart:21:7: Error: 'Object' doesn't implement 'C<num, int>' so it can't be used with 'MixinC<num, int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'MixinC' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class3a extends Object with MixinC<num, int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins.dart:23:7: Error: 'C<num, num>' doesn't implement 'C<num, int>' so it can't be used with 'MixinC<num, int>'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'MixinC' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class3b extends C<num, num> with MixinC<num, int> {} // error
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+import "bad_mixins_lib.dart" as bad;
+
+import "org-dartlang-testcase:///bad_mixins_lib.dart";
+
+abstract class _Class1a&Object&MixinA = core::Object with bad::MixinA /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Class1a&Object&MixinA*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class1a extends self::_Class1a&Object&MixinA {
+  synthetic constructor •() → self::Class1a*
+    : super self::_Class1a&Object&MixinA::•()
+    ;
+}
+abstract class _Class1b&A&MixinA = bad::A with bad::MixinA /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1b&A&MixinA*
+    : super bad::A::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class1b extends self::_Class1b&A&MixinA {
+  synthetic constructor •() → self::Class1b*
+    : super self::_Class1b&A&MixinA::•()
+    ;
+}
+abstract class _Class2a&Object&MixinB = core::Object with bad::MixinB<core::int*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Class2a&Object&MixinB*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class2a extends self::_Class2a&Object&MixinB {
+  synthetic constructor •() → self::Class2a*
+    : super self::_Class2a&Object&MixinB::•()
+    ;
+}
+abstract class _Class2c&B&MixinB = bad::B<core::num*> with bad::MixinB<core::int*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2c&B&MixinB*
+    : super bad::B::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class2c extends self::_Class2c&B&MixinB {
+  synthetic constructor •() → self::Class2c*
+    : super self::_Class2c&B&MixinB::•()
+    ;
+}
+abstract class _Class2d&B&MixinB = bad::B<core::int*> with bad::MixinB<core::int*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2d&B&MixinB*
+    : super bad::B::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class2d extends self::_Class2d&B&MixinB {
+  synthetic constructor •() → self::Class2d*
+    : super self::_Class2d&B&MixinB::•()
+    ;
+}
+abstract class _Class2e&B&MixinB = bad::B<core::Object*> with bad::MixinB<dynamic> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2e&B&MixinB*
+    : super bad::B::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class2e extends self::_Class2e&B&MixinB {
+  synthetic constructor •() → self::Class2e*
+    : super self::_Class2e&B&MixinB::•()
+    ;
+}
+abstract class _Class3a&Object&MixinC = core::Object with bad::MixinC<core::num*, core::int*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Class3a&Object&MixinC*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class3a extends self::_Class3a&Object&MixinC {
+  synthetic constructor •() → self::Class3a*
+    : super self::_Class3a&Object&MixinC::•()
+    ;
+}
+abstract class _Class3b&C&MixinC = bad::C<core::num*, core::num*> with bad::MixinC<core::num*, core::int*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3b&C&MixinC*
+    : super bad::C::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class3b extends self::_Class3b&C&MixinC {
+  synthetic constructor •() → self::Class3b*
+    : super self::_Class3b&C&MixinC::•()
+    ;
+}
+abstract class _Class3d&C&MixinC = bad::C<core::num*, core::int*> with bad::MixinC<core::num*, core::int*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3d&C&MixinC*
+    : super bad::C::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class3d extends self::_Class3d&C&MixinC {
+  synthetic constructor •() → self::Class3d*
+    : super self::_Class3d&C&MixinC::•()
+    ;
+}
+abstract class _Class4a&ClassBa&MixinB = bad::ClassBa with bad::MixinB<core::int*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4a&ClassBa&MixinB*
+    : super bad::ClassBa::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class4a extends self::_Class4a&ClassBa&MixinB {
+  synthetic constructor •() → self::Class4a*
+    : super self::_Class4a&ClassBa&MixinB::•()
+    ;
+}
+abstract class _Class4b&ClassBb&MixinB = bad::ClassBb with bad::MixinB<core::int*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4b&ClassBb&MixinB*
+    : super bad::ClassBb::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class4b extends self::_Class4b&ClassBb&MixinB {
+  synthetic constructor •() → self::Class4b*
+    : super self::_Class4b&ClassBb&MixinB::•()
+    ;
+}
+abstract class _Class5a&ClassCa&MixinC = bad::ClassCa with bad::MixinC<core::num*, core::int*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5a&ClassCa&MixinC*
+    : super bad::ClassCa::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class5a extends self::_Class5a&ClassCa&MixinC {
+  synthetic constructor •() → self::Class5a*
+    : super self::_Class5a&ClassCa&MixinC::•()
+    ;
+}
+abstract class _Class5b&ClassCb&MixinC = bad::ClassCb with bad::MixinC<core::num*, core::int*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5b&ClassCb&MixinC*
+    : super bad::ClassCb::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class5b extends self::_Class5b&ClassCb&MixinC {
+  synthetic constructor •() → self::Class5b*
+    : super self::_Class5b&ClassCb&MixinC::•()
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:17:7: Error: 'Object' doesn't implement 'A' so it can't be used with 'MixinA'.
+//  - 'Object' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'MixinA' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class1a extends Object with MixinA {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:21:7: Error: 'Object' doesn't implement 'B<int>' so it can't be used with 'MixinB<int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'MixinB' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class2a extends Object with MixinB<int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:23:7: Error: 'B<int?>' doesn't implement 'B<int>' so it can't be used with 'MixinB<int>'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'MixinB' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class2b extends B<int?> with MixinB<int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:25:7: Error: 'B<num>' doesn't implement 'B<int>' so it can't be used with 'MixinB<int>'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'MixinB' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class2c extends B<num> with MixinB<int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:29:7: Error: 'B<Object>' doesn't implement 'B<dynamic>' so it can't be used with 'MixinB<dynamic>'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'Object' is from 'dart:core'.
+//  - 'MixinB' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class2e extends B<Object> with MixinB<dynamic> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:33:7: Error: 'Object' doesn't implement 'C<num, int>' so it can't be used with 'MixinC<num, int>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'MixinC' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class3a extends Object with MixinC<num, int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:35:7: Error: 'C<num, num>' doesn't implement 'C<num, int>' so it can't be used with 'MixinC<num, int>'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'MixinC' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class3b extends C<num, num> with MixinC<num, int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:37:7: Error: 'C<num?, int>' doesn't implement 'C<num, int>' so it can't be used with 'MixinC<num, int>'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'MixinC' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class3c extends C<num?, int> with MixinC<num, int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:49:7: Error: 'ClassBa' doesn't implement 'B<int>' so it can't be used with 'MixinB<int>'.
+//  - 'ClassBa' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'MixinB' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class4a extends ClassBa with MixinB<int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:53:7: Error: 'ClassBb' doesn't implement 'B<int?>' so it can't be used with 'MixinB<int?>'.
+//  - 'ClassBb' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'MixinB' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class4c extends ClassBb with MixinB<int?> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:57:7: Error: 'ClassCa' doesn't implement 'C<num?, int>' so it can't be used with 'MixinC<num?, int>'.
+//  - 'ClassCa' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'MixinC' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class5a extends ClassCa with MixinC<num?, int> {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart:61:7: Error: 'ClassCb' doesn't implement 'C<num?, int?>' so it can't be used with 'MixinC<num?, int?>'.
+//  - 'ClassCb' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+//  - 'MixinC' is from 'pkg/front_end/testcases/nnbd_mixed/bad_mixins_lib.dart'.
+// class Class5c extends ClassCb with MixinC<num?, int?> {} // error
+//       ^
+//
+import self as bad;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → bad::A
+    : super core::Object::•()
+    ;
+}
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → bad::B<bad::B::T%>
+    : super core::Object::•()
+    ;
+}
+class C<T extends core::Object? = dynamic, S extends bad::C::T% = dynamic> extends core::Object {
+  synthetic constructor •() → bad::C<bad::C::T%, bad::C::S%>
+    : super core::Object::•()
+    ;
+}
+abstract class MixinA extends bad::A /*isMixinDeclaration*/  {
+}
+abstract class MixinB<T extends core::Object? = dynamic> extends bad::B<bad::MixinB::T%> /*isMixinDeclaration*/  {
+}
+abstract class MixinC<T extends core::Object? = dynamic, S extends bad::MixinC::T% = dynamic> extends bad::C<bad::MixinC::T%, bad::MixinC::S%> /*isMixinDeclaration*/  {
+}
+abstract class _Class1a&Object&MixinA = core::Object with bad::MixinA /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → bad::_Class1a&Object&MixinA
+    : super core::Object::•()
+    ;
+}
+class Class1a extends bad::_Class1a&Object&MixinA {
+  synthetic constructor •() → bad::Class1a
+    : super bad::_Class1a&Object&MixinA::•()
+    ;
+}
+abstract class _Class1b&A&MixinA = bad::A with bad::MixinA /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class1b&A&MixinA
+    : super bad::A::•()
+    ;
+}
+class Class1b extends bad::_Class1b&A&MixinA {
+  synthetic constructor •() → bad::Class1b
+    : super bad::_Class1b&A&MixinA::•()
+    ;
+}
+abstract class _Class2a&Object&MixinB = core::Object with bad::MixinB<core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → bad::_Class2a&Object&MixinB
+    : super core::Object::•()
+    ;
+}
+class Class2a extends bad::_Class2a&Object&MixinB {
+  synthetic constructor •() → bad::Class2a
+    : super bad::_Class2a&Object&MixinB::•()
+    ;
+}
+abstract class _Class2b&B&MixinB = bad::B<core::int?> with bad::MixinB<core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class2b&B&MixinB
+    : super bad::B::•()
+    ;
+}
+class Class2b extends bad::_Class2b&B&MixinB {
+  synthetic constructor •() → bad::Class2b
+    : super bad::_Class2b&B&MixinB::•()
+    ;
+}
+abstract class _Class2c&B&MixinB = bad::B<core::num> with bad::MixinB<core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class2c&B&MixinB
+    : super bad::B::•()
+    ;
+}
+class Class2c extends bad::_Class2c&B&MixinB {
+  synthetic constructor •() → bad::Class2c
+    : super bad::_Class2c&B&MixinB::•()
+    ;
+}
+abstract class _Class2d&B&MixinB = bad::B<core::int> with bad::MixinB<core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class2d&B&MixinB
+    : super bad::B::•()
+    ;
+}
+class Class2d extends bad::_Class2d&B&MixinB {
+  synthetic constructor •() → bad::Class2d
+    : super bad::_Class2d&B&MixinB::•()
+    ;
+}
+abstract class _Class2e&B&MixinB = bad::B<core::Object> with bad::MixinB<dynamic> /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class2e&B&MixinB
+    : super bad::B::•()
+    ;
+}
+class Class2e extends bad::_Class2e&B&MixinB {
+  synthetic constructor •() → bad::Class2e
+    : super bad::_Class2e&B&MixinB::•()
+    ;
+}
+abstract class _Class2f&B&MixinB = bad::B<core::Object?> with bad::MixinB<dynamic> /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class2f&B&MixinB
+    : super bad::B::•()
+    ;
+}
+class Class2f extends bad::_Class2f&B&MixinB {
+  synthetic constructor •() → bad::Class2f
+    : super bad::_Class2f&B&MixinB::•()
+    ;
+}
+abstract class _Class3a&Object&MixinC = core::Object with bad::MixinC<core::num, core::int> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → bad::_Class3a&Object&MixinC
+    : super core::Object::•()
+    ;
+}
+class Class3a extends bad::_Class3a&Object&MixinC {
+  synthetic constructor •() → bad::Class3a
+    : super bad::_Class3a&Object&MixinC::•()
+    ;
+}
+abstract class _Class3b&C&MixinC = bad::C<core::num, core::num> with bad::MixinC<core::num, core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class3b&C&MixinC
+    : super bad::C::•()
+    ;
+}
+class Class3b extends bad::_Class3b&C&MixinC {
+  synthetic constructor •() → bad::Class3b
+    : super bad::_Class3b&C&MixinC::•()
+    ;
+}
+abstract class _Class3c&C&MixinC = bad::C<core::num?, core::int> with bad::MixinC<core::num, core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class3c&C&MixinC
+    : super bad::C::•()
+    ;
+}
+class Class3c extends bad::_Class3c&C&MixinC {
+  synthetic constructor •() → bad::Class3c
+    : super bad::_Class3c&C&MixinC::•()
+    ;
+}
+abstract class _Class3d&C&MixinC = bad::C<core::num, core::int> with bad::MixinC<core::num, core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class3d&C&MixinC
+    : super bad::C::•()
+    ;
+}
+class Class3d extends bad::_Class3d&C&MixinC {
+  synthetic constructor •() → bad::Class3d
+    : super bad::_Class3d&C&MixinC::•()
+    ;
+}
+class ClassBa extends bad::B<core::int?> {
+  synthetic constructor •() → bad::ClassBa
+    : super bad::B::•()
+    ;
+}
+class ClassBb extends bad::B<core::int> {
+  synthetic constructor •() → bad::ClassBb
+    : super bad::B::•()
+    ;
+}
+class ClassCa extends bad::C<core::num?, core::int?> {
+  synthetic constructor •() → bad::ClassCa
+    : super bad::C::•()
+    ;
+}
+class ClassCb extends bad::C<core::num?, core::int> {
+  synthetic constructor •() → bad::ClassCb
+    : super bad::C::•()
+    ;
+}
+abstract class _Class4a&ClassBa&MixinB = bad::ClassBa with bad::MixinB<core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class4a&ClassBa&MixinB
+    : super bad::ClassBa::•()
+    ;
+}
+class Class4a extends bad::_Class4a&ClassBa&MixinB {
+  synthetic constructor •() → bad::Class4a
+    : super bad::_Class4a&ClassBa&MixinB::•()
+    ;
+}
+abstract class _Class4b&ClassBa&MixinB = bad::ClassBa with bad::MixinB<core::int?> /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class4b&ClassBa&MixinB
+    : super bad::ClassBa::•()
+    ;
+}
+class Class4b extends bad::_Class4b&ClassBa&MixinB {
+  synthetic constructor •() → bad::Class4b
+    : super bad::_Class4b&ClassBa&MixinB::•()
+    ;
+}
+abstract class _Class4c&ClassBb&MixinB = bad::ClassBb with bad::MixinB<core::int?> /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class4c&ClassBb&MixinB
+    : super bad::ClassBb::•()
+    ;
+}
+class Class4c extends bad::_Class4c&ClassBb&MixinB {
+  synthetic constructor •() → bad::Class4c
+    : super bad::_Class4c&ClassBb&MixinB::•()
+    ;
+}
+abstract class _Class4d&ClassBb&MixinB = bad::ClassBb with bad::MixinB<core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class4d&ClassBb&MixinB
+    : super bad::ClassBb::•()
+    ;
+}
+class Class4d extends bad::_Class4d&ClassBb&MixinB {
+  synthetic constructor •() → bad::Class4d
+    : super bad::_Class4d&ClassBb&MixinB::•()
+    ;
+}
+abstract class _Class5a&ClassCa&MixinC = bad::ClassCa with bad::MixinC<core::num?, core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class5a&ClassCa&MixinC
+    : super bad::ClassCa::•()
+    ;
+}
+class Class5a extends bad::_Class5a&ClassCa&MixinC {
+  synthetic constructor •() → bad::Class5a
+    : super bad::_Class5a&ClassCa&MixinC::•()
+    ;
+}
+abstract class _Class5b&ClassCa&MixinC = bad::ClassCa with bad::MixinC<core::num?, core::int?> /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class5b&ClassCa&MixinC
+    : super bad::ClassCa::•()
+    ;
+}
+class Class5b extends bad::_Class5b&ClassCa&MixinC {
+  synthetic constructor •() → bad::Class5b
+    : super bad::_Class5b&ClassCa&MixinC::•()
+    ;
+}
+abstract class _Class5c&ClassCb&MixinC = bad::ClassCb with bad::MixinC<core::num?, core::int?> /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class5c&ClassCb&MixinC
+    : super bad::ClassCb::•()
+    ;
+}
+class Class5c extends bad::_Class5c&ClassCb&MixinC {
+  synthetic constructor •() → bad::Class5c
+    : super bad::_Class5c&ClassCb&MixinC::•()
+    ;
+}
+abstract class _Class5d&ClassCb&MixinC = bad::ClassCb with bad::MixinC<core::num?, core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → bad::_Class5d&ClassCb&MixinC
+    : super bad::ClassCb::•()
+    ;
+}
+class Class5d extends bad::_Class5d&ClassCb&MixinC {
+  synthetic constructor •() → bad::Class5d
+    : super bad::_Class5d&ClassCb&MixinC::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/bounds_from_opt_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/bounds_from_opt_in.dart.weak.modular.expect
new file mode 100644
index 0000000..b07ab07
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/bounds_from_opt_in.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library;
+import self as self;
+import "bounds_from_opt_in_lib.dart" as bou;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///bounds_from_opt_in_lib.dart";
+
+class LegacyClass<T extends Null> extends bou::Class<self::LegacyClass::T*> {
+  synthetic constructor •() → self::LegacyClass<self::LegacyClass::T*>*
+    : super bou::Class::•()
+    ;
+  method method<T extends Null>() → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  bou::Class<Null>* c = new bou::Class::•<Null>();
+  c.{bou::Class::method}<Null>(){() →* dynamic};
+  bou::method<Null>();
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as bou;
+import "dart:core" as core;
+
+class Class<T extends Never> extends core::Object {
+  synthetic constructor •() → bou::Class<bou::Class::T>
+    : super core::Object::•()
+    ;
+  method method<T extends Never>() → dynamic {}
+}
+static method method<T extends Never>() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/call_opt_in_through_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/call_opt_in_through_opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..524b85c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/call_opt_in_through_opt_out.dart.weak.modular.expect
@@ -0,0 +1,51 @@
+library;
+import self as self;
+import "call_opt_in_through_opt_out_lib.dart" as cal;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///call_opt_in_through_opt_out_lib.dart";
+
+static method test() → dynamic {
+  cal::applyTakesNever(#C1);
+  cal::applyTakesNever(#C2);
+  cal::applyTakesNull(#C1);
+  cal::applyTakesNull(#C2);
+  cal::applyTakesNeverNamed(f: #C1);
+  cal::applyTakesNeverNamed(f: #C2);
+  cal::applyTakesNullNamed(f: #C1);
+  cal::applyTakesNullNamed(f: #C2);
+  cal::applyTakesNonNullable(#C3);
+  cal::applyTakesNonNullable(#C4);
+  cal::applyTakesNullable(#C3);
+  cal::applyTakesNullable(#C4);
+  cal::applyTakesNonNullableNamed(f: #C3);
+  cal::applyTakesNonNullableNamed(f: #C4);
+  cal::applyTakesNullableNamed(f: #C3);
+  cal::applyTakesNullableNamed(f: #C4);
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as cal;
+import "dart:core" as core;
+
+static method takesNull(Null n) → void {}
+static method takesNever(Never n) → void {}
+static method applyTakesNull((Null) → void f) → dynamic {}
+static method applyTakesNever((Never) → void f) → dynamic {}
+static method applyTakesNullNamed({required (Null) → void f = #C5}) → dynamic {}
+static method applyTakesNeverNamed({required (Never) → void f = #C5}) → dynamic {}
+static method takesNullable(core::int? i) → void {}
+static method takesNonNullable(core::int i) → void {}
+static method applyTakesNullable((core::int?) → void f) → dynamic {}
+static method applyTakesNonNullable((core::int) → void f) → dynamic {}
+static method applyTakesNullableNamed({required (core::int?) → void f = #C5}) → dynamic {}
+static method applyTakesNonNullableNamed({required (core::int) → void f = #C5}) → dynamic {}
+
+constants  {
+  #C1 = static-tearoff cal::takesNever
+  #C2 = static-tearoff cal::takesNull
+  #C3 = static-tearoff cal::takesNonNullable
+  #C4 = static-tearoff cal::takesNullable
+  #C5 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/const_canonical_type.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/const_canonical_type.dart.weak.modular.expect
new file mode 100644
index 0000000..50d1579
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/const_canonical_type.dart.weak.modular.expect
@@ -0,0 +1,119 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "const_canonical_type_lib.dart" as con;
+import "dart:core" as core;
+
+import "dart:async";
+import "org-dartlang-testcase:///const_canonical_type_lib.dart" as oo;
+
+typedef F1 = () → con::A<FutureOr<dynamic>>;
+typedef F2 = () → con::A<dynamic>;
+typedef F3 = () → con::A<FutureOr<FutureOr<dynamic>?>>;
+typedef F4 = () → con::A<dynamic>;
+class Check extends core::Object /*hasConstConstructor*/  {
+  final field dynamic _ignored;
+  const constructor •(dynamic x, dynamic y) → self::Check
+    : assert(core::identical(x, y)), self::Check::_ignored = core::identical(x, y) ?{core::int} 42 : 1.{core::num::~/}(0){(core::num) → core::int}, super core::Object::•()
+    ;
+}
+static method expectEqual(dynamic x, dynamic y) → void {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
+    throw "Arguments were supposed to be identical.";
+  }
+}
+static method test1() → dynamic {
+  core::Type v = #C1;
+  self::expectEqual(#C1, v);
+  self::expectEqual(v, #C1);
+  self::expectEqual(#C1, con::v);
+  self::expectEqual(con::v, #C1);
+  self::expectEqual(#C1, #C1);
+  core::Type vf1 = #C2;
+  core::Type vf2 = #C2;
+  core::Type vf3 = #C2;
+  core::Type vf4 = #C2;
+  core::Type oovf1 = #C2;
+  core::Type oovf2 = #C2;
+  core::Type oovf3 = #C2;
+  core::Type oovf4 = #C2;
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, vf1);
+  self::expectEqual(vf1, vf2);
+  self::expectEqual(vf2, vf3);
+  self::expectEqual(vf3, vf4);
+  self::expectEqual(vf4, oovf1);
+  self::expectEqual(oovf1, oovf2);
+  self::expectEqual(oovf2, oovf3);
+  self::expectEqual(oovf3, oovf4);
+  self::expectEqual(oovf4, #C2);
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, #C2);
+  self::expectEqual(#C2, #C2);
+  return #C5;
+}
+static method main() → dynamic {
+  self::test1();
+}
+
+library;
+import self as con;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef F1 = () →* con::A<FutureOr<dynamic>*>*;
+typedef F2 = () →* con::A<dynamic>*;
+typedef F3 = () →* con::A<FutureOr<FutureOr<dynamic>*>*>*;
+typedef F4 = () →* con::A<dynamic>*;
+class A<X extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → con::A<con::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field core::Type* c = #C1;
+static field core::Type* v = #C1;
+static const field con::A<core::List<() →* con::A<FutureOr<dynamic>*>*>*>* a1 = #C6;
+static const field con::A<core::List<() →* con::A<dynamic>*>*>* a2 = #C6;
+static const field con::A<core::List<() →* con::A<FutureOr<FutureOr<dynamic>*>*>*>*>* a3 = #C6;
+static const field con::A<core::List<() →* con::A<dynamic>*>*>* a4 = #C6;
+
+constants  {
+  #C1 = TypeLiteralConstant(con::A<dynamic>*)
+  #C2 = TypeLiteralConstant(() →* con::A<dynamic>*)
+  #C3 = 42
+  #C4 = self::Check {_ignored:#C3}
+  #C5 = <dynamic>[#C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4, #C4]
+  #C6 = con::A<core::List<() →* con::A<dynamic>*>*> {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///const_canonical_type.dart:
+- A. (from org-dartlang-testcase:///const_canonical_type_lib.dart:10:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Check. (from org-dartlang-testcase:///const_canonical_type.dart:11:9)
+
+org-dartlang-testcase:///const_canonical_type_lib.dart:
+- A. (from org-dartlang-testcase:///const_canonical_type_lib.dart:10:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd_mixed/const_is.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/const_is.dart.weak.modular.expect
new file mode 100644
index 0000000..001ca03
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/const_is.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///const_is_lib.dart";
+
+static method main() → dynamic {
+  self::expect(true, #C1 is{ForNonNullableByDefault} <T extends core::Object?>() → void);
+  self::expect(true, #C2);
+  self::expect(true, #C3 is{ForNonNullableByDefault} <T extends Never = dynamic>() → void);
+  self::expect(true, #C2);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+typedef fnTypeWithNullableObjectBound = <T extends core::Object?>() → void;
+typedef fnTypeWithNeverBound = <T extends Never = dynamic>() → void;
+static method fnWithNonNullObjectBound<T extends core::Object>() → void
+  return null;
+static method fnWithNullBound<T extends Null>() → void
+  return null;
+
+constants  {
+  #C1 = static-tearoff self2::fnWithNonNullObjectBound
+  #C2 = true
+  #C3 = static-tearoff self2::fnWithNullBound
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/constant_null_is.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/constant_null_is.dart.weak.modular.expect
new file mode 100644
index 0000000..69b11ec
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/constant_null_is.dart.weak.modular.expect
@@ -0,0 +1,144 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "constant_null_is_lib.dart" as con;
+
+import "dart:async";
+import "org-dartlang-testcase:///constant_null_is_lib.dart";
+
+class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field core::bool field;
+  const constructor constructor1(dynamic value) → self::Class<self::Class::T%>
+    : self::Class::field = value is{ForNonNullableByDefault} self::Class::T%, super core::Object::•()
+    ;
+  const constructor constructor2(dynamic value) → self::Class<self::Class::T%>
+    : self::Class::field = value is{ForNonNullableByDefault} self::Class::T?, super core::Object::•()
+    ;
+  const constructor constructor3(dynamic value) → self::Class<self::Class::T%>
+    : self::Class::field = value is{ForNonNullableByDefault} self::Class<self::Class::T%>, super core::Object::•()
+    ;
+  const constructor constructor4(dynamic value) → self::Class<self::Class::T%>
+    : self::Class::field = value is{ForNonNullableByDefault} self::Class<self::Class::T%>?, super core::Object::•()
+    ;
+}
+static final field core::bool isWeakMode = #C1 is{ForNonNullableByDefault} core::List<core::Object>;
+static const field core::bool c0 = #C2;
+static const field core::bool c1 = #C3;
+static const field core::bool c2 = #C2;
+static const field core::bool c3 = #C2;
+static const field core::bool c4 = #C3;
+static const field core::bool c5 = #C2;
+static const field core::bool c6 = #C3;
+static const field core::bool c7 = #C2;
+static const field core::bool c8 = #C2;
+static const field core::bool c9 = #C2;
+static const field core::bool c10 = #C3;
+static const field core::bool c11 = #C2;
+static const field core::bool c12 = #C2;
+static const field self::Class<core::int> e1 = #C4;
+static const field self::Class<core::List<core::int>> e2 = #C5;
+static const field self::Class<Null> e3 = #C6;
+static const field self::Class<core::int> e4 = #C7;
+static const field self::Class<core::int?> e5 = #C8;
+static const field self::Class<Null> e6 = #C6;
+static const field self::Class<core::int> e7 = #C4;
+static const field self::Class<core::int?> e8 = #C9;
+static const field self::Class<Null> e9 = #C10;
+static const field self::Class<core::int> e10 = #C7;
+static const field self::Class<core::int?> e11 = #C8;
+static const field self::Class<Null> e12 = #C6;
+static method main() → dynamic {
+  self::expect(null is{ForNonNullableByDefault} core::int?, #C2, "null is int?");
+  self::expect(null is{ForNonNullableByDefault} core::int, #C3, "null is int");
+  self::expect(null is{ForNonNullableByDefault} Null, #C2, "null is Null");
+  self::expect(null is{ForNonNullableByDefault} Never?, #C2, "null is Never?");
+  self::expect(null is{ForNonNullableByDefault} Never, #C3, "null is Never");
+  self::expect(null is{ForNonNullableByDefault} FutureOr<core::int?>, #C2, "null is FutureOr<int?>");
+  self::expect(null is{ForNonNullableByDefault} FutureOr<core::int>, #C3, "null is FutureOr<int>");
+  self::expect(null is{ForNonNullableByDefault} FutureOr<core::int>?, #C2, "null is FutureOr<int>?");
+  self::expect(null is{ForNonNullableByDefault} FutureOr<Null>, #C2, "null is FutureOr<Null>");
+  self::expect(null is{ForNonNullableByDefault} FutureOr<Null>?, #C2, "null is FutureOr<Null>?");
+  self::expect(null is{ForNonNullableByDefault} FutureOr<Never>, #C3, "null is FutureOr<Never>");
+  self::expect(null is{ForNonNullableByDefault} FutureOr<Never?>, #C2, "null is FutureOr<Never?>");
+  self::expect(null is{ForNonNullableByDefault} FutureOr<Never>?, #C2, "null is FutureOr<Never>?");
+  self::expect(new self::Class::constructor1<core::int>(null).{self::Class::field}{core::bool}, #C4.{self::Class::field}{core::bool}, "Class<int>.constructor1(null).field");
+  self::expect(true, new self::Class::constructor1<core::int?>(null).{self::Class::field}{core::bool}, "new Class<int?>.constructor1(null).field");
+  self::expect(self::isWeakMode, #C5.{self::Class::field}{core::bool}, "const Class<List<int>>.constructor1(<Null>[null]).field");
+  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}{core::bool}, #C6.{self::Class::field}{core::bool}, "Class<Null>.constructor1(null).field");
+  self::expect(new self::Class::constructor2<core::int>(null).{self::Class::field}{core::bool}, #C7.{self::Class::field}{core::bool}, "Class<int>.constructor2(null).field");
+  self::expect(true, new self::Class::constructor2<core::int?>(null).{self::Class::field}{core::bool}, "new Class<int?>.constructor2(null).field");
+  self::expect(new self::Class::constructor2<core::int?>(null).{self::Class::field}{core::bool}, #C8.{self::Class::field}{core::bool}, "Class<int?>.constructor2(null).field");
+  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}{core::bool}, #C6.{self::Class::field}{core::bool}, "Class<Null>.constructor2(null).field");
+  self::expect(new self::Class::constructor3<core::int>(null).{self::Class::field}{core::bool}, #C4.{self::Class::field}{core::bool}, "Class<int>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}{core::bool}, #C9.{self::Class::field}{core::bool}, "Class<int?>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}{core::bool}, #C9.{self::Class::field}{core::bool}, "Class<int?>.constructor3(null).field");
+  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}{core::bool}, #C10.{self::Class::field}{core::bool}, "Class<Null>.constructor3(null).field");
+  self::expect(new self::Class::constructor4<core::int>(null).{self::Class::field}{core::bool}, #C7.{self::Class::field}{core::bool}, "Class<int>.constructor4(null).field");
+  self::expect(new self::Class::constructor4<core::int?>(null).{self::Class::field}{core::bool}, #C8.{self::Class::field}{core::bool}, "Class<int?>.constructor4(null).field");
+  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}{core::bool}, #C6.{self::Class::field}{core::bool}, "Class<Null>.constructor4(null).field");
+  con::test();
+}
+static method expect(dynamic expected, dynamic actual, core::String message) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual} for ${message}";
+}
+
+library;
+import self as con;
+import "constant_null_is.dart" as self;
+import "dart:core" as core;
+
+import "dart:async";
+import "org-dartlang-testcase:///constant_null_is.dart";
+
+static const field core::bool* d0 = #C3;
+static const field core::bool* d1 = #C2;
+static const field self::Class<core::int*>* d4 = #C4;
+static const field self::Class<Null>* d5 = #C6;
+static const field self::Class<core::int*>* d6 = #C7;
+static const field self::Class<Null>* d7 = #C6;
+static const field self::Class<core::int*>* d8 = #C4;
+static const field self::Class<Null>* d9 = #C10;
+static const field self::Class<core::int*>* d10 = #C7;
+static const field self::Class<Null>* d11 = #C6;
+static method test() → dynamic {
+  self::expect(null is core::int*, #C3, "null is int (opt-out)");
+  self::expect(null is Null, #C2, "null is Null");
+  self::expect(new self::Class::constructor1<core::int*>(null).{self::Class::field}{core::bool*}, #C4.{self::Class::field}{core::bool*}, "Class<int>.constructor1(null).field (opt-out)");
+  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}{core::bool*}, #C6.{self::Class::field}{core::bool*}, "Class<Null>.constructor1(null).field (opt-out)");
+  self::expect(new self::Class::constructor2<core::int*>(null).{self::Class::field}{core::bool*}, #C7.{self::Class::field}{core::bool*}, "Class<int>.constructor2(null).field (opt-out)");
+  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}{core::bool*}, #C6.{self::Class::field}{core::bool*}, "Class<Null>.constructor2(null).field (opt-out)");
+  self::expect(new self::Class::constructor3<core::int*>(null).{self::Class::field}{core::bool*}, #C4.{self::Class::field}{core::bool*}, "Class<int>.constructor3(null).field (opt-out)");
+  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}{core::bool*}, #C10.{self::Class::field}{core::bool*}, "Class<Null>.constructor3(null).field (opt-out)");
+  self::expect(new self::Class::constructor4<core::int*>(null).{self::Class::field}{core::bool*}, #C7.{self::Class::field}{core::bool*}, "Class<int>.constructor4(null).field (opt-out)");
+  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}{core::bool*}, #C6.{self::Class::field}{core::bool*}, "Class<Null>.constructor4(null).field (opt-out)");
+}
+
+constants  {
+  #C1 = <Null>[]
+  #C2 = true
+  #C3 = false
+  #C4 = self::Class<core::int*> {field:#C3}
+  #C5 = self::Class<core::List<core::int*>*> {field:#C2}
+  #C6 = self::Class<Null> {field:#C2}
+  #C7 = self::Class<core::int*> {field:#C2}
+  #C8 = self::Class<core::int?> {field:#C2}
+  #C9 = self::Class<core::int?> {field:#C3}
+  #C10 = self::Class<Null> {field:#C3}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///constant_null_is.dart:
+- Class.constructor1 (from org-dartlang-testcase:///constant_null_is.dart:39:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Class.constructor2 (from org-dartlang-testcase:///constant_null_is.dart:40:9)
+- Class.constructor3 (from org-dartlang-testcase:///constant_null_is.dart:41:9)
+- Class.constructor4 (from org-dartlang-testcase:///constant_null_is.dart:42:9)
+
+org-dartlang-testcase:///constant_null_is_lib.dart:
+- Class.constructor1 (from org-dartlang-testcase:///constant_null_is.dart:39:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Class.constructor2 (from org-dartlang-testcase:///constant_null_is.dart:40:9)
+- Class.constructor3 (from org-dartlang-testcase:///constant_null_is.dart:41:9)
+- Class.constructor4 (from org-dartlang-testcase:///constant_null_is.dart:42:9)
diff --git a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.modular.expect
new file mode 100644
index 0000000..f72fa11
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.modular.expect
@@ -0,0 +1,104 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "constants_lib.dart" as con;
+
+import "org-dartlang-testcase:///constants_lib.dart" as lib;
+
+static const field (core::int) → core::int partialInstantiation = #C2;
+static const field con::Class<core::int> instance = #C4;
+static const field core::List<core::int> listLiteral = #C5;
+static const field core::Set<core::int> setLiteral = #C6;
+static const field core::Map<core::int, core::String> mapLiteral = #C8;
+static const field core::List<core::int> listConcatenation = #C5;
+static const field core::Set<core::int> setConcatenation = #C6;
+static const field core::Map<core::int, core::String> mapConcatenation = #C8;
+static const field core::bool partialInstantiationIdentical = #C9;
+static const field core::bool instanceIdentical = #C9;
+static const field core::bool listLiteralIdentical = #C9;
+static const field core::bool setLiteralIdentical = #C9;
+static const field core::bool mapLiteralIdentical = #C9;
+static const field core::bool listConcatenationIdentical = #C9;
+static const field core::bool setConcatenationIdentical = #C9;
+static const field core::bool mapConcatenationIdentical = #C9;
+static method main() → dynamic {
+  self::test(#C2, #C2);
+  self::test(#C4, #C4);
+  self::test(#C5, #C5);
+  self::test(#C6, #C6);
+  self::test(#C8, #C8);
+  self::test(#C5, #C5);
+  self::test(#C6, #C6);
+  self::test(#C8, #C8);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
+  self::test(true, #C9);
+}
+static method test(dynamic expected, dynamic actual) → dynamic {
+  core::print("test(${expected}, ${actual})");
+  if(!core::identical(expected, actual)) {
+    throw "Expected ${expected}, actual ${actual}";
+  }
+}
+
+library;
+import self as con;
+import "dart:core" as core;
+
+typedef F1<invariant T extends core::Object* = dynamic> = (T*) →* T*;
+typedef F2 = <T extends core::Object* = dynamic>(T*) →* T*;
+class Class<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field con::Class::T* field;
+  const constructor •(con::Class::T* field) → con::Class<con::Class::T*>*
+    : con::Class::field = field, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field (core::Object*, core::Object*) →* core::bool* c2 = #C10;
+static const field (core::int*) →* core::int* partialInstantiation = #C2;
+static const field con::Class<core::int*>* instance = #C4;
+static const field core::List<core::int*>* listLiteral = #C5;
+static const field core::Set<core::int*>* setLiteral = #C6;
+static const field core::Map<core::int*, core::String*>* mapLiteral = #C8;
+static const field core::List<core::int*>* listConcatenation = #C5;
+static const field core::Set<core::int*>* setConcatenation = #C6;
+static const field core::Map<core::int*, core::String*>* mapConcatenation = #C8;
+static method id<T extends core::Object* = dynamic>(con::id::T* t) → con::id::T*
+  return t;
+
+constants  {
+  #C1 = static-tearoff con::id
+  #C2 = instantiation #C1 <core::int*>
+  #C3 = 0
+  #C4 = con::Class<core::int*> {field:#C3}
+  #C5 = <core::int*>[#C3]
+  #C6 = <core::int*>{#C3}
+  #C7 = "foo"
+  #C8 = <core::int*, core::String*>{#C3:#C7)
+  #C9 = true
+  #C10 = static-tearoff core::identical
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///constants.dart:
+- Class. (from org-dartlang-testcase:///constants_lib.dart:10:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
+org-dartlang-testcase:///constants_lib.dart:
+- Class. (from org-dartlang-testcase:///constants_lib.dart:10:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.modular.expect
new file mode 100644
index 0000000..a18752a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart:11:27: Error: The parameter 'cls' of the method 'SubClass.invariant' has type 'SubClass', which does not match the corresponding type, 'Class', in the overridden method, 'Class.invariant'.
+//  - 'SubClass' is from 'pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart'.
+//  - 'Class' is from 'pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in_lib.dart'.
+// Change to a supertype of 'Class', or, for a covariant parameter, a subtype.
+//   void invariant(SubClass cls) {} // error
+//                           ^
+// pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in_lib.dart:9:8: Context: This is the overridden method ('invariant').
+//   void invariant(Class cls);
+//        ^
+//
+import self as self;
+import "covariant_from_opt_in_lib.dart" as cov;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///covariant_from_opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin = cov::Class with cov::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_SubClass&Class&Mixin*
+    : super cov::Class::•()
+    ;
+  abstract member-signature method covariant(covariant-by-declaration cov::Class* cls) → void; -> cov::Class::covariant
+  abstract member-signature method invariant(cov::Class* cls) → void; -> cov::Class::invariant
+  abstract member-signature method contravariant(cov::Class* cls) → void; -> cov::Class::contravariant
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SubClass extends self::_SubClass&Class&Mixin {
+  synthetic constructor •() → self::SubClass*
+    : super self::_SubClass&Class&Mixin::•()
+    ;
+  method covariant(covariant-by-declaration self::SubClass* cls) → void {}
+  method invariant(self::SubClass* cls) → void {}
+  method contravariant(core::Object* cls) → void {}
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as cov;
+import "dart:core" as core;
+
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class Class extends core::Object {
+  synthetic constructor •() → cov::Class
+    : super core::Object::•()
+    ;
+  abstract method covariant(covariant-by-declaration cov::Class cls) → void;
+  abstract method invariant(cov::Class cls) → void;
+  abstract method contravariant(cov::Class cls) → void;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.weak.modular.expect
new file mode 100644
index 0000000..83322f3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart:12:7: Error: Generic type 'Hest2' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Fisk2'.
+// Try providing type arguments to 'Fisk2' here or to some other raw types in the bounds along the reference chain.
+// class Hest2<TypeX extends Fisk2> {}
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart:12:13: Context: Bound of this variable references raw type 'Fisk2'.
+// class Hest2<TypeX extends Fisk2> {}
+//             ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/cyclic_typedef_lib.dart:14:31: Context: Bound of this variable references raw type 'Hest2'.
+// typedef Fisk2 = void Function<TypeY extends Hest2>();
+//                               ^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart:14:9: Error: Generic type 'Fisk1' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest1'.
+// Try providing type arguments to 'Hest1' here or to some other raw types in the bounds along the reference chain.
+// typedef Fisk1 = void Function<TypeY extends Hest1>();
+//         ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/cyclic_typedef.dart:14:31: Context: Bound of this variable references raw type 'Hest1'.
+// typedef Fisk1 = void Function<TypeY extends Hest1>();
+//                               ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/cyclic_typedef_lib.dart:12:13: Context: Bound of this variable references raw type 'Fisk1'.
+// class Hest1<TypeX extends Fisk1> {}
+//             ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///cyclic_typedef_lib.dart";
+
+typedef Fisk1 = <TypeY extends core::Object? = dynamic>() → void;
+class Hest2<TypeX extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hest2<self::Hest2::TypeX%>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/cyclic_typedef_lib.dart:12:13: Error: Type variables can't have generic function types in their bounds.
+// class Hest1<TypeX extends Fisk1> {}
+//             ^^^^^
+//
+import self as self2;
+import "cyclic_typedef.dart" as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///cyclic_typedef.dart";
+
+typedef Fisk2 = <TypeY extends self::Hest2<dynamic> = dynamic>() → void;
+class Hest1<TypeX extends <TypeY extends core::Object? = dynamic>() → void = dynamic> extends core::Object {
+  synthetic constructor •() → self2::Hest1<self2::Hest1::TypeX>
+    : super core::Object::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/error_on_recompile_with_no_change/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/error_on_recompile_with_no_change/main.dart.weak.modular.expect
new file mode 100644
index 0000000..ccc539a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/error_on_recompile_with_no_change/main.dart.weak.modular.expect
@@ -0,0 +1,118 @@
+library;
+import self as self;
+import "object_lib.dart" as obj;
+import "main_lib1.dart" as mai;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///object_lib.dart";
+import "org-dartlang-testcase:///main_lib1.dart";
+
+class AdaptorElement extends obj::RenderObject {
+  synthetic constructor •() → self::AdaptorElement*
+    : super obj::RenderObject::•()
+    ;
+  get renderObject() → mai::Adaptor*
+    return super.{obj::RenderObject::renderObject} as{TypeError} mai::Adaptor*;
+  method foo() → void {
+    core::print(this.{self::AdaptorElement::renderObject}{mai::Adaptor*}.{mai::_Adaptor&RenderFoo&LibMixin::constraints}{obj::FooConstraints*}.{obj::FooConstraints::axis}{core::String*});
+  }
+  abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as obj;
+import "dart:core" as core;
+
+class RenderFoo extends obj::RenderObject {
+  synthetic constructor •() → obj::RenderFoo
+    : super obj::RenderObject::•()
+    ;
+  get constraints() → obj::FooConstraints
+    return super.{obj::RenderObject::constraints} as{ForNonNullableByDefault} obj::FooConstraints;
+}
+class FooConstraints extends obj::Constraints {
+  synthetic constructor •() → obj::FooConstraints
+    : super obj::Constraints::•()
+    ;
+  get axis() → core::String
+    return "hello";
+}
+class Constraints extends core::Object {
+  synthetic constructor •() → obj::Constraints
+    : super core::Object::•()
+    ;
+}
+class RenderObject extends core::Object {
+  synthetic constructor •() → obj::RenderObject
+    : super core::Object::•()
+    ;
+  get constraints() → obj::Constraints
+    return new obj::Constraints::•();
+  get renderObject() → obj::RenderObject
+    return this;
+}
+
+library;
+import self as mai;
+import "object_lib.dart" as obj;
+import "main_lib2.dart" as mai2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///object_lib.dart";
+import "org-dartlang-testcase:///main_lib2.dart";
+
+abstract class _Adaptor&RenderFoo&LibMixin = obj::RenderFoo with mai2::LibMixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → mai::_Adaptor&RenderFoo&LibMixin*
+    : super obj::RenderFoo::•()
+    ;
+  abstract member-signature get constraints() → obj::FooConstraints*; -> obj::RenderFoo::constraints
+  abstract member-signature get renderObject() → obj::RenderObject*; -> obj::RenderObject::renderObject
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Adaptor extends mai::_Adaptor&RenderFoo&LibMixin {
+  synthetic constructor •() → mai::Adaptor*
+    : super mai::_Adaptor&RenderFoo&LibMixin::•()
+    ;
+}
+
+library;
+import self as mai2;
+import "object_lib.dart" as obj;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///object_lib.dart";
+
+abstract class LibMixin extends obj::RenderObject /*isMixinDeclaration*/  {
+  abstract member-signature get constraints() → obj::Constraints*; -> obj::RenderObject::constraints
+  abstract member-signature get renderObject() → obj::RenderObject*; -> obj::RenderObject::renderObject
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/main.dart.weak.modular.expect
new file mode 100644
index 0000000..d4de37b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/experiment_release_version/main.dart.weak.modular.expect
@@ -0,0 +1,95 @@
+//
+// Problems outside component:
+//
+// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/allowed_package/lib/versioned_2_8_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.9 or higher.
+// int? versioned_2_8_AllowedPackage; // error
+//    ^
+// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/allowed_package/lib/versioned_2_8_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.8
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/not_allowed_package/lib/unversioned_lib.dart:5:4: Error: Null safety features are disabled for this library.
+// Try removing the package language version or setting the language version to 2.10 or higher.
+// int? versionedUnallowedPackage; // error
+//    ^
+//
+// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// int? versioned_2_8_AllowedPackage; // error
+//    ^
+// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/not_allowed_package/lib/versioned_2_8_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.8
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// int? versioned_2_9_AllowedPackage; // error
+//    ^
+// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/not_allowed_package/lib/versioned_2_9_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "package:allowed_package/unversioned_lib.dart";
+import "package:allowed_package/versioned_2_8_lib.dart";
+import "package:allowed_package/versioned_2_9_lib.dart";
+import "package:allowed_package/versioned_2_10_lib.dart";
+import "package:not_allowed_package/unversioned_lib.dart";
+import "package:not_allowed_package/versioned_2_8_lib.dart";
+import "package:not_allowed_package/versioned_2_9_lib.dart";
+import "package:not_allowed_package/versioned_2_10_lib.dart";
+import "org-dartlang-testcase:///unversioned_lib.dart";
+import "org-dartlang-testcase:///versioned_2_8_lib.dart";
+import "org-dartlang-testcase:///versioned_2_9_lib.dart";
+import "org-dartlang-testcase:///versioned_2_10_lib.dart";
+
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+static field core::int? unversionedLibrary;
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/versioned_2_8_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// int? versioned_2_8_Library; // error
+//    ^
+// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/versioned_2_8_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.8
+// ^^^^^^^^^^^^
+//
+import self as self3;
+import "dart:core" as core;
+
+static field core::int? versioned_2_8_Library;
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/versioned_2_9_lib.dart:7:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.10 or higher.
+// int? versioned_2_9_Library; // error
+//    ^
+// pkg/front_end/testcases/nnbd_mixed/experiment_release_version/versioned_2_9_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+import self as self4;
+import "dart:core" as core;
+
+static field core::int? versioned_2_9_Library;
+
+library /*isNonNullableByDefault*/;
+import self as self5;
+import "dart:core" as core;
+
+static field core::int? versioned_2_10_Library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/export_from_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/export_from_opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..a081994
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/export_from_opt_out.dart.weak.modular.expect
@@ -0,0 +1,164 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/export_from_opt_out.dart:6:1: Error: Null safe libraries are not allowed to export declarations from of opt-out libraries.
+// export 'export_from_opt_out_lib1.dart';
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/export_from_opt_out.dart:10:1: Error: Null safe libraries are not allowed to export declarations from of opt-out libraries.
+// export 'export_from_opt_out_lib2.dart' hide legacyMethod2;
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/export_from_opt_out.dart:13:1: Error: Null safe libraries are not allowed to export declarations from of opt-out libraries.
+// export 'export_from_opt_out_lib3.dart' show LegacyClass2;
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/export_from_opt_out.dart:16:1: Error: Null safe libraries are not allowed to export declarations from of opt-out libraries.
+// export 'export_from_opt_out_lib3.dart' show legacyMethod1;
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/export_from_opt_out.dart:19:1: Error: Null safe libraries are not allowed to export declarations from of opt-out libraries.
+// export 'export_from_opt_out_lib3.dart' show LegacyExtension;
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/export_from_opt_out.dart:22:1: Error: Null safe libraries are not allowed to export declarations from of opt-out libraries.
+// export 'export_from_opt_out_lib3.dart' show LegacyTypedef;
+// ^
+//
+import self as self;
+import "export_from_opt_out_lib1.dart" as exp;
+import "export_from_opt_out_lib2.dart" as exp2;
+import "export_from_opt_out_lib3.dart" as exp3;
+import "export_from_opt_out_lib5.dart" as exp4;
+additionalExports = (exp::LegacyClass1,
+  exp2::LegacyClass3,
+  exp2::LegacyClass4,
+  exp3::LegacyClass2,
+  exp3::legacyMethod1,
+  exp3::LegacyExtension,
+  exp3::LegacyTypedef,
+  exp4::NnbdClass1,
+  exp4::NnbdClass2)
+
+export "org-dartlang-testcase:///export_from_opt_out_lib1.dart";
+export "org-dartlang-testcase:///export_from_opt_out_lib2.dart" hide legacyMethod2;
+export "org-dartlang-testcase:///export_from_opt_out_lib3.dart" show LegacyClass2;
+export "org-dartlang-testcase:///export_from_opt_out_lib3.dart" show legacyMethod1;
+export "org-dartlang-testcase:///export_from_opt_out_lib3.dart" show LegacyExtension;
+export "org-dartlang-testcase:///export_from_opt_out_lib3.dart" show LegacyTypedef;
+export "org-dartlang-testcase:///export_from_opt_out_lib3.dart" show NnbdClass1;
+export "org-dartlang-testcase:///export_from_opt_out_lib3.dart" hide LegacyClass2, LegacyExtension, LegacyTypedef, legacyMethod1;
+export "org-dartlang-testcase:///export_from_opt_out_lib4.dart";
+export "org-dartlang-testcase:///export_from_opt_out_lib5.dart";
+
+static method main() → dynamic {}
+
+library;
+import self as exp;
+import "dart:core" as core;
+
+class LegacyClass1 extends core::Object {
+  synthetic constructor •() → exp::LegacyClass1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+library;
+import self as exp2;
+import "dart:core" as core;
+
+class LegacyClass3 extends core::Object {
+  synthetic constructor •() → exp2::LegacyClass3*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass4 extends core::Object {
+  synthetic constructor •() → exp2::LegacyClass4*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method legacyMethod2() → dynamic {}
+
+library;
+import self as exp3;
+import "dart:core" as core;
+import "export_from_opt_out_lib5.dart" as exp4;
+additionalExports = (exp4::NnbdClass1,
+  exp4::NnbdClass2)
+
+export "org-dartlang-testcase:///export_from_opt_out_lib5.dart";
+
+typedef LegacyTypedef = () →* void;
+class LegacyClass2 extends core::Object {
+  synthetic constructor •() → exp3::LegacyClass2*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension LegacyExtension on core::String* {
+}
+static method legacyMethod1() → dynamic {}
+
+library;
+import self as self2;
+import "export_from_opt_out_lib5.dart" as exp4;
+additionalExports = (exp4::NnbdClass1,
+  exp4::NnbdClass2)
+
+export "org-dartlang-testcase:///export_from_opt_out_lib5.dart";
+
+
+library /*isNonNullableByDefault*/;
+import self as exp4;
+import "dart:core" as core;
+
+class NnbdClass1 extends core::Object {
+  synthetic constructor •() → exp4::NnbdClass1
+    : super core::Object::•()
+    ;
+}
+class NnbdClass2 extends core::Object {
+  synthetic constructor •() → exp4::NnbdClass2
+    : super core::Object::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/flutter_issue_63029/flutter_issue_63029.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/flutter_issue_63029/flutter_issue_63029.dart.weak.modular.expect
new file mode 100644
index 0000000..ab022ec
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/flutter_issue_63029/flutter_issue_63029.dart.weak.modular.expect
@@ -0,0 +1,76 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "flutter_issue_63029_lib1.dart" as flu;
+import "flutter_issue_63029_lib2.dart" as flu2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///flutter_issue_63029_lib1.dart";
+import "org-dartlang-testcase:///flutter_issue_63029_lib2.dart";
+
+class E extends flu::A {
+  synthetic constructor •() → self::E
+    : super flu::A::•()
+    ;
+}
+abstract class _F&B&D = flu::B<self::E> with flu2::D<self::E> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_F&B&D
+    : super flu::B::•()
+    ;
+  abstract member-signature operator /*isLegacy*/ ==(dynamic other) → core::bool*; -> core::Object::==
+}
+class F extends self::_F&B&D {
+  synthetic constructor •() → self::F
+    : super self::_F&B&D::•()
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as flu;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → flu::A
+    : super core::Object::•()
+    ;
+}
+abstract class B<T extends flu::A> extends core::Object {
+  synthetic constructor •() → flu::B<flu::B::T>
+    : super core::Object::•()
+    ;
+}
+
+library;
+import self as flu2;
+import "dart:core" as core;
+import "flutter_issue_63029_lib1.dart" as flu;
+
+import "org-dartlang-testcase:///flutter_issue_63029_lib1.dart";
+
+class C extends core::Object {
+  synthetic constructor •() → flu2::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D<T extends flu::A*> extends flu::B<flu2::D::T*> implements flu2::C /*isMixinDeclaration*/  {
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/generic_override.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/generic_override.dart.weak.modular.expect
new file mode 100644
index 0000000..71759ac
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/generic_override.dart.weak.modular.expect
@@ -0,0 +1,199 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/generic_override.dart:39:8: Error: Declared bound 'Object?' of type variable 'T' of 'Class2.method4b' doesn't match the bound 'Object' on overridden method 'Class1.method4b'.
+//  - 'Object' is from 'dart:core'.
+//   void method4b<T extends Object?>(); // error
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/generic_override.dart:19:8: Context: This is the overridden method ('method4b').
+//   void method4b<T extends Object>();
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/generic_override.dart:40:8: Error: Declared bound 'Object' of type variable 'T' of 'Class2.method4c' doesn't match the bound 'Object?' on overridden method 'Class1.method4c'.
+//  - 'Object' is from 'dart:core'.
+//   void method4c<T extends Object>(); // error
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/generic_override.dart:20:8: Context: This is the overridden method ('method4c').
+//   void method4c<T extends Object?>();
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/generic_override.dart:43:8: Error: Declared bound 'Class1?' of type variable 'T' of 'Class2.method5b' doesn't match the bound 'Class1' on overridden method 'Class1.method5b'.
+//  - 'Class1' is from 'pkg/front_end/testcases/nnbd_mixed/generic_override.dart'.
+//   void method5b<T extends Class1?>(); // error
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/generic_override.dart:23:8: Context: This is the overridden method ('method5b').
+//   void method5b<T extends Class1>();
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/generic_override.dart:44:8: Error: Declared bound 'Class1' of type variable 'T' of 'Class2.method5c' doesn't match the bound 'Class1?' on overridden method 'Class1.method5c'.
+//  - 'Class1' is from 'pkg/front_end/testcases/nnbd_mixed/generic_override.dart'.
+//   void method5c<T extends Class1>(); // error
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/generic_override.dart:24:8: Context: This is the overridden method ('method5c').
+//   void method5c<T extends Class1?>();
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+import "generic_override_lib.dart" as gen;
+
+import "org-dartlang-testcase:///generic_override_lib.dart";
+
+abstract class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+  abstract method method1a<T extends core::Object? = dynamic>() → void;
+  abstract method method1b<T extends core::Object? = dynamic>() → void;
+  abstract method method1c<T extends core::Object? = dynamic>() → void;
+  abstract method method2a<T extends core::Object?>() → void;
+  abstract method method2b<T extends core::Object?>() → void;
+  abstract method method2c<T extends core::Object?>() → void;
+  abstract method method3a<T extends dynamic>() → void;
+  abstract method method3b<T extends dynamic>() → void;
+  abstract method method3c<T extends dynamic>() → void;
+  abstract method method4a<T extends core::Object>() → void;
+  abstract method method4b<T extends core::Object>() → void;
+  abstract method method4c<T extends core::Object?>() → void;
+  abstract method method5a<T extends self::Class1>() → void;
+  abstract method method5b<T extends self::Class1>() → void;
+  abstract method method5c<T extends self::Class1?>() → void;
+}
+abstract class Class2 extends self::Class1 {
+  synthetic constructor •() → self::Class2
+    : super self::Class1::•()
+    ;
+  abstract method method1a<T extends core::Object? = dynamic>() → void;
+  abstract method method1b<T extends core::Object?>() → void;
+  abstract method method1c<T extends dynamic>() → void;
+  abstract method method2a<T extends core::Object? = dynamic>() → void;
+  abstract method method2b<T extends core::Object?>() → void;
+  abstract method method2c<T extends dynamic>() → void;
+  abstract method method3a<T extends core::Object? = dynamic>() → void;
+  abstract method method3b<T extends core::Object?>() → void;
+  abstract method method3c<T extends dynamic>() → void;
+  abstract method method4a<T extends core::Object>() → void;
+  abstract method method4b<T extends core::Object?>() → void;
+  abstract method method4c<T extends core::Object>() → void;
+  abstract method method5a<T extends self::Class1>() → void;
+  abstract method method5b<T extends self::Class1?>() → void;
+  abstract method method5c<T extends self::Class1>() → void;
+}
+abstract class Class3 extends gen::LegacyClass1 {
+  synthetic constructor •() → self::Class3
+    : super gen::LegacyClass1::•()
+    ;
+  abstract method method1a<T extends core::Object? = dynamic>() → void;
+  abstract method method1b<T extends core::Object?>() → void;
+  abstract method method1c<T extends dynamic>() → void;
+  abstract method method2a<T extends core::Object? = dynamic>() → void;
+  abstract method method2b<T extends core::Object?>() → void;
+  abstract method method2c<T extends dynamic>() → void;
+  abstract method method3a<T extends core::Object? = dynamic>() → void;
+  abstract method method3b<T extends core::Object?>() → void;
+  abstract method method3c<T extends dynamic>() → void;
+  abstract method method4a<T extends core::Object>() → void;
+  abstract method method4b<T extends core::Object?>() → void;
+  abstract method method4c<T extends core::Object>() → void;
+  abstract method method5a<T extends self::Class1>() → void;
+  abstract method method5b<T extends self::Class1?>() → void;
+  abstract method method5c<T extends self::Class1>() → void;
+}
+static method main() → dynamic {}
+
+library;
+import self as gen;
+import "dart:core" as core;
+import "generic_override.dart" as self;
+
+import "org-dartlang-testcase:///generic_override.dart";
+
+abstract class LegacyClass1 extends core::Object {
+  synthetic constructor •() → gen::LegacyClass1*
+    : super core::Object::•()
+    ;
+  abstract method method1a<T extends core::Object* = dynamic>() → void;
+  abstract method method1b<T extends core::Object* = dynamic>() → void;
+  abstract method method1c<T extends core::Object* = dynamic>() → void;
+  abstract method method2a<T extends core::Object*>() → void;
+  abstract method method2b<T extends core::Object*>() → void;
+  abstract method method2c<T extends core::Object*>() → void;
+  abstract method method3a<T extends dynamic>() → void;
+  abstract method method3b<T extends dynamic>() → void;
+  abstract method method3c<T extends dynamic>() → void;
+  abstract method method4a<T extends core::Object*>() → void;
+  abstract method method4b<T extends core::Object*>() → void;
+  abstract method method4c<T extends core::Object*>() → void;
+  abstract method method5a<T extends self::Class1*>() → void;
+  abstract method method5b<T extends self::Class1*>() → void;
+  abstract method method5c<T extends self::Class1*>() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class LegacyClass2 extends self::Class1 {
+  synthetic constructor •() → gen::LegacyClass2*
+    : super self::Class1::•()
+    ;
+  abstract method method1a<T extends core::Object* = dynamic>() → void;
+  abstract method method1b<T extends core::Object*>() → void;
+  abstract method method1c<T extends dynamic>() → void;
+  abstract method method2a<T extends core::Object* = dynamic>() → void;
+  abstract method method2b<T extends core::Object*>() → void;
+  abstract method method2c<T extends dynamic>() → void;
+  abstract method method3a<T extends core::Object* = dynamic>() → void;
+  abstract method method3b<T extends core::Object*>() → void;
+  abstract method method3c<T extends dynamic>() → void;
+  abstract method method4a<T extends core::Object*>() → void;
+  abstract method method4b<T extends core::Object*>() → void;
+  abstract method method4c<T extends core::Object*>() → void;
+  abstract method method5a<T extends self::Class1*>() → void;
+  abstract method method5b<T extends self::Class1*>() → void;
+  abstract method method5c<T extends self::Class1*>() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class LegacyClass3 extends self::Class1 {
+  synthetic constructor •() → gen::LegacyClass3*
+    : super self::Class1::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method method1a<T extends core::Object* = dynamic>() → void; -> self::Class1::method1a
+  abstract member-signature method method1b<T extends core::Object* = dynamic>() → void; -> self::Class1::method1b
+  abstract member-signature method method1c<T extends core::Object* = dynamic>() → void; -> self::Class1::method1c
+  abstract member-signature method method2a<T extends core::Object*>() → void; -> self::Class1::method2a
+  abstract member-signature method method2b<T extends core::Object*>() → void; -> self::Class1::method2b
+  abstract member-signature method method2c<T extends core::Object*>() → void; -> self::Class1::method2c
+  abstract member-signature method method4a<T extends core::Object*>() → void; -> self::Class1::method4a
+  abstract member-signature method method4b<T extends core::Object*>() → void; -> self::Class1::method4b
+  abstract member-signature method method4c<T extends core::Object*>() → void; -> self::Class1::method4c
+  abstract member-signature method method5a<T extends self::Class1*>() → void; -> self::Class1::method5a
+  abstract member-signature method method5b<T extends self::Class1*>() → void; -> self::Class1::method5b
+  abstract member-signature method method5c<T extends self::Class1*>() → void; -> self::Class1::method5c
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart.weak.modular.expect
new file mode 100644
index 0000000..bb1a80e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class AbstractSuper extends core::Object {
+  field core::int extendedConcreteField = 0;
+  field core::int declaredConcreteExtendsConcreteField = 0;
+  field core::int declaredAbstractExtendsConcreteField = 0;
+  synthetic constructor •() → self::AbstractSuper
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract set extendedAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredConcreteExtendsAbstractField() → core::int;
+  abstract set declaredConcreteExtendsAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+  abstract set declaredAbstractExtendsAbstractField(core::int #externalFieldValue) → void;
+}
+abstract class AbstractClass extends self::AbstractSuper {
+  field core::int declaredConcreteField = 0;
+  field core::int declaredConcreteExtendsConcreteField = 0;
+  field core::int declaredConcreteExtendsAbstractField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super self::AbstractSuper::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract set declaredAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsConcreteField() → core::int;
+  abstract set declaredAbstractExtendsConcreteField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+  abstract set declaredAbstractExtendsAbstractField(core::int #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart.weak.modular.expect
new file mode 100644
index 0000000..f4368dd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class AbstractSuper extends core::Object {
+  final field core::int extendedConcreteField = 0;
+  final field core::int declaredConcreteExtendsConcreteField = 0;
+  final field core::int declaredAbstractExtendsConcreteField = 0;
+  synthetic constructor •() → self::AbstractSuper
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract get declaredConcreteExtendsAbstractField() → core::int;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+}
+abstract class AbstractClass extends self::AbstractSuper {
+  final field core::int declaredConcreteField = 0;
+  final field core::int declaredConcreteExtendsConcreteField = 0;
+  final field core::int declaredConcreteExtendsAbstractField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super self::AbstractSuper::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract get declaredAbstractExtendsConcreteField() → core::int;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..bd5fdb7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class AbstractSuper extends core::Object {
+  synthetic constructor •() → self::AbstractSuper
+    : super core::Object::•()
+    ;
+  get extendedConcreteGetter() → core::int
+    return 0;
+  abstract get extendedAbstractGetter() → core::int;
+  get declaredConcreteExtendsConcreteGetter() → core::int
+    return 0;
+  get declaredAbstractExtendsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredConcreteExtendsAbstractGetter() → core::int;
+  abstract get declaredAbstractExtendsAbstractGetter() → core::int;
+}
+abstract class AbstractClass extends self::AbstractSuper {
+  synthetic constructor •() → self::AbstractClass
+    : super self::AbstractSuper::•()
+    ;
+  get declaredConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractGetter() → core::int;
+  get declaredConcreteExtendsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractExtendsConcreteGetter() → core::int;
+  get declaredConcreteExtendsAbstractGetter() → core::int
+    return 0;
+  abstract get declaredAbstractExtendsAbstractGetter() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart.weak.modular.expect
new file mode 100644
index 0000000..4f4c28e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class AbstractSuper extends core::Object {
+  synthetic constructor •() → self::AbstractSuper
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod() → void {}
+  abstract method extendedAbstractMethod() → void;
+  method declaredConcreteExtendsConcreteMethod() → void {}
+  method declaredAbstractExtendsConcreteMethod() → void {}
+  abstract method declaredConcreteExtendsAbstractMethod() → void;
+  abstract method declaredAbstractExtendsAbstractMethod() → void;
+}
+abstract class AbstractClass extends self::AbstractSuper {
+  synthetic constructor •() → self::AbstractClass
+    : super self::AbstractSuper::•()
+    ;
+  method declaredConcreteMethod() → void {}
+  abstract method declaredAbstractMethod() → void;
+  method declaredConcreteExtendsConcreteMethod() → void {}
+  abstract method declaredAbstractExtendsConcreteMethod() → void;
+  method declaredConcreteExtendsAbstractMethod() → void {}
+  abstract method declaredAbstractExtendsAbstractMethod() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..c43f685
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class AbstractSuper extends core::Object {
+  synthetic constructor •() → self::AbstractSuper
+    : super core::Object::•()
+    ;
+  set extendedConcreteSetter(core::int value) → void {}
+  abstract set extendedAbstractSetter(core::int value) → void;
+  set declaredConcreteExtendsConcreteSetter(core::int value) → void {}
+  set declaredAbstractExtendsConcreteSetter(core::int value) → void {}
+  abstract set declaredConcreteExtendsAbstractSetter(core::int value) → void;
+  abstract set declaredAbstractExtendsAbstractSetter(core::int value) → void;
+}
+abstract class AbstractClass extends self::AbstractSuper {
+  synthetic constructor •() → self::AbstractClass
+    : super self::AbstractSuper::•()
+    ;
+  set declaredConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractSetter(core::int value) → void;
+  set declaredConcreteExtendsConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractExtendsConcreteSetter(core::int value) → void;
+  set declaredConcreteExtendsAbstractSetter(core::int value) → void {}
+  abstract set declaredAbstractExtendsAbstractSetter(core::int value) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart.weak.modular.expect
new file mode 100644
index 0000000..0cdcd41
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  field core::int implementedConcreteField = 0;
+  field core::int declaredConcreteImplementsConcreteField = 0;
+  field core::int declaredAbstractImplementsConcreteField = 0;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get implementedAbstractField() → core::int;
+  abstract set implementedAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredConcreteImplementsAbstractField() → core::int;
+  abstract set declaredConcreteImplementsAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+  abstract set declaredAbstractImplementsAbstractField(core::int #externalFieldValue) → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface {
+  field core::int declaredConcreteField = 0;
+  field core::int declaredConcreteImplementsConcreteField = 0;
+  field core::int declaredConcreteImplementsAbstractField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract set declaredAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsConcreteField() → core::int;
+  abstract set declaredAbstractImplementsConcreteField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+  abstract set declaredAbstractImplementsAbstractField(core::int #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart.weak.modular.expect
new file mode 100644
index 0000000..e1f92ea
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  final field core::int implementedConcreteField = 0;
+  final field core::int declaredConcreteImplementsConcreteField = 0;
+  final field core::int declaredAbstractImplementsConcreteField = 0;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get implementedAbstractField() → core::int;
+  abstract get declaredConcreteImplementsAbstractField() → core::int;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+}
+abstract class AbstractClass extends core::Object implements self::Interface {
+  final field core::int declaredConcreteField = 0;
+  final field core::int declaredConcreteImplementsConcreteField = 0;
+  final field core::int declaredConcreteImplementsAbstractField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract get declaredAbstractImplementsConcreteField() → core::int;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..60896ad
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  get implementedConcreteGetter() → core::int
+    return 0;
+  abstract get implementedAbstractGetter() → core::int;
+  get declaredConcreteImplementsConcreteGetter() → core::int
+    return 0;
+  get declaredAbstractImplementsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredConcreteImplementsAbstractGetter() → core::int;
+  abstract get declaredAbstractImplementsAbstractGetter() → core::int;
+}
+abstract class AbstractClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  get declaredConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractGetter() → core::int;
+  get declaredConcreteImplementsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractImplementsConcreteGetter() → core::int;
+  get declaredConcreteImplementsAbstractGetter() → core::int
+    return 0;
+  abstract get declaredAbstractImplementsAbstractGetter() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart.weak.modular.expect
new file mode 100644
index 0000000..fb0c37a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  method implementedConcreteMethod() → void {}
+  abstract method implementedAbstractMethod() → void;
+  method declaredConcreteImplementsConcreteMethod() → void {}
+  method declaredAbstractImplementsConcreteMethod() → void {}
+  abstract method declaredConcreteImplementsAbstractMethod() → void;
+  abstract method declaredAbstractImplementsAbstractMethod() → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  method declaredConcreteMethod() → void {}
+  abstract method declaredAbstractMethod() → void;
+  method declaredConcreteImplementsConcreteMethod() → void {}
+  abstract method declaredAbstractImplementsConcreteMethod() → void;
+  method declaredConcreteImplementsAbstractMethod() → void {}
+  abstract method declaredAbstractImplementsAbstractMethod() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..59931d6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  set implementedConcreteSetter(core::int value) → void {}
+  abstract set implementedAbstractSetter(core::int value) → void;
+  set declaredConcreteImplementsConcreteSetter(core::int value) → void {}
+  set declaredAbstractImplementsConcreteSetter(core::int value) → void {}
+  abstract set declaredConcreteImplementsAbstractSetter(core::int value) → void;
+  abstract set declaredAbstractImplementsAbstractSetter(core::int value) → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  set declaredConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractSetter(core::int value) → void;
+  set declaredConcreteImplementsConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractImplementsConcreteSetter(core::int value) → void;
+  set declaredConcreteImplementsAbstractSetter(core::int value) → void {}
+  abstract set declaredAbstractImplementsAbstractSetter(core::int value) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.modular.expect
new file mode 100644
index 0000000..a86bf71
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.modular.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteMixedInAbstractMethod() → void {}
+  method extendedConcreteMixedInConcreteMethod() → void {}
+  method extendedConcreteMixedInAbstractImplementedMethod(core::int i) → void {}
+  method extendedConcreteMixedInConcreteImplementedMethod(core::int i) → void {}
+}
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  method extendedConcreteMixedInAbstractImplementedMethod(covariant-by-declaration core::num i) → void {}
+  method extendedConcreteMixedInConcreteImplementedMethod(covariant-by-declaration core::num i) → void {}
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  abstract method extendedConcreteMixedInAbstractMethod() → void;
+  method extendedConcreteMixedInConcreteMethod() → void {}
+  abstract method extendedConcreteMixedInAbstractImplementedMethod(core::int i) → void;
+  method extendedConcreteMixedInConcreteImplementedMethod(core::int i) → void {}
+}
+class Class = self::Super with self::Mixin implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  abstract mixin-stub method extendedConcreteMixedInAbstractMethod() → void; -> self::Mixin::extendedConcreteMixedInAbstractMethod
+  mixin-super-stub method extendedConcreteMixedInConcreteMethod() → void
+    return super.{self::Mixin::extendedConcreteMixedInConcreteMethod}();
+  forwarding-stub method extendedConcreteMixedInAbstractImplementedMethod(covariant-by-declaration core::int i) → void
+    return super.{self::Super::extendedConcreteMixedInAbstractImplementedMethod}(i);
+  forwarding-stub method extendedConcreteMixedInConcreteImplementedMethod(covariant-by-declaration core::int i) → void
+    return super.{self::Mixin::extendedConcreteMixedInConcreteImplementedMethod}(i);
+}
+class Sub extends self::Class {
+  synthetic constructor •() → self::Sub
+    : super self::Class::•()
+    ;
+  method test() → void {
+    this.{self::Class::extendedConcreteMixedInAbstractMethod}(){() → void};
+    super.{self::Super::extendedConcreteMixedInAbstractMethod}();
+    this.{self::Class::extendedConcreteMixedInConcreteMethod}(){() → void};
+    super.{self::Class::extendedConcreteMixedInConcreteMethod}();
+    this.{self::Class::extendedConcreteMixedInAbstractImplementedMethod}(0){(core::int) → void};
+    super.{self::Class::extendedConcreteMixedInAbstractImplementedMethod}(0);
+    this.{self::Class::extendedConcreteMixedInConcreteImplementedMethod}(0){(core::int) → void};
+    super.{self::Class::extendedConcreteMixedInConcreteImplementedMethod}(0);
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart.weak.modular.expect
new file mode 100644
index 0000000..2697e8e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart.weak.modular.expect
@@ -0,0 +1,104 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:5:7: Error: The non-abstract class 'ConcreteSuper' is missing implementations for these members:
+//  - ConcreteSuper.declaredAbstractExtendsAbstractField
+//  - ConcreteSuper.declaredAbstractExtendsAbstractField=
+//  - ConcreteSuper.declaredConcreteExtendsAbstractField
+//  - ConcreteSuper.declaredConcreteExtendsAbstractField=
+//  - ConcreteSuper.extendedAbstractField
+//  - ConcreteSuper.extendedAbstractField=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:16:16: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractField' is defined here.
+//   abstract int declaredAbstractExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:16:16: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractField=' is defined here.
+//   abstract int declaredAbstractExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:14:16: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractField' is defined here.
+//   abstract int declaredConcreteExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:14:16: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractField=' is defined here.
+//   abstract int declaredConcreteExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:8:16: Context: 'ConcreteSuper.extendedAbstractField' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:8:16: Context: 'ConcreteSuper.extendedAbstractField=' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractExtendsAbstractField
+//  - ConcreteClass.declaredAbstractExtendsAbstractField=
+//  - ConcreteClass.declaredAbstractField
+//  - ConcreteClass.declaredAbstractField=
+//  - ConcreteSuper.extendedAbstractField
+//  - ConcreteSuper.extendedAbstractField=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:30:16: Context: 'ConcreteClass.declaredAbstractExtendsAbstractField' is defined here.
+//   abstract int declaredAbstractExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:30:16: Context: 'ConcreteClass.declaredAbstractExtendsAbstractField=' is defined here.
+//   abstract int declaredAbstractExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:22:16: Context: 'ConcreteClass.declaredAbstractField' is defined here.
+//   abstract int declaredAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:22:16: Context: 'ConcreteClass.declaredAbstractField=' is defined here.
+//   abstract int declaredAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:8:16: Context: 'ConcreteSuper.extendedAbstractField' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:8:16: Context: 'ConcreteSuper.extendedAbstractField=' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ConcreteSuper extends core::Object {
+  field core::int extendedConcreteField = 0;
+  field core::int declaredConcreteExtendsConcreteField = 0;
+  field core::int declaredAbstractExtendsConcreteField = 0;
+  synthetic constructor •() → self::ConcreteSuper
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract set extendedAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredConcreteExtendsAbstractField() → core::int;
+  abstract set declaredConcreteExtendsAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+  abstract set declaredAbstractExtendsAbstractField(core::int #externalFieldValue) → void;
+}
+class ConcreteClass extends self::ConcreteSuper {
+  field core::int declaredConcreteField = 0;
+  field core::int declaredConcreteExtendsConcreteField = 0;
+  field core::int declaredConcreteExtendsAbstractField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super self::ConcreteSuper::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract set declaredAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsConcreteField() → core::int;
+  abstract set declaredAbstractExtendsConcreteField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+  abstract set declaredAbstractExtendsAbstractField(core::int #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart.weak.modular.expect
new file mode 100644
index 0000000..4b81a56
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:5:7: Error: The non-abstract class 'ConcreteSuper' is missing implementations for these members:
+//  - ConcreteSuper.declaredAbstractExtendsAbstractField
+//  - ConcreteSuper.declaredConcreteExtendsAbstractField
+//  - ConcreteSuper.extendedAbstractField
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:16:22: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractField' is defined here.
+//   abstract final int declaredAbstractExtendsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:14:22: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractField' is defined here.
+//   abstract final int declaredConcreteExtendsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:8:22: Context: 'ConcreteSuper.extendedAbstractField' is defined here.
+//   abstract final int extendedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractExtendsAbstractField
+//  - ConcreteClass.declaredAbstractField
+//  - ConcreteSuper.extendedAbstractField
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:30:22: Context: 'ConcreteClass.declaredAbstractExtendsAbstractField' is defined here.
+//   abstract final int declaredAbstractExtendsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:22:22: Context: 'ConcreteClass.declaredAbstractField' is defined here.
+//   abstract final int declaredAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:8:22: Context: 'ConcreteSuper.extendedAbstractField' is defined here.
+//   abstract final int extendedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ConcreteSuper extends core::Object {
+  final field core::int extendedConcreteField = 0;
+  final field core::int declaredConcreteExtendsConcreteField = 0;
+  final field core::int declaredAbstractExtendsConcreteField = 0;
+  synthetic constructor •() → self::ConcreteSuper
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract get declaredConcreteExtendsAbstractField() → core::int;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+}
+class ConcreteClass extends self::ConcreteSuper {
+  final field core::int declaredConcreteField = 0;
+  final field core::int declaredConcreteExtendsConcreteField = 0;
+  final field core::int declaredConcreteExtendsAbstractField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super self::ConcreteSuper::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract get declaredAbstractExtendsConcreteField() → core::int;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..626d8af
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart.weak.modular.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:5:7: Error: The non-abstract class 'ConcreteSuper' is missing implementations for these members:
+//  - ConcreteSuper.declaredAbstractExtendsAbstractGetter
+//  - ConcreteSuper.declaredConcreteExtendsAbstractGetter
+//  - ConcreteSuper.extendedAbstractGetter
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:16:11: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractGetter' is defined here.
+//   int get declaredAbstractExtendsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:14:11: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractGetter' is defined here.
+//   int get declaredConcreteExtendsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:8:11: Context: 'ConcreteSuper.extendedAbstractGetter' is defined here.
+//   int get extendedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractExtendsAbstractGetter
+//  - ConcreteClass.declaredAbstractGetter
+//  - ConcreteSuper.extendedAbstractGetter
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:30:11: Context: 'ConcreteClass.declaredAbstractExtendsAbstractGetter' is defined here.
+//   int get declaredAbstractExtendsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:22:11: Context: 'ConcreteClass.declaredAbstractGetter' is defined here.
+//   int get declaredAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:8:11: Context: 'ConcreteSuper.extendedAbstractGetter' is defined here.
+//   int get extendedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ConcreteSuper extends core::Object {
+  synthetic constructor •() → self::ConcreteSuper
+    : super core::Object::•()
+    ;
+  get extendedConcreteGetter() → core::int
+    return 0;
+  abstract get extendedAbstractGetter() → core::int;
+  get declaredConcreteExtendsConcreteGetter() → core::int
+    return 0;
+  get declaredAbstractExtendsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredConcreteExtendsAbstractGetter() → core::int;
+  abstract get declaredAbstractExtendsAbstractGetter() → core::int;
+}
+class ConcreteClass extends self::ConcreteSuper {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::ConcreteSuper::•()
+    ;
+  get declaredConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractGetter() → core::int;
+  get declaredConcreteExtendsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractExtendsConcreteGetter() → core::int;
+  get declaredConcreteExtendsAbstractGetter() → core::int
+    return 0;
+  abstract get declaredAbstractExtendsAbstractGetter() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart.weak.modular.expect
new file mode 100644
index 0000000..0eba0b9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:5:7: Error: The non-abstract class 'ConcreteSuper' is missing implementations for these members:
+//  - ConcreteSuper.declaredAbstractExtendsAbstractMethod
+//  - ConcreteSuper.declaredConcreteExtendsAbstractMethod
+//  - ConcreteSuper.extendedAbstractMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:16:8: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractMethod' is defined here.
+//   void declaredAbstractExtendsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:14:8: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractMethod' is defined here.
+//   void declaredConcreteExtendsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:8:8: Context: 'ConcreteSuper.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractExtendsAbstractMethod
+//  - ConcreteClass.declaredAbstractMethod
+//  - ConcreteSuper.extendedAbstractMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:30:8: Context: 'ConcreteClass.declaredAbstractExtendsAbstractMethod' is defined here.
+//   void declaredAbstractExtendsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:22:8: Context: 'ConcreteClass.declaredAbstractMethod' is defined here.
+//   void declaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:8:8: Context: 'ConcreteSuper.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ConcreteSuper extends core::Object {
+  synthetic constructor •() → self::ConcreteSuper
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod() → void {}
+  abstract method extendedAbstractMethod() → void;
+  method declaredConcreteExtendsConcreteMethod() → void {}
+  method declaredAbstractExtendsConcreteMethod() → void {}
+  abstract method declaredConcreteExtendsAbstractMethod() → void;
+  abstract method declaredAbstractExtendsAbstractMethod() → void;
+}
+class ConcreteClass extends self::ConcreteSuper {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::ConcreteSuper::•()
+    ;
+  method declaredConcreteMethod() → void {}
+  abstract method declaredAbstractMethod() → void;
+  method declaredConcreteExtendsConcreteMethod() → void {}
+  abstract method declaredAbstractExtendsConcreteMethod() → void;
+  method declaredConcreteExtendsAbstractMethod() → void {}
+  abstract method declaredAbstractExtendsAbstractMethod() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..2df220c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:5:7: Error: The non-abstract class 'ConcreteSuper' is missing implementations for these members:
+//  - ConcreteSuper.declaredAbstractExtendsAbstractSetter=
+//  - ConcreteSuper.declaredConcreteExtendsAbstractSetter=
+//  - ConcreteSuper.extendedAbstractSetter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:16:12: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractSetter=' is defined here.
+//   void set declaredAbstractExtendsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:14:12: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractSetter=' is defined here.
+//   void set declaredConcreteExtendsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:8:12: Context: 'ConcreteSuper.extendedAbstractSetter=' is defined here.
+//   void set extendedAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractExtendsAbstractSetter=
+//  - ConcreteClass.declaredAbstractSetter=
+//  - ConcreteSuper.extendedAbstractSetter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:30:12: Context: 'ConcreteClass.declaredAbstractExtendsAbstractSetter=' is defined here.
+//   void set declaredAbstractExtendsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:22:12: Context: 'ConcreteClass.declaredAbstractSetter=' is defined here.
+//   void set declaredAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:8:12: Context: 'ConcreteSuper.extendedAbstractSetter=' is defined here.
+//   void set extendedAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ConcreteSuper extends core::Object {
+  synthetic constructor •() → self::ConcreteSuper
+    : super core::Object::•()
+    ;
+  set extendedConcreteSetter(core::int value) → void {}
+  abstract set extendedAbstractSetter(core::int value) → void;
+  set declaredConcreteExtendsConcreteSetter(core::int value) → void {}
+  set declaredAbstractExtendsConcreteSetter(core::int value) → void {}
+  abstract set declaredConcreteExtendsAbstractSetter(core::int value) → void;
+  abstract set declaredAbstractExtendsAbstractSetter(core::int value) → void;
+}
+class ConcreteClass extends self::ConcreteSuper {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::ConcreteSuper::•()
+    ;
+  set declaredConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractSetter(core::int value) → void;
+  set declaredConcreteExtendsConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractExtendsConcreteSetter(core::int value) → void;
+  set declaredConcreteExtendsAbstractSetter(core::int value) → void {}
+  abstract set declaredAbstractExtendsAbstractSetter(core::int value) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart.weak.modular.expect
new file mode 100644
index 0000000..3c9afcd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart.weak.modular.expect
@@ -0,0 +1,116 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:5:7: Error: The non-abstract class 'Interface' is missing implementations for these members:
+//  - Interface.declaredAbstractImplementsAbstractField
+//  - Interface.declaredAbstractImplementsAbstractField=
+//  - Interface.declaredConcreteImplementsAbstractField
+//  - Interface.declaredConcreteImplementsAbstractField=
+//  - Interface.implementedAbstractField
+//  - Interface.implementedAbstractField=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Interface {
+//       ^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:16:16: Context: 'Interface.declaredAbstractImplementsAbstractField' is defined here.
+//   abstract int declaredAbstractImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:16:16: Context: 'Interface.declaredAbstractImplementsAbstractField=' is defined here.
+//   abstract int declaredAbstractImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:14:16: Context: 'Interface.declaredConcreteImplementsAbstractField' is defined here.
+//   abstract int declaredConcreteImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:14:16: Context: 'Interface.declaredConcreteImplementsAbstractField=' is defined here.
+//   abstract int declaredConcreteImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:8:16: Context: 'Interface.implementedAbstractField' is defined here.
+//   abstract int implementedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:8:16: Context: 'Interface.implementedAbstractField=' is defined here.
+//   abstract int implementedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractField
+//  - ConcreteClass.declaredAbstractField=
+//  - ConcreteClass.declaredAbstractImplementsAbstractField
+//  - ConcreteClass.declaredAbstractImplementsAbstractField=
+//  - ConcreteClass.declaredAbstractImplementsConcreteField
+//  - ConcreteClass.declaredAbstractImplementsConcreteField=
+//  - Interface.implementedAbstractField
+//  - Interface.implementedAbstractField=
+//  - Interface.implementedConcreteField
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass implements Interface {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:22:16: Context: 'ConcreteClass.declaredAbstractField' is defined here.
+//   abstract int declaredAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:22:16: Context: 'ConcreteClass.declaredAbstractField=' is defined here.
+//   abstract int declaredAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:30:16: Context: 'ConcreteClass.declaredAbstractImplementsAbstractField' is defined here.
+//   abstract int declaredAbstractImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:30:16: Context: 'ConcreteClass.declaredAbstractImplementsAbstractField=' is defined here.
+//   abstract int declaredAbstractImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:26:16: Context: 'ConcreteClass.declaredAbstractImplementsConcreteField' is defined here.
+//   abstract int declaredAbstractImplementsConcreteField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:26:16: Context: 'ConcreteClass.declaredAbstractImplementsConcreteField=' is defined here.
+//   abstract int declaredAbstractImplementsConcreteField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:8:16: Context: 'Interface.implementedAbstractField' is defined here.
+//   abstract int implementedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:8:16: Context: 'Interface.implementedAbstractField=' is defined here.
+//   abstract int implementedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:6:7: Context: 'Interface.implementedConcreteField' is defined here.
+//   int implementedConcreteField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface extends core::Object {
+  field core::int implementedConcreteField = 0;
+  field core::int declaredConcreteImplementsConcreteField = 0;
+  field core::int declaredAbstractImplementsConcreteField = 0;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get implementedAbstractField() → core::int;
+  abstract set implementedAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredConcreteImplementsAbstractField() → core::int;
+  abstract set declaredConcreteImplementsAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+  abstract set declaredAbstractImplementsAbstractField(core::int #externalFieldValue) → void;
+}
+class ConcreteClass extends core::Object implements self::Interface {
+  field core::int declaredConcreteField = 0;
+  field core::int declaredConcreteImplementsConcreteField = 0;
+  field core::int declaredConcreteImplementsAbstractField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract set declaredAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsConcreteField() → core::int;
+  abstract set declaredAbstractImplementsConcreteField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+  abstract set declaredAbstractImplementsAbstractField(core::int #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart.weak.modular.expect
new file mode 100644
index 0000000..921aaec
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart.weak.modular.expect
@@ -0,0 +1,82 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:5:7: Error: The non-abstract class 'Interface' is missing implementations for these members:
+//  - Interface.declaredAbstractImplementsAbstractField
+//  - Interface.declaredConcreteImplementsAbstractField
+//  - Interface.implementedAbstractField
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Interface {
+//       ^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:16:22: Context: 'Interface.declaredAbstractImplementsAbstractField' is defined here.
+//   abstract final int declaredAbstractImplementsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:14:22: Context: 'Interface.declaredConcreteImplementsAbstractField' is defined here.
+//   abstract final int declaredConcreteImplementsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:8:22: Context: 'Interface.implementedAbstractField' is defined here.
+//   abstract final int implementedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractField
+//  - ConcreteClass.declaredAbstractImplementsAbstractField
+//  - ConcreteClass.declaredAbstractImplementsConcreteField
+//  - Interface.implementedAbstractField
+//  - Interface.implementedConcreteField
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass implements Interface {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:22:22: Context: 'ConcreteClass.declaredAbstractField' is defined here.
+//   abstract final int declaredAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:30:22: Context: 'ConcreteClass.declaredAbstractImplementsAbstractField' is defined here.
+//   abstract final int declaredAbstractImplementsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:26:22: Context: 'ConcreteClass.declaredAbstractImplementsConcreteField' is defined here.
+//   abstract final int declaredAbstractImplementsConcreteField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:8:22: Context: 'Interface.implementedAbstractField' is defined here.
+//   abstract final int implementedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:6:13: Context: 'Interface.implementedConcreteField' is defined here.
+//   final int implementedConcreteField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface extends core::Object {
+  final field core::int implementedConcreteField = 0;
+  final field core::int declaredConcreteImplementsConcreteField = 0;
+  final field core::int declaredAbstractImplementsConcreteField = 0;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get implementedAbstractField() → core::int;
+  abstract get declaredConcreteImplementsAbstractField() → core::int;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+}
+class ConcreteClass extends core::Object implements self::Interface {
+  final field core::int declaredConcreteField = 0;
+  final field core::int declaredConcreteImplementsConcreteField = 0;
+  final field core::int declaredConcreteImplementsAbstractField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract get declaredAbstractImplementsConcreteField() → core::int;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..5c3ce45
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart.weak.modular.expect
@@ -0,0 +1,88 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:5:7: Error: The non-abstract class 'Interface' is missing implementations for these members:
+//  - Interface.declaredAbstractImplementsAbstractGetter
+//  - Interface.declaredConcreteImplementsAbstractGetter
+//  - Interface.implementedAbstractGetter
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Interface {
+//       ^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:16:11: Context: 'Interface.declaredAbstractImplementsAbstractGetter' is defined here.
+//   int get declaredAbstractImplementsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:14:11: Context: 'Interface.declaredConcreteImplementsAbstractGetter' is defined here.
+//   int get declaredConcreteImplementsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:8:11: Context: 'Interface.implementedAbstractGetter' is defined here.
+//   int get implementedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractGetter
+//  - ConcreteClass.declaredAbstractImplementsAbstractGetter
+//  - ConcreteClass.declaredAbstractImplementsConcreteGetter
+//  - Interface.implementedAbstractGetter
+//  - Interface.implementedConcreteGetter
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass implements Interface {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:22:11: Context: 'ConcreteClass.declaredAbstractGetter' is defined here.
+//   int get declaredAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:30:11: Context: 'ConcreteClass.declaredAbstractImplementsAbstractGetter' is defined here.
+//   int get declaredAbstractImplementsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:26:11: Context: 'ConcreteClass.declaredAbstractImplementsConcreteGetter' is defined here.
+//   int get declaredAbstractImplementsConcreteGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:8:11: Context: 'Interface.implementedAbstractGetter' is defined here.
+//   int get implementedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:6:11: Context: 'Interface.implementedConcreteGetter' is defined here.
+//   int get implementedConcreteGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  get implementedConcreteGetter() → core::int
+    return 0;
+  abstract get implementedAbstractGetter() → core::int;
+  get declaredConcreteImplementsConcreteGetter() → core::int
+    return 0;
+  get declaredAbstractImplementsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredConcreteImplementsAbstractGetter() → core::int;
+  abstract get declaredAbstractImplementsAbstractGetter() → core::int;
+}
+class ConcreteClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  get declaredConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractGetter() → core::int;
+  get declaredConcreteImplementsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractImplementsConcreteGetter() → core::int;
+  get declaredConcreteImplementsAbstractGetter() → core::int
+    return 0;
+  abstract get declaredAbstractImplementsAbstractGetter() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart.weak.modular.expect
new file mode 100644
index 0000000..ff9e0ea
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart.weak.modular.expect
@@ -0,0 +1,82 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:5:7: Error: The non-abstract class 'Interface' is missing implementations for these members:
+//  - Interface.declaredAbstractImplementsAbstractMethod
+//  - Interface.declaredConcreteImplementsAbstractMethod
+//  - Interface.implementedAbstractMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Interface {
+//       ^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:16:8: Context: 'Interface.declaredAbstractImplementsAbstractMethod' is defined here.
+//   void declaredAbstractImplementsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:14:8: Context: 'Interface.declaredConcreteImplementsAbstractMethod' is defined here.
+//   void declaredConcreteImplementsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:8:8: Context: 'Interface.implementedAbstractMethod' is defined here.
+//   void implementedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractImplementsAbstractMethod
+//  - ConcreteClass.declaredAbstractImplementsConcreteMethod
+//  - ConcreteClass.declaredAbstractMethod
+//  - Interface.implementedAbstractMethod
+//  - Interface.implementedConcreteMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass implements Interface {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:30:8: Context: 'ConcreteClass.declaredAbstractImplementsAbstractMethod' is defined here.
+//   void declaredAbstractImplementsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:26:8: Context: 'ConcreteClass.declaredAbstractImplementsConcreteMethod' is defined here.
+//   void declaredAbstractImplementsConcreteMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:22:8: Context: 'ConcreteClass.declaredAbstractMethod' is defined here.
+//   void declaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:8:8: Context: 'Interface.implementedAbstractMethod' is defined here.
+//   void implementedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:6:8: Context: 'Interface.implementedConcreteMethod' is defined here.
+//   void implementedConcreteMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  method implementedConcreteMethod() → void {}
+  abstract method implementedAbstractMethod() → void;
+  method declaredConcreteImplementsConcreteMethod() → void {}
+  method declaredAbstractImplementsConcreteMethod() → void {}
+  abstract method declaredConcreteImplementsAbstractMethod() → void;
+  abstract method declaredAbstractImplementsAbstractMethod() → void;
+}
+class ConcreteClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  method declaredConcreteMethod() → void {}
+  abstract method declaredAbstractMethod() → void;
+  method declaredConcreteImplementsConcreteMethod() → void {}
+  abstract method declaredAbstractImplementsConcreteMethod() → void;
+  method declaredConcreteImplementsAbstractMethod() → void {}
+  abstract method declaredAbstractImplementsAbstractMethod() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..ca9b49b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart.weak.modular.expect
@@ -0,0 +1,82 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:5:7: Error: The non-abstract class 'Interface' is missing implementations for these members:
+//  - Interface.declaredAbstractImplementsAbstractSetter=
+//  - Interface.declaredConcreteImplementsAbstractSetter=
+//  - Interface.implementedAbstractSetter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Interface {
+//       ^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:16:12: Context: 'Interface.declaredAbstractImplementsAbstractSetter=' is defined here.
+//   void set declaredAbstractImplementsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:14:12: Context: 'Interface.declaredConcreteImplementsAbstractSetter=' is defined here.
+//   void set declaredConcreteImplementsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:8:12: Context: 'Interface.implementedAbstractSetter=' is defined here.
+//   void set implementedAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractImplementsAbstractSetter=
+//  - ConcreteClass.declaredAbstractImplementsConcreteSetter=
+//  - ConcreteClass.declaredAbstractSetter=
+//  - Interface.implementedAbstractSetter=
+//  - Interface.implementedConcreteSetter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass implements Interface {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:30:12: Context: 'ConcreteClass.declaredAbstractImplementsAbstractSetter=' is defined here.
+//   void set declaredAbstractImplementsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:26:12: Context: 'ConcreteClass.declaredAbstractImplementsConcreteSetter=' is defined here.
+//   void set declaredAbstractImplementsConcreteSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:22:12: Context: 'ConcreteClass.declaredAbstractSetter=' is defined here.
+//   void set declaredAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:8:12: Context: 'Interface.implementedAbstractSetter=' is defined here.
+//   void set implementedAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:6:12: Context: 'Interface.implementedConcreteSetter=' is defined here.
+//   void set implementedConcreteSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  set implementedConcreteSetter(core::int value) → void {}
+  abstract set implementedAbstractSetter(core::int value) → void;
+  set declaredConcreteImplementsConcreteSetter(core::int value) → void {}
+  set declaredAbstractImplementsConcreteSetter(core::int value) → void {}
+  abstract set declaredConcreteImplementsAbstractSetter(core::int value) → void;
+  abstract set declaredAbstractImplementsAbstractSetter(core::int value) → void;
+}
+class ConcreteClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  set declaredConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractSetter(core::int value) → void;
+  set declaredConcreteImplementsConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractImplementsConcreteSetter(core::int value) → void;
+  set declaredConcreteImplementsAbstractSetter(core::int value) → void {}
+  abstract set declaredAbstractImplementsAbstractSetter(core::int value) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart.weak.modular.expect
new file mode 100644
index 0000000..f1538ce
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart.weak.modular.expect
@@ -0,0 +1,323 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:90:16: Error: Can't inherit members that conflict with each other.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:13:8: Context: This is one inherited member.
+//   void extendedMethodMixedInGetter() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:43:11: Context: This is the other inherited member.
+//   int get extendedMethodMixedInGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:93:11: Error: Can't declare a member that conflicts with an inherited one.
+//   int get extendedMethodDeclaredGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:6:8: Context: This is the inherited member.
+//   void extendedMethodDeclaredGetter() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:95:7: Error: Can't declare a member that conflicts with an inherited one.
+//   int extendedMethodDeclaredField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:8:8: Context: This is the inherited member.
+//   void extendedMethodDeclaredField() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:96:8: Error: Can't declare a member that conflicts with an inherited one.
+//   void extendedGetterDeclaredMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:9:11: Context: This is the inherited member.
+//   int get extendedGetterDeclaredMethod => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:97:8: Error: Can't declare a member that conflicts with an inherited one.
+//   void extendedSetterDeclaredMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:10:12: Context: This is the inherited member.
+//   void set extendedSetterDeclaredMethod(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:98:8: Error: Can't declare a member that conflicts with an inherited one.
+//   void extendedFieldDeclaredMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:11:7: Context: This is the inherited member.
+//   int extendedFieldDeclaredMethod = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:100:11: Error: Can't declare a member that conflicts with an inherited one.
+//   int get mixedInMethodDeclaredGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:29:8: Context: This is the inherited member.
+//   void mixedInMethodDeclaredGetter() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:102:7: Error: Can't declare a member that conflicts with an inherited one.
+//   int mixedInMethodDeclaredField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:31:8: Context: This is the inherited member.
+//   void mixedInMethodDeclaredField() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:103:8: Error: Can't declare a member that conflicts with an inherited one.
+//   void mixedInGetterDeclaredMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:32:11: Context: This is the inherited member.
+//   int get mixedInGetterDeclaredMethod => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:104:8: Error: Can't declare a member that conflicts with an inherited one.
+//   void mixedInSetterDeclaredMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:33:12: Context: This is the inherited member.
+//   void set mixedInSetterDeclaredMethod(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:105:8: Error: Can't declare a member that conflicts with an inherited one.
+//   void mixedInFieldDeclaredMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:34:7: Context: This is the inherited member.
+//   int mixedInFieldDeclaredMethod = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:107:11: Error: Can't declare a member that conflicts with an inherited one.
+//   int get implementedMethodDeclaredGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:52:8: Context: This is the inherited member.
+//   void implementedMethodDeclaredGetter() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:109:7: Error: Can't declare a member that conflicts with an inherited one.
+//   int implementedMethodDeclaredField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:54:8: Context: This is the inherited member.
+//   void implementedMethodDeclaredField() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:110:8: Error: Can't declare a member that conflicts with an inherited one.
+//   void implementedGetterDeclaredMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:55:11: Context: This is the inherited member.
+//   int get implementedGetterDeclaredMethod => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:111:8: Error: Can't declare a member that conflicts with an inherited one.
+//   void implementedSetterDeclaredMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:56:12: Context: This is the inherited member.
+//   void set implementedSetterDeclaredMethod(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:112:8: Error: Can't declare a member that conflicts with an inherited one.
+//   void implementedFieldDeclaredMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:57:7: Context: This is the inherited member.
+//   int implementedFieldDeclaredMethod = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:115:12: Error: 'declaredMethodAndSetter' is already declared in this scope.
+//   void set declaredMethodAndSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:114:8: Context: Previous declaration of 'declaredMethodAndSetter'.
+//   void declaredMethodAndSetter() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:94:12: Error: Can't declare a member that conflicts with an inherited one.
+//   void set extendedMethodDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:7:8: Context: This is the inherited member.
+//   void extendedMethodDeclaredSetter() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:101:12: Error: Can't declare a member that conflicts with an inherited one.
+//   void set mixedInMethodDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:30:8: Context: This is the inherited member.
+//   void mixedInMethodDeclaredSetter() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:108:12: Error: Can't declare a member that conflicts with an inherited one.
+//   void set implementedMethodDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:53:8: Context: This is the inherited member.
+//   void implementedMethodDeclaredSetter() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  field core::int extendedFieldDeclaredMethod = 0;
+  field core::int extendedFieldMixedInMethod = 0;
+  field core::int extendedFieldImplementedMethod = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedMethodDeclaredGetter() → void {}
+  method extendedMethodDeclaredSetter() → void {}
+  method extendedMethodDeclaredField() → void {}
+  get extendedGetterDeclaredMethod() → core::int
+    return 0;
+  set extendedSetterDeclaredMethod(core::int value) → void {}
+  method extendedMethodMixedInGetter() → void {}
+  method extendedMethodMixedInSetter() → void {}
+  method extendedMethodMixedInField() → void {}
+  get extendedGetterMixedInMethod() → core::int
+    return 0;
+  set extendedSetterMixedInMethod(core::int value) → void {}
+  method extendedMethodImplementedGetter() → void {}
+  method extendedMethodImplementedSetter() → void {}
+  method extendedMethodImplementedField() → void {}
+  get extendedGetterImplementedMethod() → core::int
+    return 0;
+  set extendedSetterImplementedMethod(core::int value) → void {}
+}
+class Mixin extends core::Object {
+  field core::int mixedInFieldDeclaredMethod = 0;
+  field core::int mixedInFieldImplementedMethod = 0;
+  field core::int extendedMethodMixedInField = 0;
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method mixedInMethodDeclaredGetter() → void {}
+  method mixedInMethodDeclaredSetter() → void {}
+  method mixedInMethodDeclaredField() → void {}
+  get mixedInGetterDeclaredMethod() → core::int
+    return 0;
+  set mixedInSetterDeclaredMethod(core::int value) → void {}
+  method mixedInMethodImplementedGetter() → void {}
+  method mixedInMethodImplementedSetter() → void {}
+  method mixedInMethodImplementedField() → void {}
+  get mixedInGetterImplementedMethod() → core::int
+    return 0;
+  set mixedInSetterImplementedMethod(core::int value) → void {}
+  get extendedMethodMixedInGetter() → core::int
+    return 0;
+  set extendedMethodMixedInSetter(core::int value) → void {}
+  method extendedGetterMixedInMethod() → void {}
+  method extendedSetterMixedInMethod() → void {}
+  method extendedFieldMixedInMethod() → void {}
+}
+class Interface1 extends core::Object {
+  field core::int implementedFieldDeclaredMethod = 0;
+  field core::int implementedFieldImplementedMethod = 0;
+  field core::int extendedMethodImplementedField = 0;
+  field core::int mixedInMethodImplementedField = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  method implementedMethodDeclaredGetter() → void {}
+  method implementedMethodDeclaredSetter() → void {}
+  method implementedMethodDeclaredField() → void {}
+  get implementedGetterDeclaredMethod() → core::int
+    return 0;
+  set implementedSetterDeclaredMethod(core::int value) → void {}
+  method implementedMethodImplementedGetter() → void {}
+  method implementedMethodImplementedSetter() → void {}
+  method implementedMethodImplementedField() → void {}
+  get implementedGetterImplementedMethod() → core::int
+    return 0;
+  set implementedSetterImplementedMethod(core::int value) → void {}
+  get extendedMethodImplementedGetter() → core::int
+    return 0;
+  set extendedMethodImplementedSetter(core::int value) → void {}
+  method extendedGetterImplementedMethod() → void {}
+  method extendedSetterImplementedMethod() → void {}
+  method extendedFieldImplementedMethod() → void {}
+  get mixedInMethodImplementedGetter() → core::int
+    return 0;
+  set mixedInMethodImplementedSetter(core::int value) → void {}
+  method mixedInGetterImplementedMethod() → void {}
+  method mixedInSetterImplementedMethod() → void {}
+  method mixedInFieldImplementedMethod() → void {}
+}
+class Interface2 extends core::Object {
+  field core::int implementedMethodImplementedField = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  get implementedMethodImplementedGetter() → core::int
+    return 0;
+  set implementedMethodImplementedSetter(core::int value) → void {}
+  method implementedGetterImplementedMethod() → void {}
+  method implementedSetterImplementedMethod() → void {}
+  method implementedFieldImplementedMethod() → void {}
+}
+abstract class _Class&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInMethodDeclaredSetter() → void
+    return super.{self::Mixin::mixedInMethodDeclaredSetter}();
+  mixin-super-stub get mixedInFieldDeclaredMethod() → core::int
+    return super.{self::Mixin::mixedInFieldDeclaredMethod};
+  mixin-super-stub set mixedInFieldDeclaredMethod(core::int value) → void
+    return super.{self::Mixin::mixedInFieldDeclaredMethod} = value;
+  mixin-super-stub get mixedInFieldImplementedMethod() → core::int
+    return super.{self::Mixin::mixedInFieldImplementedMethod};
+  mixin-super-stub set mixedInFieldImplementedMethod(core::int value) → void
+    return super.{self::Mixin::mixedInFieldImplementedMethod} = value;
+  mixin-super-stub get extendedMethodMixedInField() → core::int
+    return super.{self::Mixin::extendedMethodMixedInField};
+  mixin-super-stub set extendedMethodMixedInField(core::int value) → void
+    return super.{self::Mixin::extendedMethodMixedInField} = value;
+  mixin-super-stub method mixedInMethodDeclaredGetter() → void
+    return super.{self::Mixin::mixedInMethodDeclaredGetter}();
+  mixin-super-stub method mixedInMethodDeclaredField() → void
+    return super.{self::Mixin::mixedInMethodDeclaredField}();
+  mixin-super-stub get mixedInGetterDeclaredMethod() → core::int
+    return super.{self::Mixin::mixedInGetterDeclaredMethod};
+  mixin-super-stub method mixedInMethodImplementedGetter() → void
+    return super.{self::Mixin::mixedInMethodImplementedGetter}();
+  mixin-super-stub method mixedInMethodImplementedSetter() → void
+    return super.{self::Mixin::mixedInMethodImplementedSetter}();
+  mixin-super-stub method mixedInMethodImplementedField() → void
+    return super.{self::Mixin::mixedInMethodImplementedField}();
+  mixin-super-stub get mixedInGetterImplementedMethod() → core::int
+    return super.{self::Mixin::mixedInGetterImplementedMethod};
+  mixin-super-stub get extendedMethodMixedInGetter() → core::int
+    return super.{self::Mixin::extendedMethodMixedInGetter};
+  mixin-super-stub method extendedGetterMixedInMethod() → void
+    return super.{self::Mixin::extendedGetterMixedInMethod}();
+  mixin-super-stub method extendedSetterMixedInMethod() → void
+    return super.{self::Mixin::extendedSetterMixedInMethod}();
+  mixin-super-stub method extendedFieldMixedInMethod() → void
+    return super.{self::Mixin::extendedFieldMixedInMethod}();
+  mixin-super-stub set mixedInSetterDeclaredMethod(core::int value) → void
+    return super.{self::Mixin::mixedInSetterDeclaredMethod} = value;
+  mixin-super-stub set mixedInSetterImplementedMethod(core::int value) → void
+    return super.{self::Mixin::mixedInSetterImplementedMethod} = value;
+  mixin-super-stub set extendedMethodMixedInSetter(core::int value) → void
+    return super.{self::Mixin::extendedMethodMixedInSetter} = value;
+}
+abstract class Class extends self::_Class&Super&Mixin implements self::Interface1, self::Interface2 {
+  field core::int extendedMethodDeclaredField = 0;
+  field core::int mixedInMethodDeclaredField = 0;
+  field core::int implementedMethodDeclaredField = 0;
+  synthetic constructor •() → self::Class
+    : super self::_Class&Super&Mixin::•()
+    ;
+  get extendedMethodDeclaredGetter() → core::int
+    return 0;
+  set extendedMethodDeclaredSetter(core::int value) → void {}
+  method extendedGetterDeclaredMethod() → void {}
+  method extendedSetterDeclaredMethod() → void {}
+  method extendedFieldDeclaredMethod() → void {}
+  get mixedInMethodDeclaredGetter() → core::int
+    return 0;
+  set mixedInMethodDeclaredSetter(core::int value) → void {}
+  method mixedInGetterDeclaredMethod() → void {}
+  method mixedInSetterDeclaredMethod() → void {}
+  method mixedInFieldDeclaredMethod() → void {}
+  get implementedMethodDeclaredGetter() → core::int
+    return 0;
+  set implementedMethodDeclaredSetter(core::int value) → void {}
+  method implementedGetterDeclaredMethod() → void {}
+  method implementedSetterDeclaredMethod() → void {}
+  method implementedFieldDeclaredMethod() → void {}
+  method declaredMethodAndSetter() → void {}
+  set declaredMethodAndSetter(core::int value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.modular.expect
new file mode 100644
index 0000000..2e8e69d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.modular.expect
@@ -0,0 +1,152 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class M1 extends core::Object {
+  synthetic constructor •() → self::M1
+    : super core::Object::•()
+    ;
+  method method(covariant-by-declaration core::int a, core::int b) → dynamic {}
+}
+class M2 extends core::Object {
+  synthetic constructor •() → self::M2
+    : super core::Object::•()
+    ;
+  method method(core::int a, covariant-by-declaration core::int b) → dynamic {}
+}
+abstract class _C&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&M1
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(covariant-by-declaration core::int a, core::int b) → dynamic
+    return super.{self::M1::method}(a, b);
+}
+abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&M1&M2
+    : super self::_C&Object&M1::•()
+    ;
+  forwarding-stub method method(covariant-by-declaration core::int a, covariant-by-declaration core::int b) → dynamic
+    return super.{self::M2::method}(a, b);
+}
+class C extends self::_C&Object&M1&M2 {
+  synthetic constructor •() → self::C
+    : super self::_C&Object&M1&M2::•()
+    ;
+}
+class Direct extends core::Object {
+  synthetic constructor •() → self::Direct
+    : super core::Object::•()
+    ;
+  method positional(covariant-by-declaration core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
+  method optional([covariant-by-declaration core::int a = #C1, core::int b = #C1, covariant-by-declaration core::int c = #C1, core::int d = #C1]) → void {}
+  method named({covariant-by-declaration core::int a = #C1, core::int b = #C1, covariant-by-declaration core::int c = #C1, core::int d = #C1}) → void {}
+}
+class Inherited extends self::Direct {
+  synthetic constructor •() → self::Inherited
+    : super self::Direct::•()
+    ;
+}
+class Override1 extends core::Object {
+  synthetic constructor •() → self::Override1
+    : super core::Object::•()
+    ;
+  method method(covariant-by-declaration core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
+}
+class Override2 extends self::Override1 {
+  synthetic constructor •() → self::Override2
+    : super self::Override1::•()
+    ;
+  method method(covariant-by-declaration core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
+}
+class Override3 extends self::Override2 {
+  synthetic constructor •() → self::Override3
+    : super self::Override2::•()
+    ;
+  method method(covariant-by-declaration core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
+}
+abstract class Implement1 extends core::Object {
+  synthetic constructor •() → self::Implement1
+    : super core::Object::•()
+    ;
+  method method(covariant-by-declaration core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
+}
+class Implement2 extends core::Object {
+  synthetic constructor •() → self::Implement2
+    : super core::Object::•()
+    ;
+  method method(core::int a, covariant-by-declaration core::int b, core::int c, core::int d, core::int e) → void {}
+}
+class Implement3 extends core::Object {
+  synthetic constructor •() → self::Implement3
+    : super core::Object::•()
+    ;
+  method method(core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
+}
+class Implement4 extends core::Object implements self::Implement3 {
+  synthetic constructor •() → self::Implement4
+    : super core::Object::•()
+    ;
+  method method(core::int a, core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, core::int e) → void {}
+}
+class Implement5 extends core::Object implements self::Implement1, self::Implement2, self::Implement4 {
+  synthetic constructor •() → self::Implement5
+    : super core::Object::•()
+    ;
+  method method(covariant-by-declaration core::int a, covariant-by-declaration core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, covariant-by-declaration core::int e) → void {}
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  method method(covariant-by-declaration core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  method method(core::int a, covariant-by-declaration core::int b, core::int c, core::int d, core::int e) → void {}
+}
+class Mixin1 extends core::Object {
+  synthetic constructor •() → self::Mixin1
+    : super core::Object::•()
+    ;
+  method method(core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
+}
+class Mixin2 extends core::Object {
+  synthetic constructor •() → self::Mixin2
+    : super core::Object::•()
+    ;
+  method method(core::int a, core::int b, core::int c, covariant-by-declaration core::int d, core::int e) → void {}
+}
+class Superclass extends core::Object {
+  synthetic constructor •() → self::Superclass
+    : super core::Object::•()
+    ;
+  method method(core::int a, core::int b, core::int c, core::int d, covariant-by-declaration core::int e) → void {}
+}
+abstract class _Mixed&Superclass&Mixin1 = self::Superclass with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixed&Superclass&Mixin1
+    : super self::Superclass::•()
+    ;
+  forwarding-stub method method(core::int a, core::int b, covariant-by-declaration core::int c, core::int d, covariant-by-declaration core::int e) → void
+    return super.{self::Mixin1::method}(a, b, c, d, e);
+}
+abstract class _Mixed&Superclass&Mixin1&Mixin2 = self::_Mixed&Superclass&Mixin1 with self::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2
+    : super self::_Mixed&Superclass&Mixin1::•()
+    ;
+  forwarding-stub method method(core::int a, core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, covariant-by-declaration core::int e) → void
+    return super.{self::Mixin2::method}(a, b, c, d, e);
+}
+class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::Mixed
+    : super self::_Mixed&Superclass&Mixin1&Mixin2::•()
+    ;
+  forwarding-stub method method(covariant-by-declaration core::int a, covariant-by-declaration core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, covariant-by-declaration core::int e) → void
+    return super.{self::Mixin2::method}(a, b, c, d, e);
+}
+static method main() → void {}
+
+constants  {
+  #C1 = 0
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.modular.expect
new file mode 100644
index 0000000..42a0eb1
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator ==(covariant-by-declaration self::A* other) → core::bool*
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator ==(covariant-by-declaration self::A* other) → core::bool*
+    return true;
+}
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T*>* other) → core::bool*
+    return true;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C<core::int*> {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart.weak.modular.expect
new file mode 100644
index 0000000..50391f4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart.weak.modular.expect
@@ -0,0 +1,95 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractDeclaredAbstractMethod
+//  - Super.extendedAbstractDeclaredConcreteMethod
+//  - Super.extendedAbstractImplementedDeclaredAbstractMethod
+//  - Super.extendedAbstractImplementedDeclaredConcreteMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Super {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:12:8: Context: 'Super.extendedAbstractDeclaredAbstractMethod' is defined here.
+//   void extendedAbstractDeclaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:8:8: Context: 'Super.extendedAbstractDeclaredConcreteMethod' is defined here.
+//   void extendedAbstractDeclaredConcreteMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:20:8: Context: 'Super.extendedAbstractImplementedDeclaredAbstractMethod' is defined here.
+//   void extendedAbstractImplementedDeclaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:16:8: Context: 'Super.extendedAbstractImplementedDeclaredConcreteMethod' is defined here.
+//   void extendedAbstractImplementedDeclaredConcreteMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:37:7: Error: The non-abstract class 'Class' is missing implementations for these members:
+//  - Class.extendedAbstractDeclaredAbstractMethod
+//  - Class.extendedAbstractImplementedDeclaredAbstractMethod
+//  - Class.implementedDeclaredAbstractMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Class extends Super implements Interface {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:44:8: Context: 'Class.extendedAbstractDeclaredAbstractMethod' is defined here.
+//   void extendedAbstractDeclaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:56:8: Context: 'Class.extendedAbstractImplementedDeclaredAbstractMethod' is defined here.
+//   void extendedAbstractImplementedDeclaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:48:8: Context: 'Class.implementedDeclaredAbstractMethod' is defined here.
+//   void implementedDeclaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteDeclaredConcreteMethod() → void {}
+  abstract method extendedAbstractDeclaredConcreteMethod() → void;
+  method extendedConcreteDeclaredAbstractMethod() → void {}
+  abstract method extendedAbstractDeclaredAbstractMethod() → void;
+  method extendedConcreteImplementedDeclaredConcreteMethod() → void {}
+  abstract method extendedAbstractImplementedDeclaredConcreteMethod() → void;
+  method extendedConcreteImplementedDeclaredAbstractMethod() → void {}
+  abstract method extendedAbstractImplementedDeclaredAbstractMethod() → void;
+}
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  method implementedDeclaredConcreteMethod() → void {}
+  method implementedDeclaredAbstractMethod() → void {}
+  method extendedConcreteImplementedDeclaredConcreteMethod() → void {}
+  method extendedAbstractImplementedDeclaredConcreteMethod() → void {}
+  method extendedConcreteImplementedDeclaredAbstractMethod() → void {}
+  method extendedAbstractImplementedDeclaredAbstractMethod() → void {}
+}
+class Class extends self::Super implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  method extendedConcreteDeclaredConcreteMethod() → void {}
+  method extendedAbstractDeclaredConcreteMethod() → void {}
+  abstract method extendedConcreteDeclaredAbstractMethod() → void;
+  abstract method extendedAbstractDeclaredAbstractMethod() → void;
+  method implementedDeclaredConcreteMethod() → void {}
+  abstract method implementedDeclaredAbstractMethod() → void;
+  method extendedConcreteImplementedDeclaredConcreteMethod() → void {}
+  method extendedAbstractImplementedDeclaredConcreteMethod() → void {}
+  abstract method extendedConcreteImplementedDeclaredAbstractMethod() → void;
+  abstract method extendedAbstractImplementedDeclaredAbstractMethod() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart.weak.modular.expect
new file mode 100644
index 0000000..d51754d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart.weak.modular.expect
@@ -0,0 +1,132 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:7:11: Error: 'superDuplicate1' is already declared in this scope.
+//   int get superDuplicate1 => 42;
+//           ^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:6:8: Context: Previous declaration of 'superDuplicate1'.
+//   void superDuplicate1() {}
+//        ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:10:8: Error: 'superDuplicate2' is already declared in this scope.
+//   void superDuplicate2() {}
+//        ^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:9:11: Context: Previous declaration of 'superDuplicate2'.
+//   int get superDuplicate2 => 42;
+//           ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:29:11: Error: 'interfaceDuplicate1' is already declared in this scope.
+//   int get interfaceDuplicate1 => 42;
+//           ^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:28:8: Context: Previous declaration of 'interfaceDuplicate1'.
+//   void interfaceDuplicate1() {}
+//        ^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:32:8: Error: 'interfaceDuplicate2' is already declared in this scope.
+//   void interfaceDuplicate2() {}
+//        ^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:31:11: Context: Previous declaration of 'interfaceDuplicate2'.
+//   int get interfaceDuplicate2 => 42;
+//           ^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:43:11: Error: 'extendedDuplicate1' is already declared in this scope.
+//   int get extendedDuplicate1 => 42;
+//           ^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:42:8: Context: Previous declaration of 'extendedDuplicate1'.
+//   void extendedDuplicate1() {}
+//        ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:46:8: Error: 'extendedDuplicate2' is already declared in this scope.
+//   void extendedDuplicate2() {}
+//        ^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:45:11: Context: Previous declaration of 'extendedDuplicate2'.
+//   int get extendedDuplicate2 => 42;
+//           ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:52:11: Error: 'mixedInDuplicate1' is already declared in this scope.
+//   int get mixedInDuplicate1 => 42;
+//           ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:51:8: Context: Previous declaration of 'mixedInDuplicate1'.
+//   void mixedInDuplicate1() {}
+//        ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:55:8: Error: 'mixedInDuplicate2' is already declared in this scope.
+//   void mixedInDuplicate2() {}
+//        ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:54:11: Context: Previous declaration of 'mixedInDuplicate2'.
+//   int get mixedInDuplicate2 => 42;
+//           ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:61:11: Error: 'implementedDuplicate1' is already declared in this scope.
+//   int get implementedDuplicate1 => 42;
+//           ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:60:8: Context: Previous declaration of 'implementedDuplicate1'.
+//   void implementedDuplicate1() {}
+//        ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:64:8: Error: 'implementedDuplicate2' is already declared in this scope.
+//   void implementedDuplicate2() {}
+//        ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:63:11: Context: Previous declaration of 'implementedDuplicate2'.
+//   int get implementedDuplicate2 => 42;
+//           ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method superDuplicate1() → void {}
+  get superDuplicate2() → core::int
+    return 42;
+  method extendedDuplicate1() → void {}
+  method extendedDuplicate2() → void {}
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method mixedInDuplicate1() → void {}
+  method mixedInDuplicate2() → void {}
+}
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  method interfaceDuplicate1() → void {}
+  get interfaceDuplicate2() → core::int
+    return 42;
+  method implementedDuplicate1() → void {}
+  method implementedDuplicate2() → void {}
+}
+abstract class _Class&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInDuplicate1() → void
+    return super.{self::Mixin::mixedInDuplicate1}();
+  mixin-super-stub method mixedInDuplicate2() → void
+    return super.{self::Mixin::mixedInDuplicate2}();
+}
+abstract class Class extends self::_Class&Super&Mixin implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super self::_Class&Super&Mixin::•()
+    ;
+  method superDuplicate1() → void {}
+  method superDuplicate2() → void {}
+  method extendedDuplicate1() → void {}
+  get extendedDuplicate2() → core::int
+    return 42;
+  method mixedInDuplicate1() → void {}
+  get mixedInDuplicate2() → core::int
+    return 42;
+  method interfaceDuplicate1() → void {}
+  method interfaceDuplicate2() → void {}
+  method implementedDuplicate1() → void {}
+  get implementedDuplicate2() → core::int
+    return 42;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.weak.modular.expect
new file mode 100644
index 0000000..becdaa6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.weak.modular.expect
@@ -0,0 +1,145 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:37:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
+//  - Interface1.extendedAbstractImplementedField
+//  - Interface1.extendedAbstractImplementedMultipleField
+//  - Interface2.extendedAbstractImplementedMultipleField
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractField=
+//  - Super.extendedAbstractImplementedField
+//  - Super.extendedAbstractImplementedField=
+//  - Super.extendedAbstractImplementedMultipleField
+//  - Super.extendedAbstractImplementedMultipleField=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSub extends AbstractClass {}
+//       ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:22:7: Context: 'Interface1.extendedAbstractImplementedField' is defined here.
+//   int extendedAbstractImplementedField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:26:7: Context: 'Interface1.extendedAbstractImplementedMultipleField' is defined here.
+//   int extendedAbstractImplementedMultipleField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:32:7: Context: 'Interface2.extendedAbstractImplementedMultipleField' is defined here.
+//   int extendedAbstractImplementedMultipleField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:8:16: Context: 'Super.extendedAbstractField' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:8:16: Context: 'Super.extendedAbstractField=' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:12:16: Context: 'Super.extendedAbstractImplementedField' is defined here.
+//   abstract int extendedAbstractImplementedField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:12:16: Context: 'Super.extendedAbstractImplementedField=' is defined here.
+//   abstract int extendedAbstractImplementedField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:16:16: Context: 'Super.extendedAbstractImplementedMultipleField' is defined here.
+//   abstract int extendedAbstractImplementedMultipleField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:16:16: Context: 'Super.extendedAbstractImplementedMultipleField=' is defined here.
+//   abstract int extendedAbstractImplementedMultipleField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - Interface1.extendedAbstractImplementedField
+//  - Interface1.extendedAbstractImplementedMultipleField
+//  - Interface2.extendedAbstractImplementedMultipleField
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractField=
+//  - Super.extendedAbstractImplementedField
+//  - Super.extendedAbstractImplementedField=
+//  - Super.extendedAbstractImplementedMultipleField
+//  - Super.extendedAbstractImplementedMultipleField=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:22:7: Context: 'Interface1.extendedAbstractImplementedField' is defined here.
+//   int extendedAbstractImplementedField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:26:7: Context: 'Interface1.extendedAbstractImplementedMultipleField' is defined here.
+//   int extendedAbstractImplementedMultipleField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:32:7: Context: 'Interface2.extendedAbstractImplementedMultipleField' is defined here.
+//   int extendedAbstractImplementedMultipleField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:8:16: Context: 'Super.extendedAbstractField' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:8:16: Context: 'Super.extendedAbstractField=' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:12:16: Context: 'Super.extendedAbstractImplementedField' is defined here.
+//   abstract int extendedAbstractImplementedField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:12:16: Context: 'Super.extendedAbstractImplementedField=' is defined here.
+//   abstract int extendedAbstractImplementedField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:16:16: Context: 'Super.extendedAbstractImplementedMultipleField' is defined here.
+//   abstract int extendedAbstractImplementedMultipleField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:16:16: Context: 'Super.extendedAbstractImplementedMultipleField=' is defined here.
+//   abstract int extendedAbstractImplementedMultipleField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  field core::int extendedConcreteField = 0;
+  field core::int extendedConcreteImplementedField = 0;
+  field core::int extendedConcreteImplementedMultipleField = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract set extendedAbstractField(core::int #externalFieldValue) → void;
+  abstract get extendedAbstractImplementedField() → core::int;
+  abstract set extendedAbstractImplementedField(core::int #externalFieldValue) → void;
+  abstract get extendedAbstractImplementedMultipleField() → core::int;
+  abstract set extendedAbstractImplementedMultipleField(core::int #externalFieldValue) → void;
+}
+class Interface1 extends core::Object {
+  field core::int extendedConcreteImplementedField = 0;
+  field core::int extendedAbstractImplementedField = 0;
+  field core::int extendedConcreteImplementedMultipleField = 0;
+  field core::int extendedAbstractImplementedMultipleField = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+}
+class Interface2 extends core::Object {
+  field core::int extendedConcreteImplementedMultipleField = 0;
+  field core::int extendedAbstractImplementedMultipleField = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.weak.modular.expect
new file mode 100644
index 0000000..e65fe64
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.weak.modular.expect
@@ -0,0 +1,118 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:37:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
+//  - Interface1.extendedAbstractImplementedField
+//  - Interface1.extendedAbstractImplementedMultipleField
+//  - Interface2.extendedAbstractImplementedMultipleField
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractImplementedField
+//  - Super.extendedAbstractImplementedMultipleField
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSub extends AbstractClass {}
+//       ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:22:13: Context: 'Interface1.extendedAbstractImplementedField' is defined here.
+//   final int extendedAbstractImplementedField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:26:13: Context: 'Interface1.extendedAbstractImplementedMultipleField' is defined here.
+//   final int extendedAbstractImplementedMultipleField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:32:13: Context: 'Interface2.extendedAbstractImplementedMultipleField' is defined here.
+//   final int extendedAbstractImplementedMultipleField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:8:22: Context: 'Super.extendedAbstractField' is defined here.
+//   abstract final int extendedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:12:22: Context: 'Super.extendedAbstractImplementedField' is defined here.
+//   abstract final int extendedAbstractImplementedField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:16:22: Context: 'Super.extendedAbstractImplementedMultipleField' is defined here.
+//   abstract final int extendedAbstractImplementedMultipleField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - Interface1.extendedAbstractImplementedField
+//  - Interface1.extendedAbstractImplementedMultipleField
+//  - Interface2.extendedAbstractImplementedMultipleField
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractImplementedField
+//  - Super.extendedAbstractImplementedMultipleField
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:22:13: Context: 'Interface1.extendedAbstractImplementedField' is defined here.
+//   final int extendedAbstractImplementedField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:26:13: Context: 'Interface1.extendedAbstractImplementedMultipleField' is defined here.
+//   final int extendedAbstractImplementedMultipleField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:32:13: Context: 'Interface2.extendedAbstractImplementedMultipleField' is defined here.
+//   final int extendedAbstractImplementedMultipleField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:8:22: Context: 'Super.extendedAbstractField' is defined here.
+//   abstract final int extendedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:12:22: Context: 'Super.extendedAbstractImplementedField' is defined here.
+//   abstract final int extendedAbstractImplementedField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:16:22: Context: 'Super.extendedAbstractImplementedMultipleField' is defined here.
+//   abstract final int extendedAbstractImplementedMultipleField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  final field core::int extendedConcreteField = 0;
+  final field core::int extendedConcreteImplementedField = 0;
+  final field core::int extendedConcreteImplementedMultipleField = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract get extendedAbstractImplementedField() → core::int;
+  abstract get extendedAbstractImplementedMultipleField() → core::int;
+}
+class Interface1 extends core::Object {
+  final field core::int extendedConcreteImplementedField = 0;
+  final field core::int extendedAbstractImplementedField = 0;
+  final field core::int extendedConcreteImplementedMultipleField = 0;
+  final field core::int extendedAbstractImplementedMultipleField = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+}
+class Interface2 extends core::Object {
+  final field core::int extendedConcreteImplementedMultipleField = 0;
+  final field core::int extendedAbstractImplementedMultipleField = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..39f968f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.weak.modular.expect
@@ -0,0 +1,127 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:37:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
+//  - Interface1.extendedAbstractImplementedGetter
+//  - Interface1.extendedAbstractImplementedMultipleGetter
+//  - Interface2.extendedAbstractImplementedMultipleGetter
+//  - Super.extendedAbstractGetter
+//  - Super.extendedAbstractImplementedGetter
+//  - Super.extendedAbstractImplementedMultipleGetter
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSub extends AbstractClass {}
+//       ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:22:11: Context: 'Interface1.extendedAbstractImplementedGetter' is defined here.
+//   int get extendedAbstractImplementedGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:26:11: Context: 'Interface1.extendedAbstractImplementedMultipleGetter' is defined here.
+//   int get extendedAbstractImplementedMultipleGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:32:11: Context: 'Interface2.extendedAbstractImplementedMultipleGetter' is defined here.
+//   int get extendedAbstractImplementedMultipleGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
+//   int get extendedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:12:11: Context: 'Super.extendedAbstractImplementedGetter' is defined here.
+//   int get extendedAbstractImplementedGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:16:11: Context: 'Super.extendedAbstractImplementedMultipleGetter' is defined here.
+//   int get extendedAbstractImplementedMultipleGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - Interface1.extendedAbstractImplementedGetter
+//  - Interface1.extendedAbstractImplementedMultipleGetter
+//  - Interface2.extendedAbstractImplementedMultipleGetter
+//  - Super.extendedAbstractGetter
+//  - Super.extendedAbstractImplementedGetter
+//  - Super.extendedAbstractImplementedMultipleGetter
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:22:11: Context: 'Interface1.extendedAbstractImplementedGetter' is defined here.
+//   int get extendedAbstractImplementedGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:26:11: Context: 'Interface1.extendedAbstractImplementedMultipleGetter' is defined here.
+//   int get extendedAbstractImplementedMultipleGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:32:11: Context: 'Interface2.extendedAbstractImplementedMultipleGetter' is defined here.
+//   int get extendedAbstractImplementedMultipleGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
+//   int get extendedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:12:11: Context: 'Super.extendedAbstractImplementedGetter' is defined here.
+//   int get extendedAbstractImplementedGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:16:11: Context: 'Super.extendedAbstractImplementedMultipleGetter' is defined here.
+//   int get extendedAbstractImplementedMultipleGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  get extendedConcreteGetter() → core::int
+    return 0;
+  abstract get extendedAbstractGetter() → core::int;
+  get extendedConcreteImplementedGetter() → core::int
+    return 0;
+  abstract get extendedAbstractImplementedGetter() → core::int;
+  get extendedConcreteImplementedMultipleGetter() → core::int
+    return 0;
+  abstract get extendedAbstractImplementedMultipleGetter() → core::int;
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  get extendedConcreteImplementedGetter() → core::int
+    return 0;
+  get extendedAbstractImplementedGetter() → core::int
+    return 0;
+  get extendedConcreteImplementedMultipleGetter() → core::int
+    return 0;
+  get extendedAbstractImplementedMultipleGetter() → core::int
+    return 0;
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  get extendedConcreteImplementedMultipleGetter() → core::int
+    return 0;
+  get extendedAbstractImplementedMultipleGetter() → core::int
+    return 0;
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.weak.modular.expect
new file mode 100644
index 0000000..2bb4d30
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.weak.modular.expect
@@ -0,0 +1,118 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:37:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
+//  - Interface1.extendedAbstractImplementedMethod
+//  - Interface1.extendedAbstractImplementedMultipleMethod
+//  - Interface2.extendedAbstractImplementedMultipleMethod
+//  - Super.extendedAbstractImplementedMethod
+//  - Super.extendedAbstractImplementedMultipleMethod
+//  - Super.extendedAbstractMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSub extends AbstractClass {}
+//       ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:22:8: Context: 'Interface1.extendedAbstractImplementedMethod' is defined here.
+//   void extendedAbstractImplementedMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:26:8: Context: 'Interface1.extendedAbstractImplementedMultipleMethod' is defined here.
+//   void extendedAbstractImplementedMultipleMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:32:8: Context: 'Interface2.extendedAbstractImplementedMultipleMethod' is defined here.
+//   void extendedAbstractImplementedMultipleMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:12:8: Context: 'Super.extendedAbstractImplementedMethod' is defined here.
+//   void extendedAbstractImplementedMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:16:8: Context: 'Super.extendedAbstractImplementedMultipleMethod' is defined here.
+//   void extendedAbstractImplementedMultipleMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - Interface1.extendedAbstractImplementedMethod
+//  - Interface1.extendedAbstractImplementedMultipleMethod
+//  - Interface2.extendedAbstractImplementedMultipleMethod
+//  - Super.extendedAbstractImplementedMethod
+//  - Super.extendedAbstractImplementedMultipleMethod
+//  - Super.extendedAbstractMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:22:8: Context: 'Interface1.extendedAbstractImplementedMethod' is defined here.
+//   void extendedAbstractImplementedMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:26:8: Context: 'Interface1.extendedAbstractImplementedMultipleMethod' is defined here.
+//   void extendedAbstractImplementedMultipleMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:32:8: Context: 'Interface2.extendedAbstractImplementedMultipleMethod' is defined here.
+//   void extendedAbstractImplementedMultipleMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:12:8: Context: 'Super.extendedAbstractImplementedMethod' is defined here.
+//   void extendedAbstractImplementedMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:16:8: Context: 'Super.extendedAbstractImplementedMultipleMethod' is defined here.
+//   void extendedAbstractImplementedMultipleMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod() → void {}
+  abstract method extendedAbstractMethod() → void;
+  method extendedConcreteImplementedMethod() → void {}
+  abstract method extendedAbstractImplementedMethod() → void;
+  method extendedConcreteImplementedMultipleMethod() → void {}
+  abstract method extendedAbstractImplementedMultipleMethod() → void;
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  method extendedConcreteImplementedMethod() → void {}
+  method extendedAbstractImplementedMethod() → void {}
+  method extendedConcreteImplementedMultipleMethod() → void {}
+  method extendedAbstractImplementedMultipleMethod() → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  method extendedConcreteImplementedMultipleMethod() → void {}
+  method extendedAbstractImplementedMultipleMethod() → void {}
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..e2cfcb3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.weak.modular.expect
@@ -0,0 +1,118 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:37:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
+//  - Interface1.extendedAbstractImplementedMultipleSetter=
+//  - Interface1.extendedAbstractImplementedSetter=
+//  - Interface2.extendedAbstractImplementedMultipleSetter=
+//  - Super.extendedAbstractImplementedMultipleSetter=
+//  - Super.extendedAbstractImplementedSetter=
+//  - Super.extendedAbstractSetter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSub extends AbstractClass {}
+//       ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:26:12: Context: 'Interface1.extendedAbstractImplementedMultipleSetter=' is defined here.
+//   void set extendedAbstractImplementedMultipleSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:22:12: Context: 'Interface1.extendedAbstractImplementedSetter=' is defined here.
+//   void set extendedAbstractImplementedSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:32:12: Context: 'Interface2.extendedAbstractImplementedMultipleSetter=' is defined here.
+//   void set extendedAbstractImplementedMultipleSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:16:12: Context: 'Super.extendedAbstractImplementedMultipleSetter=' is defined here.
+//   void set extendedAbstractImplementedMultipleSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:12:12: Context: 'Super.extendedAbstractImplementedSetter=' is defined here.
+//   void set extendedAbstractImplementedSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:8:12: Context: 'Super.extendedAbstractSetter=' is defined here.
+//   void set extendedAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - Interface1.extendedAbstractImplementedMultipleSetter=
+//  - Interface1.extendedAbstractImplementedSetter=
+//  - Interface2.extendedAbstractImplementedMultipleSetter=
+//  - Super.extendedAbstractImplementedMultipleSetter=
+//  - Super.extendedAbstractImplementedSetter=
+//  - Super.extendedAbstractSetter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:26:12: Context: 'Interface1.extendedAbstractImplementedMultipleSetter=' is defined here.
+//   void set extendedAbstractImplementedMultipleSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:22:12: Context: 'Interface1.extendedAbstractImplementedSetter=' is defined here.
+//   void set extendedAbstractImplementedSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:32:12: Context: 'Interface2.extendedAbstractImplementedMultipleSetter=' is defined here.
+//   void set extendedAbstractImplementedMultipleSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:16:12: Context: 'Super.extendedAbstractImplementedMultipleSetter=' is defined here.
+//   void set extendedAbstractImplementedMultipleSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:12:12: Context: 'Super.extendedAbstractImplementedSetter=' is defined here.
+//   void set extendedAbstractImplementedSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:8:12: Context: 'Super.extendedAbstractSetter=' is defined here.
+//   void set extendedAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  set extendedConcreteSetter(core::int value) → void {}
+  abstract set extendedAbstractSetter(core::int value) → void;
+  set extendedConcreteImplementedSetter(core::int value) → void {}
+  abstract set extendedAbstractImplementedSetter(core::int value) → void;
+  set extendedConcreteImplementedMultipleSetter(core::int value) → void {}
+  abstract set extendedAbstractImplementedMultipleSetter(core::int value) → void;
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  set extendedConcreteImplementedSetter(core::int value) → void {}
+  set extendedAbstractImplementedSetter(core::int value) → void {}
+  set extendedConcreteImplementedMultipleSetter(core::int value) → void {}
+  set extendedAbstractImplementedMultipleSetter(core::int value) → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  set extendedConcreteImplementedMultipleSetter(core::int value) → void {}
+  set extendedAbstractImplementedMultipleSetter(core::int value) → void {}
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.modular.expect
new file mode 100644
index 0000000..5a2032c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.modular.expect
@@ -0,0 +1,144 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:24:19: Error: The return type of the method 'Class.field2' is 'String', which does not match the return type, 'num', of the overridden method, 'Super.field2'.
+// Change to a subtype of 'num'.
+//   abstract String field2;
+//                   ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:7:7: Context: This is the overridden method ('field2').
+//   num field2 = 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:24:19: Error: The return type of the method 'Class.field2' is 'String', which does not match the return type, 'int', of the overridden method, 'Interface.field2'.
+// Change to a subtype of 'int'.
+//   abstract String field2;
+//                   ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:16:17: Context: This is the overridden method ('field2').
+//   covariant int field2 = 0;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:24:19: Error: The parameter '#externalFieldValue' of the method 'Class.field2' has type 'String', which does not match the corresponding type, 'num', in the overridden method, 'Super.field2'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   abstract String field2;
+//                   ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:7:7: Context: This is the overridden method ('field2').
+//   num field2 = 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:24:19: Error: The parameter '#externalFieldValue' of the method 'Class.field2' has type 'String', which does not match the corresponding type, 'int', in the overridden method, 'Interface.field2'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   abstract String field2;
+//                   ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:16:17: Context: This is the overridden method ('field2').
+//   covariant int field2 = 0;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:25:16: Error: The parameter '#externalFieldValue' of the method 'Class.field3' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'Super.field3'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   abstract int field3;
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:8:7: Context: This is the overridden method ('field3').
+//   num field3 = 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:28:16: Error: The return type of the method 'Class.field5' is 'num', which does not match the return type, 'int', of the overridden method, 'Super.field5'.
+// Change to a subtype of 'int'.
+//   abstract num field5;
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:11:17: Context: This is the overridden method ('field5').
+//   covariant int field5 = 0;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:28:16: Error: The return type of the method 'Class.field5' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface.field5'.
+// Change to a subtype of 'int'.
+//   abstract num field5;
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:19:7: Context: This is the overridden method ('field5').
+//   int field5 = 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:22:7: Error: The implementation of 'field1' in the non-abstract class 'Class' does not conform to its interface.
+// class Class extends Super implements Interface {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:6:7: Context: The return type of the method 'Super.field1' is 'num', which does not match the return type, 'int', of the overridden method, 'Class.field1'.
+// Change to a subtype of 'int'.
+//   num field1 = 0;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:23:16: Context: This is the overridden method ('field1').
+//   abstract int field1;
+//                ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:22:7: Error: The implementation of 'field2' in the non-abstract class 'Class' does not conform to its interface.
+// class Class extends Super implements Interface {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:7:7: Context: The return type of the method 'Super.field2' is 'num', which does not match the return type, 'String', of the overridden method, 'Class.field2'.
+// Change to a subtype of 'String'.
+//   num field2 = 0;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:24:19: Context: This is the overridden method ('field2').
+//   abstract String field2;
+//                   ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:22:7: Error: The implementation of 'field3' in the non-abstract class 'Class' does not conform to its interface.
+// class Class extends Super implements Interface {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:8:7: Context: The return type of the method 'Super.field3' is 'num', which does not match the return type, 'int', of the overridden method, 'Class.field3'.
+// Change to a subtype of 'int'.
+//   num field3 = 0;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:25:16: Context: This is the overridden method ('field3').
+//   abstract int field3;
+//                ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:22:7: Error: The implementation of 'field4' in the non-abstract class 'Class' does not conform to its interface.
+// class Class extends Super implements Interface {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:10:17: Context: The return type of the method 'Super.field4' is 'num', which does not match the return type, 'int', of the overridden method, 'Class.field4'.
+// Change to a subtype of 'int'.
+//   covariant num field4 = 0;
+//                 ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:27:16: Context: This is the overridden method ('field4').
+//   abstract int field4;
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  field core::num field1 = 0;
+  field core::num field2 = 0;
+  field core::num field3 = 0;
+  covariant-by-declaration field core::num field4 = 0;
+  covariant-by-declaration field core::int field5 = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Interface extends core::Object {
+  covariant-by-declaration field core::int field1 = 0;
+  covariant-by-declaration field core::int field2 = 0;
+  field core::int field4 = 0;
+  field core::int field5 = 0;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+}
+class Class extends self::Super implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  abstract get field1() → core::int;
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ field1(covariant-by-declaration core::num #externalFieldValue) → void
+    return super.{self::Super::field1} = #externalFieldValue;
+  abstract get field2() → core::String;
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::String) → void */ field2(covariant-by-declaration core::num #externalFieldValue) → void
+    return super.{self::Super::field2} = #externalFieldValue;
+  abstract get field3() → core::int;
+  abstract set field3(core::int #externalFieldValue) → void;
+  abstract get field4() → core::int;
+  abstract set field4(covariant-by-declaration core::int #externalFieldValue) → void;
+  abstract get field5() → core::num;
+  abstract set field5(covariant-by-declaration core::num #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.modular.expect
new file mode 100644
index 0000000..9e7d45a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:24:23: Error: The parameter 'i' of the method 'Class.method2' has type 'String', which does not match the corresponding type, 'num', in the overridden method, 'Super.method2'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void method2(String i);
+//                       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:7:8: Context: This is the overridden method ('method2').
+//   void method2(num n) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:24:23: Error: The parameter 'i' of the method 'Class.method2' has type 'String', which does not match the corresponding type, 'int', in the overridden method, 'Interface.method2'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void method2(String i);
+//                       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:16:8: Context: This is the overridden method ('method2').
+//   void method2(covariant int i) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:25:20: Error: The parameter 'i' of the method 'Class.method3' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'Super.method3'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void method3(int i);
+//                    ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:8:8: Context: This is the overridden method ('method3').
+//   void method3(num n) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:22:7: Error: The implementation of 'method2' in the non-abstract class 'Class' does not conform to its interface.
+// class Class extends Super implements Interface {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:7:20: Context: The parameter 'n' of the method 'Super.method2' has type 'num', which does not match the corresponding type, 'String', in the overridden method, 'Class.method2'.
+// Change to a supertype of 'String', or, for a covariant parameter, a subtype.
+//   void method2(num n) {}
+//                    ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:24:8: Context: This is the overridden method ('method2').
+//   void method2(String i);
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method method1(core::num n) → void {}
+  method method2(core::num n) → void {}
+  method method3(core::num n) → void {}
+  method method4(covariant-by-declaration core::num i) → void {}
+  method method5(covariant-by-declaration core::int i) → void {}
+}
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  method method1(covariant-by-declaration core::int i) → void {}
+  method method2(covariant-by-declaration core::int i) → void {}
+  method method4(core::int i) → void {}
+  method method5(core::int i) → void {}
+}
+class Class extends self::Super implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::int) → void */ method1(covariant-by-declaration core::num i) → void
+    return super.{self::Super::method1}(i);
+  forwarding-stub forwarding-semi-stub method /* signature-type: (core::String) → void */ method2(covariant-by-declaration core::num i) → void
+    return super.{self::Super::method2}(i);
+  abstract method method3(core::int i) → void;
+  abstract method method4(covariant-by-declaration core::int i) → void;
+  abstract method method5(covariant-by-declaration core::num n) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..a51aa61
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:24:27: Error: The parameter 'i' of the method 'Class.setter2' has type 'String', which does not match the corresponding type, 'num', in the overridden method, 'Super.setter2'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void set setter2(String i);
+//                           ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:7:12: Context: This is the overridden method ('setter2').
+//   void set setter2(num n) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:24:27: Error: The parameter 'i' of the method 'Class.setter2' has type 'String', which does not match the corresponding type, 'int', in the overridden method, 'Interface.setter2'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   void set setter2(String i);
+//                           ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:16:12: Context: This is the overridden method ('setter2').
+//   void set setter2(covariant int i) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:25:24: Error: The parameter 'i' of the method 'Class.setter3' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'Super.setter3'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void set setter3(int i);
+//                        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:8:12: Context: This is the overridden method ('setter3').
+//   void set setter3(num n) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:22:7: Error: The implementation of 'setter2' in the non-abstract class 'Class' does not conform to its interface.
+// class Class extends Super implements Interface {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:7:24: Context: The parameter 'n' of the method 'Super.setter2' has type 'num', which does not match the corresponding type, 'String', in the overridden method, 'Class.setter2'.
+// Change to a supertype of 'String', or, for a covariant parameter, a subtype.
+//   void set setter2(num n) {}
+//                        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:24:12: Context: This is the overridden method ('setter2').
+//   void set setter2(String i);
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  set setter1(core::num n) → void {}
+  set setter2(core::num n) → void {}
+  set setter3(core::num n) → void {}
+  set setter4(covariant-by-declaration core::num i) → void {}
+  set setter5(covariant-by-declaration core::int i) → void {}
+}
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  set setter1(covariant-by-declaration core::int i) → void {}
+  set setter2(covariant-by-declaration core::int i) → void {}
+  set setter4(core::int i) → void {}
+  set setter5(core::int i) → void {}
+}
+class Class extends self::Super implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::int) → void */ setter1(covariant-by-declaration core::num i) → void
+    return super.{self::Super::setter1} = i;
+  forwarding-stub forwarding-semi-stub set /* signature-type: (core::String) → void */ setter2(covariant-by-declaration core::num i) → void
+    return super.{self::Super::setter2} = i;
+  abstract set setter3(core::int i) → void;
+  abstract set setter4(covariant-by-declaration core::int i) → void;
+  abstract set setter5(covariant-by-declaration core::num n) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.modular.expect
new file mode 100644
index 0000000..a15a8cc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Super<self::Super::T%>
+    : super core::Object::•()
+    ;
+  method method(covariant-by-class self::Super::T% t) → void {}
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method method(core::int t) → void {}
+}
+class Class = self::Super<core::int> with self::Mixin {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  forwarding-stub method method(covariant-by-class core::int t) → void
+    return super.{self::Mixin::method}(t);
+}
+class Subclass extends self::Class {
+  synthetic constructor •() → self::Subclass
+    : super self::Class::•()
+    ;
+  method test() → void {
+    super.{self::Class::method}(0);
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.modular.expect
new file mode 100644
index 0000000..16ebb44
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.modular.expect
@@ -0,0 +1,179 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:41:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
+//  - Interface1.extendedAbstractCovariantImplementedField
+//  - Interface1.extendedAbstractImplementedCovariantField
+//  - Interface1.implementsMultipleCovariantField1
+//  - Interface1.implementsMultipleCovariantField2
+//  - Interface2.implementsMultipleCovariantField1
+//  - Interface2.implementsMultipleCovariantField2
+//  - Super.extendedAbstractCovariantField
+//  - Super.extendedAbstractCovariantField=
+//  - Super.extendedAbstractCovariantImplementedField
+//  - Super.extendedAbstractCovariantImplementedField=
+//  - Super.extendedAbstractImplementedCovariantField
+//  - Super.extendedAbstractImplementedCovariantField=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSub extends AbstractClass {}
+//       ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:22:7: Context: 'Interface1.extendedAbstractCovariantImplementedField' is defined here.
+//   int extendedAbstractCovariantImplementedField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:26:17: Context: 'Interface1.extendedAbstractImplementedCovariantField' is defined here.
+//   covariant int extendedAbstractImplementedCovariantField = 0;
+//                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:28:17: Context: 'Interface1.implementsMultipleCovariantField1' is defined here.
+//   covariant int implementsMultipleCovariantField1 = 0;
+//                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:30:7: Context: 'Interface1.implementsMultipleCovariantField2' is defined here.
+//   int implementsMultipleCovariantField2 = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:34:7: Context: 'Interface2.implementsMultipleCovariantField1' is defined here.
+//   int implementsMultipleCovariantField1 = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:36:17: Context: 'Interface2.implementsMultipleCovariantField2' is defined here.
+//   covariant int implementsMultipleCovariantField2 = 0;
+//                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:8:26: Context: 'Super.extendedAbstractCovariantField' is defined here.
+//   abstract covariant int extendedAbstractCovariantField;
+//                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:8:26: Context: 'Super.extendedAbstractCovariantField=' is defined here.
+//   abstract covariant int extendedAbstractCovariantField;
+//                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:12:26: Context: 'Super.extendedAbstractCovariantImplementedField' is defined here.
+//   abstract covariant int extendedAbstractCovariantImplementedField;
+//                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:12:26: Context: 'Super.extendedAbstractCovariantImplementedField=' is defined here.
+//   abstract covariant int extendedAbstractCovariantImplementedField;
+//                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:16:16: Context: 'Super.extendedAbstractImplementedCovariantField' is defined here.
+//   abstract int extendedAbstractImplementedCovariantField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:16:16: Context: 'Super.extendedAbstractImplementedCovariantField=' is defined here.
+//   abstract int extendedAbstractImplementedCovariantField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:43:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - Interface1.extendedAbstractCovariantImplementedField
+//  - Interface1.extendedAbstractImplementedCovariantField
+//  - Interface1.implementsMultipleCovariantField1
+//  - Interface1.implementsMultipleCovariantField2
+//  - Interface2.implementsMultipleCovariantField1
+//  - Interface2.implementsMultipleCovariantField2
+//  - Super.extendedAbstractCovariantField
+//  - Super.extendedAbstractCovariantField=
+//  - Super.extendedAbstractCovariantImplementedField
+//  - Super.extendedAbstractCovariantImplementedField=
+//  - Super.extendedAbstractImplementedCovariantField
+//  - Super.extendedAbstractImplementedCovariantField=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:22:7: Context: 'Interface1.extendedAbstractCovariantImplementedField' is defined here.
+//   int extendedAbstractCovariantImplementedField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:26:17: Context: 'Interface1.extendedAbstractImplementedCovariantField' is defined here.
+//   covariant int extendedAbstractImplementedCovariantField = 0;
+//                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:28:17: Context: 'Interface1.implementsMultipleCovariantField1' is defined here.
+//   covariant int implementsMultipleCovariantField1 = 0;
+//                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:30:7: Context: 'Interface1.implementsMultipleCovariantField2' is defined here.
+//   int implementsMultipleCovariantField2 = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:34:7: Context: 'Interface2.implementsMultipleCovariantField1' is defined here.
+//   int implementsMultipleCovariantField1 = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:36:17: Context: 'Interface2.implementsMultipleCovariantField2' is defined here.
+//   covariant int implementsMultipleCovariantField2 = 0;
+//                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:8:26: Context: 'Super.extendedAbstractCovariantField' is defined here.
+//   abstract covariant int extendedAbstractCovariantField;
+//                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:8:26: Context: 'Super.extendedAbstractCovariantField=' is defined here.
+//   abstract covariant int extendedAbstractCovariantField;
+//                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:12:26: Context: 'Super.extendedAbstractCovariantImplementedField' is defined here.
+//   abstract covariant int extendedAbstractCovariantImplementedField;
+//                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:12:26: Context: 'Super.extendedAbstractCovariantImplementedField=' is defined here.
+//   abstract covariant int extendedAbstractCovariantImplementedField;
+//                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:16:16: Context: 'Super.extendedAbstractImplementedCovariantField' is defined here.
+//   abstract int extendedAbstractImplementedCovariantField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:16:16: Context: 'Super.extendedAbstractImplementedCovariantField=' is defined here.
+//   abstract int extendedAbstractImplementedCovariantField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  covariant-by-declaration field core::int extendedConcreteCovariantField = 0;
+  covariant-by-declaration field core::int extendedConcreteCovariantImplementedField = 0;
+  field core::int extendedConcreteImplementedCovariantField = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractCovariantField() → core::int;
+  abstract set extendedAbstractCovariantField(covariant-by-declaration core::int #externalFieldValue) → void;
+  abstract get extendedAbstractCovariantImplementedField() → core::int;
+  abstract set extendedAbstractCovariantImplementedField(covariant-by-declaration core::int #externalFieldValue) → void;
+  abstract get extendedAbstractImplementedCovariantField() → core::int;
+  abstract set extendedAbstractImplementedCovariantField(core::int #externalFieldValue) → void;
+}
+class Interface1 extends core::Object {
+  field core::int extendedConcreteCovariantImplementedField = 0;
+  field core::int extendedAbstractCovariantImplementedField = 0;
+  covariant-by-declaration field core::int extendedConcreteImplementedCovariantField = 0;
+  covariant-by-declaration field core::int extendedAbstractImplementedCovariantField = 0;
+  covariant-by-declaration field core::int implementsMultipleCovariantField1 = 0;
+  field core::int implementsMultipleCovariantField2 = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+}
+class Interface2 extends core::Object {
+  field core::int implementsMultipleCovariantField1 = 0;
+  covariant-by-declaration field core::int implementsMultipleCovariantField2 = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+  forwarding-stub set extendedConcreteImplementedCovariantField(covariant-by-declaration core::int value) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantField} = value;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant-by-declaration core::int #externalFieldValue) → void;
+  abstract forwarding-stub set implementsMultipleCovariantField2(covariant-by-declaration core::int value) → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+  forwarding-stub set extendedConcreteImplementedCovariantField(covariant-by-declaration core::int value) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantField} = value;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant-by-declaration core::int #externalFieldValue) → void;
+  abstract forwarding-stub set implementsMultipleCovariantField2(covariant-by-declaration core::int value) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.modular.expect
new file mode 100644
index 0000000..c62e3f2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.modular.expect
@@ -0,0 +1,152 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:41:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
+//  - Interface1.extendedAbstractCovariantImplementedMethod
+//  - Interface1.extendedAbstractImplementedCovariantMethod
+//  - Interface1.implementsMultipleCovariantMethod1
+//  - Interface1.implementsMultipleCovariantMethod2
+//  - Interface2.implementsMultipleCovariantMethod1
+//  - Interface2.implementsMultipleCovariantMethod2
+//  - Super.extendedAbstractCovariantImplementedMethod
+//  - Super.extendedAbstractCovariantMethod
+//  - Super.extendedAbstractImplementedCovariantMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSub extends AbstractClass {}
+//       ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:22:8: Context: 'Interface1.extendedAbstractCovariantImplementedMethod' is defined here.
+//   void extendedAbstractCovariantImplementedMethod(int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:26:8: Context: 'Interface1.extendedAbstractImplementedCovariantMethod' is defined here.
+//   void extendedAbstractImplementedCovariantMethod(covariant int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:28:8: Context: 'Interface1.implementsMultipleCovariantMethod1' is defined here.
+//   void implementsMultipleCovariantMethod1(covariant int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:30:8: Context: 'Interface1.implementsMultipleCovariantMethod2' is defined here.
+//   void implementsMultipleCovariantMethod2(int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:34:8: Context: 'Interface2.implementsMultipleCovariantMethod1' is defined here.
+//   void implementsMultipleCovariantMethod1(int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:36:8: Context: 'Interface2.implementsMultipleCovariantMethod2' is defined here.
+//   void implementsMultipleCovariantMethod2(covariant int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:12:8: Context: 'Super.extendedAbstractCovariantImplementedMethod' is defined here.
+//   void extendedAbstractCovariantImplementedMethod(covariant int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:8:8: Context: 'Super.extendedAbstractCovariantMethod' is defined here.
+//   void extendedAbstractCovariantMethod(covariant int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:16:8: Context: 'Super.extendedAbstractImplementedCovariantMethod' is defined here.
+//   void extendedAbstractImplementedCovariantMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:43:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - Interface1.extendedAbstractCovariantImplementedMethod
+//  - Interface1.extendedAbstractImplementedCovariantMethod
+//  - Interface1.implementsMultipleCovariantMethod1
+//  - Interface1.implementsMultipleCovariantMethod2
+//  - Interface2.implementsMultipleCovariantMethod1
+//  - Interface2.implementsMultipleCovariantMethod2
+//  - Super.extendedAbstractCovariantImplementedMethod
+//  - Super.extendedAbstractCovariantMethod
+//  - Super.extendedAbstractImplementedCovariantMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:22:8: Context: 'Interface1.extendedAbstractCovariantImplementedMethod' is defined here.
+//   void extendedAbstractCovariantImplementedMethod(int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:26:8: Context: 'Interface1.extendedAbstractImplementedCovariantMethod' is defined here.
+//   void extendedAbstractImplementedCovariantMethod(covariant int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:28:8: Context: 'Interface1.implementsMultipleCovariantMethod1' is defined here.
+//   void implementsMultipleCovariantMethod1(covariant int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:30:8: Context: 'Interface1.implementsMultipleCovariantMethod2' is defined here.
+//   void implementsMultipleCovariantMethod2(int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:34:8: Context: 'Interface2.implementsMultipleCovariantMethod1' is defined here.
+//   void implementsMultipleCovariantMethod1(int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:36:8: Context: 'Interface2.implementsMultipleCovariantMethod2' is defined here.
+//   void implementsMultipleCovariantMethod2(covariant int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:12:8: Context: 'Super.extendedAbstractCovariantImplementedMethod' is defined here.
+//   void extendedAbstractCovariantImplementedMethod(covariant int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:8:8: Context: 'Super.extendedAbstractCovariantMethod' is defined here.
+//   void extendedAbstractCovariantMethod(covariant int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:16:8: Context: 'Super.extendedAbstractImplementedCovariantMethod' is defined here.
+//   void extendedAbstractImplementedCovariantMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteCovariantMethod(covariant-by-declaration core::int i) → void {}
+  abstract method extendedAbstractCovariantMethod(covariant-by-declaration core::int i) → void;
+  method extendedConcreteCovariantImplementedMethod(covariant-by-declaration core::int i) → void {}
+  abstract method extendedAbstractCovariantImplementedMethod(covariant-by-declaration core::int i) → void;
+  method extendedConcreteImplementedCovariantMethod(core::int i) → void {}
+  abstract method extendedAbstractImplementedCovariantMethod(core::int i) → void;
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  method extendedConcreteCovariantImplementedMethod(core::int i) → void {}
+  method extendedAbstractCovariantImplementedMethod(core::int i) → void {}
+  method extendedConcreteImplementedCovariantMethod(covariant-by-declaration core::int i) → void {}
+  method extendedAbstractImplementedCovariantMethod(covariant-by-declaration core::int i) → void {}
+  method implementsMultipleCovariantMethod1(covariant-by-declaration core::int i) → void {}
+  method implementsMultipleCovariantMethod2(core::int i) → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  method implementsMultipleCovariantMethod1(core::int i) → void {}
+  method implementsMultipleCovariantMethod2(covariant-by-declaration core::int i) → void {}
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant-by-declaration core::int i) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantMethod}(i);
+  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant-by-declaration core::int i) → void;
+  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant-by-declaration core::int i) → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant-by-declaration core::int i) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantMethod}(i);
+  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant-by-declaration core::int i) → void;
+  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant-by-declaration core::int i) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..ac74f0f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.modular.expect
@@ -0,0 +1,152 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:41:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
+//  - Interface1.extendedAbstractCovariantImplementedSetter=
+//  - Interface1.extendedAbstractImplementedCovariantSetter=
+//  - Interface1.implementsMultipleCovariantSetter1=
+//  - Interface1.implementsMultipleCovariantSetter2=
+//  - Interface2.implementsMultipleCovariantSetter1=
+//  - Interface2.implementsMultipleCovariantSetter2=
+//  - Super.extendedAbstractCovariantImplementedSetter=
+//  - Super.extendedAbstractCovariantSetter=
+//  - Super.extendedAbstractImplementedCovariantSetter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSub extends AbstractClass {}
+//       ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:22:12: Context: 'Interface1.extendedAbstractCovariantImplementedSetter=' is defined here.
+//   void set extendedAbstractCovariantImplementedSetter(int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:26:12: Context: 'Interface1.extendedAbstractImplementedCovariantSetter=' is defined here.
+//   void set extendedAbstractImplementedCovariantSetter(covariant int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:28:12: Context: 'Interface1.implementsMultipleCovariantSetter1=' is defined here.
+//   void set implementsMultipleCovariantSetter1(covariant int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:30:12: Context: 'Interface1.implementsMultipleCovariantSetter2=' is defined here.
+//   void set implementsMultipleCovariantSetter2(int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:34:12: Context: 'Interface2.implementsMultipleCovariantSetter1=' is defined here.
+//   void set implementsMultipleCovariantSetter1(int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:36:12: Context: 'Interface2.implementsMultipleCovariantSetter2=' is defined here.
+//   void set implementsMultipleCovariantSetter2(covariant int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:12:12: Context: 'Super.extendedAbstractCovariantImplementedSetter=' is defined here.
+//   void set extendedAbstractCovariantImplementedSetter(covariant int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:8:12: Context: 'Super.extendedAbstractCovariantSetter=' is defined here.
+//   void set extendedAbstractCovariantSetter(covariant int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:16:12: Context: 'Super.extendedAbstractImplementedCovariantSetter=' is defined here.
+//   void set extendedAbstractImplementedCovariantSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:43:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - Interface1.extendedAbstractCovariantImplementedSetter=
+//  - Interface1.extendedAbstractImplementedCovariantSetter=
+//  - Interface1.implementsMultipleCovariantSetter1=
+//  - Interface1.implementsMultipleCovariantSetter2=
+//  - Interface2.implementsMultipleCovariantSetter1=
+//  - Interface2.implementsMultipleCovariantSetter2=
+//  - Super.extendedAbstractCovariantImplementedSetter=
+//  - Super.extendedAbstractCovariantSetter=
+//  - Super.extendedAbstractImplementedCovariantSetter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:22:12: Context: 'Interface1.extendedAbstractCovariantImplementedSetter=' is defined here.
+//   void set extendedAbstractCovariantImplementedSetter(int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:26:12: Context: 'Interface1.extendedAbstractImplementedCovariantSetter=' is defined here.
+//   void set extendedAbstractImplementedCovariantSetter(covariant int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:28:12: Context: 'Interface1.implementsMultipleCovariantSetter1=' is defined here.
+//   void set implementsMultipleCovariantSetter1(covariant int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:30:12: Context: 'Interface1.implementsMultipleCovariantSetter2=' is defined here.
+//   void set implementsMultipleCovariantSetter2(int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:34:12: Context: 'Interface2.implementsMultipleCovariantSetter1=' is defined here.
+//   void set implementsMultipleCovariantSetter1(int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:36:12: Context: 'Interface2.implementsMultipleCovariantSetter2=' is defined here.
+//   void set implementsMultipleCovariantSetter2(covariant int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:12:12: Context: 'Super.extendedAbstractCovariantImplementedSetter=' is defined here.
+//   void set extendedAbstractCovariantImplementedSetter(covariant int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:8:12: Context: 'Super.extendedAbstractCovariantSetter=' is defined here.
+//   void set extendedAbstractCovariantSetter(covariant int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:16:12: Context: 'Super.extendedAbstractImplementedCovariantSetter=' is defined here.
+//   void set extendedAbstractImplementedCovariantSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  set extendedConcreteCovariantSetter(covariant-by-declaration core::int i) → void {}
+  abstract set extendedAbstractCovariantSetter(covariant-by-declaration core::int i) → void;
+  set extendedConcreteCovariantImplementedSetter(covariant-by-declaration core::int i) → void {}
+  abstract set extendedAbstractCovariantImplementedSetter(covariant-by-declaration core::int i) → void;
+  set extendedConcreteImplementedCovariantSetter(core::int i) → void {}
+  abstract set extendedAbstractImplementedCovariantSetter(core::int i) → void;
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  set extendedConcreteCovariantImplementedSetter(core::int i) → void {}
+  set extendedAbstractCovariantImplementedSetter(core::int i) → void {}
+  set extendedConcreteImplementedCovariantSetter(covariant-by-declaration core::int i) → void {}
+  set extendedAbstractImplementedCovariantSetter(covariant-by-declaration core::int i) → void {}
+  set implementsMultipleCovariantSetter1(covariant-by-declaration core::int i) → void {}
+  set implementsMultipleCovariantSetter2(core::int i) → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  set implementsMultipleCovariantSetter1(core::int i) → void {}
+  set implementsMultipleCovariantSetter2(covariant-by-declaration core::int i) → void {}
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant-by-declaration core::int i) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantSetter} = i;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant-by-declaration core::int i) → void;
+  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant-by-declaration core::int i) → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant-by-declaration core::int i) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantSetter} = i;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant-by-declaration core::int i) → void;
+  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant-by-declaration core::int i) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..894fe23
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart.weak.modular.expect
@@ -0,0 +1,550 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the getter 'Super with Mixin.extendedSetterMixedInField' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterMixedInField'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:19:12: Context: This is the declaration of the setter 'Super.extendedSetterMixedInField'.
+//   void set extendedSetterMixedInField(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the getter 'Super with Mixin.extendedSetterMixedInGetter' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterMixedInGetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:23:12: Context: This is the declaration of the setter 'Super.extendedSetterMixedInGetter'.
+//   void set extendedSetterMixedInGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super.extendedGetterMixedInSetter' is not a subtype of the type 'int' of the setter 'Super with Mixin.extendedGetterMixedInSetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:11:14: Context: This is the declaration of the getter 'Super.extendedGetterMixedInSetter'.
+//   String get extendedGetterMixedInSetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Super.extendedFieldMixedInSetter' is not a subtype of the type 'int' of the setter 'Super with Mixin.extendedFieldMixedInSetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:15:16: Context: This is the declaration of the field 'Super.extendedFieldMixedInSetter'.
+//   final String extendedFieldMixedInSetter = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: Applying the mixin 'Mixin' to 'Super' introduces an erroneous override of 'extendedGetterMixedInField'.
+// abstract class Class extends Super
+//                ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:28:7: Context: The return type of the method 'Mixin.extendedGetterMixedInField' is 'int', which does not match the return type, 'String', of the overridden method, 'Super.extendedGetterMixedInField'.
+// Change to a subtype of 'String'.
+//   int extendedGetterMixedInField = 0;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:7:14: Context: This is the overridden method ('extendedGetterMixedInField').
+//   String get extendedGetterMixedInField => '';
+//              ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:93:16: Error: The type 'String' of the field 'Class.extendedSetterDeclaredField' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterDeclaredField'.
+//   final String extendedSetterDeclaredField = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:18:12: Context: This is the declaration of the setter 'Super.extendedSetterDeclaredField'.
+//   void set extendedSetterDeclaredField(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:94:14: Error: The type 'String' of the getter 'Class.extendedSetterDeclaredGetter' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterDeclaredGetter'.
+//   String get extendedSetterDeclaredGetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:22:12: Context: This is the declaration of the setter 'Super.extendedSetterDeclaredGetter'.
+//   void set extendedSetterDeclaredGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:99:16: Error: The type 'String' of the field 'Class.mixedInSetterDeclaredField' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.mixedInSetterDeclaredField'.
+//   final String mixedInSetterDeclaredField = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.mixedInSetterDeclaredField'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:100:14: Error: The type 'String' of the getter 'Class.mixedInSetterDeclaredGetter' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.mixedInSetterDeclaredGetter'.
+//   String get mixedInSetterDeclaredGetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.mixedInSetterDeclaredGetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:105:16: Error: The type 'String' of the field 'Class.implementedSetterDeclaredField' is not a subtype of the type 'int' of the inherited setter 'Interface1.implementedSetterDeclaredField'.
+//   final String implementedSetterDeclaredField = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:72:12: Context: This is the declaration of the setter 'Interface1.implementedSetterDeclaredField'.
+//   void set implementedSetterDeclaredField(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:106:14: Error: The type 'String' of the getter 'Class.implementedSetterDeclaredGetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.implementedSetterDeclaredGetter'.
+//   String get implementedSetterDeclaredGetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:75:12: Context: This is the declaration of the setter 'Interface1.implementedSetterDeclaredGetter'.
+//   void set implementedSetterDeclaredGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:108:14: Error: The type 'String' of the getter 'Class.declaredGetterDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.declaredGetterDeclaredSetter'.
+//   String get declaredGetterDeclaredSetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:109:12: Context: This is the declaration of the setter 'Class.declaredGetterDeclaredSetter'.
+//   void set declaredGetterDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:111:16: Error: The type 'String' of the getter 'Class.declaredFieldDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.declaredFieldDeclaredSetter'.
+//   final String declaredFieldDeclaredSetter = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:112:12: Context: This is the declaration of the setter 'Class.declaredFieldDeclaredSetter'.
+//   void set declaredFieldDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:91:12: Error: The type 'String' of the inherited getter 'Super.extendedGetterDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.extendedGetterDeclaredSetter'.
+//   void set extendedGetterDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:10:14: Context: This is the declaration of the getter 'Super.extendedGetterDeclaredSetter'.
+//   String get extendedGetterDeclaredSetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:92:12: Error: The type 'String' of the inherited field 'Super.extendedFieldDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.extendedFieldDeclaredSetter'.
+//   void set extendedFieldDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:14:16: Context: This is the declaration of the field 'Super.extendedFieldDeclaredSetter'.
+//   final String extendedFieldDeclaredSetter = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:97:12: Error: The type 'String' of the inherited getter 'Super with Mixin.mixedInGetterDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.mixedInGetterDeclaredSetter'.
+//   void set mixedInGetterDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.mixedInGetterDeclaredSetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:98:12: Error: The type 'String' of the inherited getter 'Super with Mixin.mixedInFieldDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.mixedInFieldDeclaredSetter'.
+//   void set mixedInFieldDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.mixedInFieldDeclaredSetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:103:12: Error: The type 'String' of the inherited getter 'Interface1.implementedGetterDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.implementedGetterDeclaredSetter'.
+//   void set implementedGetterDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:66:14: Context: This is the declaration of the getter 'Interface1.implementedGetterDeclaredSetter'.
+//   String get implementedGetterDeclaredSetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:104:12: Error: The type 'String' of the inherited field 'Interface1.implementedFieldDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.implementedFieldDeclaredSetter'.
+//   void set implementedFieldDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:69:16: Context: This is the declaration of the field 'Interface1.implementedFieldDeclaredSetter'.
+//   final String implementedFieldDeclaredSetter = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super with Mixin.extendedSetterMixedInField' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterMixedInField'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.extendedSetterMixedInField'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:19:12: Context: This is the declaration of the setter 'Super.extendedSetterMixedInField'.
+//   void set extendedSetterMixedInField(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super with Mixin.extendedSetterMixedInGetter' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterMixedInGetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.extendedSetterMixedInGetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:23:12: Context: This is the declaration of the setter 'Super.extendedSetterMixedInGetter'.
+//   void set extendedSetterMixedInGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: Class 'Class' inherits multiple members named 'Mixin.mixedInGetterImplementedField' with incompatible signatures.
+// Try adding a declaration of 'Mixin.mixedInGetterImplementedField' to 'Class'.
+// abstract class Class extends Super
+//                ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:35:14: Context: This is one of the overridden members.
+//   String get mixedInGetterImplementedField => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:57:7: Context: This is one of the overridden members.
+//   int mixedInGetterImplementedField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super with Mixin.mixedInGetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Interface1.mixedInGetterImplementedField'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.mixedInGetterImplementedField'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:57:7: Context: This is the declaration of the setter 'Interface1.mixedInGetterImplementedField'.
+//   int mixedInGetterImplementedField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super with Mixin.mixedInGetterImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.mixedInGetterImplementedSetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.mixedInGetterImplementedSetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:58:12: Context: This is the declaration of the setter 'Interface1.mixedInGetterImplementedSetter'.
+//   void set mixedInGetterImplementedSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super with Mixin.mixedInFieldImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.mixedInFieldImplementedSetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.mixedInFieldImplementedSetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:59:12: Context: This is the declaration of the setter 'Interface1.mixedInFieldImplementedSetter'.
+//   void set mixedInFieldImplementedSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super.extendedGetterMixedInSetter' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.extendedGetterMixedInSetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:11:14: Context: This is the declaration of the getter 'Super.extendedGetterMixedInSetter'.
+//   String get extendedGetterMixedInSetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.extendedGetterMixedInSetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Super.extendedFieldMixedInSetter' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.extendedFieldMixedInSetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:15:16: Context: This is the declaration of the field 'Super.extendedFieldMixedInSetter'.
+//   final String extendedFieldMixedInSetter = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.extendedFieldMixedInSetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: Class 'Class' inherits multiple members named 'extendedGetterImplementedField' with incompatible signatures.
+// Try adding a declaration of 'extendedGetterImplementedField' to 'Class'.
+// abstract class Class extends Super
+//                ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:8:14: Context: This is one of the overridden members.
+//   String get extendedGetterImplementedField => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:51:7: Context: This is one of the overridden members.
+//   int extendedGetterImplementedField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super.extendedGetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Interface1.extendedGetterImplementedField'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:8:14: Context: This is the declaration of the getter 'Super.extendedGetterImplementedField'.
+//   String get extendedGetterImplementedField => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:51:7: Context: This is the declaration of the setter 'Interface1.extendedGetterImplementedField'.
+//   int extendedGetterImplementedField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super.extendedGetterImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.extendedGetterImplementedSetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:12:14: Context: This is the declaration of the getter 'Super.extendedGetterImplementedSetter'.
+//   String get extendedGetterImplementedSetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:52:12: Context: This is the declaration of the setter 'Interface1.extendedGetterImplementedSetter'.
+//   void set extendedGetterImplementedSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Super.extendedFieldImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.extendedFieldImplementedSetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:16:16: Context: This is the declaration of the field 'Super.extendedFieldImplementedSetter'.
+//   final String extendedFieldImplementedSetter = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:53:12: Context: This is the declaration of the setter 'Interface1.extendedFieldImplementedSetter'.
+//   void set extendedFieldImplementedSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Interface1.mixedInSetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.mixedInSetterImplementedField'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:60:16: Context: This is the declaration of the field 'Interface1.mixedInSetterImplementedField'.
+//   final String mixedInSetterImplementedField = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.mixedInSetterImplementedField'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Interface1.mixedInSetterImplementedGetter' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.mixedInSetterImplementedGetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:61:14: Context: This is the declaration of the getter 'Interface1.mixedInSetterImplementedGetter'.
+//   String get mixedInSetterImplementedGetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.mixedInSetterImplementedGetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Interface1.extendedSetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterImplementedField'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:54:16: Context: This is the declaration of the field 'Interface1.extendedSetterImplementedField'.
+//   final String extendedSetterImplementedField = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:20:12: Context: This is the declaration of the setter 'Super.extendedSetterImplementedField'.
+//   void set extendedSetterImplementedField(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Interface1.extendedSetterImplementedGetter' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterImplementedGetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:55:14: Context: This is the declaration of the getter 'Interface1.extendedSetterImplementedGetter'.
+//   String get extendedSetterImplementedGetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:24:12: Context: This is the declaration of the setter 'Super.extendedSetterImplementedGetter'.
+//   void set extendedSetterImplementedGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: Class 'Class' inherits multiple members named 'implementedGetterImplementedField' with incompatible signatures.
+// Try adding a declaration of 'implementedGetterImplementedField' to 'Class'.
+// abstract class Class extends Super
+//                ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:64:14: Context: This is one of the overridden members.
+//   String get implementedGetterImplementedField => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:80:7: Context: This is one of the overridden members.
+//   int implementedGetterImplementedField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Interface1.implementedGetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Interface2.implementedGetterImplementedField'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:64:14: Context: This is the declaration of the getter 'Interface1.implementedGetterImplementedField'.
+//   String get implementedGetterImplementedField => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:80:7: Context: This is the declaration of the setter 'Interface2.implementedGetterImplementedField'.
+//   int implementedGetterImplementedField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Interface1.implementedGetterImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface2.implementedGetterImplementedSetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:67:14: Context: This is the declaration of the getter 'Interface1.implementedGetterImplementedSetter'.
+//   String get implementedGetterImplementedSetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:81:12: Context: This is the declaration of the setter 'Interface2.implementedGetterImplementedSetter'.
+//   void set implementedGetterImplementedSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Interface1.implementedFieldImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface2.implementedFieldImplementedSetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:70:16: Context: This is the declaration of the field 'Interface1.implementedFieldImplementedSetter'.
+//   final String implementedFieldImplementedSetter = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:82:12: Context: This is the declaration of the setter 'Interface2.implementedFieldImplementedSetter'.
+//   void set implementedFieldImplementedSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Interface2.implementedSetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Interface1.implementedSetterImplementedField'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:83:16: Context: This is the declaration of the field 'Interface2.implementedSetterImplementedField'.
+//   final String implementedSetterImplementedField = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:73:12: Context: This is the declaration of the setter 'Interface1.implementedSetterImplementedField'.
+//   void set implementedSetterImplementedField(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Interface2.implementedSetterImplementedGetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.implementedSetterImplementedGetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:84:14: Context: This is the declaration of the getter 'Interface2.implementedSetterImplementedGetter'.
+//   String get implementedSetterImplementedGetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:76:12: Context: This is the declaration of the setter 'Interface1.implementedSetterImplementedGetter'.
+//   void set implementedSetterImplementedGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:90:7: Error: The return type of the method 'Class.extendedGetterDeclaredField' is 'int', which does not match the return type, 'String', of the overridden method, 'Super.extendedGetterDeclaredField'.
+// Change to a subtype of 'String'.
+//   int extendedGetterDeclaredField = 0;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:6:14: Context: This is the overridden method ('extendedGetterDeclaredField').
+//   String get extendedGetterDeclaredField => '';
+//              ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:96:7: Error: The return type of the method 'Class.mixedInGetterDeclaredField' is 'int', which does not match the return type, 'String', of the overridden method, 'Super with Mixin.mixedInGetterDeclaredField'.
+// Change to a subtype of 'String'.
+//   int mixedInGetterDeclaredField = 0;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the overridden method ('mixedInGetterDeclaredField').
+// abstract class Class extends Super
+//                ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:102:7: Error: The return type of the method 'Class.implementedGetterDeclaredField' is 'int', which does not match the return type, 'String', of the overridden method, 'Interface1.implementedGetterDeclaredField'.
+// Change to a subtype of 'String'.
+//   int implementedGetterDeclaredField = 0;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:63:14: Context: This is the overridden method ('implementedGetterDeclaredField').
+//   String get implementedGetterDeclaredField => '';
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  final field core::String extendedFieldDeclaredSetter = "";
+  final field core::String extendedFieldMixedInSetter = "";
+  final field core::String extendedFieldImplementedSetter = "";
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  get extendedGetterDeclaredField() → core::String
+    return "";
+  get extendedGetterMixedInField() → core::String
+    return "";
+  get extendedGetterImplementedField() → core::String
+    return "";
+  get extendedGetterDeclaredSetter() → core::String
+    return "";
+  get extendedGetterMixedInSetter() → core::String
+    return "";
+  get extendedGetterImplementedSetter() → core::String
+    return "";
+  set extendedSetterDeclaredField(core::int value) → void {}
+  set extendedSetterMixedInField(core::int value) → void {}
+  set extendedSetterImplementedField(core::int value) → void {}
+  set extendedSetterDeclaredGetter(core::int value) → void {}
+  set extendedSetterMixedInGetter(core::int value) → void {}
+  set extendedSetterImplementedGetter(core::int value) → void {}
+}
+abstract class Mixin extends core::Object {
+  field core::int extendedGetterMixedInField = 0;
+  final field core::String extendedSetterMixedInField = "";
+  final field core::String mixedInFieldDeclaredSetter = "";
+  final field core::String mixedInFieldImplementedSetter = "";
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  set extendedGetterMixedInSetter(core::int value) → void {}
+  set extendedFieldMixedInSetter(core::int value) → void {}
+  get extendedSetterMixedInGetter() → core::String
+    return "";
+  get mixedInGetterDeclaredField() → core::String
+    return "";
+  get mixedInGetterImplementedField() → core::String
+    return "";
+  get mixedInGetterDeclaredSetter() → core::String
+    return "";
+  get mixedInGetterImplementedSetter() → core::String
+    return "";
+  set mixedInSetterDeclaredField(core::int value) → void {}
+  set mixedInSetterImplementedField(core::int value) → void {}
+  set mixedInSetterDeclaredGetter(core::int value) → void {}
+  set mixedInSetterImplementedGetter(core::int value) → void {}
+}
+abstract class Interface1 extends core::Object {
+  field core::int extendedGetterImplementedField = 0;
+  final field core::String extendedSetterImplementedField = "";
+  field core::int mixedInGetterImplementedField = 0;
+  final field core::String mixedInSetterImplementedField = "";
+  final field core::String implementedFieldDeclaredSetter = "";
+  final field core::String implementedFieldImplementedSetter = "";
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  set extendedGetterImplementedSetter(core::int value) → void {}
+  set extendedFieldImplementedSetter(core::int value) → void {}
+  get extendedSetterImplementedGetter() → core::String
+    return "";
+  set mixedInGetterImplementedSetter(core::int value) → void {}
+  set mixedInFieldImplementedSetter(core::int value) → void {}
+  get mixedInSetterImplementedGetter() → core::String
+    return "";
+  get implementedGetterDeclaredField() → core::String
+    return "";
+  get implementedGetterImplementedField() → core::String
+    return "";
+  get implementedGetterDeclaredSetter() → core::String
+    return "";
+  get implementedGetterImplementedSetter() → core::String
+    return "";
+  set implementedSetterDeclaredField(core::int value) → void {}
+  set implementedSetterImplementedField(core::int value) → void {}
+  set implementedSetterDeclaredGetter(core::int value) → void {}
+  set implementedSetterImplementedGetter(core::int value) → void {}
+}
+abstract class Interface2 extends core::Object {
+  field core::int implementedGetterImplementedField = 0;
+  final field core::String implementedSetterImplementedField = "";
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  set implementedGetterImplementedSetter(core::int value) → void {}
+  set implementedFieldImplementedSetter(core::int value) → void {}
+  get implementedSetterImplementedGetter() → core::String
+    return "";
+}
+abstract class _Class&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub get mixedInGetterDeclaredField() → core::String
+    return super.{self::Mixin::mixedInGetterDeclaredField};
+  mixin-super-stub set mixedInSetterDeclaredField(core::int value) → void
+    return super.{self::Mixin::mixedInSetterDeclaredField} = value;
+  mixin-super-stub get mixedInGetterDeclaredSetter() → core::String
+    return super.{self::Mixin::mixedInGetterDeclaredSetter};
+  mixin-super-stub get mixedInFieldDeclaredSetter() → core::String
+    return super.{self::Mixin::mixedInFieldDeclaredSetter};
+  mixin-super-stub get extendedGetterMixedInField() → core::int
+    return super.{self::Mixin::extendedGetterMixedInField};
+  mixin-super-stub set extendedGetterMixedInField(core::int value) → void
+    return super.{self::Mixin::extendedGetterMixedInField} = value;
+  mixin-super-stub get extendedSetterMixedInField() → core::String
+    return super.{self::Mixin::extendedSetterMixedInField};
+  mixin-super-stub get extendedSetterMixedInGetter() → core::String
+    return super.{self::Mixin::extendedSetterMixedInGetter};
+  mixin-super-stub set extendedGetterMixedInSetter(core::int value) → void
+    return super.{self::Mixin::extendedGetterMixedInSetter} = value;
+  mixin-super-stub set extendedFieldMixedInSetter(core::int value) → void
+    return super.{self::Mixin::extendedFieldMixedInSetter} = value;
+  mixin-super-stub set mixedInSetterDeclaredGetter(core::int value) → void
+    return super.{self::Mixin::mixedInSetterDeclaredGetter} = value;
+  mixin-super-stub get mixedInGetterImplementedField() → core::String
+    return super.{self::Mixin::mixedInGetterImplementedField};
+  mixin-super-stub get mixedInGetterImplementedSetter() → core::String
+    return super.{self::Mixin::mixedInGetterImplementedSetter};
+  mixin-super-stub get mixedInFieldImplementedSetter() → core::String
+    return super.{self::Mixin::mixedInFieldImplementedSetter};
+  mixin-super-stub set mixedInSetterImplementedField(core::int value) → void
+    return super.{self::Mixin::mixedInSetterImplementedField} = value;
+  mixin-super-stub set mixedInSetterImplementedGetter(core::int value) → void
+    return super.{self::Mixin::mixedInSetterImplementedGetter} = value;
+}
+abstract class Class extends self::_Class&Super&Mixin implements self::Interface1, self::Interface2 {
+  field core::int extendedGetterDeclaredField = 0;
+  final field core::String extendedSetterDeclaredField = "";
+  field core::int mixedInGetterDeclaredField = 0;
+  final field core::String mixedInSetterDeclaredField = "";
+  field core::int implementedGetterDeclaredField = 0;
+  final field core::String implementedSetterDeclaredField = "";
+  final field core::String declaredFieldDeclaredSetter = "";
+  synthetic constructor •() → self::Class
+    : super self::_Class&Super&Mixin::•()
+    ;
+  set extendedGetterDeclaredSetter(core::int value) → void {}
+  set extendedFieldDeclaredSetter(core::int value) → void {}
+  get extendedSetterDeclaredGetter() → core::String
+    return "";
+  set mixedInGetterDeclaredSetter(core::int value) → void {}
+  set mixedInFieldDeclaredSetter(core::int value) → void {}
+  get mixedInSetterDeclaredGetter() → core::String
+    return "";
+  set implementedGetterDeclaredSetter(core::int value) → void {}
+  set implementedFieldDeclaredSetter(core::int value) → void {}
+  get implementedSetterDeclaredGetter() → core::String
+    return "";
+  get declaredGetterDeclaredSetter() → core::String
+    return "";
+  set declaredGetterDeclaredSetter(core::int value) → void {}
+  set declaredFieldDeclaredSetter(core::int value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.weak.modular.expect
new file mode 100644
index 0000000..4701040
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.weak.modular.expect
@@ -0,0 +1,105 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:21:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declareAbstractImplementMultipleField
+//  - ConcreteClass.declareAbstractImplementMultipleField=
+//  - Interface1.implementMultipleField
+//  - Interface2.implementMultipleField
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass implements Interface1, Interface2 {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:24:16: Context: 'ConcreteClass.declareAbstractImplementMultipleField' is defined here.
+//   abstract int declareAbstractImplementMultipleField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:24:16: Context: 'ConcreteClass.declareAbstractImplementMultipleField=' is defined here.
+//   abstract int declareAbstractImplementMultipleField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:6:7: Context: 'Interface1.implementMultipleField' is defined here.
+//   int implementMultipleField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:14:7: Context: 'Interface2.implementMultipleField' is defined here.
+//   int implementMultipleField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:33:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
+//  - AbstractClass.declareAbstractImplementMultipleField
+//  - AbstractClass.declareAbstractImplementMultipleField=
+//  - Interface1.declareAbstractImplementMultipleField
+//  - Interface1.implementMultipleField
+//  - Interface2.declareAbstractImplementMultipleField
+//  - Interface2.implementMultipleField
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSub extends AbstractClass {}
+//       ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:30:16: Context: 'AbstractClass.declareAbstractImplementMultipleField' is defined here.
+//   abstract int declareAbstractImplementMultipleField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:30:16: Context: 'AbstractClass.declareAbstractImplementMultipleField=' is defined here.
+//   abstract int declareAbstractImplementMultipleField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:10:7: Context: 'Interface1.declareAbstractImplementMultipleField' is defined here.
+//   int declareAbstractImplementMultipleField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:6:7: Context: 'Interface1.implementMultipleField' is defined here.
+//   int implementMultipleField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:18:7: Context: 'Interface2.declareAbstractImplementMultipleField' is defined here.
+//   int declareAbstractImplementMultipleField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:14:7: Context: 'Interface2.implementMultipleField' is defined here.
+//   int implementMultipleField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface1 extends core::Object {
+  field core::int implementMultipleField = 0;
+  field core::int declareConcreteImplementMultipleField = 0;
+  field core::int declareAbstractImplementMultipleField = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+}
+class Interface2 extends core::Object {
+  field core::int implementMultipleField = 0;
+  field core::int declareConcreteImplementMultipleField = 0;
+  field core::int declareAbstractImplementMultipleField = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+}
+class ConcreteClass extends core::Object implements self::Interface1, self::Interface2 {
+  field core::int declareConcreteImplementMultipleField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  abstract get declareAbstractImplementMultipleField() → core::int;
+  abstract set declareAbstractImplementMultipleField(core::int #externalFieldValue) → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface1, self::Interface2 {
+  field core::int declareConcreteImplementMultipleField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  abstract get declareAbstractImplementMultipleField() → core::int;
+  abstract set declareAbstractImplementMultipleField(core::int #externalFieldValue) → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.weak.modular.expect
new file mode 100644
index 0000000..5ebd497f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.weak.modular.expect
@@ -0,0 +1,95 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:21:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declareAbstractImplementMultipleField
+//  - Interface1.implementMultipleField
+//  - Interface2.implementMultipleField
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass implements Interface1, Interface2 {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:24:22: Context: 'ConcreteClass.declareAbstractImplementMultipleField' is defined here.
+//   abstract final int declareAbstractImplementMultipleField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:6:13: Context: 'Interface1.implementMultipleField' is defined here.
+//   final int implementMultipleField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:14:13: Context: 'Interface2.implementMultipleField' is defined here.
+//   final int implementMultipleField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:33:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
+//  - AbstractClass.declareAbstractImplementMultipleField
+//  - Interface1.declareAbstractImplementMultipleField
+//  - Interface1.implementMultipleField
+//  - Interface2.declareAbstractImplementMultipleField
+//  - Interface2.implementMultipleField
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSub extends AbstractClass {}
+//       ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:30:22: Context: 'AbstractClass.declareAbstractImplementMultipleField' is defined here.
+//   abstract final int declareAbstractImplementMultipleField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:10:13: Context: 'Interface1.declareAbstractImplementMultipleField' is defined here.
+//   final int declareAbstractImplementMultipleField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:6:13: Context: 'Interface1.implementMultipleField' is defined here.
+//   final int implementMultipleField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:18:13: Context: 'Interface2.declareAbstractImplementMultipleField' is defined here.
+//   final int declareAbstractImplementMultipleField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:14:13: Context: 'Interface2.implementMultipleField' is defined here.
+//   final int implementMultipleField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface1 extends core::Object {
+  final field core::int implementMultipleField = 0;
+  final field core::int declareConcreteImplementMultipleField = 0;
+  final field core::int declareAbstractImplementMultipleField = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+}
+class Interface2 extends core::Object {
+  final field core::int implementMultipleField = 0;
+  final field core::int declareConcreteImplementMultipleField = 0;
+  final field core::int declareAbstractImplementMultipleField = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+}
+class ConcreteClass extends core::Object implements self::Interface1, self::Interface2 {
+  final field core::int declareConcreteImplementMultipleField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  abstract get declareAbstractImplementMultipleField() → core::int;
+}
+abstract class AbstractClass extends core::Object implements self::Interface1, self::Interface2 {
+  final field core::int declareConcreteImplementMultipleField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  abstract get declareAbstractImplementMultipleField() → core::int;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..538cee7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.weak.modular.expect
@@ -0,0 +1,103 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:21:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declareAbstractImplementMultipleGetter
+//  - Interface1.implementMultipleGetter
+//  - Interface2.implementMultipleGetter
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass implements Interface1, Interface2 {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:24:11: Context: 'ConcreteClass.declareAbstractImplementMultipleGetter' is defined here.
+//   int get declareAbstractImplementMultipleGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:6:11: Context: 'Interface1.implementMultipleGetter' is defined here.
+//   int get implementMultipleGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:14:11: Context: 'Interface2.implementMultipleGetter' is defined here.
+//   int get implementMultipleGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:33:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
+//  - AbstractClass.declareAbstractImplementMultipleGetter
+//  - Interface1.declareAbstractImplementMultipleGetter
+//  - Interface1.implementMultipleGetter
+//  - Interface2.declareAbstractImplementMultipleGetter
+//  - Interface2.implementMultipleGetter
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSub extends AbstractClass {}
+//       ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:30:11: Context: 'AbstractClass.declareAbstractImplementMultipleGetter' is defined here.
+//   int get declareAbstractImplementMultipleGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:10:11: Context: 'Interface1.declareAbstractImplementMultipleGetter' is defined here.
+//   int get declareAbstractImplementMultipleGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:6:11: Context: 'Interface1.implementMultipleGetter' is defined here.
+//   int get implementMultipleGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:18:11: Context: 'Interface2.declareAbstractImplementMultipleGetter' is defined here.
+//   int get declareAbstractImplementMultipleGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:14:11: Context: 'Interface2.implementMultipleGetter' is defined here.
+//   int get implementMultipleGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  get implementMultipleGetter() → core::int
+    return 0;
+  get declareConcreteImplementMultipleGetter() → core::int
+    return 0;
+  get declareAbstractImplementMultipleGetter() → core::int
+    return 0;
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  get implementMultipleGetter() → core::int
+    return 0;
+  get declareConcreteImplementMultipleGetter() → core::int
+    return 0;
+  get declareAbstractImplementMultipleGetter() → core::int
+    return 0;
+}
+class ConcreteClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  get declareConcreteImplementMultipleGetter() → core::int
+    return 0;
+  abstract get declareAbstractImplementMultipleGetter() → core::int;
+}
+abstract class AbstractClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  get declareConcreteImplementMultipleGetter() → core::int
+    return 0;
+  abstract get declareAbstractImplementMultipleGetter() → core::int;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.weak.modular.expect
new file mode 100644
index 0000000..66a5d5e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.weak.modular.expect
@@ -0,0 +1,95 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:21:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declareAbstractImplementMultipleMethod
+//  - Interface1.implementMultipleMethod
+//  - Interface2.implementMultipleMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass implements Interface1, Interface2 {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:24:8: Context: 'ConcreteClass.declareAbstractImplementMultipleMethod' is defined here.
+//   void declareAbstractImplementMultipleMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:6:8: Context: 'Interface1.implementMultipleMethod' is defined here.
+//   void implementMultipleMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:14:8: Context: 'Interface2.implementMultipleMethod' is defined here.
+//   void implementMultipleMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:33:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
+//  - AbstractClass.declareAbstractImplementMultipleMethod
+//  - Interface1.declareAbstractImplementMultipleMethod
+//  - Interface1.implementMultipleMethod
+//  - Interface2.declareAbstractImplementMultipleMethod
+//  - Interface2.implementMultipleMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSub extends AbstractClass {}
+//       ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:30:8: Context: 'AbstractClass.declareAbstractImplementMultipleMethod' is defined here.
+//   void declareAbstractImplementMultipleMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:10:8: Context: 'Interface1.declareAbstractImplementMultipleMethod' is defined here.
+//   void declareAbstractImplementMultipleMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:6:8: Context: 'Interface1.implementMultipleMethod' is defined here.
+//   void implementMultipleMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:18:8: Context: 'Interface2.declareAbstractImplementMultipleMethod' is defined here.
+//   void declareAbstractImplementMultipleMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:14:8: Context: 'Interface2.implementMultipleMethod' is defined here.
+//   void implementMultipleMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  method implementMultipleMethod() → void {}
+  method declareConcreteImplementMultipleMethod() → void {}
+  method declareAbstractImplementMultipleMethod() → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  method implementMultipleMethod() → void {}
+  method declareConcreteImplementMultipleMethod() → void {}
+  method declareAbstractImplementMultipleMethod() → void {}
+}
+class ConcreteClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  method declareConcreteImplementMultipleMethod() → void {}
+  abstract method declareAbstractImplementMultipleMethod() → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  method declareConcreteImplementMultipleMethod() → void {}
+  abstract method declareAbstractImplementMultipleMethod() → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..c960de6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.weak.modular.expect
@@ -0,0 +1,95 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:21:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declareAbstractImplementMultipleSetter=
+//  - Interface1.implementMultipleSetter=
+//  - Interface2.implementMultipleSetter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass implements Interface1, Interface2 {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:24:12: Context: 'ConcreteClass.declareAbstractImplementMultipleSetter=' is defined here.
+//   void set declareAbstractImplementMultipleSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:6:12: Context: 'Interface1.implementMultipleSetter=' is defined here.
+//   void set implementMultipleSetter(int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:14:12: Context: 'Interface2.implementMultipleSetter=' is defined here.
+//   void set implementMultipleSetter(int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:33:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
+//  - AbstractClass.declareAbstractImplementMultipleSetter=
+//  - Interface1.declareAbstractImplementMultipleSetter=
+//  - Interface1.implementMultipleSetter=
+//  - Interface2.declareAbstractImplementMultipleSetter=
+//  - Interface2.implementMultipleSetter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSub extends AbstractClass {}
+//       ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:30:12: Context: 'AbstractClass.declareAbstractImplementMultipleSetter=' is defined here.
+//   void set declareAbstractImplementMultipleSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:10:12: Context: 'Interface1.declareAbstractImplementMultipleSetter=' is defined here.
+//   void set declareAbstractImplementMultipleSetter(int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:6:12: Context: 'Interface1.implementMultipleSetter=' is defined here.
+//   void set implementMultipleSetter(int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:18:12: Context: 'Interface2.declareAbstractImplementMultipleSetter=' is defined here.
+//   void set declareAbstractImplementMultipleSetter(int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:14:12: Context: 'Interface2.implementMultipleSetter=' is defined here.
+//   void set implementMultipleSetter(int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  set implementMultipleSetter(core::int i) → void {}
+  set declareConcreteImplementMultipleSetter(core::int i) → void {}
+  set declareAbstractImplementMultipleSetter(core::int i) → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  set implementMultipleSetter(core::int i) → void {}
+  set declareConcreteImplementMultipleSetter(core::int i) → void {}
+  set declareAbstractImplementMultipleSetter(core::int i) → void {}
+}
+class ConcreteClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  set declareConcreteImplementMultipleSetter(core::int i) → void {}
+  abstract set declareAbstractImplementMultipleSetter(core::int i) → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  set declareConcreteImplementMultipleSetter(core::int i) → void {}
+  abstract set declareAbstractImplementMultipleSetter(core::int i) → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.modular.expect
new file mode 100644
index 0000000..efdaf3b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.modular.expect
@@ -0,0 +1,230 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:9:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'Class' does not conform to its interface.
+// class Class /* error */ extends LegacyClass implements SuperQ {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:9:7: Context: The method 'Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+//   int optionalArgumentsMethod(int i) => i;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:34:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassQ' does not conform to its interface.
+// class ClassQ /* error */ extends LegacyClassQ implements Super {
+//       ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:20:8: Context: The method 'SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+//   int? optionalArgumentsMethod(int? i) => i;
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:59:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedIn' does not conform to its interface.
+// class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
+//       ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:9:7: Context: The method 'Object with Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+//   int optionalArgumentsMethod(int i) => i;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:59:7: Error: Class 'ClassMixedIn' inherits multiple members named 'nullabilityMethod' with incompatible signatures.
+// Try adding a declaration of 'nullabilityMethod' to 'ClassMixedIn'.
+// class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
+//       ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:6:7: Context: This is one of the overridden members.
+//   int nullabilityMethod(int i, {required int j}) => i;
+//       ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:17:8: Context: This is one of the overridden members.
+//   int? nullabilityMethod(int? i, {int? j}) => i;
+//        ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:84:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedInQ' does not conform to its interface.
+// class ClassMixedInQ /* error */ extends LegacyMixedInQ implements Super {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:20:8: Context: The method 'Object with SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+//   int? optionalArgumentsMethod(int? i) => i;
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:84:7: Error: Class 'ClassMixedInQ' inherits multiple members named 'nullabilityMethod' with incompatible signatures.
+// Try adding a declaration of 'nullabilityMethod' to 'ClassMixedInQ'.
+// class ClassMixedInQ /* error */ extends LegacyMixedInQ implements Super {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:17:8: Context: This is one of the overridden members.
+//   int? nullabilityMethod(int? i, {int? j}) => i;
+//        ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:6:7: Context: This is one of the overridden members.
+//   int nullabilityMethod(int i, {required int j}) => i;
+//       ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+//     nullabilitySetter = null; // error
+//                         ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:63:31: Error: Required named parameter 'j' must be provided.
+//     var v1 = nullabilityMethod(null); // ok
+//                               ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+import self as self;
+import "in_out_in_lib2.dart" as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+import "org-dartlang-testcase:///in_out_in_lib2.dart";
+
+class Class extends in_::LegacyClass implements in_2::SuperQ {
+  synthetic constructor •() → self::Class
+    : super in_::LegacyClass::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    core::int? v1 = this.{self::Class::nullabilityMethod}(null){(core::int?, {j: core::int?}) → core::int?};
+    i = super.{in_2::Super::nullabilityMethod}(null);
+    i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_2::Super::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_2::Super::optionalArgumentsMethod}(null, null);
+    core::int? v2 = this.{self::Class::nullabilityGetter}{core::int?};
+    i = super.{in_2::Super::nullabilityGetter};
+    this.{self::Class::nullabilitySetter} = null;
+    super.{in_2::Super::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int? i, {core::int? j}) → core::int?; -> in_2::Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int?; -> in_2::Super::nullabilityGetter
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+  abstract member-signature set nullabilitySetter(core::int? value) → void; -> in_2::Super::nullabilitySetter
+}
+class ClassQ extends in_::LegacyClassQ implements in_2::Super {
+  synthetic constructor •() → self::ClassQ
+    : super in_::LegacyClassQ::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    this.{in_::LegacyClassQ::nullabilityMethod}(null){(core::int*, {j: core::int*}) →* core::int*};
+    i = super.{in_2::SuperQ::nullabilityMethod}(null);
+    i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_2::SuperQ::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null, null);
+    i = this.{self::ClassQ::nullabilityGetter}{core::int};
+    i = super.{in_2::SuperQ::nullabilityGetter};
+    this.{self::ClassQ::nullabilitySetter} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+    nullabilitySetter = null; // error
+                        ^" in null as{TypeError,ForNonNullableByDefault} core::int;
+    super.{in_2::SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature get nullabilityGetter() → core::int; -> in_2::SuperQ::nullabilityGetter
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+  abstract member-signature set nullabilitySetter(core::int value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+class ClassMixedIn extends in_::LegacyMixedIn implements in_2::SuperQ {
+  synthetic constructor •() → self::ClassMixedIn
+    : super in_::LegacyMixedIn::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    invalid-type v1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:63:31: Error: Required named parameter 'j' must be provided.
+    var v1 = nullabilityMethod(null); // ok
+                              ^" in this.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}{<inapplicable>}.(null){(invalid-type) → invalid-type};
+    i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
+    i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
+    core::int v2 = this.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter}{core::int};
+    i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter};
+    this.{self::ClassMixedIn::nullabilitySetter} = null;
+    super.{in_::_LegacyMixedIn&Object&Super::nullabilitySetter} = null;
+  }
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+  abstract member-signature set nullabilitySetter(core::int? value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+class ClassMixedInQ extends in_::LegacyMixedInQ implements in_2::Super {
+  synthetic constructor •() → self::ClassMixedInQ
+    : super in_::LegacyMixedInQ::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    this.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null){(core::int?, {j: core::int?}) →* core::int?};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
+    i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null, null);
+    i = this.{self::ClassMixedInQ::nullabilityGetter}{core::int};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter};
+    this.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
+    super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature get nullabilityGetter() → core::int; -> in_2::Super::nullabilityGetter
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.modular.expect
new file mode 100644
index 0000000..1f01c40
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.modular.expect
@@ -0,0 +1,315 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:9:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'Class' does not conform to its interface.
+// class Class /* error */ extends LegacyClass implements SuperQ {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:9:7: Context: The method 'Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+//   int optionalArgumentsMethod(int i) => i;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:34:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassQ' does not conform to its interface.
+// class ClassQ /* error */ extends LegacyClassQ implements Super {
+//       ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:20:8: Context: The method 'SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+//   int? optionalArgumentsMethod(int? i) => i;
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:59:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedIn' does not conform to its interface.
+// class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
+//       ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib2.dart:13:16: Context: The method 'Object with Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+// abstract class LegacyMixedIn with Super implements SuperExtra {}
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:84:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedInQ' does not conform to its interface.
+// class ClassMixedInQ /* error */ extends LegacyMixedInQ implements Super {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib2.dart:15:16: Context: The method 'Object with SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+// abstract class LegacyMixedInQ with SuperQ implements SuperExtra {}
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+//     nullabilitySetter = null; // error
+//                         ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+//     nullabilitySetter = null; // error
+//                         ^
+//
+import self as self;
+import "in_out_in_lib2.dart" as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+import "org-dartlang-testcase:///in_out_in_lib2.dart";
+
+class Class extends in_::LegacyClass implements in_2::SuperQ {
+  synthetic constructor •() → self::Class
+    : super in_::LegacyClass::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    core::int? v1 = this.{self::Class::nullabilityMethod}(null){(core::int?, {j: core::int?}) → core::int?};
+    i = super.{in_2::Super::nullabilityMethod}(null);
+    i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_2::Super::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_2::Super::optionalArgumentsMethod}(null, null);
+    core::int? v2 = this.{self::Class::nullabilityGetter}{core::int?};
+    i = super.{in_2::Super::nullabilityGetter};
+    this.{self::Class::nullabilitySetter} = null;
+    super.{in_2::Super::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int? i, {core::int? j}) → core::int?; -> in_2::Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int?; -> in_2::Super::nullabilityGetter
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+  abstract member-signature set nullabilitySetter(core::int? value) → void; -> in_2::Super::nullabilitySetter
+}
+class ClassQ extends in_::LegacyClassQ implements in_2::Super {
+  synthetic constructor •() → self::ClassQ
+    : super in_::LegacyClassQ::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    this.{in_::LegacyClassQ::nullabilityMethod}(null){(core::int*, {j: core::int*}) →* core::int*};
+    i = super.{in_2::SuperQ::nullabilityMethod}(null);
+    i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_2::SuperQ::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null, null);
+    i = this.{self::ClassQ::nullabilityGetter}{core::int};
+    i = super.{in_2::SuperQ::nullabilityGetter};
+    this.{self::ClassQ::nullabilitySetter} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+    nullabilitySetter = null; // error
+                        ^" in null as{TypeError,ForNonNullableByDefault} core::int;
+    super.{in_2::SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature get nullabilityGetter() → core::int; -> in_2::SuperQ::nullabilityGetter
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+  abstract member-signature set nullabilitySetter(core::int value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+class ClassMixedIn extends in_::LegacyMixedIn implements in_2::SuperQ {
+  synthetic constructor •() → self::ClassMixedIn
+    : super in_::LegacyMixedIn::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    core::int? v1 = this.{self::ClassMixedIn::nullabilityMethod}(null){(core::int?, {j: core::int?}) → core::int?};
+    i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
+    i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
+    core::int? v2 = this.{self::ClassMixedIn::nullabilityGetter}{core::int?};
+    i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter};
+    this.{self::ClassMixedIn::nullabilitySetter} = null;
+    super.{in_::_LegacyMixedIn&Object&Super::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int? i, {core::int? j}) → core::int?; -> in_::_LegacyMixedIn&Object&Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int?; -> in_::_LegacyMixedIn&Object&Super::nullabilityGetter
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+  abstract member-signature set nullabilitySetter(core::int? value) → void; -> in_::_LegacyMixedIn&Object&Super::nullabilitySetter
+}
+class ClassMixedInQ extends in_::LegacyMixedInQ implements in_2::Super {
+  synthetic constructor •() → self::ClassMixedInQ
+    : super in_::LegacyMixedInQ::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    this.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null){(core::int*, {j: core::int*}) →* core::int*};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
+    i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null, null);
+    i = this.{self::ClassMixedInQ::nullabilityGetter}{core::int};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter};
+    this.{self::ClassMixedInQ::nullabilitySetter} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+    nullabilitySetter = null; // error
+                        ^" in null as{TypeError,ForNonNullableByDefault} core::int;
+    super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature get nullabilityGetter() → core::int; -> in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+  abstract member-signature set nullabilitySetter(core::int value) → void; -> in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter
+}
+static method main() → dynamic {}
+
+library;
+import self as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+
+abstract class LegacyClass extends in_2::Super implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyClass*
+    : super in_2::Super::•()
+    ;
+  abstract member-signature method nullabilityMethod(core::int* i, {core::int* j}) → core::int*; -> in_2::Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int*; -> in_2::Super::nullabilityGetter
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature set nullabilitySetter(core::int* value) → void; -> in_2::Super::nullabilitySetter
+}
+abstract class LegacyClassQ extends in_2::SuperQ implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyClassQ*
+    : super in_2::SuperQ::•()
+    ;
+  abstract member-signature method nullabilityMethod(core::int* i, {core::int* j}) → core::int*; -> in_2::SuperQ::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int*; -> in_2::SuperQ::nullabilityGetter
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature set nullabilitySetter(core::int* value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+abstract class _LegacyMixedIn&Object&Super = core::Object with in_2::Super /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → in_::_LegacyMixedIn&Object&Super*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method nullabilityMethod(core::int* i, {core::int* j}) → core::int*
+    return super.{in_2::Super::nullabilityMethod}(i, j: j);
+  mixin-super-stub get nullabilityGetter() → core::int*
+    return super.{in_2::Super::nullabilityGetter};
+  mixin-super-stub method optionalArgumentsMethod(core::int* i) → core::int*
+    return super.{in_2::Super::optionalArgumentsMethod}(i);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  mixin-super-stub set nullabilitySetter(core::int* value) → void
+    return super.{in_2::Super::nullabilitySetter} = value;
+}
+abstract class LegacyMixedIn extends in_::_LegacyMixedIn&Object&Super implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyMixedIn*
+    : super in_::_LegacyMixedIn&Object&Super::•()
+    ;
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+abstract class _LegacyMixedInQ&Object&SuperQ = core::Object with in_2::SuperQ /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → in_::_LegacyMixedInQ&Object&SuperQ*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method nullabilityMethod(core::int* i, {core::int* j}) → core::int*
+    return super.{in_2::SuperQ::nullabilityMethod}(i, j: j);
+  mixin-super-stub get nullabilityGetter() → core::int*
+    return super.{in_2::SuperQ::nullabilityGetter};
+  mixin-super-stub method optionalArgumentsMethod(core::int* i) → core::int*
+    return super.{in_2::SuperQ::optionalArgumentsMethod}(i);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  mixin-super-stub set nullabilitySetter(core::int* value) → void
+    return super.{in_2::SuperQ::nullabilitySetter} = value;
+}
+abstract class LegacyMixedInQ extends in_::_LegacyMixedInQ&Object&SuperQ implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyMixedInQ*
+    : super in_::_LegacyMixedInQ&Object&SuperQ::•()
+    ;
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.modular.expect
new file mode 100644
index 0000000..a4ccce2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.modular.expect
@@ -0,0 +1,369 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:9:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'Class' does not conform to its interface.
+// class Class /* error */ extends LegacyClass implements SuperQ {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:9:7: Context: The method 'Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+//   int optionalArgumentsMethod(int i) => i;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:34:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassQ' does not conform to its interface.
+// class ClassQ /* error */ extends LegacyClassQ implements Super {
+//       ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:20:8: Context: The method 'SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+//   int? optionalArgumentsMethod(int? i) => i;
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:59:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedIn' does not conform to its interface.
+// class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
+//       ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib2.dart:13:16: Context: The method 'Object with Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+// abstract class LegacyMixedIn with Super implements SuperExtra {}
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:84:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedInQ' does not conform to its interface.
+// class ClassMixedInQ /* error */ extends LegacyMixedInQ implements Super {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib2.dart:15:16: Context: The method 'Object with SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+// abstract class LegacyMixedInQ with SuperQ implements SuperExtra {}
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+//   int optionalArgumentsMethod(int i, [int? j]) => i;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:38:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+//     nullabilityMethod(null); // error
+//                       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+//     nullabilitySetter = null; // error
+//                         ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:88:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+//     nullabilityMethod(null); // error
+//                       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     super.optionalArgumentsMethod(null, null); // error
+//                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+//     nullabilitySetter = null; // error
+//                         ^
+//
+import self as self;
+import "in_out_in_lib2.dart" as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+import "org-dartlang-testcase:///in_out_in_lib2.dart";
+
+class Class extends in_::LegacyClass implements in_2::SuperQ {
+  synthetic constructor •() → self::Class
+    : super in_::LegacyClass::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    core::int? v1 = this.{self::Class::nullabilityMethod}(null){(core::int?) → core::int?};
+    i = super.{in_2::Super::nullabilityMethod}(null);
+    i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_2::Super::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_2::Super::optionalArgumentsMethod}(null, null);
+    core::int? v2 = this.{self::Class::nullabilityGetter}{core::int?};
+    i = super.{in_2::Super::nullabilityGetter};
+    this.{self::Class::nullabilitySetter} = null;
+    super.{in_2::Super::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int? i) → core::int?; -> in_2::Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int?; -> in_2::Super::nullabilityGetter
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+  abstract member-signature set nullabilitySetter(core::int? value) → void; -> in_2::Super::nullabilitySetter
+}
+class ClassQ extends in_::LegacyClassQ implements in_2::Super {
+  synthetic constructor •() → self::ClassQ
+    : super in_::LegacyClassQ::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    this.{self::ClassQ::nullabilityMethod}(invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:38:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+    nullabilityMethod(null); // error
+                      ^" in null as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int};
+    i = super.{in_2::SuperQ::nullabilityMethod}(null);
+    i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_2::SuperQ::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null, null);
+    i = this.{self::ClassQ::nullabilityGetter}{core::int};
+    i = super.{in_2::SuperQ::nullabilityGetter};
+    this.{self::ClassQ::nullabilitySetter} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+    nullabilitySetter = null; // error
+                        ^" in null as{TypeError,ForNonNullableByDefault} core::int;
+    super.{in_2::SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int i) → core::int; -> in_2::SuperQ::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int; -> in_2::SuperQ::nullabilityGetter
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+  abstract member-signature set nullabilitySetter(core::int value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+class ClassMixedIn extends in_::LegacyMixedIn implements in_2::SuperQ {
+  synthetic constructor •() → self::ClassMixedIn
+    : super in_::LegacyMixedIn::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    core::int? v1 = this.{self::ClassMixedIn::nullabilityMethod}(null){(core::int?) → core::int?};
+    i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
+    i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
+    core::int? v2 = this.{self::ClassMixedIn::nullabilityGetter}{core::int?};
+    i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter};
+    this.{self::ClassMixedIn::nullabilitySetter} = null;
+    super.{in_::_LegacyMixedIn&Object&Super::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int? i) → core::int?; -> in_::_LegacyMixedIn&Object&Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int?; -> in_::_LegacyMixedIn&Object&Super::nullabilityGetter
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+  abstract member-signature set nullabilitySetter(core::int? value) → void; -> in_::_LegacyMixedIn&Object&Super::nullabilitySetter
+}
+class ClassMixedInQ extends in_::LegacyMixedInQ implements in_2::Super {
+  synthetic constructor •() → self::ClassMixedInQ
+    : super in_::LegacyMixedInQ::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    this.{self::ClassMixedInQ::nullabilityMethod}(invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:88:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+    nullabilityMethod(null); // error
+                      ^" in null as{TypeError,ForNonNullableByDefault} core::int){(core::int) → core::int};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
+    i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null){(core::int*, [core::int*]) →* core::int*};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null);
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null, null);
+    i = this.{self::ClassMixedInQ::nullabilityGetter}{core::int};
+    i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter};
+    this.{self::ClassMixedInQ::nullabilitySetter} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+    nullabilitySetter = null; // error
+                        ^" in null as{TypeError,ForNonNullableByDefault} core::int;
+    super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int i) → core::int; -> in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int; -> in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+  abstract member-signature set nullabilitySetter(core::int value) → void; -> in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as in_2;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → in_2::Super
+    : super core::Object::•()
+    ;
+  method nullabilityMethod(core::int i) → core::int
+    return i;
+  get nullabilityGetter() → core::int
+    return 0;
+  set nullabilitySetter(core::int value) → void {}
+  method optionalArgumentsMethod(core::int i) → core::int
+    return i;
+}
+abstract class SuperExtra extends core::Object {
+  synthetic constructor •() → in_2::SuperExtra
+    : super core::Object::•()
+    ;
+  method optionalArgumentsMethod(core::int i, [core::int? j = #C1]) → core::int
+    return i;
+}
+abstract class SuperQ extends core::Object {
+  synthetic constructor •() → in_2::SuperQ
+    : super core::Object::•()
+    ;
+  method nullabilityMethod(core::int? i) → core::int?
+    return i;
+  get nullabilityGetter() → core::int?
+    return null;
+  set nullabilitySetter(core::int? value) → void {}
+  method optionalArgumentsMethod(core::int? i) → core::int?
+    return i;
+}
+
+library;
+import self as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+
+abstract class LegacyClass extends in_2::Super implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyClass*
+    : super in_2::Super::•()
+    ;
+  abstract member-signature method nullabilityMethod(core::int* i) → core::int*; -> in_2::Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int*; -> in_2::Super::nullabilityGetter
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature set nullabilitySetter(core::int* value) → void; -> in_2::Super::nullabilitySetter
+}
+abstract class LegacyClassQ extends in_2::SuperQ implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyClassQ*
+    : super in_2::SuperQ::•()
+    ;
+  abstract member-signature method nullabilityMethod(core::int* i) → core::int*; -> in_2::SuperQ::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int*; -> in_2::SuperQ::nullabilityGetter
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature set nullabilitySetter(core::int* value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+abstract class _LegacyMixedIn&Object&Super = core::Object with in_2::Super /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → in_::_LegacyMixedIn&Object&Super*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method nullabilityMethod(core::int* i) → core::int*
+    return super.{in_2::Super::nullabilityMethod}(i);
+  mixin-super-stub get nullabilityGetter() → core::int*
+    return super.{in_2::Super::nullabilityGetter};
+  mixin-super-stub method optionalArgumentsMethod(core::int* i) → core::int*
+    return super.{in_2::Super::optionalArgumentsMethod}(i);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  mixin-super-stub set nullabilitySetter(core::int* value) → void
+    return super.{in_2::Super::nullabilitySetter} = value;
+}
+abstract class LegacyMixedIn extends in_::_LegacyMixedIn&Object&Super implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyMixedIn*
+    : super in_::_LegacyMixedIn&Object&Super::•()
+    ;
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+abstract class _LegacyMixedInQ&Object&SuperQ = core::Object with in_2::SuperQ /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → in_::_LegacyMixedInQ&Object&SuperQ*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method nullabilityMethod(core::int* i) → core::int*
+    return super.{in_2::SuperQ::nullabilityMethod}(i);
+  mixin-super-stub get nullabilityGetter() → core::int*
+    return super.{in_2::SuperQ::nullabilityGetter};
+  mixin-super-stub method optionalArgumentsMethod(core::int* i) → core::int*
+    return super.{in_2::SuperQ::optionalArgumentsMethod}(i);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  mixin-super-stub set nullabilitySetter(core::int* value) → void
+    return super.{in_2::SuperQ::nullabilitySetter} = value;
+}
+abstract class LegacyMixedInQ extends in_::_LegacyMixedInQ&Object&SuperQ implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyMixedInQ*
+    : super in_::_LegacyMixedInQ&Object&SuperQ::•()
+    ;
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.modular.expect
new file mode 100644
index 0000000..eeb8541
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.modular.expect
@@ -0,0 +1,265 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:34:7: Error: The non-abstract class 'ClassImplements' is missing implementations for these members:
+//  - Interface2.extendedMethod
+//  - Interface2.mixedInMethod
+//  - Mixin.mixedInMethod
+//  - Super with Mixin.mixedInMethod
+//  - Super.extendedMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ClassImplements implements Interface2 {}
+//       ^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:19:7: Context: 'Interface2.extendedMethod' is defined here.
+//   int extendedMethod();
+//       ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:20:7: Context: 'Interface2.mixedInMethod' is defined here.
+//   int mixedInMethod();
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:10:7: Context: 'Mixin.mixedInMethod' is defined here.
+//   num mixedInMethod() => 0;
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:10:7: Context: 'Super with Mixin.mixedInMethod' is defined here.
+//   num mixedInMethod() => 0;
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: 'Super.extendedMethod' is defined here.
+//   num extendedMethod() => 0;
+//       ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:23:7: Error: The implementation of 'mixedInMethod' in the non-abstract class 'ClassExtends' does not conform to its interface.
+// class ClassExtends extends Super with Mixin implements Interface1 {}
+//       ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:23:7: Context: The return type of the method 'Super with Mixin.mixedInMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface1.mixedInMethod'.
+// Change to a subtype of 'int'.
+// class ClassExtends extends Super with Mixin implements Interface1 {}
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:15:7: Context: This is the overridden method ('mixedInMethod').
+//   int mixedInMethod();
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:23:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassExtends' does not conform to its interface.
+// class ClassExtends extends Super with Mixin implements Interface1 {}
+//       ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: The return type of the method 'Super.extendedMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface1.extendedMethod'.
+// Change to a subtype of 'int'.
+//   num extendedMethod() => 0;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:14:7: Context: This is the overridden method ('extendedMethod').
+//   int extendedMethod();
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:25:7: Error: The implementation of 'mixedInMethod' in the non-abstract class 'ClassExtendsWithNoSuchMethod' does not conform to its interface.
+// class ClassExtendsWithNoSuchMethod extends Super
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:25:7: Context: The return type of the method 'Super with Mixin.mixedInMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface1.mixedInMethod'.
+// Change to a subtype of 'int'.
+// class ClassExtendsWithNoSuchMethod extends Super
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:15:7: Context: This is the overridden method ('mixedInMethod').
+//   int mixedInMethod();
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:25:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassExtendsWithNoSuchMethod' does not conform to its interface.
+// class ClassExtendsWithNoSuchMethod extends Super
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: The return type of the method 'Super.extendedMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface1.extendedMethod'.
+// Change to a subtype of 'int'.
+//   num extendedMethod() => 0;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:14:7: Context: This is the overridden method ('extendedMethod').
+//   int extendedMethod();
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:43:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassDeclaresExtends' does not conform to its interface.
+// class ClassDeclaresExtends extends Super with Mixin {
+//       ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: The return type of the method 'Super.extendedMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'ClassDeclaresExtends.extendedMethod'.
+// Change to a subtype of 'int'.
+//   num extendedMethod() => 0;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:44:7: Context: This is the overridden method ('extendedMethod').
+//   int extendedMethod();
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:43:7: Error: The implementation of 'mixedInMethod' in the non-abstract class 'ClassDeclaresExtends' does not conform to its interface.
+// class ClassDeclaresExtends extends Super with Mixin {
+//       ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:43:7: Context: The return type of the method 'Super with Mixin.mixedInMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'ClassDeclaresExtends.mixedInMethod'.
+// Change to a subtype of 'int'.
+// class ClassDeclaresExtends extends Super with Mixin {
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:45:7: Context: This is the overridden method ('mixedInMethod').
+//   int mixedInMethod();
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:48:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassDeclaresExtendsWithNoSuchMethod' does not conform to its interface.
+// class ClassDeclaresExtendsWithNoSuchMethod extends Super with Mixin {
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: The return type of the method 'Super.extendedMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'ClassDeclaresExtendsWithNoSuchMethod.extendedMethod'.
+// Change to a subtype of 'int'.
+//   num extendedMethod() => 0;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:54:7: Context: This is the overridden method ('extendedMethod').
+//   int extendedMethod();
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:48:7: Error: The implementation of 'mixedInMethod' in the non-abstract class 'ClassDeclaresExtendsWithNoSuchMethod' does not conform to its interface.
+// class ClassDeclaresExtendsWithNoSuchMethod extends Super with Mixin {
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:48:7: Context: The return type of the method 'Super with Mixin.mixedInMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'ClassDeclaresExtendsWithNoSuchMethod.mixedInMethod'.
+// Change to a subtype of 'int'.
+// class ClassDeclaresExtendsWithNoSuchMethod extends Super with Mixin {
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:55:7: Context: This is the overridden method ('mixedInMethod').
+//   int mixedInMethod();
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedMethod() → core::num
+    return 0;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method mixedInMethod() → core::num
+    return 0;
+}
+abstract class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  abstract method extendedMethod() → core::int;
+  abstract method mixedInMethod() → core::int;
+}
+abstract class _Interface2&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Interface2&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInMethod() → core::num
+    return super.{self::Mixin::mixedInMethod}();
+}
+abstract class Interface2 extends self::_Interface2&Super&Mixin {
+  synthetic constructor •() → self::Interface2
+    : super self::_Interface2&Super&Mixin::•()
+    ;
+  abstract method extendedMethod() → core::int;
+  abstract method mixedInMethod() → core::int;
+}
+abstract class _ClassExtends&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassExtends&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInMethod() → core::num
+    return super.{self::Mixin::mixedInMethod}();
+}
+class ClassExtends extends self::_ClassExtends&Super&Mixin implements self::Interface1 {
+  synthetic constructor •() → self::ClassExtends
+    : super self::_ClassExtends&Super&Mixin::•()
+    ;
+  abstract member-signature method mixedInMethod() → core::int; -> self::Interface1::mixedInMethod
+  abstract member-signature method extendedMethod() → core::int; -> self::Interface1::extendedMethod
+}
+abstract class _ClassExtendsWithNoSuchMethod&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassExtendsWithNoSuchMethod&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInMethod() → core::num
+    return super.{self::Mixin::mixedInMethod}();
+}
+class ClassExtendsWithNoSuchMethod extends self::_ClassExtendsWithNoSuchMethod&Super&Mixin implements self::Interface1 {
+  synthetic constructor •() → self::ClassExtendsWithNoSuchMethod
+    : super self::_ClassExtendsWithNoSuchMethod&Super&Mixin::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return super.{core::Object::noSuchMethod}(invocation);
+  }
+  abstract member-signature method mixedInMethod() → core::int; -> self::Interface1::mixedInMethod
+  abstract member-signature method extendedMethod() → core::int; -> self::Interface1::extendedMethod
+}
+class ClassImplements extends core::Object implements self::Interface2 {
+  synthetic constructor •() → self::ClassImplements
+    : super core::Object::•()
+    ;
+}
+class ClassImplementsWithNoSuchMethod extends core::Object implements self::Interface2 {
+  synthetic constructor •() → self::ClassImplementsWithNoSuchMethod
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return super.{core::Object::noSuchMethod}(invocation);
+  }
+  no-such-method-forwarder method mixedInMethod() → core::int
+    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder method extendedMethod() → core::int
+    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+}
+abstract class _ClassDeclaresExtends&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassDeclaresExtends&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInMethod() → core::num
+    return super.{self::Mixin::mixedInMethod}();
+}
+class ClassDeclaresExtends extends self::_ClassDeclaresExtends&Super&Mixin {
+  synthetic constructor •() → self::ClassDeclaresExtends
+    : super self::_ClassDeclaresExtends&Super&Mixin::•()
+    ;
+  abstract method extendedMethod() → core::int;
+  abstract method mixedInMethod() → core::int;
+}
+abstract class _ClassDeclaresExtendsWithNoSuchMethod&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassDeclaresExtendsWithNoSuchMethod&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInMethod() → core::num
+    return super.{self::Mixin::mixedInMethod}();
+}
+class ClassDeclaresExtendsWithNoSuchMethod extends self::_ClassDeclaresExtendsWithNoSuchMethod&Super&Mixin {
+  synthetic constructor •() → self::ClassDeclaresExtendsWithNoSuchMethod
+    : super self::_ClassDeclaresExtendsWithNoSuchMethod&Super&Mixin::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return super.{core::Object::noSuchMethod}(invocation);
+  }
+  abstract method extendedMethod() → core::int;
+  abstract method mixedInMethod() → core::int;
+}
+class ClassDeclaresImplementsWithNoSuchMethod extends core::Object implements self::Super, self::Mixin {
+  synthetic constructor •() → self::ClassDeclaresImplementsWithNoSuchMethod
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return super.{core::Object::noSuchMethod}(invocation);
+  }
+  no-such-method-forwarder method extendedMethod() → core::int
+    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder method mixedInMethod() → core::int
+    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = core::_Override {}
+  #C2 = #mixedInMethod
+  #C3 = <core::Type*>[]
+  #C4 = <dynamic>[]
+  #C5 = <core::Symbol*, dynamic>{)
+  #C6 = #extendedMethod
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.weak.modular.expect
new file mode 100644
index 0000000..f789cb9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.weak.modular.expect
@@ -0,0 +1,185 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart:11:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
+//  - Interface1.extendedAbstractImplementedMethod
+//  - Interface1.implementedMethod
+//  - Interface1.implementedMultipleMethod
+//  - Interface2.implementedMultipleMethod
+//  - Super.extendedAbstractImplementedMethod
+//  - Super.extendedAbstractMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteSub extends AbstractClass {}
+//       ^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:18:8: Context: 'Interface1.extendedAbstractImplementedMethod' is defined here.
+//   void extendedAbstractImplementedMethod(int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:20:8: Context: 'Interface1.implementedMethod' is defined here.
+//   void implementedMethod(int i) {}
+//        ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:22:8: Context: 'Interface1.implementedMultipleMethod' is defined here.
+//   void implementedMultipleMethod(int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:26:8: Context: 'Interface2.implementedMultipleMethod' is defined here.
+//   void implementedMultipleMethod(int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:12:8: Context: 'Super.extendedAbstractImplementedMethod' is defined here.
+//   void extendedAbstractImplementedMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart:13:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - Interface1.extendedAbstractImplementedMethod
+//  - Interface1.implementedMethod
+//  - Interface1.implementedMultipleMethod
+//  - Interface2.implementedMultipleMethod
+//  - Super.extendedAbstractImplementedMethod
+//  - Super.extendedAbstractMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:18:8: Context: 'Interface1.extendedAbstractImplementedMethod' is defined here.
+//   void extendedAbstractImplementedMethod(int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:20:8: Context: 'Interface1.implementedMethod' is defined here.
+//   void implementedMethod(int i) {}
+//        ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:22:8: Context: 'Interface1.implementedMultipleMethod' is defined here.
+//   void implementedMultipleMethod(int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:26:8: Context: 'Interface2.implementedMultipleMethod' is defined here.
+//   void implementedMultipleMethod(int i) {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:12:8: Context: 'Super.extendedAbstractImplementedMethod' is defined here.
+//   void extendedAbstractImplementedMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "member_signature_lib.dart" as mem;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///member_signature_lib.dart";
+
+abstract class AbstractClass extends mem::Super implements mem::Interface1, mem::Interface2 {
+  synthetic constructor •() → self::AbstractClass*
+    : super mem::Super::•()
+    ;
+  abstract member-signature method extendedConcreteMethod(core::int* i) → void; -> mem::Super::extendedConcreteMethod
+  abstract member-signature method extendedConcreteImplementedMethod(core::int* i) → void; -> mem::Super::extendedConcreteImplementedMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method extendedAbstractMethod(core::int* i) → void; -> mem::Super::extendedAbstractMethod
+  abstract member-signature method extendedAbstractImplementedMethod(core::int* i) → void; -> mem::Super::extendedAbstractImplementedMethod
+  abstract member-signature method implementedMethod(core::int* i) → void; -> mem::Interface1::implementedMethod
+  abstract member-signature method implementedMultipleMethod(core::int* i) → void; -> mem::Interface1::implementedMultipleMethod
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub*
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends mem::Super implements mem::Interface1, mem::Interface2 {
+  synthetic constructor •() → self::ConcreteClass*
+    : super mem::Super::•()
+    ;
+  abstract member-signature method extendedConcreteMethod(core::int* i) → void; -> mem::Super::extendedConcreteMethod
+  abstract member-signature method extendedConcreteImplementedMethod(core::int* i) → void; -> mem::Super::extendedConcreteImplementedMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method extendedAbstractMethod(core::int* i) → void; -> mem::Super::extendedAbstractMethod
+  abstract member-signature method extendedAbstractImplementedMethod(core::int* i) → void; -> mem::Super::extendedAbstractImplementedMethod
+  abstract member-signature method implementedMethod(core::int* i) → void; -> mem::Interface1::implementedMethod
+  abstract member-signature method implementedMultipleMethod(core::int* i) → void; -> mem::Interface1::implementedMultipleMethod
+}
+abstract class OptOutInterface extends core::Object {
+  synthetic constructor •() → self::OptOutInterface*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class ClassImplementsOptOut extends core::Object implements self::OptOutInterface {
+  synthetic constructor •() → self::ClassImplementsOptOut*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mem;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → mem::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod(core::int i) → void {}
+  abstract method extendedAbstractMethod(core::int i) → void;
+  method extendedConcreteImplementedMethod(core::int i) → void {}
+  abstract method extendedAbstractImplementedMethod(core::int i) → void;
+}
+abstract class Interface1 extends core::Object {
+  synthetic constructor •() → mem::Interface1
+    : super core::Object::•()
+    ;
+  method extendedConcreteImplementedMethod(core::int i) → void {}
+  method extendedAbstractImplementedMethod(core::int i) → void {}
+  method implementedMethod(core::int i) → void {}
+  method implementedMultipleMethod(core::int i) → void {}
+}
+abstract class Interface2 extends core::Object {
+  synthetic constructor •() → mem::Interface2
+    : super core::Object::•()
+    ;
+  method implementedMultipleMethod(core::int i) → void {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.weak.modular.expect
new file mode 100644
index 0000000..185fc0d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.weak.modular.expect
@@ -0,0 +1,239 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractField=
+//  - Super.extendedAbstractMixedInAbstractField
+//  - Super.extendedAbstractMixedInAbstractField=
+//  - Super.extendedAbstractMixedInConcreteField
+//  - Super.extendedAbstractMixedInConcreteField=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Super {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:8:16: Context: 'Super.extendedAbstractField' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:8:16: Context: 'Super.extendedAbstractField=' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:16:16: Context: 'Super.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:16:16: Context: 'Super.extendedAbstractMixedInAbstractField=' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:12:16: Context: 'Super.extendedAbstractMixedInConcreteField' is defined here.
+//   abstract int extendedAbstractMixedInConcreteField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:12:16: Context: 'Super.extendedAbstractMixedInConcreteField=' is defined here.
+//   abstract int extendedAbstractMixedInConcreteField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractField
+//  - Mixin.extendedAbstractMixedInAbstractField=
+//  - Mixin.extendedConcreteMixedInAbstractField
+//  - Mixin.extendedConcreteMixedInAbstractField=
+//  - Mixin.mixedInAbstractField
+//  - Mixin.mixedInAbstractField=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField=' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:28:16: Context: 'Mixin.extendedConcreteMixedInAbstractField' is defined here.
+//   abstract int extendedConcreteMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:28:16: Context: 'Mixin.extendedConcreteMixedInAbstractField=' is defined here.
+//   abstract int extendedConcreteMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField=' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractField
+//  - Mixin.extendedAbstractMixedInAbstractField=
+//  - Mixin.mixedInAbstractField
+//  - Mixin.mixedInAbstractField=
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractField=
+//  - Super.extendedAbstractMixedInAbstractField
+//  - Super.extendedAbstractMixedInAbstractField=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField=' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField=' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:8:16: Context: 'Super.extendedAbstractField' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:8:16: Context: 'Super.extendedAbstractField=' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:16:16: Context: 'Super.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:16:16: Context: 'Super.extendedAbstractMixedInAbstractField=' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractField
+//  - Mixin.extendedAbstractMixedInAbstractField=
+//  - Mixin.mixedInAbstractField
+//  - Mixin.mixedInAbstractField=
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractField=
+//  - Super.extendedAbstractMixedInAbstractField
+//  - Super.extendedAbstractMixedInAbstractField=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField=' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField=' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:8:16: Context: 'Super.extendedAbstractField' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:8:16: Context: 'Super.extendedAbstractField=' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:16:16: Context: 'Super.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:16:16: Context: 'Super.extendedAbstractMixedInAbstractField=' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  field core::int extendedConcreteField = 0;
+  field core::int extendedConcreteMixedInConcreteField = 0;
+  field core::int extendedConcreteMixedInAbstractField = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract set extendedAbstractField(core::int #externalFieldValue) → void;
+  abstract get extendedAbstractMixedInConcreteField() → core::int;
+  abstract set extendedAbstractMixedInConcreteField(core::int #externalFieldValue) → void;
+  abstract get extendedAbstractMixedInAbstractField() → core::int;
+  abstract set extendedAbstractMixedInAbstractField(core::int #externalFieldValue) → void;
+}
+class Mixin extends core::Object {
+  field core::int mixedInConcreteField = 0;
+  field core::int extendedConcreteMixedInConcreteField = 0;
+  field core::int extendedAbstractMixedInConcreteField = 0;
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  abstract get mixedInAbstractField() → core::int;
+  abstract set mixedInAbstractField(core::int #externalFieldValue) → void;
+  abstract get extendedConcreteMixedInAbstractField() → core::int;
+  abstract set extendedConcreteMixedInAbstractField(core::int #externalFieldValue) → void;
+  abstract get extendedAbstractMixedInAbstractField() → core::int;
+  abstract set extendedAbstractMixedInAbstractField(core::int #externalFieldValue) → void;
+}
+abstract class _ClassMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub get mixedInConcreteField() → core::int
+    return super.{self::Mixin::mixedInConcreteField};
+  mixin-super-stub set mixedInConcreteField(core::int value) → void
+    return super.{self::Mixin::mixedInConcreteField} = value;
+  abstract mixin-stub get mixedInAbstractField() → core::int; -> self::Mixin::mixedInAbstractField
+  abstract mixin-stub set mixedInAbstractField(core::int #externalFieldValue) → void; -> self::Mixin::mixedInAbstractField
+  mixin-super-stub get extendedConcreteMixedInConcreteField() → core::int
+    return super.{self::Mixin::extendedConcreteMixedInConcreteField};
+  mixin-super-stub set extendedConcreteMixedInConcreteField(core::int value) → void
+    return super.{self::Mixin::extendedConcreteMixedInConcreteField} = value;
+  mixin-super-stub get extendedAbstractMixedInConcreteField() → core::int
+    return super.{self::Mixin::extendedAbstractMixedInConcreteField};
+  mixin-super-stub set extendedAbstractMixedInConcreteField(core::int value) → void
+    return super.{self::Mixin::extendedAbstractMixedInConcreteField} = value;
+  abstract mixin-stub get extendedConcreteMixedInAbstractField() → core::int; -> self::Mixin::extendedConcreteMixedInAbstractField
+  abstract mixin-stub set extendedConcreteMixedInAbstractField(core::int #externalFieldValue) → void; -> self::Mixin::extendedConcreteMixedInAbstractField
+  abstract mixin-stub get extendedAbstractMixedInAbstractField() → core::int; -> self::Mixin::extendedAbstractMixedInAbstractField
+  abstract mixin-stub set extendedAbstractMixedInAbstractField(core::int #externalFieldValue) → void; -> self::Mixin::extendedAbstractMixedInAbstractField
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin = self::Super with self::Mixin {
+  synthetic constructor •() → self::NamedMixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub get mixedInConcreteField() → core::int
+    return super.{self::Mixin::mixedInConcreteField};
+  mixin-super-stub set mixedInConcreteField(core::int value) → void
+    return super.{self::Mixin::mixedInConcreteField} = value;
+  abstract mixin-stub get mixedInAbstractField() → core::int; -> self::Mixin::mixedInAbstractField
+  abstract mixin-stub set mixedInAbstractField(core::int #externalFieldValue) → void; -> self::Mixin::mixedInAbstractField
+  mixin-super-stub get extendedConcreteMixedInConcreteField() → core::int
+    return super.{self::Mixin::extendedConcreteMixedInConcreteField};
+  mixin-super-stub set extendedConcreteMixedInConcreteField(core::int value) → void
+    return super.{self::Mixin::extendedConcreteMixedInConcreteField} = value;
+  mixin-super-stub get extendedAbstractMixedInConcreteField() → core::int
+    return super.{self::Mixin::extendedAbstractMixedInConcreteField};
+  mixin-super-stub set extendedAbstractMixedInConcreteField(core::int value) → void
+    return super.{self::Mixin::extendedAbstractMixedInConcreteField} = value;
+  abstract mixin-stub get extendedConcreteMixedInAbstractField() → core::int; -> self::Mixin::extendedConcreteMixedInAbstractField
+  abstract mixin-stub set extendedConcreteMixedInAbstractField(core::int #externalFieldValue) → void; -> self::Mixin::extendedConcreteMixedInAbstractField
+  abstract mixin-stub get extendedAbstractMixedInAbstractField() → core::int; -> self::Mixin::extendedAbstractMixedInAbstractField
+  abstract mixin-stub set extendedAbstractMixedInAbstractField(core::int #externalFieldValue) → void; -> self::Mixin::extendedAbstractMixedInAbstractField
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.weak.modular.expect
new file mode 100644
index 0000000..aa5c0aa6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.weak.modular.expect
@@ -0,0 +1,159 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractMixedInAbstractField
+//  - Super.extendedAbstractMixedInConcreteField
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Super {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:8:22: Context: 'Super.extendedAbstractField' is defined here.
+//   abstract final int extendedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:16:22: Context: 'Super.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract final int extendedAbstractMixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:12:22: Context: 'Super.extendedAbstractMixedInConcreteField' is defined here.
+//   abstract final int extendedAbstractMixedInConcreteField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractField
+//  - Mixin.extendedConcreteMixedInAbstractField
+//  - Mixin.mixedInAbstractField
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:30:22: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract final int extendedAbstractMixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:28:22: Context: 'Mixin.extendedConcreteMixedInAbstractField' is defined here.
+//   abstract final int extendedConcreteMixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:22:22: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract final int mixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractField
+//  - Mixin.mixedInAbstractField
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractMixedInAbstractField
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:30:22: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract final int extendedAbstractMixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:22:22: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract final int mixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:8:22: Context: 'Super.extendedAbstractField' is defined here.
+//   abstract final int extendedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:16:22: Context: 'Super.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract final int extendedAbstractMixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractField
+//  - Mixin.mixedInAbstractField
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractMixedInAbstractField
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:30:22: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract final int extendedAbstractMixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:22:22: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract final int mixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:8:22: Context: 'Super.extendedAbstractField' is defined here.
+//   abstract final int extendedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:16:22: Context: 'Super.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract final int extendedAbstractMixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  final field core::int extendedConcreteField = 0;
+  final field core::int extendedConcreteMixedInConcreteField = 0;
+  final field core::int extendedConcreteMixedInAbstractField = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract get extendedAbstractMixedInConcreteField() → core::int;
+  abstract get extendedAbstractMixedInAbstractField() → core::int;
+}
+class Mixin extends core::Object {
+  final field core::int mixedInConcreteField = 0;
+  final field core::int extendedConcreteMixedInConcreteField = 0;
+  final field core::int extendedAbstractMixedInConcreteField = 0;
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  abstract get mixedInAbstractField() → core::int;
+  abstract get extendedConcreteMixedInAbstractField() → core::int;
+  abstract get extendedAbstractMixedInAbstractField() → core::int;
+}
+abstract class _ClassMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub get mixedInConcreteField() → core::int
+    return super.{self::Mixin::mixedInConcreteField};
+  mixin-super-stub get extendedConcreteMixedInConcreteField() → core::int
+    return super.{self::Mixin::extendedConcreteMixedInConcreteField};
+  mixin-super-stub get extendedAbstractMixedInConcreteField() → core::int
+    return super.{self::Mixin::extendedAbstractMixedInConcreteField};
+  abstract mixin-stub get extendedConcreteMixedInAbstractField() → core::int; -> self::Mixin::extendedConcreteMixedInAbstractField
+  abstract mixin-stub get mixedInAbstractField() → core::int; -> self::Mixin::mixedInAbstractField
+  abstract mixin-stub get extendedAbstractMixedInAbstractField() → core::int; -> self::Mixin::extendedAbstractMixedInAbstractField
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin = self::Super with self::Mixin {
+  synthetic constructor •() → self::NamedMixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub get mixedInConcreteField() → core::int
+    return super.{self::Mixin::mixedInConcreteField};
+  mixin-super-stub get extendedConcreteMixedInConcreteField() → core::int
+    return super.{self::Mixin::extendedConcreteMixedInConcreteField};
+  mixin-super-stub get extendedAbstractMixedInConcreteField() → core::int
+    return super.{self::Mixin::extendedAbstractMixedInConcreteField};
+  abstract mixin-stub get extendedConcreteMixedInAbstractField() → core::int; -> self::Mixin::extendedConcreteMixedInAbstractField
+  abstract mixin-stub get mixedInAbstractField() → core::int; -> self::Mixin::mixedInAbstractField
+  abstract mixin-stub get extendedAbstractMixedInAbstractField() → core::int; -> self::Mixin::extendedAbstractMixedInAbstractField
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..09d72f2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.weak.modular.expect
@@ -0,0 +1,165 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractGetter
+//  - Super.extendedAbstractMixedInAbstractGetter
+//  - Super.extendedAbstractMixedInConcreteGetter
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Super {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
+//   int get extendedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:16:11: Context: 'Super.extendedAbstractMixedInAbstractGetter' is defined here.
+//   int get extendedAbstractMixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:12:11: Context: 'Super.extendedAbstractMixedInConcreteGetter' is defined here.
+//   int get extendedAbstractMixedInConcreteGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractGetter
+//  - Mixin.extendedConcreteMixedInAbstractGetter
+//  - Mixin.mixedInAbstractGetter
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:30:11: Context: 'Mixin.extendedAbstractMixedInAbstractGetter' is defined here.
+//   int get extendedAbstractMixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:28:11: Context: 'Mixin.extendedConcreteMixedInAbstractGetter' is defined here.
+//   int get extendedConcreteMixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:22:11: Context: 'Mixin.mixedInAbstractGetter' is defined here.
+//   int get mixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractGetter
+//  - Mixin.mixedInAbstractGetter
+//  - Super.extendedAbstractGetter
+//  - Super.extendedAbstractMixedInAbstractGetter
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:30:11: Context: 'Mixin.extendedAbstractMixedInAbstractGetter' is defined here.
+//   int get extendedAbstractMixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:22:11: Context: 'Mixin.mixedInAbstractGetter' is defined here.
+//   int get mixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
+//   int get extendedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:16:11: Context: 'Super.extendedAbstractMixedInAbstractGetter' is defined here.
+//   int get extendedAbstractMixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractGetter
+//  - Mixin.mixedInAbstractGetter
+//  - Super.extendedAbstractGetter
+//  - Super.extendedAbstractMixedInAbstractGetter
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:30:11: Context: 'Mixin.extendedAbstractMixedInAbstractGetter' is defined here.
+//   int get extendedAbstractMixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:22:11: Context: 'Mixin.mixedInAbstractGetter' is defined here.
+//   int get mixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
+//   int get extendedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:16:11: Context: 'Super.extendedAbstractMixedInAbstractGetter' is defined here.
+//   int get extendedAbstractMixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  get extendedConcreteGetter() → core::int
+    return 0;
+  abstract get extendedAbstractGetter() → core::int;
+  get extendedConcreteMixedInConcreteGetter() → core::int
+    return 0;
+  abstract get extendedAbstractMixedInConcreteGetter() → core::int;
+  get extendedConcreteMixedInAbstractGetter() → core::int
+    return 0;
+  abstract get extendedAbstractMixedInAbstractGetter() → core::int;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  get mixedInConcreteGetter() → core::int
+    return 0;
+  abstract get mixedInAbstractGetter() → core::int;
+  get extendedConcreteMixedInConcreteGetter() → core::int
+    return 0;
+  get extendedAbstractMixedInConcreteGetter() → core::int
+    return 0;
+  abstract get extendedConcreteMixedInAbstractGetter() → core::int;
+  abstract get extendedAbstractMixedInAbstractGetter() → core::int;
+}
+abstract class _ClassMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub get mixedInConcreteGetter() → core::int
+    return super.{self::Mixin::mixedInConcreteGetter};
+  mixin-super-stub get extendedConcreteMixedInConcreteGetter() → core::int
+    return super.{self::Mixin::extendedConcreteMixedInConcreteGetter};
+  mixin-super-stub get extendedAbstractMixedInConcreteGetter() → core::int
+    return super.{self::Mixin::extendedAbstractMixedInConcreteGetter};
+  abstract mixin-stub get extendedConcreteMixedInAbstractGetter() → core::int; -> self::Mixin::extendedConcreteMixedInAbstractGetter
+  abstract mixin-stub get mixedInAbstractGetter() → core::int; -> self::Mixin::mixedInAbstractGetter
+  abstract mixin-stub get extendedAbstractMixedInAbstractGetter() → core::int; -> self::Mixin::extendedAbstractMixedInAbstractGetter
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin = self::Super with self::Mixin {
+  synthetic constructor •() → self::NamedMixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub get mixedInConcreteGetter() → core::int
+    return super.{self::Mixin::mixedInConcreteGetter};
+  mixin-super-stub get extendedConcreteMixedInConcreteGetter() → core::int
+    return super.{self::Mixin::extendedConcreteMixedInConcreteGetter};
+  mixin-super-stub get extendedAbstractMixedInConcreteGetter() → core::int
+    return super.{self::Mixin::extendedAbstractMixedInConcreteGetter};
+  abstract mixin-stub get extendedConcreteMixedInAbstractGetter() → core::int; -> self::Mixin::extendedConcreteMixedInAbstractGetter
+  abstract mixin-stub get mixedInAbstractGetter() → core::int; -> self::Mixin::mixedInAbstractGetter
+  abstract mixin-stub get extendedAbstractMixedInAbstractGetter() → core::int; -> self::Mixin::extendedAbstractMixedInAbstractGetter
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.weak.modular.expect
new file mode 100644
index 0000000..2c5b765
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.weak.modular.expect
@@ -0,0 +1,159 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractMethod
+//  - Super.extendedAbstractMixedInAbstractMethod
+//  - Super.extendedAbstractMixedInConcreteMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Super {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:16:8: Context: 'Super.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:12:8: Context: 'Super.extendedAbstractMixedInConcreteMethod' is defined here.
+//   void extendedAbstractMixedInConcreteMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractMethod
+//  - Mixin.extendedConcreteMixedInAbstractMethod
+//  - Mixin.mixedInAbstractMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:30:8: Context: 'Mixin.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:28:8: Context: 'Mixin.extendedConcreteMixedInAbstractMethod' is defined here.
+//   void extendedConcreteMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:22:8: Context: 'Mixin.mixedInAbstractMethod' is defined here.
+//   void mixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractMethod
+//  - Mixin.mixedInAbstractMethod
+//  - Super.extendedAbstractMethod
+//  - Super.extendedAbstractMixedInAbstractMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:30:8: Context: 'Mixin.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:22:8: Context: 'Mixin.mixedInAbstractMethod' is defined here.
+//   void mixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:16:8: Context: 'Super.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractMethod
+//  - Mixin.mixedInAbstractMethod
+//  - Super.extendedAbstractMethod
+//  - Super.extendedAbstractMixedInAbstractMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:30:8: Context: 'Mixin.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:22:8: Context: 'Mixin.mixedInAbstractMethod' is defined here.
+//   void mixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:16:8: Context: 'Super.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod() → void {}
+  abstract method extendedAbstractMethod() → void;
+  method extendedConcreteMixedInConcreteMethod() → void {}
+  abstract method extendedAbstractMixedInConcreteMethod() → void;
+  method extendedConcreteMixedInAbstractMethod() → void {}
+  abstract method extendedAbstractMixedInAbstractMethod() → void;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method mixedInConcreteMethod() → void {}
+  abstract method mixedInAbstractMethod() → void;
+  method extendedConcreteMixedInConcreteMethod() → void {}
+  method extendedAbstractMixedInConcreteMethod() → void {}
+  abstract method extendedConcreteMixedInAbstractMethod() → void;
+  abstract method extendedAbstractMixedInAbstractMethod() → void;
+}
+abstract class _ClassMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInConcreteMethod() → void
+    return super.{self::Mixin::mixedInConcreteMethod}();
+  mixin-super-stub method extendedConcreteMixedInConcreteMethod() → void
+    return super.{self::Mixin::extendedConcreteMixedInConcreteMethod}();
+  mixin-super-stub method extendedAbstractMixedInConcreteMethod() → void
+    return super.{self::Mixin::extendedAbstractMixedInConcreteMethod}();
+  abstract mixin-stub method extendedConcreteMixedInAbstractMethod() → void; -> self::Mixin::extendedConcreteMixedInAbstractMethod
+  abstract mixin-stub method mixedInAbstractMethod() → void; -> self::Mixin::mixedInAbstractMethod
+  abstract mixin-stub method extendedAbstractMixedInAbstractMethod() → void; -> self::Mixin::extendedAbstractMixedInAbstractMethod
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin = self::Super with self::Mixin {
+  synthetic constructor •() → self::NamedMixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInConcreteMethod() → void
+    return super.{self::Mixin::mixedInConcreteMethod}();
+  mixin-super-stub method extendedConcreteMixedInConcreteMethod() → void
+    return super.{self::Mixin::extendedConcreteMixedInConcreteMethod}();
+  mixin-super-stub method extendedAbstractMixedInConcreteMethod() → void
+    return super.{self::Mixin::extendedAbstractMixedInConcreteMethod}();
+  abstract mixin-stub method extendedConcreteMixedInAbstractMethod() → void; -> self::Mixin::extendedConcreteMixedInAbstractMethod
+  abstract mixin-stub method mixedInAbstractMethod() → void; -> self::Mixin::mixedInAbstractMethod
+  abstract mixin-stub method extendedAbstractMixedInAbstractMethod() → void; -> self::Mixin::extendedAbstractMixedInAbstractMethod
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart.weak.modular.expect
new file mode 100644
index 0000000..77883ed
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart.weak.modular.expect
@@ -0,0 +1,249 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractMethod
+//  - Super.extendedAbstractMixedInAbstractMethod
+//  - Super.extendedAbstractMixedInConcreteMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Super {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:16:8: Context: 'Super.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:12:8: Context: 'Super.extendedAbstractMixedInConcreteMethod' is defined here.
+//   void extendedAbstractMixedInConcreteMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractMethod
+//  - Mixin.extendedConcreteMixedInAbstractMethod
+//  - Mixin.mixedInAbstractMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:30:8: Context: 'Mixin.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:28:8: Context: 'Mixin.extendedConcreteMixedInAbstractMethod' is defined here.
+//   void extendedConcreteMixedInAbstractMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:22:8: Context: 'Mixin.mixedInAbstractMethod' is defined here.
+//   void mixedInAbstractMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractMethod
+//  - Mixin.mixedInAbstractMethod
+//  - Super.extendedAbstractMethod
+//  - Super.extendedAbstractMixedInAbstractMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:30:8: Context: 'Mixin.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:22:8: Context: 'Mixin.mixedInAbstractMethod' is defined here.
+//   void mixedInAbstractMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:16:8: Context: 'Super.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractMethod
+//  - Mixin.mixedInAbstractMethod
+//  - Super.extendedAbstractMethod
+//  - Super.extendedAbstractMixedInAbstractMethod
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:30:8: Context: 'Mixin.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:22:8: Context: 'Mixin.mixedInAbstractMethod' is defined here.
+//   void mixedInAbstractMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:16:8: Context: 'Super.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:33:7: Error: Applying the mixin 'Mixin' to 'Super' introduces an erroneous override of 'extendedConcreteMixedInConcreteMethod'.
+// class ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:24:8: Context: The method 'Mixin.extendedConcreteMixedInConcreteMethod' has more required arguments than those of overridden method 'Super.extendedConcreteMixedInConcreteMethod'.
+//   void extendedConcreteMixedInConcreteMethod(int i) {}
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:10:8: Context: This is the overridden method ('extendedConcreteMixedInConcreteMethod').
+//   void extendedConcreteMixedInConcreteMethod() {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:33:7: Error: Applying the mixin 'Mixin' to 'Super' introduces an erroneous override of 'extendedAbstractMixedInConcreteMethod'.
+// class ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:26:8: Context: The method 'Mixin.extendedAbstractMixedInConcreteMethod' has more required arguments than those of overridden method 'Super.extendedAbstractMixedInConcreteMethod'.
+//   void extendedAbstractMixedInConcreteMethod(int i) {}
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:12:8: Context: This is the overridden method ('extendedAbstractMixedInConcreteMethod').
+//   void extendedAbstractMixedInConcreteMethod();
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:33:7: Error: Applying the mixin 'Mixin' to 'Super' introduces an erroneous override of 'extendedConcreteMixedInAbstractMethod'.
+// class ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:28:8: Context: The method 'Mixin.extendedConcreteMixedInAbstractMethod' has more required arguments than those of overridden method 'Super.extendedConcreteMixedInAbstractMethod'.
+//   void extendedConcreteMixedInAbstractMethod(int i);
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:14:8: Context: This is the overridden method ('extendedConcreteMixedInAbstractMethod').
+//   void extendedConcreteMixedInAbstractMethod() {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:33:7: Error: Applying the mixin 'Mixin' to 'Super' introduces an erroneous override of 'extendedAbstractMixedInAbstractMethod'.
+// class ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:30:8: Context: The method 'Mixin.extendedAbstractMixedInAbstractMethod' has more required arguments than those of overridden method 'Super.extendedAbstractMixedInAbstractMethod'.
+//   void extendedAbstractMixedInAbstractMethod(int i);
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:16:8: Context: This is the overridden method ('extendedAbstractMixedInAbstractMethod').
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:33:7: Error: The implementation of 'extendedConcreteMixedInAbstractMethod' in the non-abstract class 'ClassMixin' does not conform to its interface.
+// class ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:14:8: Context: The method 'Super.extendedConcreteMixedInAbstractMethod' has fewer positional arguments than those of overridden method 'Super with Mixin.extendedConcreteMixedInAbstractMethod'.
+//   void extendedConcreteMixedInAbstractMethod() {}
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:33:7: Context: This is the overridden method ('extendedConcreteMixedInAbstractMethod').
+// class ClassMixin extends Super with Mixin {}
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:35:7: Error: The mixin application class 'NamedMixin' introduces an erroneous override of 'extendedConcreteMixedInConcreteMethod'.
+// class NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:24:8: Context: The method 'Mixin.extendedConcreteMixedInConcreteMethod' has more required arguments than those of overridden method 'Super.extendedConcreteMixedInConcreteMethod'.
+//   void extendedConcreteMixedInConcreteMethod(int i) {}
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:10:8: Context: This is the overridden method ('extendedConcreteMixedInConcreteMethod').
+//   void extendedConcreteMixedInConcreteMethod() {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:35:7: Error: The mixin application class 'NamedMixin' introduces an erroneous override of 'extendedAbstractMixedInConcreteMethod'.
+// class NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:26:8: Context: The method 'Mixin.extendedAbstractMixedInConcreteMethod' has more required arguments than those of overridden method 'Super.extendedAbstractMixedInConcreteMethod'.
+//   void extendedAbstractMixedInConcreteMethod(int i) {}
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:12:8: Context: This is the overridden method ('extendedAbstractMixedInConcreteMethod').
+//   void extendedAbstractMixedInConcreteMethod();
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:35:7: Error: The mixin application class 'NamedMixin' introduces an erroneous override of 'extendedConcreteMixedInAbstractMethod'.
+// class NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:28:8: Context: The method 'Mixin.extendedConcreteMixedInAbstractMethod' has more required arguments than those of overridden method 'Super.extendedConcreteMixedInAbstractMethod'.
+//   void extendedConcreteMixedInAbstractMethod(int i);
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:14:8: Context: This is the overridden method ('extendedConcreteMixedInAbstractMethod').
+//   void extendedConcreteMixedInAbstractMethod() {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:35:7: Error: The mixin application class 'NamedMixin' introduces an erroneous override of 'extendedAbstractMixedInAbstractMethod'.
+// class NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:30:8: Context: The method 'Mixin.extendedAbstractMixedInAbstractMethod' has more required arguments than those of overridden method 'Super.extendedAbstractMixedInAbstractMethod'.
+//   void extendedAbstractMixedInAbstractMethod(int i);
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:16:8: Context: This is the overridden method ('extendedAbstractMixedInAbstractMethod').
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod() → void {}
+  abstract method extendedAbstractMethod() → void;
+  method extendedConcreteMixedInConcreteMethod() → void {}
+  abstract method extendedAbstractMixedInConcreteMethod() → void;
+  method extendedConcreteMixedInAbstractMethod() → void {}
+  abstract method extendedAbstractMixedInAbstractMethod() → void;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method mixedInConcreteMethod(core::int i) → void {}
+  abstract method mixedInAbstractMethod(core::int i) → void;
+  method extendedConcreteMixedInConcreteMethod(core::int i) → void {}
+  method extendedAbstractMixedInConcreteMethod(core::int i) → void {}
+  abstract method extendedConcreteMixedInAbstractMethod(core::int i) → void;
+  abstract method extendedAbstractMixedInAbstractMethod(core::int i) → void;
+}
+abstract class _ClassMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInConcreteMethod(core::int i) → void
+    return super.{self::Mixin::mixedInConcreteMethod}(i);
+  mixin-super-stub method extendedConcreteMixedInConcreteMethod(core::int i) → void
+    return super.{self::Mixin::extendedConcreteMixedInConcreteMethod}(i);
+  mixin-super-stub method extendedAbstractMixedInConcreteMethod(core::int i) → void
+    return super.{self::Mixin::extendedAbstractMixedInConcreteMethod}(i);
+  abstract mixin-stub method extendedConcreteMixedInAbstractMethod(core::int i) → void; -> self::Mixin::extendedConcreteMixedInAbstractMethod
+  abstract mixin-stub method mixedInAbstractMethod(core::int i) → void; -> self::Mixin::mixedInAbstractMethod
+  abstract mixin-stub method extendedAbstractMixedInAbstractMethod(core::int i) → void; -> self::Mixin::extendedAbstractMixedInAbstractMethod
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin = self::Super with self::Mixin {
+  synthetic constructor •() → self::NamedMixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInConcreteMethod(core::int i) → void
+    return super.{self::Mixin::mixedInConcreteMethod}(i);
+  mixin-super-stub method extendedConcreteMixedInConcreteMethod(core::int i) → void
+    return super.{self::Mixin::extendedConcreteMixedInConcreteMethod}(i);
+  mixin-super-stub method extendedAbstractMixedInConcreteMethod(core::int i) → void
+    return super.{self::Mixin::extendedAbstractMixedInConcreteMethod}(i);
+  abstract mixin-stub method extendedConcreteMixedInAbstractMethod(core::int i) → void; -> self::Mixin::extendedConcreteMixedInAbstractMethod
+  abstract mixin-stub method mixedInAbstractMethod(core::int i) → void; -> self::Mixin::mixedInAbstractMethod
+  abstract mixin-stub method extendedAbstractMixedInAbstractMethod(core::int i) → void; -> self::Mixin::extendedAbstractMixedInAbstractMethod
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..c9a2f79
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.weak.modular.expect
@@ -0,0 +1,159 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractMixedInAbstractSetter=
+//  - Super.extendedAbstractMixedInConcreteSetter=
+//  - Super.extendedAbstractSetter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Super {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:16:12: Context: 'Super.extendedAbstractMixedInAbstractSetter=' is defined here.
+//   void set extendedAbstractMixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:12:12: Context: 'Super.extendedAbstractMixedInConcreteSetter=' is defined here.
+//   void set extendedAbstractMixedInConcreteSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:8:12: Context: 'Super.extendedAbstractSetter=' is defined here.
+//   void set extendedAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractSetter=
+//  - Mixin.extendedConcreteMixedInAbstractSetter=
+//  - Mixin.mixedInAbstractSetter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:30:12: Context: 'Mixin.extendedAbstractMixedInAbstractSetter=' is defined here.
+//   void set extendedAbstractMixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:28:12: Context: 'Mixin.extendedConcreteMixedInAbstractSetter=' is defined here.
+//   void set extendedConcreteMixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:22:12: Context: 'Mixin.mixedInAbstractSetter=' is defined here.
+//   void set mixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractSetter=
+//  - Mixin.mixedInAbstractSetter=
+//  - Super.extendedAbstractMixedInAbstractSetter=
+//  - Super.extendedAbstractSetter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:30:12: Context: 'Mixin.extendedAbstractMixedInAbstractSetter=' is defined here.
+//   void set extendedAbstractMixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:22:12: Context: 'Mixin.mixedInAbstractSetter=' is defined here.
+//   void set mixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:16:12: Context: 'Super.extendedAbstractMixedInAbstractSetter=' is defined here.
+//   void set extendedAbstractMixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:8:12: Context: 'Super.extendedAbstractSetter=' is defined here.
+//   void set extendedAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractSetter=
+//  - Mixin.mixedInAbstractSetter=
+//  - Super.extendedAbstractMixedInAbstractSetter=
+//  - Super.extendedAbstractSetter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:30:12: Context: 'Mixin.extendedAbstractMixedInAbstractSetter=' is defined here.
+//   void set extendedAbstractMixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:22:12: Context: 'Mixin.mixedInAbstractSetter=' is defined here.
+//   void set mixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:16:12: Context: 'Super.extendedAbstractMixedInAbstractSetter=' is defined here.
+//   void set extendedAbstractMixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:8:12: Context: 'Super.extendedAbstractSetter=' is defined here.
+//   void set extendedAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  set extendedConcreteSetter(core::int i) → void {}
+  abstract set extendedAbstractSetter(core::int i) → void;
+  set extendedConcreteMixedInConcreteSetter(core::int i) → void {}
+  abstract set extendedAbstractMixedInConcreteSetter(core::int i) → void;
+  set extendedConcreteMixedInAbstractSetter(core::int i) → void {}
+  abstract set extendedAbstractMixedInAbstractSetter(core::int i) → void;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  set mixedInConcreteSetter(core::int i) → void {}
+  abstract set mixedInAbstractSetter(core::int i) → void;
+  set extendedConcreteMixedInConcreteSetter(core::int i) → void {}
+  set extendedAbstractMixedInConcreteSetter(core::int i) → void {}
+  abstract set extendedConcreteMixedInAbstractSetter(core::int i) → void;
+  abstract set extendedAbstractMixedInAbstractSetter(core::int i) → void;
+}
+abstract class _ClassMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub set mixedInConcreteSetter(core::int i) → void
+    return super.{self::Mixin::mixedInConcreteSetter} = i;
+  mixin-super-stub set extendedConcreteMixedInConcreteSetter(core::int i) → void
+    return super.{self::Mixin::extendedConcreteMixedInConcreteSetter} = i;
+  mixin-super-stub set extendedAbstractMixedInConcreteSetter(core::int i) → void
+    return super.{self::Mixin::extendedAbstractMixedInConcreteSetter} = i;
+  abstract mixin-stub set extendedConcreteMixedInAbstractSetter(core::int i) → void; -> self::Mixin::extendedConcreteMixedInAbstractSetter
+  abstract mixin-stub set mixedInAbstractSetter(core::int i) → void; -> self::Mixin::mixedInAbstractSetter
+  abstract mixin-stub set extendedAbstractMixedInAbstractSetter(core::int i) → void; -> self::Mixin::extendedAbstractMixedInAbstractSetter
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin = self::Super with self::Mixin {
+  synthetic constructor •() → self::NamedMixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub set mixedInConcreteSetter(core::int i) → void
+    return super.{self::Mixin::mixedInConcreteSetter} = i;
+  mixin-super-stub set extendedConcreteMixedInConcreteSetter(core::int i) → void
+    return super.{self::Mixin::extendedConcreteMixedInConcreteSetter} = i;
+  mixin-super-stub set extendedAbstractMixedInConcreteSetter(core::int i) → void
+    return super.{self::Mixin::extendedAbstractMixedInConcreteSetter} = i;
+  abstract mixin-stub set extendedConcreteMixedInAbstractSetter(core::int i) → void; -> self::Mixin::extendedConcreteMixedInAbstractSetter
+  abstract mixin-stub set mixedInAbstractSetter(core::int i) → void; -> self::Mixin::mixedInAbstractSetter
+  abstract mixin-stub set extendedAbstractMixedInAbstractSetter(core::int i) → void; -> self::Mixin::extendedAbstractMixedInAbstractSetter
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.modular.expect
new file mode 100644
index 0000000..d4d8f90
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mixin_from_dill/main.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "opt_in_lib1.dart" as opt;
+import "opt_out_lib.dart" as opt2;
+import "opt_in_lib2.dart" as opt3;
+
+import "org-dartlang-testcase:///opt_in_lib1.dart";
+import "org-dartlang-testcase:///opt_in_lib2.dart";
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super*
+    : super core::Object::•()
+    ;
+  get getter() → opt::B*
+    return new opt::B::•();
+  set setter(opt::A* a) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Class1&Super&Mixin1 = self::Super with opt2::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1&Super&Mixin1*
+    : super self::Super::•()
+    ;
+}
+class Class1 extends self::_Class1&Super&Mixin1 {
+  synthetic constructor •() → self::Class1*
+    : super self::_Class1&Super&Mixin1::•()
+    ;
+}
+abstract class _Class2&Base&Mixin2 = opt::Base with opt3::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2&Base&Mixin2*
+    : super opt::Base::•()
+    ;
+  abstract member-signature get _privateGetter() → opt::B*; -> opt::Base::_privateGetter
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature set _privateSetter(opt::A* a) → void; -> opt::Base::_privateSetter
+}
+class Class2 extends self::_Class2&Base&Mixin2 {
+  synthetic constructor •() → self::Class2*
+    : super self::_Class2&Base&Mixin2::•()
+    ;
+}
+static method main() → dynamic {
+  self::Class1* c = new self::Class1::•();
+  c.{self::Super::getter}{opt::B*}.{opt::B::property}{core::int*};
+  c.{self::Super::setter} = new opt::B::•();
+  opt::testInterface2(new opt3::Mixin2::•());
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.modular.expect
new file mode 100644
index 0000000..524ceff
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.modular.expect
@@ -0,0 +1,370 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:17:7: Error: The non-abstract class 'FromSuperAbstract' is missing implementations for these members:
+//  - Interface.field
+//  - Interface.finalField
+//  - Interface.getter
+//  - Interface.method
+//  - Interface.setter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class FromSuperAbstract extends SuperAbstract implements Interface {}
+//       ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Context: 'Interface.field' is defined here.
+//   int field;
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Context: 'Interface.finalField' is defined here.
+//   final int finalField;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:7:11: Context: 'Interface.getter' is defined here.
+//   int get getter;
+//           ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:6:8: Context: 'Interface.method' is defined here.
+//   void method();
+//        ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:8:12: Context: 'Interface.setter=' is defined here.
+//   void set setter(int value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:35:7: Error: The non-abstract class 'FromMixinAbstract' is missing implementations for these members:
+//  - Interface.field
+//  - Interface.finalField
+//  - Interface.getter
+//  - Interface.method
+//  - Interface.setter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class FromMixinAbstract extends MixinAbstract implements Interface {}
+//       ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Context: 'Interface.field' is defined here.
+//   int field;
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Context: 'Interface.finalField' is defined here.
+//   final int finalField;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:7:11: Context: 'Interface.getter' is defined here.
+//   int get getter;
+//           ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:6:8: Context: 'Interface.method' is defined here.
+//   void method();
+//        ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:8:12: Context: 'Interface.setter=' is defined here.
+//   void set setter(int value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:54:7: Error: The non-abstract class 'FromInterfaceAbstract' is missing implementations for these members:
+//  - Interface.field
+//  - Interface.finalField
+//  - Interface.getter
+//  - Interface.method
+//  - Interface.setter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class FromInterfaceAbstract implements InterfaceAbstract, Interface {}
+//       ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Context: 'Interface.field' is defined here.
+//   int field;
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Context: 'Interface.finalField' is defined here.
+//   final int finalField;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:7:11: Context: 'Interface.getter' is defined here.
+//   int get getter;
+//           ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:6:8: Context: 'Interface.method' is defined here.
+//   void method();
+//        ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:8:12: Context: 'Interface.setter=' is defined here.
+//   void set setter(int value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:63:7: Error: The non-abstract class 'FromInterfaceConcrete' is missing implementations for these members:
+//  - Interface.field
+//  - Interface.finalField
+//  - Interface.getter
+//  - Interface.method
+//  - Interface.setter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class FromInterfaceConcrete implements InterfaceConcrete, Interface {}
+//       ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Context: 'Interface.field' is defined here.
+//   int field;
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Context: 'Interface.finalField' is defined here.
+//   final int finalField;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:7:11: Context: 'Interface.getter' is defined here.
+//   int get getter;
+//           ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:6:8: Context: 'Interface.method' is defined here.
+//   void method();
+//        ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:8:12: Context: 'Interface.setter=' is defined here.
+//   void set setter(int value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:65:7: Error: The non-abstract class 'DeclaredAbstract' is missing implementations for these members:
+//  - Interface.field
+//  - Interface.finalField
+//  - Interface.getter
+//  - Interface.method
+//  - Interface.setter=
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class DeclaredAbstract implements Interface {
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Context: 'Interface.field' is defined here.
+//   int field;
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Context: 'Interface.finalField' is defined here.
+//   final int finalField;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:7:11: Context: 'Interface.getter' is defined here.
+//   int get getter;
+//           ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:6:8: Context: 'Interface.method' is defined here.
+//   void method();
+//        ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:8:12: Context: 'Interface.setter=' is defined here.
+//   void set setter(int value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
+//   int field;
+//       ^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Error: Final field 'finalField' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int finalField;
+//             ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  field core::int field = null;
+  final field core::int finalField = null;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract method method() → void;
+  abstract get getter() → core::int;
+  abstract set setter(core::int value) → void;
+}
+class SuperAbstract extends core::Object {
+  synthetic constructor •() → self::SuperAbstract
+    : super core::Object::•()
+    ;
+  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
+}
+class FromSuperAbstract extends self::SuperAbstract implements self::Interface {
+  synthetic constructor •() → self::FromSuperAbstract
+    : super self::SuperAbstract::•()
+    ;
+}
+class SuperConcrete extends core::Object {
+  synthetic constructor •() → self::SuperConcrete
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return null;
+  }
+}
+class FromSuperConcrete extends self::SuperConcrete implements self::Interface {
+  synthetic constructor •() → self::FromSuperConcrete
+    : super self::SuperConcrete::•()
+    ;
+  no-such-method-forwarder get getter() → core::int
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder get field() → core::int
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder method method() → void
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder get finalField() → core::int
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder set setter(core::int value) → void
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder set field(core::int value) → void
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+}
+class FromSuperConcreteAbstract extends self::SuperConcrete implements self::SuperAbstract, self::Interface {
+  synthetic constructor •() → self::FromSuperConcreteAbstract
+    : super self::SuperConcrete::•()
+    ;
+  no-such-method-forwarder get getter() → core::int
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder get field() → core::int
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder method method() → void
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder get finalField() → core::int
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder set setter(core::int value) → void
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder set field(core::int value) → void
+    return this.{self::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+}
+class MixinAbstract extends core::Object {
+  synthetic constructor •() → self::MixinAbstract
+    : super core::Object::•()
+    ;
+  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
+}
+class FromMixinAbstract extends self::MixinAbstract implements self::Interface {
+  synthetic constructor •() → self::FromMixinAbstract
+    : super self::MixinAbstract::•()
+    ;
+}
+class MixinConcrete extends core::Object {
+  synthetic constructor •() → self::MixinConcrete
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return null;
+  }
+}
+abstract class _FromMixinConcrete&Object&MixinConcrete = core::Object with self::MixinConcrete /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_FromMixinConcrete&Object&MixinConcrete
+    : super core::Object::•()
+    ;
+  mixin-super-stub method noSuchMethod(core::Invocation invocation) → dynamic
+    return super.{self::MixinConcrete::noSuchMethod}(invocation);
+}
+class FromMixinConcrete extends self::_FromMixinConcrete&Object&MixinConcrete implements self::Interface {
+  synthetic constructor •() → self::FromMixinConcrete
+    : super self::_FromMixinConcrete&Object&MixinConcrete::•()
+    ;
+  no-such-method-forwarder get getter() → core::int
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder get field() → core::int
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder method method() → void
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder get finalField() → core::int
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder set setter(core::int value) → void
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder set field(core::int value) → void
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+}
+abstract class _FromMixinConcreteAbstract&Object&MixinConcrete = core::Object with self::MixinConcrete /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_FromMixinConcreteAbstract&Object&MixinConcrete
+    : super core::Object::•()
+    ;
+  mixin-super-stub method noSuchMethod(core::Invocation invocation) → dynamic
+    return super.{self::MixinConcrete::noSuchMethod}(invocation);
+}
+abstract class _FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract = self::_FromMixinConcreteAbstract&Object&MixinConcrete with self::MixinAbstract /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract
+    : super self::_FromMixinConcreteAbstract&Object&MixinConcrete::•()
+    ;
+  abstract mixin-stub method noSuchMethod(core::Invocation invocation) → dynamic; -> self::MixinAbstract::noSuchMethod
+}
+class FromMixinConcreteAbstract extends self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract implements self::Interface {
+  synthetic constructor •() → self::FromMixinConcreteAbstract
+    : super self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::•()
+    ;
+  no-such-method-forwarder get getter() → core::int
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder get field() → core::int
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder method method() → void
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder get finalField() → core::int
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder set setter(core::int value) → void
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder set field(core::int value) → void
+    return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+}
+class InterfaceAbstract extends core::Object {
+  synthetic constructor •() → self::InterfaceAbstract
+    : super core::Object::•()
+    ;
+  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
+}
+class FromInterfaceAbstract extends core::Object implements self::InterfaceAbstract, self::Interface {
+  synthetic constructor •() → self::FromInterfaceAbstract
+    : super core::Object::•()
+    ;
+}
+class InterfaceConcrete extends core::Object {
+  synthetic constructor •() → self::InterfaceConcrete
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return null;
+  }
+}
+class FromInterfaceConcrete extends core::Object implements self::InterfaceConcrete, self::Interface {
+  synthetic constructor •() → self::FromInterfaceConcrete
+    : super core::Object::•()
+    ;
+}
+class DeclaredAbstract extends core::Object implements self::Interface {
+  synthetic constructor •() → self::DeclaredAbstract
+    : super core::Object::•()
+    ;
+  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
+}
+class DeclaredConcrete extends core::Object implements self::Interface {
+  synthetic constructor •() → self::DeclaredConcrete
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return null;
+  }
+  no-such-method-forwarder get getter() → core::int
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder get field() → core::int
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder method method() → void
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder get finalField() → core::int
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder set setter(core::int value) → void
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder set field(core::int value) → void
+    return this.{self::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = core::_Override {}
+  #C2 = #getter
+  #C3 = <core::Type*>[]
+  #C4 = <dynamic>[]
+  #C5 = <core::Symbol*, dynamic>{)
+  #C6 = #field
+  #C7 = #method
+  #C8 = #finalField
+  #C9 = #setter=
+  #C10 = #field=
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..2bfc463
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart.weak.modular.expect
new file mode 100644
index 0000000..773c139
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:21:28: Error: The parameter 'i' of the method 'Class.extendedMethod2' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'Super.extendedMethod2'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void extendedMethod2(int i);
+//                            ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:10:8: Context: This is the overridden method ('extendedMethod2').
+//   void extendedMethod2(num i) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:27:30: Error: The parameter 'n' of the method 'Class.overriddenMethod2' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'Super.overriddenMethod2'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void overriddenMethod2(int n) {}
+//                              ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:13:8: Context: This is the overridden method ('overriddenMethod2').
+//   void overriddenMethod2(num n) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:16:7: Error: The implementation of 'extendedMethod1' in the non-abstract class 'Class' does not conform to its interface.
+// class Class extends Super {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:7:28: Context: The parameter 'i' of the method 'Super.extendedMethod1' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'Class.extendedMethod1'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void extendedMethod1(int i) {}
+//                            ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:18:8: Context: This is the overridden method ('extendedMethod1').
+//   void extendedMethod1(num n);
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedMethod1(core::int i) → void {}
+  method extendedMethod2(core::num i) → void {}
+  method overriddenMethod1(core::int i) → void {}
+  method overriddenMethod2(core::num n) → void {}
+}
+class Class extends self::Super {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  abstract method extendedMethod1(core::num n) → void;
+  abstract method extendedMethod2(core::int i) → void;
+  method overriddenMethod1(core::num n) → void {}
+  method overriddenMethod2(core::int n) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.modular.expect
new file mode 100644
index 0000000..ffdea68
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  static factory redirect() → self::Class
+    return new self::Class::•();
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::Class::redirect
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.weak.modular.expect
new file mode 100644
index 0000000..91d4ae2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.weak.modular.expect
@@ -0,0 +1,158 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:58:15: Error: Can't declare a member that conflicts with an inherited one.
+//   static void extendedInstanceDeclaredStaticMethod() {}
+//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:7:8: Context: This is the inherited member.
+//   void extendedInstanceDeclaredStaticMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:67:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get extendedInstanceSetterDeclaredStaticGetter => 0;
+//                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:16:12: Context: This is the inherited member.
+//   void set extendedInstanceSetterDeclaredStaticGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:70:15: Error: Can't declare a member that conflicts with an inherited one.
+//   static void mixedInInstanceDeclaredStaticMethod() {}
+//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:27:8: Context: This is the inherited member.
+//   void mixedInInstanceDeclaredStaticMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:73:15: Error: Can't declare a member that conflicts with an inherited one.
+//   static void implementedInstanceDeclaredStaticMethod() {}
+//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:38:8: Context: This is the inherited member.
+//   void implementedInstanceDeclaredStaticMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:82:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get implementedInstanceSetterDeclaredStaticGetter => 0;
+//                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:47:12: Context: This is the inherited member.
+//   void set implementedInstanceSetterDeclaredStaticGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:61:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set extendedInstanceDeclaredStaticSetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:10:12: Context: This is the inherited member.
+//   void set extendedInstanceDeclaredStaticSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:64:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set extendedInstanceGetterDeclaredStaticSetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:13:11: Context: This is the inherited member.
+//   int get extendedInstanceGetterDeclaredStaticSetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:76:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set implementedInstanceDeclaredStaticSetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:41:12: Context: This is the inherited member.
+//   void set implementedInstanceDeclaredStaticSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:79:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set implementedInstanceGetterDeclaredStaticSetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:44:11: Context: This is the inherited member.
+//   int get implementedInstanceGetterDeclaredStaticSetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  static method extendedStaticDeclaredInstanceMethod() → void {}
+  method extendedInstanceDeclaredStaticMethod() → void {}
+  static set extendedStaticDeclaredInstanceSetter(core::int value) → void {}
+  set extendedInstanceDeclaredStaticSetter(core::int value) → void {}
+  static get extendedStaticGetterDeclaredInstanceSetter() → core::int
+    return 0;
+  get extendedInstanceGetterDeclaredStaticSetter() → core::int
+    return 0;
+  static set extendedStaticSetterDeclaredInstanceGetter(core::int value) → void {}
+  set extendedInstanceSetterDeclaredStaticGetter(core::int value) → void {}
+  static method extendedStaticMixedInInstanceMethod() → void {}
+  method extendedInstanceMixedInStaticMethod() → void {}
+  static method extendedStaticImplementedInstanceMethod() → void {}
+  method extendedInstanceImplementedStaticMethod() → void {}
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  static method mixedInStaticDeclaredInstanceMethod() → void {}
+  method mixedInInstanceDeclaredStaticMethod() → void {}
+  static method mixedInStaticImplementedInstanceMethod() → void {}
+  method mixedInInstanceImplementedStaticMethod() → void {}
+  method extendedStaticMixedInInstanceMethod() → void {}
+  static method extendedInstanceMixedInStaticMethod() → void {}
+}
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  static method implementedStaticDeclaredInstanceMethod() → void {}
+  method implementedInstanceDeclaredStaticMethod() → void {}
+  static set implementedStaticDeclaredInstanceSetter(core::int value) → void {}
+  set implementedInstanceDeclaredStaticSetter(core::int value) → void {}
+  static get implementedStaticGetterDeclaredInstanceSetter() → core::int
+    return 0;
+  get implementedInstanceGetterDeclaredStaticSetter() → core::int
+    return 0;
+  static set implementedStaticSetterDeclaredInstanceGetter(core::int value) → void {}
+  set implementedInstanceSetterDeclaredStaticGetter(core::int value) → void {}
+  method extendedStaticImplementedInstanceMethod() → void {}
+  static method extendedInstanceImplementedStaticMethod() → void {}
+  method mixedInStaticImplementedInstanceMethod() → void {}
+  static method mixedInInstanceImplementedStaticMethod() → void {}
+}
+abstract class _Class&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInInstanceDeclaredStaticMethod() → void
+    return super.{self::Mixin::mixedInInstanceDeclaredStaticMethod}();
+  mixin-super-stub method mixedInInstanceImplementedStaticMethod() → void
+    return super.{self::Mixin::mixedInInstanceImplementedStaticMethod}();
+  mixin-super-stub method extendedStaticMixedInInstanceMethod() → void
+    return super.{self::Mixin::extendedStaticMixedInInstanceMethod}();
+}
+abstract class Class extends self::_Class&Super&Mixin implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super self::_Class&Super&Mixin::•()
+    ;
+  method extendedStaticDeclaredInstanceMethod() → void {}
+  static method extendedInstanceDeclaredStaticMethod() → void {}
+  set extendedStaticDeclaredInstanceSetter(core::int value) → void {}
+  static set extendedInstanceDeclaredStaticSetter(core::int value) → void {}
+  set extendedStaticGetterDeclaredInstanceSetter(core::int value) → void {}
+  static set extendedInstanceGetterDeclaredStaticSetter(core::int value) → void {}
+  get extendedStaticSetterDeclaredInstanceGetter() → core::int
+    return 0;
+  static get extendedInstanceSetterDeclaredStaticGetter() → core::int
+    return 0;
+  method mixedInStaticDeclaredInstanceMethod() → void {}
+  static method mixedInInstanceDeclaredStaticMethod() → void {}
+  method implementedStaticDeclaredInstanceMethod() → void {}
+  static method implementedInstanceDeclaredStaticMethod() → void {}
+  set implementedStaticDeclaredInstanceSetter(core::int value) → void {}
+  static set implementedInstanceDeclaredStaticSetter(core::int value) → void {}
+  set implementedStaticGetterDeclaredInstanceSetter(core::int value) → void {}
+  static set implementedInstanceGetterDeclaredStaticSetter(core::int value) → void {}
+  get implementedStaticSetterDeclaredInstanceGetter() → core::int
+    return 0;
+  static get implementedInstanceSetterDeclaredStaticGetter() → core::int
+    return 0;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in.dart.weak.modular.expect
new file mode 100644
index 0000000..6cfd88a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in.dart.weak.modular.expect
@@ -0,0 +1,248 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "infer_constraints_from_opt_in_lib.dart" as inf;
+import "dart:collection" as col;
+
+import "org-dartlang-testcase:///infer_constraints_from_opt_in_lib.dart";
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method baz(inf::B* b) → dynamic {
+    b.{inf::B::foo}(b.{inf::B::bar}<core::List<core::int*>*>(){() →* core::List<core::int*>*}){(core::List<core::int*>*) →* dynamic};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::List<dynamic>* local0 = <dynamic>[];
+  core::List<inf::C<dynamic>*>* local1a = <inf::C<dynamic>*>[inf::field1];
+  core::List<inf::C<dynamic>*>* local1b = <inf::C<dynamic>*>[inf::field2];
+  core::List<inf::C<core::int*>*>* local1c = <inf::C<core::int*>*>[inf::field3];
+  core::List<inf::C<core::int*>*>* local1d = <inf::C<core::int*>*>[inf::field4];
+  core::List<inf::C<core::int*>*>* local1e = <inf::C<core::int*>*>[inf::field5];
+  core::List<inf::C<core::int*>*>* local1f = <inf::C<core::int*>*>[inf::field6];
+  core::List<core::int*>* local1g = <core::int*>[inf::field7];
+  core::List<core::int*>* local1h = <core::int*>[inf::field8];
+  core::List<Null>* local1i = <Null>[null];
+  core::Set<inf::C<dynamic>*>* local2a = block {
+    final core::Set<inf::C<dynamic>*>* #t1 = col::LinkedHashSet::•<inf::C<dynamic>*>();
+    #t1.{core::Set::add}{Invariant}(inf::field1){(inf::C<dynamic>*) →* core::bool*};
+    #t1.{core::Set::add}{Invariant}(null){(inf::C<dynamic>*) →* core::bool*};
+  } =>#t1;
+  core::Set<inf::C<dynamic>*>* local2b = block {
+    final core::Set<inf::C<dynamic>*>* #t2 = col::LinkedHashSet::•<inf::C<dynamic>*>();
+    #t2.{core::Set::add}{Invariant}(inf::field2){(inf::C<dynamic>*) →* core::bool*};
+    #t2.{core::Set::add}{Invariant}(null){(inf::C<dynamic>*) →* core::bool*};
+  } =>#t2;
+  core::Set<inf::C<core::int*>*>* local2c = block {
+    final core::Set<inf::C<core::int*>*>* #t3 = col::LinkedHashSet::•<inf::C<core::int*>*>();
+    #t3.{core::Set::add}{Invariant}(inf::field3){(inf::C<core::int*>*) →* core::bool*};
+    #t3.{core::Set::add}{Invariant}(null){(inf::C<core::int*>*) →* core::bool*};
+  } =>#t3;
+  core::Set<inf::C<core::int*>*>* local2d = block {
+    final core::Set<inf::C<core::int*>*>* #t4 = col::LinkedHashSet::•<inf::C<core::int*>*>();
+    #t4.{core::Set::add}{Invariant}(inf::field4){(inf::C<core::int*>*) →* core::bool*};
+    #t4.{core::Set::add}{Invariant}(null){(inf::C<core::int*>*) →* core::bool*};
+  } =>#t4;
+  core::Set<inf::C<core::int*>*>* local2e = block {
+    final core::Set<inf::C<core::int*>*>* #t5 = col::LinkedHashSet::•<inf::C<core::int*>*>();
+    #t5.{core::Set::add}{Invariant}(inf::field5){(inf::C<core::int*>*) →* core::bool*};
+    #t5.{core::Set::add}{Invariant}(null){(inf::C<core::int*>*) →* core::bool*};
+  } =>#t5;
+  core::Set<inf::C<core::int*>*>* local2f = block {
+    final core::Set<inf::C<core::int*>*>* #t6 = col::LinkedHashSet::•<inf::C<core::int*>*>();
+    #t6.{core::Set::add}{Invariant}(inf::field6){(inf::C<core::int*>*) →* core::bool*};
+    #t6.{core::Set::add}{Invariant}(null){(inf::C<core::int*>*) →* core::bool*};
+  } =>#t6;
+  core::Set<core::int*>* local2g = block {
+    final core::Set<core::int*>* #t7 = col::LinkedHashSet::•<core::int*>();
+    #t7.{core::Set::add}{Invariant}(inf::field7){(core::int*) →* core::bool*};
+    #t7.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t7;
+  core::Set<core::int*>* local2h = block {
+    final core::Set<core::int*>* #t8 = col::LinkedHashSet::•<core::int*>();
+    #t8.{core::Set::add}{Invariant}(inf::field8){(core::int*) →* core::bool*};
+    #t8.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+  } =>#t8;
+  core::Set<inf::C<dynamic>*>* local3a = block {
+    final core::Set<inf::C<dynamic>*>* #t9 = col::LinkedHashSet::•<inf::C<dynamic>*>();
+    #t9.{core::Set::add}{Invariant}(null){(inf::C<dynamic>*) →* core::bool*};
+    #t9.{core::Set::add}{Invariant}(inf::field1){(inf::C<dynamic>*) →* core::bool*};
+  } =>#t9;
+  core::Set<inf::C<dynamic>*>* local3b = block {
+    final core::Set<inf::C<dynamic>*>* #t10 = col::LinkedHashSet::•<inf::C<dynamic>*>();
+    #t10.{core::Set::add}{Invariant}(null){(inf::C<dynamic>*) →* core::bool*};
+    #t10.{core::Set::add}{Invariant}(inf::field2){(inf::C<dynamic>*) →* core::bool*};
+  } =>#t10;
+  core::Set<inf::C<core::int*>*>* local3c = block {
+    final core::Set<inf::C<core::int*>*>* #t11 = col::LinkedHashSet::•<inf::C<core::int*>*>();
+    #t11.{core::Set::add}{Invariant}(null){(inf::C<core::int*>*) →* core::bool*};
+    #t11.{core::Set::add}{Invariant}(inf::field3){(inf::C<core::int*>*) →* core::bool*};
+  } =>#t11;
+  core::Set<inf::C<core::int*>*>* local3d = block {
+    final core::Set<inf::C<core::int*>*>* #t12 = col::LinkedHashSet::•<inf::C<core::int*>*>();
+    #t12.{core::Set::add}{Invariant}(null){(inf::C<core::int*>*) →* core::bool*};
+    #t12.{core::Set::add}{Invariant}(inf::field4){(inf::C<core::int*>*) →* core::bool*};
+  } =>#t12;
+  core::Set<inf::C<core::int*>*>* local3e = block {
+    final core::Set<inf::C<core::int*>*>* #t13 = col::LinkedHashSet::•<inf::C<core::int*>*>();
+    #t13.{core::Set::add}{Invariant}(null){(inf::C<core::int*>*) →* core::bool*};
+    #t13.{core::Set::add}{Invariant}(inf::field5){(inf::C<core::int*>*) →* core::bool*};
+  } =>#t13;
+  core::Set<inf::C<core::int*>*>* local3f = block {
+    final core::Set<inf::C<core::int*>*>* #t14 = col::LinkedHashSet::•<inf::C<core::int*>*>();
+    #t14.{core::Set::add}{Invariant}(null){(inf::C<core::int*>*) →* core::bool*};
+    #t14.{core::Set::add}{Invariant}(inf::field6){(inf::C<core::int*>*) →* core::bool*};
+  } =>#t14;
+  core::Set<core::int*>* local3g = block {
+    final core::Set<core::int*>* #t15 = col::LinkedHashSet::•<core::int*>();
+    #t15.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+    #t15.{core::Set::add}{Invariant}(inf::field7){(core::int*) →* core::bool*};
+  } =>#t15;
+  core::Set<core::int*>* local3h = block {
+    final core::Set<core::int*>* #t16 = col::LinkedHashSet::•<core::int*>();
+    #t16.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
+    #t16.{core::Set::add}{Invariant}(inf::field8){(core::int*) →* core::bool*};
+  } =>#t16;
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in_lib.dart:11:9: Error: Field 'field5' should be initialized because its type 'C<int?>' doesn't allow null.
+//  - 'C' is from 'pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in_lib.dart'.
+// C<int?> field5;
+//         ^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/infer_constraints_from_opt_in_lib.dart:13:5: Error: Field 'field7' should be initialized because its type 'int' doesn't allow null.
+// int field7;
+//     ^^^^^^
+//
+import self as inf;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → inf::C<inf::C::T%>
+    : super core::Object::•()
+    ;
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → inf::B
+    : super core::Object::•()
+    ;
+  abstract method bar<X extends core::List<core::int?>?>() → inf::B::bar::X%;
+  abstract method foo(core::List<core::int> list) → dynamic;
+}
+static field inf::C<dynamic> field1 = new inf::C::•<dynamic>();
+static field inf::C<dynamic>? field2;
+static field inf::C<core::int> field3 = new inf::C::•<core::int>();
+static field inf::C<core::int>? field4;
+static field inf::C<core::int?> field5;
+static field inf::C<core::int?>? field6;
+static field core::int field7;
+static field core::int? field8;
+static method method() → dynamic {
+  core::List<dynamic> local0 = <dynamic>[];
+  core::List<inf::C<dynamic>> local1a = <inf::C<dynamic>>[inf::field1];
+  core::List<inf::C<dynamic>?> local1b = <inf::C<dynamic>?>[inf::field2];
+  core::List<inf::C<core::int>> local1c = <inf::C<core::int>>[inf::field3];
+  core::List<inf::C<core::int>?> local1d = <inf::C<core::int>?>[inf::field4];
+  core::List<inf::C<core::int?>> local1e = <inf::C<core::int?>>[inf::field5];
+  core::List<inf::C<core::int?>?> local1f = <inf::C<core::int?>?>[inf::field6];
+  core::List<core::int> local1g = <core::int>[inf::field7];
+  core::List<core::int?> local1h = <core::int?>[inf::field8];
+  core::List<Null> local1i = <Null>[null];
+  core::Set<inf::C<dynamic>?> local2a = block {
+    final core::Set<inf::C<dynamic>?> #t17 = col::LinkedHashSet::•<inf::C<dynamic>?>();
+    #t17.{core::Set::add}{Invariant}(inf::field1){(inf::C<dynamic>?) → core::bool};
+    #t17.{core::Set::add}{Invariant}(null){(inf::C<dynamic>?) → core::bool};
+  } =>#t17;
+  core::Set<inf::C<dynamic>?> local2b = block {
+    final core::Set<inf::C<dynamic>?> #t18 = col::LinkedHashSet::•<inf::C<dynamic>?>();
+    #t18.{core::Set::add}{Invariant}(inf::field2){(inf::C<dynamic>?) → core::bool};
+    #t18.{core::Set::add}{Invariant}(null){(inf::C<dynamic>?) → core::bool};
+  } =>#t18;
+  core::Set<inf::C<core::int>?> local2c = block {
+    final core::Set<inf::C<core::int>?> #t19 = col::LinkedHashSet::•<inf::C<core::int>?>();
+    #t19.{core::Set::add}{Invariant}(inf::field3){(inf::C<core::int>?) → core::bool};
+    #t19.{core::Set::add}{Invariant}(null){(inf::C<core::int>?) → core::bool};
+  } =>#t19;
+  core::Set<inf::C<core::int>?> local2d = block {
+    final core::Set<inf::C<core::int>?> #t20 = col::LinkedHashSet::•<inf::C<core::int>?>();
+    #t20.{core::Set::add}{Invariant}(inf::field4){(inf::C<core::int>?) → core::bool};
+    #t20.{core::Set::add}{Invariant}(null){(inf::C<core::int>?) → core::bool};
+  } =>#t20;
+  core::Set<inf::C<core::int?>?> local2e = block {
+    final core::Set<inf::C<core::int?>?> #t21 = col::LinkedHashSet::•<inf::C<core::int?>?>();
+    #t21.{core::Set::add}{Invariant}(inf::field5){(inf::C<core::int?>?) → core::bool};
+    #t21.{core::Set::add}{Invariant}(null){(inf::C<core::int?>?) → core::bool};
+  } =>#t21;
+  core::Set<inf::C<core::int?>?> local2f = block {
+    final core::Set<inf::C<core::int?>?> #t22 = col::LinkedHashSet::•<inf::C<core::int?>?>();
+    #t22.{core::Set::add}{Invariant}(inf::field6){(inf::C<core::int?>?) → core::bool};
+    #t22.{core::Set::add}{Invariant}(null){(inf::C<core::int?>?) → core::bool};
+  } =>#t22;
+  core::Set<core::int?> local2g = block {
+    final core::Set<core::int?> #t23 = col::LinkedHashSet::•<core::int?>();
+    #t23.{core::Set::add}{Invariant}(inf::field7){(core::int?) → core::bool};
+    #t23.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t23;
+  core::Set<core::int?> local2h = block {
+    final core::Set<core::int?> #t24 = col::LinkedHashSet::•<core::int?>();
+    #t24.{core::Set::add}{Invariant}(inf::field8){(core::int?) → core::bool};
+    #t24.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t24;
+  core::Set<inf::C<dynamic>?> local3a = block {
+    final core::Set<inf::C<dynamic>?> #t25 = col::LinkedHashSet::•<inf::C<dynamic>?>();
+    #t25.{core::Set::add}{Invariant}(null){(inf::C<dynamic>?) → core::bool};
+    #t25.{core::Set::add}{Invariant}(inf::field1){(inf::C<dynamic>?) → core::bool};
+  } =>#t25;
+  core::Set<inf::C<dynamic>?> local3b = block {
+    final core::Set<inf::C<dynamic>?> #t26 = col::LinkedHashSet::•<inf::C<dynamic>?>();
+    #t26.{core::Set::add}{Invariant}(null){(inf::C<dynamic>?) → core::bool};
+    #t26.{core::Set::add}{Invariant}(inf::field2){(inf::C<dynamic>?) → core::bool};
+  } =>#t26;
+  core::Set<inf::C<core::int>?> local3c = block {
+    final core::Set<inf::C<core::int>?> #t27 = col::LinkedHashSet::•<inf::C<core::int>?>();
+    #t27.{core::Set::add}{Invariant}(null){(inf::C<core::int>?) → core::bool};
+    #t27.{core::Set::add}{Invariant}(inf::field3){(inf::C<core::int>?) → core::bool};
+  } =>#t27;
+  core::Set<inf::C<core::int>?> local3d = block {
+    final core::Set<inf::C<core::int>?> #t28 = col::LinkedHashSet::•<inf::C<core::int>?>();
+    #t28.{core::Set::add}{Invariant}(null){(inf::C<core::int>?) → core::bool};
+    #t28.{core::Set::add}{Invariant}(inf::field4){(inf::C<core::int>?) → core::bool};
+  } =>#t28;
+  core::Set<inf::C<core::int?>?> local3e = block {
+    final core::Set<inf::C<core::int?>?> #t29 = col::LinkedHashSet::•<inf::C<core::int?>?>();
+    #t29.{core::Set::add}{Invariant}(null){(inf::C<core::int?>?) → core::bool};
+    #t29.{core::Set::add}{Invariant}(inf::field5){(inf::C<core::int?>?) → core::bool};
+  } =>#t29;
+  core::Set<inf::C<core::int?>?> local3f = block {
+    final core::Set<inf::C<core::int?>?> #t30 = col::LinkedHashSet::•<inf::C<core::int?>?>();
+    #t30.{core::Set::add}{Invariant}(null){(inf::C<core::int?>?) → core::bool};
+    #t30.{core::Set::add}{Invariant}(inf::field6){(inf::C<core::int?>?) → core::bool};
+  } =>#t30;
+  core::Set<core::int?> local3g = block {
+    final core::Set<core::int?> #t31 = col::LinkedHashSet::•<core::int?>();
+    #t31.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+    #t31.{core::Set::add}{Invariant}(inf::field7){(core::int?) → core::bool};
+  } =>#t31;
+  core::Set<core::int?> local3h = block {
+    final core::Set<core::int?> #t32 = col::LinkedHashSet::•<core::int?>();
+    #t32.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+    #t32.{core::Set::add}{Invariant}(inf::field8){(core::int?) → core::bool};
+  } =>#t32;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_from_opt_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/infer_from_opt_in.dart.weak.modular.expect
new file mode 100644
index 0000000..ff3f272
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_from_opt_in.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "infer_from_opt_in_lib.dart" as inf;
+
+import "org-dartlang-testcase:///infer_from_opt_in_lib.dart";
+
+static method reify<T extends core::Object? = dynamic>(self::reify::T% arg) → dynamic
+  return self::reify::T%;
+static method main() → dynamic {
+  inf::Foo x = new inf::Foo::•();
+  inf::Foo y = new inf::Foo::•();
+  () → inf::Foo z = () → inf::Foo => inf::createFoo();
+  inf::callback((inf::Foo? x) → inf::Foo? => x);
+  core::print(self::reify<inf::Foo>(x));
+  core::print(self::reify<inf::Foo>(y));
+  core::print(self::reify<() → inf::Foo>(z));
+}
+
+library /*isNonNullableByDefault*/;
+import self as inf;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → inf::Foo
+    : super core::Object::•()
+    ;
+}
+static method createFoo() → inf::Foo
+  return new inf::Foo::•();
+static method callback((inf::Foo?) → inf::Foo? f) → void {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_from_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/infer_from_opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..2a1443f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_from_opt_out.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "infer_from_opt_out_lib.dart" as inf;
+
+import "org-dartlang-testcase:///infer_from_opt_out_lib.dart";
+
+static method reify<T extends core::Object? = dynamic>(self::reify::T% arg) → dynamic
+  return self::reify::T%;
+static method main() → dynamic {
+  inf::Foo x = new inf::Foo::•();
+  inf::Foo y = new inf::Foo::•();
+  () → inf::Foo z = () → inf::Foo => inf::createFoo();
+  inf::callback((inf::Foo x) → inf::Foo => x);
+  core::print(self::reify<inf::Foo>(x));
+  core::print(self::reify<inf::Foo>(y));
+  core::print(self::reify<() → inf::Foo>(z));
+}
+
+library;
+import self as inf;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → inf::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method createFoo() → inf::Foo*
+  return new inf::Foo::•();
+static method callback((inf::Foo*) →* inf::Foo* f) → void {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_in_legacy_from_opted_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/infer_in_legacy_from_opted_in.dart.weak.modular.expect
new file mode 100644
index 0000000..2ae2d77
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_in_legacy_from_opted_in.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "infer_in_legacy_from_opted_in_lib.dart" as inf;
+
+import "org-dartlang-testcase:///infer_in_legacy_from_opted_in_lib.dart";
+
+static method bar(core::int* x) → dynamic {
+  inf::baz(inf::foo<core::int*>(x, inf::y));
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as inf;
+import "dart:core" as core;
+
+static field core::int y = 42;
+static method foo<T extends core::num>(inf::foo::T t1, inf::foo::T t2) → inf::foo::T
+  return t1;
+static method baz(core::int? v) → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.weak.modular.expect
new file mode 100644
index 0000000..216a6b7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/infer_object_from_dynamic/main.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "opt_out_lib.dart" as opt;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method foo(dynamic d, void v, core::Object? onull, core::Object o, core::String? snull, core::String s) → dynamic {
+  opt::f<dynamic>(d);
+  opt::f<void>(v);
+  opt::f<core::Object?>(onull);
+  opt::f<core::Object>(o);
+  opt::f<core::String?>(snull);
+  opt::f<core::String>(s);
+}
+static method main() → dynamic {}
+
+library;
+import self as opt;
+import "dart:core" as core;
+
+static method f<T extends core::Object* = dynamic>(opt::f::T* a) → opt::f::T*
+  return a;
diff --git a/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_in.dart.weak.modular.expect
new file mode 100644
index 0000000..c254d31
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_in.dart.weak.modular.expect
@@ -0,0 +1,242 @@
+//
+// Problems in component:
+//
+// pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_in.dart:27:7: Error: 'LegacyClass5' can't implement both 'GenericInterface<dynamic>' and 'GenericInterface<Object>'
+//  - 'GenericInterface' is from 'pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_in_lib.dart'.
+//  - 'Object' is from 'dart:core'.
+// class LegacyClass5 extends Class5 implements GenericInterface<Object> {}
+//       ^
+//
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_in.dart:21:52: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
+// class LegacyClass4c implements GenericInterface<num?> {}
+//                                                    ^
+// pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_in.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.5
+// ^^^^^^^^^^^^
+//
+import self as self;
+import "inheritance_from_opt_in_lib.dart" as inh;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///inheritance_from_opt_in_lib.dart";
+
+class LegacyClass1 extends inh::Class1 {
+  synthetic constructor •() → self::LegacyClass1*
+    : super inh::Class1::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass2<T extends core::Object* = dynamic> extends inh::Class2<self::LegacyClass2::T*> {
+  synthetic constructor •() → self::LegacyClass2<self::LegacyClass2::T*>*
+    : super inh::Class2::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass3a<T extends core::Object* = dynamic> extends inh::Class3<self::LegacyClass3a::T*> {
+  synthetic constructor •() → self::LegacyClass3a<self::LegacyClass3a::T*>*
+    : super inh::Class3::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass3b<T extends core::Object* = dynamic> extends inh::Class3<self::LegacyClass3b::T*> implements inh::GenericInterface<self::LegacyClass3b::T*> {
+  synthetic constructor •() → self::LegacyClass3b<self::LegacyClass3b::T*>*
+    : super inh::Class3::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass4a extends inh::Class4a {
+  synthetic constructor •() → self::LegacyClass4a*
+    : super inh::Class4a::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass4b extends core::Object implements inh::GenericInterface<core::num*> {
+  synthetic constructor •() → self::LegacyClass4b*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass4c extends core::Object implements inh::GenericInterface<core::num*> {
+  synthetic constructor •() → self::LegacyClass4c*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass4d extends inh::Class4a implements inh::GenericInterface<core::num*> {
+  synthetic constructor •() → self::LegacyClass4d*
+    : super inh::Class4a::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass4e extends core::Object implements inh::Class4a, inh::Class4b {
+  synthetic constructor •() → self::LegacyClass4e*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass5 extends inh::Class5 implements inh::GenericInterface<core::Object*> {
+  synthetic constructor •() → self::LegacyClass5*
+    : super inh::Class5::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass6a<T extends core::Object* = dynamic> extends inh::Class3<self::LegacyClass6a::T*> implements inh::GenericSubInterface<self::LegacyClass6a::T*> {
+  synthetic constructor •() → self::LegacyClass6a<self::LegacyClass6a::T*>*
+    : super inh::Class3::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass6b<T extends core::Object* = dynamic> extends self::LegacyClass3a<self::LegacyClass6b::T*> implements inh::GenericSubInterface<self::LegacyClass6b::T*> {
+  synthetic constructor •() → self::LegacyClass6b<self::LegacyClass6b::T*>*
+    : super self::LegacyClass3a::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as inh;
+import "dart:core" as core;
+
+abstract class GenericInterface<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → inh::GenericInterface<inh::GenericInterface::T%>
+    : super core::Object::•()
+    ;
+}
+abstract class GenericSubInterface<T extends core::Object? = dynamic> extends inh::GenericInterface<inh::GenericSubInterface::T%> {
+  synthetic constructor •() → inh::GenericSubInterface<inh::GenericSubInterface::T%>
+    : super inh::GenericInterface::•()
+    ;
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → inh::Class1
+    : super core::Object::•()
+    ;
+}
+class Class2<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → inh::Class2<inh::Class2::T%>
+    : super core::Object::•()
+    ;
+}
+class Class3<T extends core::Object? = dynamic> extends core::Object implements inh::GenericInterface<inh::Class3::T%> {
+  synthetic constructor •() → inh::Class3<inh::Class3::T%>
+    : super core::Object::•()
+    ;
+}
+class Class4a extends core::Object implements inh::GenericInterface<core::num> {
+  synthetic constructor •() → inh::Class4a
+    : super core::Object::•()
+    ;
+}
+class Class4b extends core::Object implements inh::GenericInterface<core::num?> {
+  synthetic constructor •() → inh::Class4b
+    : super core::Object::•()
+    ;
+}
+class Class5 extends core::Object implements inh::GenericInterface<dynamic> {
+  synthetic constructor •() → inh::Class5
+    : super core::Object::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..b2fa606
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/inheritance_from_opt_out.dart.weak.modular.expect
@@ -0,0 +1,195 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "inheritance_from_opt_out_lib.dart" as inh;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///inheritance_from_opt_out_lib.dart";
+
+class Class1 extends inh::LegacyClass1 {
+  synthetic constructor •() → self::Class1
+    : super inh::LegacyClass1::•()
+    ;
+}
+class Class2<T extends core::Object? = dynamic> extends inh::LegacyClass2<self::Class2::T%> {
+  synthetic constructor •() → self::Class2<self::Class2::T%>
+    : super inh::LegacyClass2::•()
+    ;
+}
+class Class3a<T extends core::Object? = dynamic> extends inh::LegacyClass3<self::Class3a::T%> {
+  synthetic constructor •() → self::Class3a<self::Class3a::T%>
+    : super inh::LegacyClass3::•()
+    ;
+}
+class Class3b<T extends core::Object? = dynamic> extends inh::LegacyClass3<self::Class3b::T%> implements inh::GenericInterface<self::Class3b::T%> {
+  synthetic constructor •() → self::Class3b<self::Class3b::T%>
+    : super inh::LegacyClass3::•()
+    ;
+}
+class Class4a extends inh::LegacyClass4 {
+  synthetic constructor •() → self::Class4a
+    : super inh::LegacyClass4::•()
+    ;
+}
+class Class4b extends core::Object implements inh::GenericInterface<core::num> {
+  synthetic constructor •() → self::Class4b
+    : super core::Object::•()
+    ;
+  abstract member-signature operator /*isLegacy*/ ==(dynamic other) → core::bool*; -> core::Object::==
+}
+class Class4c extends core::Object implements inh::GenericInterface<core::num?> {
+  synthetic constructor •() → self::Class4c
+    : super core::Object::•()
+    ;
+  abstract member-signature operator /*isLegacy*/ ==(dynamic other) → core::bool*; -> core::Object::==
+}
+class Class4d extends inh::LegacyClass4 implements inh::GenericInterface<core::num> {
+  synthetic constructor •() → self::Class4d
+    : super inh::LegacyClass4::•()
+    ;
+}
+static method main() → dynamic {}
+
+library;
+import self as inh;
+import "dart:core" as core;
+
+abstract class GenericInterface<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → inh::GenericInterface<inh::GenericInterface::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class GenericSubInterface<T extends core::Object* = dynamic> extends core::Object implements inh::GenericInterface<inh::GenericSubInterface::T*> {
+  synthetic constructor •() → inh::GenericSubInterface<inh::GenericSubInterface::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass1 extends core::Object {
+  synthetic constructor •() → inh::LegacyClass1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass2<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → inh::LegacyClass2<inh::LegacyClass2::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass3<T extends core::Object* = dynamic> extends core::Object implements inh::GenericInterface<inh::LegacyClass3::T*> {
+  synthetic constructor •() → inh::LegacyClass3<inh::LegacyClass3::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass4 extends core::Object implements inh::GenericInterface<core::num*> {
+  synthetic constructor •() → inh::LegacyClass4*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass5<T extends core::Object* = dynamic> extends inh::LegacyClass3<inh::LegacyClass5::T*> implements inh::GenericInterface<inh::LegacyClass5::T*> {
+  synthetic constructor •() → inh::LegacyClass5<inh::LegacyClass5::T*>*
+    : super inh::LegacyClass3::•()
+    ;
+}
+abstract class _LegacyClass6&Object&LegacyClass3<T extends core::Object* = dynamic> = core::Object with inh::LegacyClass3<inh::_LegacyClass6&Object&LegacyClass3::T*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → inh::_LegacyClass6&Object&LegacyClass3<inh::_LegacyClass6&Object&LegacyClass3::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass6<T extends core::Object* = dynamic> extends inh::_LegacyClass6&Object&LegacyClass3<inh::LegacyClass6::T*> implements inh::GenericInterface<inh::LegacyClass6::T*> {
+  synthetic constructor •() → inh::LegacyClass6<inh::LegacyClass6::T*>*
+    : super inh::_LegacyClass6&Object&LegacyClass3::•()
+    ;
+}
+class LegacyClass7<T extends core::Object* = dynamic> extends inh::LegacyClass3<inh::LegacyClass7::T*> implements inh::GenericSubInterface<inh::LegacyClass7::T*> {
+  synthetic constructor •() → inh::LegacyClass7<inh::LegacyClass7::T*>*
+    : super inh::LegacyClass3::•()
+    ;
+}
+abstract class _LegacyClass8&Object&LegacyClass3<T extends core::Object* = dynamic> = core::Object with inh::LegacyClass3<inh::_LegacyClass8&Object&LegacyClass3::T*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → inh::_LegacyClass8&Object&LegacyClass3<inh::_LegacyClass8&Object&LegacyClass3::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class LegacyClass8<T extends core::Object* = dynamic> extends inh::_LegacyClass8&Object&LegacyClass3<inh::LegacyClass8::T*> implements inh::GenericSubInterface<inh::LegacyClass8::T*> {
+  synthetic constructor •() → inh::LegacyClass8<inh::LegacyClass8::T*>*
+    : super inh::_LegacyClass8&Object&LegacyClass3::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue39666.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue39666.dart.weak.modular.expect
new file mode 100644
index 0000000..779a4e3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue39666.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+import "org-dartlang-testcase:///issue39666_lib.dart";
+
+class A<X extends FutureOr<core::List<dynamic>>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+}
+static method main() → void {}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+import "dart:async";
+
+class A<X extends FutureOr<core::List<dynamic>*>*> extends core::Object {
+  synthetic constructor •() → self2::A<self2::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.modular.expect
new file mode 100644
index 0000000..3ea0d63
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "issue40512_lib.dart" as baz2;
+
+import "org-dartlang-testcase:///issue40512_lib.dart";
+
+abstract class _C&Object&A = core::Object with baz2::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  mixin-super-stub method toString({core::String* s = #C1}) → core::String*
+    return super.{baz2::A::toString}(s: s);
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&A&B = self::_C&Object&A with baz2::B /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A&B*
+    : super self::_C&Object&A::•()
+    ;
+}
+class C extends self::_C&Object&A&B {
+  synthetic constructor •() → self::C*
+    : super self::_C&Object&A&B::•()
+    ;
+}
+static method main() → void {
+  core::print(new baz2::B::•());
+  core::print(new self::C::•());
+}
+
+constants  {
+  #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart.weak.modular.expect
new file mode 100644
index 0000000..5ce29b0
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.no_link.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "issue40512_lib.dart" as baz2;
+
+import "org-dartlang-testcase:///issue40512_lib.dart";
+
+abstract class _C&Object&A = core::Object with baz2::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method toString({core::String* s = #C1}) → core::String*
+    return super.{baz2::A::toString}(s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&A&B = self::_C&Object&A with baz2::B /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A&B*
+    : super self::_C&Object&A::•()
+    ;
+}
+class C extends self::_C&Object&A&B {
+  synthetic constructor •() → self::C*
+    : super self::_C&Object&A&B::•()
+    ;
+}
+static method main() → void {
+  core::print(new baz2::B::•());
+  core::print(new self::C::•());
+}
+
+library baz2;
+import self as baz2;
+import "dart:core" as core;
+
+abstract class A extends core::Object /*isMixinDeclaration*/  {
+  method toString({core::String* s = #C1}) → core::String*
+    return s;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → baz2::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+constants  {
+  #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.modular.expect
new file mode 100644
index 0000000..7e095fc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.modular.expect
@@ -0,0 +1,77 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "issue41180_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue41180_lib.dart";
+
+class D<Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::Y*>*
+    : super core::Object::•()
+    ;
+  method method() → iss::C<self::D::Y*>*
+    return new iss::C::•<self::D::Y*>(() → Null => null);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {
+  iss::foo(() → Null => null);
+  iss::bar = () → iss::Map<core::String*, core::String*>* => null;
+  new self::D::•<core::int*>().{self::D::method}(){() →* iss::C<core::int*>*};
+  self::findKey(new iss::Map::•<core::String*, core::String*>("foo", "bar"), "bar");
+}
+static method findKey(iss::Map<core::String*, dynamic>* m, dynamic search) → void {
+  core::print(let final core::MapEntry<core::String*, dynamic>* #t1 = m.{iss::Map::entries}{iss::Iterable<core::MapEntry<core::String*, dynamic>*>*}.{iss::Iterable::singleWhere}((core::MapEntry<core::String*, dynamic>* entry) → core::bool* => entry.{core::MapEntry::value}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} search, orElse: () → Null => null){((core::MapEntry<core::String*, dynamic>*) →* core::bool*, {orElse: () →* core::MapEntry<core::String*, dynamic>*}) →* core::MapEntry<core::String*, dynamic>*} in #t1 == null ?{core::String*} null : #t1.{core::MapEntry::key}{core::String*});
+}
+
+library /*isNonNullableByDefault*/;
+import self as iss;
+import "dart:core" as core;
+
+class C<X extends core::Object? = dynamic> extends core::Object {
+  constructor •(() → iss::Map<core::String, core::String> f) → iss::C<iss::C::X%>
+    : super core::Object::•() {
+    core::print(f.{core::Object::runtimeType}{core::Type});
+  }
+}
+class Map<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
+  final field iss::Map::K% key;
+  final field iss::Map::V% value;
+  constructor •(iss::Map::K% key, iss::Map::V% value) → iss::Map<iss::Map::K%, iss::Map::V%>
+    : iss::Map::key = key, iss::Map::value = value, super core::Object::•()
+    ;
+  get entries() → iss::Iterable<core::MapEntry<iss::Map::K%, iss::Map::V%>>
+    return new iss::Iterable::•<core::MapEntry<iss::Map::K%, iss::Map::V%>>(new core::MapEntry::_<iss::Map::K%, iss::Map::V%>(this.{iss::Map::key}{iss::Map::K%}, this.{iss::Map::value}{iss::Map::V%}));
+}
+class Iterable<E extends core::Object? = dynamic> extends core::Object {
+  final field iss::Iterable::E% element;
+  constructor •(iss::Iterable::E% element) → iss::Iterable<iss::Iterable::E%>
+    : iss::Iterable::element = element, super core::Object::•()
+    ;
+  method singleWhere((iss::Iterable::E%) → core::bool test, {covariant-by-class () →? iss::Iterable::E% orElse = #C1}) → iss::Iterable::E% {
+    if(test(this.{iss::Iterable::element}{iss::Iterable::E%}){(iss::Iterable::E%) → core::bool}) {
+      return this.{iss::Iterable::element}{iss::Iterable::E%};
+    }
+    if(!(orElse == null))
+      return orElse{() → iss::Iterable::E%}(){() → iss::Iterable::E%};
+    throw "error";
+  }
+}
+static method foo(() → iss::Map<core::String, core::String> f) → void {
+  core::print(f.{core::Object::runtimeType}{core::Type});
+}
+static set bar(() → iss::Map<core::String, core::String> f) → void {
+  core::print(f.{core::Object::runtimeType}{core::Type});
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.modular.expect
new file mode 100644
index 0000000..27a93fe
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "issue41210_lib1.dart" as iss;
+
+import "org-dartlang-testcase:///issue41210_lib1.dart";
+
+abstract class _C&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  mixin-super-stub method method({core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(s: s);
+}
+abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A&B*
+    : super self::_C&Object&A::•()
+    ;
+}
+class C extends self::_C&Object&A&B {
+  synthetic constructor •() → self::C*
+    : super self::_C&Object&A&B::•()
+    ;
+}
+static method main() → dynamic {
+  core::print(new self::C::•().{self::_C&Object&A::method}(){({s: core::String*}) →* core::String*});
+}
+
+constants  {
+  #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.modular.expect
new file mode 100644
index 0000000..7ab45bf
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.no_link.dart.weak.modular.expect
@@ -0,0 +1,91 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "issue41210_lib1.dart" as iss;
+
+import "org-dartlang-testcase:///issue41210_lib1.dart";
+
+abstract class _C&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method({core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A&B*
+    : super self::_C&Object&A::•()
+    ;
+}
+class C extends self::_C&Object&A&B {
+  synthetic constructor •() → self::C*
+    : super self::_C&Object&A&B::•()
+    ;
+}
+static method main() → dynamic {
+  core::print(new self::C::•().{self::_C&Object&A::method}(){({s: core::String*}) →* core::String*});
+}
+
+library;
+import self as iss;
+import "dart:core" as core;
+import "issue41210_lib2.dart" as iss2;
+
+import "org-dartlang-testcase:///issue41210_lib2.dart";
+
+abstract class A extends core::Object implements iss2::Interface /*isMixinDeclaration*/  {
+  method method({core::String* s = #C1}) → core::String*
+    return s;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object implements iss2::Interface {
+  synthetic constructor •() → iss::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature method method() → core::String*; -> iss2::Interface::method
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {}
+
+library /*isNonNullableByDefault*/;
+import self as iss2;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → iss2::Interface
+    : super core::Object::•()
+    ;
+  abstract method method() → core::String;
+}
+
+constants  {
+  #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.modular.expect
new file mode 100644
index 0000000..2f375fb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.modular.expect
@@ -0,0 +1,91 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "issue41210b_lib1.dart" as iss;
+
+import "org-dartlang-testcase:///issue41210b_lib1.dart";
+
+abstract class _C&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method({core::String* s = #C1}) → core::String*
+    return super.{iss::A::method}(s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&A&B*
+    : super self::_C&Object&A::•()
+    ;
+}
+class C extends self::_C&Object&A&B {
+  synthetic constructor •() → self::C*
+    : super self::_C&Object&A&B::•()
+    ;
+}
+static method main() → dynamic {
+  core::print(new self::C::•().{self::_C&Object&A::method}(){({s: core::String*}) →* core::String*});
+}
+
+library;
+import self as iss;
+import "dart:core" as core;
+import "issue41210b_lib2.dart" as iss2;
+
+import "org-dartlang-testcase:///issue41210b_lib2.dart";
+
+abstract class A extends core::Object implements iss2::Interface /*isMixinDeclaration*/  {
+  method method({core::String* s = #C1}) → core::String*
+    return s;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object implements iss2::Interface {
+  synthetic constructor •() → iss::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature method method() → core::String*; -> iss2::Interface::method
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {}
+
+library /*isNonNullableByDefault*/;
+import self as iss2;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → iss2::Interface
+    : super core::Object::•()
+    ;
+  abstract method method() → core::String;
+}
+
+constants  {
+  #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.modular.expect
new file mode 100644
index 0000000..5d1e11f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41435.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library;
+import self as self;
+import "issue41435_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue41435_lib.dart";
+
+static method main() → void {
+  Null nil;
+  iss::x = null;
+  iss::x = nil;
+  iss::takesNever(null);
+  iss::takesNever(nil);
+  iss::takesTakesNull(#C1);
+  iss::f = (Null x) → Null {};
+}
+
+library /*isNonNullableByDefault*/;
+import self as iss;
+import "dart:core" as core;
+
+static field Never x = throw "Unreachable";
+static field (Null) → void f = (core::Object? n) → void {};
+static method takesNever(Never x) → void {}
+static method takesTakesNull((Null) → void f) → void {}
+
+constants  {
+  #C1 = static-tearoff iss::takesNever
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41496.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue41496.dart.weak.modular.expect
new file mode 100644
index 0000000..e3dae37
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41496.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41496.dart:7:11: Error: Field 'f1' should be initialized because its type 'void Function()' doesn't allow null.
+// LegacyFoo f1;
+//           ^^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41496.dart:10:20: Error: Field 'f2' should be initialized because its type 'void Function()' doesn't allow null.
+//   static LegacyFoo f2;
+//                    ^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue41496_lib.dart";
+
+class C extends core::Object {
+  static field () → void f2 = null;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+static field () → void f1;
+static method main() → dynamic {
+  new self::C::•();
+}
+
+library opted_out_lib;
+import self as self2;
+
+typedef LegacyFoo = () →* void;
+static method test(() →* void f) → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41496b.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue41496b.dart.weak.modular.expect
new file mode 100644
index 0000000..0144b18
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41496b.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library opted_out_lib;
+import self as self;
+import "issue41496b_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue41496b_lib.dart" as opt_in;
+
+typedef LegacyFoo = () →* void;
+static method test(() →* void f) → dynamic {}
+static method main() → dynamic {
+  iss::main();
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41496b_lib.dart:7:11: Error: Field 'f1' should be initialized because its type 'void Function()' doesn't allow null.
+// LegacyFoo f1;
+//           ^^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41496b_lib.dart:10:20: Error: Field 'f2' should be initialized because its type 'void Function()' doesn't allow null.
+//   static LegacyFoo f2;
+//                    ^^
+//
+import self as iss;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue41496b.dart";
+
+class C extends core::Object {
+  static field () → void f2 = null;
+  synthetic constructor •() → iss::C
+    : super core::Object::•()
+    ;
+}
+static field () → void f1;
+static method main() → dynamic {
+  new iss::C::•();
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.modular.expect
new file mode 100644
index 0000000..ebb0722
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41498.dart.weak.modular.expect
@@ -0,0 +1,96 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41498.dart:11:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+//     f.toString(); // error
+//     ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41498.dart:17:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+//     f.toString(); // error
+//     ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41498.dart:24:3: Error: Non-nullable variable 'f' must be assigned before it can be used.
+//   f.toString(); // error
+//   ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41498.dart:29:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+//     f.toString(); // error
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue41498_lib.dart";
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  static method test() → void {
+    () → void f;
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:11:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    f.toString(); // error
+    ^" in f.{core::Object::toString}(){() → core::String};
+  }
+  method test2() → void {
+    () → void f;
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:17:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    f.toString(); // error
+    ^" in f.{core::Object::toString}(){() → core::String};
+  }
+}
+static method test() → dynamic {
+  () → void f;
+  invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:24:3: Error: Non-nullable variable 'f' must be assigned before it can be used.
+  f.toString(); // error
+  ^" in f.{core::Object::toString}(){() → core::String};
+  core::Function foo = () → Null {
+    () → void f;
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498.dart:29:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    f.toString(); // error
+    ^" in f.{core::Object::toString}(){() → core::String};
+  };
+  self::C::test();
+  new self::C::•().{self::C::test2}(){() → void};
+}
+static method main() → dynamic {}
+
+library opted_out_lib;
+import self as self2;
+import "dart:core" as core;
+
+typedef LegacyFoo = () →* void;
+class C extends core::Object {
+  synthetic constructor •() → self2::C*
+    : super core::Object::•()
+    ;
+  static method test() → void {
+    () →* void f;
+    f.{core::Object::toString}(){() →* core::String*};
+  }
+  method test2() → void {
+    () →* void f;
+    f.{core::Object::toString}(){() →* core::String*};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  () →* void f;
+  f.{core::Object::toString}(){() →* core::String*};
+  core::Function* foo = () → Null {
+    () →* void f;
+    f.{core::Object::toString}(){() →* core::String*};
+  };
+  self2::C::test();
+  new self2::C::•().{self2::C::test2}(){() →* void};
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.modular.expect
new file mode 100644
index 0000000..3af3c21
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41498b.dart.weak.modular.expect
@@ -0,0 +1,102 @@
+library opted_out_lib;
+import self as self;
+import "dart:core" as core;
+import "issue41498b_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue41498b_lib.dart" as opt_in;
+
+typedef LegacyFoo = () →* void;
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  static method test() → void {
+    () →* void f;
+    f.{core::Object::toString}(){() →* core::String*};
+  }
+  method test2() → void {
+    () →* void f;
+    f.{core::Object::toString}(){() →* core::String*};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  () →* void f;
+  f.{core::Object::toString}(){() →* core::String*};
+  core::Function* foo = () → Null {
+    () →* void f;
+    f.{core::Object::toString}(){() →* core::String*};
+  };
+  self::C::test();
+  new self::C::•().{self::C::test2}(){() →* void};
+}
+static method main() → dynamic {
+  iss::main();
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:11:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+//     f.toString(); // error
+//     ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:17:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+//     f.toString(); // error
+//     ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:24:3: Error: Non-nullable variable 'f' must be assigned before it can be used.
+//   f.toString(); // error
+//   ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:29:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+//     f.toString(); // error
+//     ^
+//
+import self as iss;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue41498b.dart";
+
+class C extends core::Object {
+  synthetic constructor •() → iss::C
+    : super core::Object::•()
+    ;
+  static method test() → void {
+    () → void f;
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:11:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    f.toString(); // error
+    ^" in f.{core::Object::toString}(){() → core::String};
+  }
+  method test2() → void {
+    () → void f;
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:17:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    f.toString(); // error
+    ^" in f.{core::Object::toString}(){() → core::String};
+  }
+}
+static method test() → dynamic {
+  () → void f;
+  invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:24:3: Error: Non-nullable variable 'f' must be assigned before it can be used.
+  f.toString(); // error
+  ^" in f.{core::Object::toString}(){() → core::String};
+  core::Function foo = () → Null {
+    () → void f;
+    invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41498b_lib.dart:29:5: Error: Non-nullable variable 'f' must be assigned before it can be used.
+    f.toString(); // error
+    ^" in f.{core::Object::toString}(){() → core::String};
+  };
+  iss::C::test();
+  new iss::C::•().{iss::C::test2}(){() → void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41499.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue41499.dart.weak.modular.expect
new file mode 100644
index 0000000..63d713b0
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41499.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41499.dart:8:20: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+//   static LegacyFoo sTest() {}
+//                    ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41499.dart:10:13: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+//   LegacyFoo mTest() {}
+//             ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41499.dart:12:17: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+//   LegacyFoo get gTest {}
+//                 ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41499.dart:15:11: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+// LegacyFoo test() {}
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue41499_lib.dart";
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  static method sTest() → () → void {
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:8:20: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+  static LegacyFoo sTest() {}
+                   ^" in null;
+  }
+  method mTest() → () → void {
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:10:13: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+  LegacyFoo mTest() {}
+            ^" in null;
+  }
+  get gTest() → () → void {
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:12:17: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+  LegacyFoo get gTest {}
+                ^" in null;
+  }
+}
+static method test() → () → void {
+  return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499.dart:15:11: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+LegacyFoo test() {}
+          ^" in null;
+}
+static method main() → dynamic {}
+
+library;
+import self as self2;
+
+typedef LegacyFoo = () →* void;
+static method test(() →* void f) → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41499b.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue41499b.dart.weak.modular.expect
new file mode 100644
index 0000000..e46d2e6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41499b.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library;
+import self as self;
+
+import "org-dartlang-testcase:///issue41499b_lib.dart" as opt_in;
+
+typedef LegacyFoo = () →* void;
+static method test(() →* void f) → dynamic {}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:8:20: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+//   static LegacyFoo sTest() {}
+//                    ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:10:13: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+//   LegacyFoo mTest() {}
+//             ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:12:17: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+//   LegacyFoo get gTest {}
+//                 ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:15:11: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+// LegacyFoo test() {}
+//           ^
+//
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue41499b.dart";
+
+class C extends core::Object {
+  synthetic constructor •() → self2::C
+    : super core::Object::•()
+    ;
+  static method sTest() → () → void {
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:8:20: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+  static LegacyFoo sTest() {}
+                   ^" in null;
+  }
+  method mTest() → () → void {
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:10:13: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+  LegacyFoo mTest() {}
+            ^" in null;
+  }
+  get gTest() → () → void {
+    return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:12:17: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+  LegacyFoo get gTest {}
+                ^" in null;
+  }
+}
+static method test() → () → void {
+  return invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41499b_lib.dart:15:11: Error: A non-null value must be returned since the return type 'void Function()' doesn't allow null.
+LegacyFoo test() {}
+          ^" in null;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41567.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue41567.dart.weak.modular.expect
new file mode 100644
index 0000000..810b007
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41567.dart.weak.modular.expect
@@ -0,0 +1,75 @@
+//
+// Problems in component:
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41567.dart:13:7: Error: 'in3' can't implement both 'A<int>' and 'A<dynamic>'
+//  - 'A' is from 'pkg/front_end/testcases/nnbd_mixed/issue41567_lib.dart'.
+// class in3 extends out_int implements B {} // error
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41567.dart:15:7: Error: 'in4' can't implement both 'A<dynamic>' and 'A<int>'
+//  - 'A' is from 'pkg/front_end/testcases/nnbd_mixed/issue41567_lib.dart'.
+// class in4 extends B implements out_int {} // error
+//       ^
+//
+library /*isNonNullableByDefault*/;
+import self as self;
+import "issue41567_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue41567_lib.dart";
+
+class B extends iss::A<dynamic> {
+  synthetic constructor •() → self::B
+    : super iss::A::•()
+    ;
+}
+class in1 extends iss::out_Object implements self::B {
+  synthetic constructor •() → self::in1
+    : super iss::out_Object::•()
+    ;
+}
+class in2 extends self::B implements iss::out_Object {
+  synthetic constructor •() → self::in2
+    : super self::B::•()
+    ;
+}
+class in3 extends iss::out_int implements self::B {
+  synthetic constructor •() → self::in3
+    : super iss::out_int::•()
+    ;
+}
+class in4 extends self::B implements iss::out_int {
+  synthetic constructor •() → self::in4
+    : super self::B::•()
+    ;
+}
+static method main() → dynamic {}
+
+library;
+import self as iss;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → iss::A<iss::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class out_int extends iss::A<core::int*> {
+  synthetic constructor •() → iss::out_int*
+    : super iss::A::•()
+    ;
+}
+class out_Object extends iss::A<core::Object*> {
+  synthetic constructor •() → iss::out_Object*
+    : super iss::A::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.modular.expect
new file mode 100644
index 0000000..0178674
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41597.dart.weak.modular.expect
@@ -0,0 +1,128 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41597.dart:8:6: Error: 'x' is already declared in this scope.
+// bool x;
+//      ^
+// pkg/front_end/testcases/nnbd_mixed/issue41597.dart:7:6: Context: Previous declaration of 'x'.
+// bool x;
+//      ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41597.dart:8:6: Error: Field 'x' should be initialized because its type 'bool' doesn't allow null.
+// bool x;
+//      ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41597.dart:7:6: Error: Field 'x' should be initialized because its type 'bool' doesn't allow null.
+// bool x;
+//      ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41597.dart:11:9: Error: Can't use 'x' because it is declared more than once.
+//   print(x);
+//         ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41597.dart:12:9: Error: Can't use 'x' because it is declared more than once.
+//   print(x!);
+//         ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41597.dart:13:10: Error: Can't use 'x' because it is declared more than once.
+//   print(!x);
+//          ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41597.dart:18:12: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//   C.c1() : super()!;
+//            ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41597.dart:18:19: Error: Expected an initializer.
+//   C.c1() : super()!;
+//                   ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue41597_lib.dart";
+
+class C extends core::Object {
+  constructor c0() → self::C
+    : super core::Object::•()
+    ;
+  constructor c1() → self::C
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597.dart:18:12: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+  C.c1() : super()!;
+           ^"!
+    ;
+}
+static field core::bool x;
+static method errors() → dynamic {
+  core::print(invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597.dart:11:9: Error: Can't use 'x' because it is declared more than once.
+  print(x);
+        ^");
+  core::print(invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597.dart:12:9: Error: Can't use 'x' because it is declared more than once.
+  print(x!);
+        ^"!);
+  core::print(!invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597.dart:13:10: Error: Can't use 'x' because it is declared more than once.
+  print(!x);
+         ^");
+}
+static method main() → dynamic {}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:8:6: Error: Expected an identifier, but got '.'.
+// Try inserting an identifier before '.'.
+//   c?..f;
+//      ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:8:6: Error: Expected an identifier, but got ''.
+// Try inserting an identifier before ''.
+//   c?..f;
+//      ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:9:7: Error: Expected an identifier, but got '.'.
+// Try inserting an identifier before '.'.
+//   !c?..f;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:9:7: Error: Expected an identifier, but got ''.
+// Try inserting an identifier before ''.
+//   !c?..f;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:10:6: Error: Expected an identifier, but got '.'.
+// Try inserting an identifier before '.'.
+//   c?..f!;
+//      ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:10:6: Error: Expected an identifier, but got ''.
+// Try inserting an identifier before ''.
+//   c?..f!;
+//      ^
+//
+// pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:10:8: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
+//   c?..f!;
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.6
+// ^^^^^^^^^^^^
+//
+import self as self2;
+
+static method errors(dynamic c) → dynamic {
+  invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:8:6: Error: Expected an identifier, but got ''.
+Try inserting an identifier before ''.
+  c?..f;
+     ^"{<invalid>}.f;
+  !invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:9:7: Error: Expected an identifier, but got ''.
+Try inserting an identifier before ''.
+  !c?..f;
+      ^"{<invalid>}.f;
+  invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue41597_lib.dart:10:6: Error: Expected an identifier, but got ''.
+Try inserting an identifier before ''.
+  c?..f!;
+     ^"{<invalid>}.f!;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.modular.expect
new file mode 100644
index 0000000..fd8e4a3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:async" as asy;
+
+static method returnFutureOfVoid() → asy::Future<void>* async {}
+static method returnVoid() → void {}
+static method returnVoidAsync() → void async {}
+static method main() → dynamic async {
+  await self::returnVoid();
+  await self::returnFutureOfVoid();
+  await self::returnVoidAsync();
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41657.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue41657.dart.weak.modular.expect
new file mode 100644
index 0000000..45aac72
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41657.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static final field core::bool isLegacySubtyping1a = #C1 is{ForNonNullableByDefault} core::List<core::int>;
+static const field core::bool isLegacySubtyping1b = #C2;
+static final field core::bool isLegacySubtyping2a = #C3 is{ForNonNullableByDefault} core::List<core::int>;
+static const field core::bool isLegacySubtyping2b = #C2;
+static final field core::List<core::int> assertLegacySubtyping1a = #C1 as{ForNonNullableByDefault} core::List<core::int>;
+static const field core::List<core::int> assertLegacySubtyping1b = #C1;
+static final field core::List<core::int> assertLegacySubtyping2a = #C3 as{ForNonNullableByDefault} core::List<core::int>;
+static const field core::List<core::int> assertLegacySubtyping2b = #C3;
+static method main() → void {
+  self::expect(self::isLegacySubtyping1a, #C2);
+  self::expect(self::isLegacySubtyping2a, #C2);
+  self::expect(self::assertLegacySubtyping1a, #C1);
+  self::expect(self::assertLegacySubtyping2a, #C3);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = <Null>[]
+  #C2 = true
+  #C3 = <core::int?>[]
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42003.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue42003.dart.weak.modular.expect
new file mode 100644
index 0000000..cbd12a1
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42003.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "issue42003_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue42003_lib.dart";
+
+static method main() → dynamic {
+  let final core::String* #t1 = iss::returnString() in #t1 == null ?{core::int?} null : #t1{core::String}.{core::String::length}{core::int};
+}
+
+library;
+import self as iss;
+import "dart:core" as core;
+
+static method returnString() → core::String*
+  return "foo";
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42181.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue42181.dart.weak.modular.expect
new file mode 100644
index 0000000..8e2527a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42181.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/issue42181.dart:10:9: Error: The value 'null' can't be assigned to a variable of type 'int Function(int)' because 'int Function(int)' is not nullable.
+//   F f = null; // Static error
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue42181_lib.dart";
+
+static method f1(core::int x) → core::int?
+  return x;
+static method test() → void {
+  (core::int*) → core::int* f = invalid-expression "pkg/front_end/testcases/nnbd_mixed/issue42181.dart:10:9: Error: The value 'null' can't be assigned to a variable of type 'int Function(int)' because 'int Function(int)' is not nullable.
+  F f = null; // Static error
+        ^" in null as{TypeError,ForNonNullableByDefault} (core::int*) → core::int*;
+  f = #C1;
+}
+static method main() → dynamic {}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+typedef F = (core::int*) →* core::int*;
+
+constants  {
+  #C1 = static-tearoff self::f1
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.modular.expect
new file mode 100644
index 0000000..35340a8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "foundation_binding_lib.dart" as fou;
+import "scheduler_binding_lib.dart" as sch;
+import "dart:core" as core;
+import "dart:async" as asy;
+import "services_binding_lib.dart" as ser;
+
+import "org-dartlang-testcase:///foundation_lib.dart";
+import "org-dartlang-testcase:///services_lib.dart";
+import "org-dartlang-testcase:///scheduler_lib.dart";
+
+abstract class _TestSchedulerBinding&BindingBase&SchedulerBinding = fou::BindingBase with sch::SchedulerBinding /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_TestSchedulerBinding&BindingBase&SchedulerBinding*
+    : super fou::BindingBase::•()
+    ;
+  abstract member-signature method registerSignalServiceExtension({core::String* name, () →* asy::Future<Null>* callback}) → void; -> fou::BindingBase::registerSignalServiceExtension
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _TestSchedulerBinding&BindingBase&SchedulerBinding&ServicesBinding = self::_TestSchedulerBinding&BindingBase&SchedulerBinding with ser::ServicesBinding /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_TestSchedulerBinding&BindingBase&SchedulerBinding&ServicesBinding*
+    : super self::_TestSchedulerBinding&BindingBase&SchedulerBinding::•()
+    ;
+}
+class TestSchedulerBinding extends self::_TestSchedulerBinding&BindingBase&SchedulerBinding&ServicesBinding {
+  synthetic constructor •() → self::TestSchedulerBinding*
+    : super self::_TestSchedulerBinding&BindingBase&SchedulerBinding&ServicesBinding::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.modular.expect
new file mode 100644
index 0000000..9f4f0a5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42660.dart.weak.modular.expect
@@ -0,0 +1,65 @@
+library;
+import self as self;
+import "issue42660_lib.dart" as iss;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue42660_lib.dart";
+
+static method main() → void {
+  iss::E|m(iss::f());
+  iss::E|m(#C1(){() →* core::int*});
+  iss::E|m(iss::p);
+  iss::Class<dynamic>* c = new iss::Class::•<dynamic>();
+  iss::E|m(c.{iss::Class::f}(){() →* core::int*});
+  iss::E|m(c.{iss::Class::f}{() →* core::int*}(){() →* core::int*});
+  iss::E|m(c.{iss::Class::p}{core::int*});
+  iss::E|m(c.{iss::Class::[]}(0){(core::int*) →* core::int*});
+  iss::E|m(c.{iss::Class::unary-}(){() →* core::int*});
+  iss::E|m(c.{iss::Class::+}(4){(core::Object*) →* core::int*});
+  let final iss::Class<dynamic>* #t1 = c in block {
+    iss::E|m(#t1.{iss::Class::p}{core::int*});
+    iss::E|m(#t1.{iss::Class::f}(){() →* core::int*});
+    iss::E|m(#t1.{iss::Class::[]}(0){(core::int*) →* core::int*});
+  } =>#t1;
+  let final iss::Class<dynamic>* #t2 = new iss::Class::•<dynamic>() in block {
+    iss::E|m(#t2.{iss::Class::p}{core::int*});
+    iss::E|m(#t2.{iss::Class::f}(){() →* core::int*});
+    iss::E|m(#t2.{iss::Class::[]}(0){(core::int*) →* core::int*});
+  } =>#t2;
+}
+
+library /*isNonNullableByDefault*/;
+import self as iss;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → iss::Class<iss::Class::T%>
+    : super core::Object::•()
+    ;
+  method f() → core::int?
+    return 4;
+  get p() → core::int?
+    return 4;
+  operator [](core::int index) → core::int?
+    return 4;
+  operator unary-() → core::int?
+    return 4;
+  operator +(core::Object? other) → core::int?
+    return 4;
+}
+extension E on core::int {
+  method m = iss::E|m;
+  tearoff m = iss::E|get#m;
+}
+static method E|m(lowered final core::int #this) → core::String
+  return "m";
+static method E|get#m(lowered final core::int #this) → () → core::String
+  return () → core::String => iss::E|m(#this);
+static method f() → core::int?
+  return 4;
+static get p() → core::int?
+  return 4;
+
+constants  {
+  #C1 = static-tearoff iss::f
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42792.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue42792.dart.weak.modular.expect
new file mode 100644
index 0000000..6cabc1e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42792.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "issue42792_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue42792_lib.dart";
+
+abstract class M<T extends core::Object? = dynamic> extends iss::A<self::M::T%> /*isMixinDeclaration*/  {
+}
+abstract class _B&A&M = iss::A<core::int> with self::M<core::int> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_B&A&M
+    : super iss::A::•()
+    ;
+}
+class B extends self::_B&A&M {
+  synthetic constructor •() → self::B
+    : super self::_B&A&M::•()
+    ;
+}
+static method main() → void {}
+
+library;
+import self as iss;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → iss::A<iss::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42836.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue42836.dart.weak.modular.expect
new file mode 100644
index 0000000..f87710d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42836.dart.weak.modular.expect
@@ -0,0 +1,73 @@
+library;
+import self as self;
+import "issue42836_lib.dart" as iss;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue42836_lib.dart";
+
+class Legacy extends iss::Generic<core::int*> {
+  synthetic constructor •() → self::Legacy*
+    : super iss::Generic::•()
+    ;
+  method legacyMethod() → core::int*
+    return 3;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field self::Legacy* legacyInstance = new self::Legacy::•();
+static method test(core::bool* b) → dynamic {
+  self::Legacy* a1 = b ?{self::Legacy*} self::legacyInstance : self::legacyInstance;
+  iss::Generic<core::int*>* a2 = b ?{iss::Generic<core::int*>*} self::legacyInstance : iss::nonNullableInstance;
+  iss::Generic<core::int*>* a3 = b ?{iss::Generic<core::int*>*} self::legacyInstance : iss::nullableInstance;
+  iss::Generic<core::int*>* b1 = b ?{iss::Generic<core::int*>*} iss::nonNullableInstance : self::legacyInstance;
+  iss::NonNullable* b2 = b ?{iss::NonNullable*} iss::nonNullableInstance : iss::nonNullableInstance;
+  iss::Generic<core::int*>* b3 = b ?{iss::Generic<core::int*>*} iss::nonNullableInstance : iss::nullableInstance;
+  iss::Generic<core::int*>* c1 = b ?{iss::Generic<core::int*>*} iss::nullableInstance : self::legacyInstance;
+  iss::Generic<core::int*>* c2 = b ?{iss::Generic<core::int*>*} iss::nullableInstance : iss::nonNullableInstance;
+  iss::Nullable* c3 = b ?{iss::Nullable*} iss::nullableInstance : iss::nullableInstance;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as iss;
+import "dart:core" as core;
+import "issue42836.dart" as self;
+
+import "org-dartlang-testcase:///issue42836.dart";
+
+class Generic<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → iss::Generic<iss::Generic::T%>
+    : super core::Object::•()
+    ;
+}
+class NonNullable extends iss::Generic<core::int> {
+  synthetic constructor •() → iss::NonNullable
+    : super iss::Generic::•()
+    ;
+}
+class Nullable extends iss::Generic<core::int?> {
+  synthetic constructor •() → iss::Nullable
+    : super iss::Generic::•()
+    ;
+}
+static field iss::NonNullable nonNullableInstance = new iss::NonNullable::•();
+static field iss::Nullable nullableInstance = new iss::Nullable::•();
+static method test(core::bool b) → dynamic {
+  self::Legacy a1 = b ?{self::Legacy*} self::legacyInstance : self::legacyInstance;
+  core::Object a2 = b ?{core::Object*} self::legacyInstance : iss::nonNullableInstance;
+  core::Object a3 = b ?{core::Object*} self::legacyInstance : iss::nullableInstance;
+  core::Object b1 = b ?{core::Object*} iss::nonNullableInstance : self::legacyInstance;
+  iss::NonNullable b2 = b ?{iss::NonNullable} iss::nonNullableInstance : iss::nonNullableInstance;
+  core::Object b3 = b ?{core::Object} iss::nonNullableInstance : iss::nullableInstance;
+  core::Object c1 = b ?{core::Object*} iss::nullableInstance : self::legacyInstance;
+  core::Object c2 = b ?{core::Object} iss::nullableInstance : iss::nonNullableInstance;
+  iss::Nullable c3 = b ?{iss::Nullable} iss::nullableInstance : iss::nullableInstance;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.modular.expect
new file mode 100644
index 0000000..e31e167
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.modular.expect
@@ -0,0 +1,119 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _E1&Object&A = core::Object with mai::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E1&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{mai::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _E1&Object&A&D = self::_E1&Object&A with mai::D /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E1&Object&A&D*
+    : super self::_E1&Object&A::•()
+    ;
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::_E1&Object&A::method}(i, s: s);
+}
+class E1 extends self::_E1&Object&A&D {
+  synthetic constructor •() → self::E1*
+    : super self::_E1&Object&A&D::•()
+    ;
+}
+abstract class _E2&Object&A = core::Object with mai::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E2&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{mai::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E2 = self::_E2&Object&A with mai::D /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::E2*
+    : super self::_E2&Object&A::•()
+    ;
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::_E2&Object&A::method}(i, s: s);
+}
+abstract class _E3&Object&A = core::Object with mai::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E3&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{mai::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E3 = self::_E3&Object&A with mai::F /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::E3*
+    : super self::_E3&Object&A::•()
+    ;
+}
+abstract class C6 extends mai::C3 implements mai::C4 {
+  synthetic constructor •() → self::C6*
+    : super mai::C3::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a]) → dynamic;
+}
+abstract class C8 extends mai::C5 implements mai::C7 {
+  synthetic constructor •() → self::C8*
+    : super mai::C5::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a, core::num* b]) → dynamic;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "hello"
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.modular.expect
new file mode 100644
index 0000000..76b963e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.modular.expect
@@ -0,0 +1,188 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _E1&Object&A = core::Object with mai::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E1&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{mai::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _E1&Object&A&D = self::_E1&Object&A with mai::D /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E1&Object&A&D*
+    : super self::_E1&Object&A::•()
+    ;
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::_E1&Object&A::method}(i, s: s);
+}
+class E1 extends self::_E1&Object&A&D {
+  synthetic constructor •() → self::E1*
+    : super self::_E1&Object&A&D::•()
+    ;
+}
+abstract class _E2&Object&A = core::Object with mai::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E2&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{mai::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E2 = self::_E2&Object&A with mai::D /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::E2*
+    : super self::_E2&Object&A::•()
+    ;
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{self::_E2&Object&A::method}(i, s: s);
+}
+abstract class _E3&Object&A = core::Object with mai::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_E3&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+    return super.{mai::A::method}(i, s: s);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E3 = self::_E3&Object&A with mai::F /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::E3*
+    : super self::_E3&Object&A::•()
+    ;
+}
+abstract class C6 extends mai::C3 implements mai::C4 {
+  synthetic constructor •() → self::C6*
+    : super mai::C3::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a]) → dynamic;
+}
+abstract class C8 extends mai::C5 implements mai::C7 {
+  synthetic constructor •() → self::C8*
+    : super mai::C5::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a = #C2, core::num* b = #C2]) → dynamic;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → mai::Interface
+    : super core::Object::•()
+    ;
+  abstract method method(core::num i) → core::String;
+}
+abstract class Interface2 extends core::Object {
+  synthetic constructor •() → mai::Interface2
+    : super core::Object::•()
+    ;
+  abstract method method(covariant-by-declaration core::int i) → core::String;
+}
+abstract class A extends core::Object implements mai::Interface /*isMixinDeclaration*/  {
+  method method(core::num i, {core::String s = #C1}) → core::String
+    return s;
+}
+abstract class D extends core::Object implements mai::Interface, mai::Interface2 {
+  synthetic constructor •() → mai::D
+    : super core::Object::•()
+    ;
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
+}
+abstract class F extends core::Object implements mai::Interface {
+  synthetic constructor •() → mai::F
+    : super core::Object::•()
+    ;
+}
+abstract class C1 extends core::Object {
+  synthetic constructor •() → mai::C1
+    : super core::Object::•()
+    ;
+  abstract method method2() → dynamic;
+}
+abstract class C2 extends core::Object {
+  synthetic constructor •() → mai::C2
+    : super core::Object::•()
+    ;
+  abstract method method2([core::String a = #C2]) → dynamic;
+}
+abstract class C3 extends core::Object implements mai::C1, mai::C2 {
+  synthetic constructor •() → mai::C3
+    : super core::Object::•()
+    ;
+  abstract member-signature method method2([core::String a = #C2]) → dynamic; -> mai::C2::method2
+}
+abstract class C4 extends core::Object {
+  synthetic constructor •() → mai::C4
+    : super core::Object::•()
+    ;
+  abstract method method2([covariant-by-declaration core::String a = #C2]) → dynamic;
+}
+abstract class C5 extends mai::C3 implements mai::C4 {
+  synthetic constructor •() → mai::C5
+    : super mai::C3::•()
+    ;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String a = #C2]) → dynamic;
+}
+abstract class C7 extends core::Object {
+  synthetic constructor •() → mai::C7
+    : super core::Object::•()
+    ;
+  abstract method method2([core::String a = #C2, core::num b = #C2]) → dynamic;
+}
+
+constants  {
+  #C1 = "hello"
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.weak.modular.expect
new file mode 100644
index 0000000..c718f8d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "issue46518_lib.dart" as iss;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue46518_lib.dart";
+
+static method main() → void {
+  iss::checkOptedIn(#C1);
+}
+
+library /*isNonNullableByDefault*/;
+import self as iss;
+import "dart:core" as core;
+
+typedef NullableIntF = () → core::int?;
+static method _check(core::Type t1, core::Type t2) → void {
+  core::print("Opted in: identical(${t1}, ${t2}) == ${core::identical(t1, t2)}");
+  core::print("Opted in: (${t1} == ${t2}) == ${t1 =={core::Type::==}{(core::Object) → core::bool} t2}");
+}
+static method checkOptedIn(core::Type t) → void {
+  iss::_check(t, #C1);
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(() →* core::int?)
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/literal_from_opt_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/literal_from_opt_in.dart.weak.modular.expect
new file mode 100644
index 0000000..6c3539d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/literal_from_opt_in.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "literal_from_opt_in_lib.dart" as lit;
+
+import "org-dartlang-testcase:///literal_from_opt_in_lib.dart";
+
+static method main() → dynamic {
+  core::List<lit::Const<core::int*>*>* l1 = #C3;
+  core::List<lit::Const<core::int*>*>* l2 = #C5;
+  core::List<lit::Const<core::int*>*>* l3 = #C8;
+  core::List<lit::Const<core::int*>*>* l4 = #C3;
+  core::List<lit::Const<core::int*>*>* l5 = #C9;
+}
+
+library /*isNonNullableByDefault*/;
+import self as lit;
+import "dart:core" as core;
+
+class Const<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field lit::Const::T% field;
+  const constructor •(lit::Const::T% field) → lit::Const<lit::Const::T%>
+    : lit::Const::field = field, super core::Object::•()
+    ;
+}
+static const field lit::Const<core::int> a = #C2;
+static const field lit::Const<core::int?> b = #C4;
+static const field lit::Const<core::int?> c = #C7;
+static const field lit::Const<core::int>? d = #C2;
+static const field lit::Const<core::int>? e = #C6;
+
+constants  {
+  #C1 = 0
+  #C2 = lit::Const<core::int*> {field:#C1}
+  #C3 = <lit::Const<core::int*>*>[#C2]
+  #C4 = lit::Const<core::int?> {field:#C1}
+  #C5 = <lit::Const<core::int*>*>[#C4]
+  #C6 = null
+  #C7 = lit::Const<core::int?> {field:#C6}
+  #C8 = <lit::Const<core::int*>*>[#C7]
+  #C9 = <lit::Const<core::int*>*>[#C6]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///literal_from_opt_in_lib.dart:
+- Const. (from org-dartlang-testcase:///literal_from_opt_in_lib.dart:8:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd_mixed/main_declaration.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/main_declaration.dart.weak.modular.expect
new file mode 100644
index 0000000..58118e1
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/main_declaration.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+
+import "org-dartlang-testcase:///main_declaration_lib.dart";
+
+static method main() → dynamic {}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+static method main(core::String* args) → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.modular.expect
new file mode 100644
index 0000000..9e000b7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_in.dart.weak.modular.expect
@@ -0,0 +1,182 @@
+library;
+import self as self;
+import "member_inheritance_from_opt_in_lib.dart" as mem;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///member_inheritance_from_opt_in_lib.dart";
+
+class LegacyClass extends mem::Class implements mem::Interface {
+  field core::int* field3 = null;
+  field core::int* field4 = null;
+  field core::int* property7 = null;
+  field core::int* property8 = null;
+  synthetic constructor •() → self::LegacyClass*
+    : super mem::Class::•()
+    ;
+  method method3() → core::int*
+    return 0;
+  method method4() → core::int*
+    return 0;
+  method method6a(core::int* a, core::int* b) → core::int*
+    return 0;
+  method method6b(core::int* a, [core::int* b = #C1]) → core::int*
+    return 0;
+  method method6c([core::int* a = #C1, core::int* b = #C1]) → core::int*
+    return 0;
+  method method8a(core::int* a, {core::int* b = #C2}) → core::int*
+    return 0;
+  method method8b({core::int* a = #C1, core::int* b = #C2}) → core::int*
+    return 0;
+  method method10a(core::int* a, {core::int* b = #C1}) → core::int*
+    return 0;
+  method method10b({core::int* a = #C1, core::int* b = #C1}) → core::int*
+    return 0;
+  get getter3() → core::int*
+    return 0;
+  get getter4() → core::int*
+    return 0;
+  set setter3(core::int* value) → void {}
+  set setter4(core::int* value) → void {}
+  get property3() → core::int*
+    return 0;
+  set property3(core::int* value) → void {}
+  get property4() → core::int*
+    return 0;
+  set property4(core::int* value) → void {}
+  abstract member-signature get field1() → core::int*; -> mem::Class::field1
+  abstract member-signature set field1(core::int* value) → void; -> mem::Class::field1
+  abstract member-signature get field2() → core::int*; -> mem::Class::field2
+  abstract member-signature set field2(core::int* value) → void; -> mem::Class::field2
+  abstract member-signature get property1() → core::int*; -> mem::Class::property1
+  abstract member-signature set property1(core::int* value) → void; -> mem::Class::property1
+  abstract member-signature get property2() → core::int*; -> mem::Class::property2
+  abstract member-signature set property2(core::int* value) → void; -> mem::Class::property2
+  abstract member-signature get property5() → core::int*; -> mem::Class::property5
+  abstract member-signature set property5(core::int* value) → void; -> mem::Class::property5
+  abstract member-signature get property6() → core::int*; -> mem::Class::property6
+  abstract member-signature set property6(core::int* value) → void; -> mem::Class::property6
+  abstract member-signature method method1() → core::int*; -> mem::Class::method1
+  abstract member-signature method method2() → core::int*; -> mem::Class::method2
+  abstract member-signature method method5a(core::int* a, core::int* b) → core::int*; -> mem::Class::method5a
+  abstract member-signature method method5b(core::int* a, [core::int* b = #C1]) → core::int*; -> mem::Class::method5b
+  abstract member-signature method method5c([core::int* a = #C2, core::int* b = #C1]) → core::int*; -> mem::Class::method5c
+  abstract member-signature method method7a(core::int* a, {core::int* b = #C1}) → core::int*; -> mem::Class::method7a
+  abstract member-signature method method7b({core::int* a = #C2, core::int* b = #C1}) → core::int*; -> mem::Class::method7b
+  abstract member-signature method method9a(core::int* a, {core::int* b = #C1}) → core::int*; -> mem::Class::method9a
+  abstract member-signature method method9b({core::int* a = #C1, core::int* b = #C1}) → core::int*; -> mem::Class::method9b
+  abstract member-signature get getter1() → core::int*; -> mem::Class::getter1
+  abstract member-signature get getter2() → core::int*; -> mem::Class::getter2
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature set setter1(core::int* value) → void; -> mem::Class::setter1
+  abstract member-signature set setter2(core::int* value) → void; -> mem::Class::setter2
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mem;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  field core::int? field1 = null;
+  field core::int field2 = 0;
+  field core::int field3 = 0;
+  field core::int? field4 = null;
+  synthetic constructor •() → mem::Interface
+    : super core::Object::•()
+    ;
+  abstract method method1() → core::int?;
+  abstract method method2() → core::int;
+  abstract method method3() → core::int;
+  abstract method method4() → core::int?;
+  abstract method method5a(core::int a, core::int? b) → core::int;
+  abstract method method5b(core::int a, [core::int? b = #C1]) → core::int;
+  abstract method method5c([core::int a = #C2, core::int? b = #C1]) → core::int;
+  abstract method method6a(core::int? a, core::int b) → core::int?;
+  abstract method method6b(core::int? a, [core::int b = #C2]) → core::int?;
+  abstract method method6c([core::int? a = #C1, core::int b = #C2]) → core::int?;
+  abstract method method7a(core::int a, {core::int? b = #C1}) → core::int;
+  abstract method method7b({core::int a = #C2, core::int? b = #C1}) → core::int;
+  abstract method method8a(core::int? a, {core::int b = #C2}) → core::int?;
+  abstract method method8b({core::int? a = #C1, core::int b = #C2}) → core::int?;
+  abstract method method9a(core::int a, {required core::int? b = #C1}) → core::int;
+  abstract method method9b({required core::int a = #C1, required core::int? b = #C1}) → core::int;
+  abstract method method10a(core::int? a, {required core::int b = #C1}) → core::int?;
+  abstract method method10b({required core::int? a = #C1, required core::int b = #C1}) → core::int?;
+  abstract get getter1() → core::int?;
+  abstract get getter2() → core::int;
+  abstract get getter3() → core::int;
+  abstract get getter4() → core::int?;
+  abstract set setter1(core::int? value) → void;
+  abstract set setter2(core::int value) → void;
+  abstract set setter3(core::int value) → void;
+  abstract set setter4(core::int? value) → void;
+  abstract get property1() → core::int?;
+  abstract set property1(core::int? value) → void;
+  abstract get property2() → core::int;
+  abstract set property2(core::int value) → void;
+  abstract get property3() → core::int;
+  abstract set property3(core::int value) → void;
+  abstract get property4() → core::int?;
+  abstract set property4(core::int? value) → void;
+  abstract get property5() → core::int?;
+  abstract set property5(core::int? value) → void;
+  abstract get property6() → core::int;
+  abstract set property6(core::int value) → void;
+  abstract get property7() → core::int;
+  abstract set property7(core::int value) → void;
+  abstract get property8() → core::int?;
+  abstract set property8(core::int? value) → void;
+}
+class Class extends core::Object {
+  field core::int field1 = 0;
+  field core::int? field2 = null;
+  field core::int property5 = 0;
+  field core::int? property6 = null;
+  synthetic constructor •() → mem::Class
+    : super core::Object::•()
+    ;
+  method method1() → core::int
+    return 0;
+  method method2() → core::int?
+    return 0;
+  method method5a(core::int a, core::int? b) → core::int
+    return 0;
+  method method5b(core::int a, [core::int? b = #C1]) → core::int
+    return 0;
+  method method5c([core::int a = #C2, core::int? b = #C1]) → core::int
+    return 0;
+  method method7a(core::int a, {core::int? b = #C1}) → core::int
+    return 0;
+  method method7b({core::int a = #C2, core::int? b = #C1}) → core::int
+    return 0;
+  method method9a(core::int a, {required core::int? b = #C1}) → core::int
+    return 0;
+  method method9b({required core::int a = #C1, required core::int? b = #C1}) → core::int
+    return 0;
+  get getter1() → core::int
+    return 0;
+  get getter2() → core::int?
+    return 0;
+  set setter1(core::int value) → void {}
+  set setter2(core::int? value) → void {}
+  get property1() → core::int
+    return 0;
+  set property1(core::int value) → void {}
+  get property2() → core::int?
+    return 0;
+  set property2(core::int? value) → void {}
+}
+
+constants  {
+  #C1 = null
+  #C2 = 0
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..fc797ac
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/member_inheritance_from_opt_out.dart.weak.modular.expect
@@ -0,0 +1,266 @@
+library main /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "member_inheritance_from_opt_out_lib.dart" as opt;
+
+import "org-dartlang-testcase:///member_inheritance_from_opt_out_lib.dart";
+
+abstract class Interface extends core::Object {
+  field core::int field1 = 0;
+  field core::int? field2 = null;
+  field core::int property3 = 0;
+  field core::int? property4 = null;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract method method1() → core::int;
+  abstract method method2() → core::int?;
+  abstract method method3a(core::int a, core::int b) → core::int;
+  abstract method method3b(core::int a, [core::int b = #C1]) → core::int;
+  abstract method method3c([core::int a = #C1, core::int b = #C1]) → core::int;
+  abstract method method4a(core::int? a, core::int? b) → core::int?;
+  abstract method method4b(core::int? a, [core::int? b = #C1]) → core::int?;
+  abstract method method4c([core::int? a = #C1, core::int? b = #C1]) → core::int?;
+  abstract method method5a(core::int a, {core::int b = #C2}) → core::int;
+  abstract method method5b({core::int a = #C2, core::int b = #C2}) → core::int;
+  abstract method method5c({required core::int a = #C1, required core::int b = #C1}) → core::int;
+  abstract method method6a(core::int? a, {core::int? b = #C1}) → core::int?;
+  abstract method method6b({core::int? a = #C1, core::int? b = #C1}) → core::int?;
+  abstract method method6c({required core::int? a = #C1, required core::int? b = #C1}) → core::int?;
+  abstract get getter1() → core::int;
+  abstract get getter2() → core::int?;
+  abstract set setter1(core::int value) → void;
+  abstract set setter2(core::int? value) → void;
+  abstract get field3() → core::int;
+  abstract set field3(core::int value) → void;
+  abstract get field4() → core::int?;
+  abstract set field4(core::int? value) → void;
+  abstract get property1() → core::int;
+  abstract set property1(core::int value) → void;
+  abstract get property2() → core::int?;
+  abstract set property2(core::int? value) → void;
+}
+class Class1 extends opt::LegacyClass {
+  synthetic constructor •() → self::Class1
+    : super opt::LegacyClass::•()
+    ;
+}
+class Class2a extends opt::LegacyClass implements self::Interface {
+  synthetic constructor •() → self::Class2a
+    : super opt::LegacyClass::•()
+    ;
+  abstract member-signature get field1() → core::int; -> opt::LegacyClass::field1
+  abstract member-signature set field1(core::int value) → void; -> opt::LegacyClass::field1
+  abstract member-signature get field2() → core::int?; -> opt::LegacyClass::field2
+  abstract member-signature set field2(core::int? value) → void; -> opt::LegacyClass::field2
+  abstract member-signature get field3() → core::int; -> opt::LegacyClass::field3
+  abstract member-signature set field3(core::int value) → void; -> opt::LegacyClass::field3
+  abstract member-signature get field4() → core::int?; -> opt::LegacyClass::field4
+  abstract member-signature set field4(core::int? value) → void; -> opt::LegacyClass::field4
+  abstract member-signature get property1() → core::int; -> opt::LegacyClass::property1
+  abstract member-signature set property1(core::int value) → void; -> opt::LegacyClass::property1
+  abstract member-signature get property2() → core::int?; -> opt::LegacyClass::property2
+  abstract member-signature set property2(core::int? value) → void; -> opt::LegacyClass::property2
+  abstract member-signature get property3() → core::int; -> opt::LegacyClass::property3
+  abstract member-signature set property3(core::int value) → void; -> opt::LegacyClass::property3
+  abstract member-signature get property4() → core::int?; -> opt::LegacyClass::property4
+  abstract member-signature set property4(core::int? value) → void; -> opt::LegacyClass::property4
+  abstract member-signature method method1() → core::int; -> opt::LegacyClass::method1
+  abstract member-signature method method2() → core::int?; -> opt::LegacyClass::method2
+  abstract member-signature method method3a(core::int a, core::int b) → core::int; -> opt::LegacyClass::method3a
+  abstract member-signature method method3b(core::int a, [core::int b = #C1]) → core::int; -> opt::LegacyClass::method3b
+  abstract member-signature method method3c([core::int a = #C1, core::int b = #C1]) → core::int; -> opt::LegacyClass::method3c
+  abstract member-signature method method4a(core::int? a, core::int? b) → core::int?; -> opt::LegacyClass::method4a
+  abstract member-signature method method4b(core::int? a, [core::int? b = #C1]) → core::int?; -> opt::LegacyClass::method4b
+  abstract member-signature method method4c([core::int? a = #C1, core::int? b = #C1]) → core::int?; -> opt::LegacyClass::method4c
+  abstract member-signature method method5a(core::int a, {core::int b = #C1}) → core::int; -> opt::LegacyClass::method5a
+  abstract member-signature method method5b({core::int a = #C1, core::int b = #C1}) → core::int; -> opt::LegacyClass::method5b
+  abstract member-signature method method6a(core::int? a, {core::int? b = #C1}) → core::int?; -> opt::LegacyClass::method6a
+  abstract member-signature method method6b({core::int? a = #C1, core::int? b = #C1}) → core::int?; -> opt::LegacyClass::method6b
+  abstract member-signature get getter1() → core::int; -> opt::LegacyClass::getter1
+  abstract member-signature get getter2() → core::int?; -> opt::LegacyClass::getter2
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+  abstract member-signature set setter1(core::int value) → void; -> opt::LegacyClass::setter1
+  abstract member-signature set setter2(core::int? value) → void; -> opt::LegacyClass::setter2
+}
+class Class2b extends opt::LegacyClass implements self::Interface {
+  field core::int field1 = 0;
+  field core::int? field2 = null;
+  field core::int property3 = 0;
+  field core::int? property4 = null;
+  synthetic constructor •() → self::Class2b
+    : super opt::LegacyClass::•()
+    ;
+  method method1() → core::int
+    return 0;
+  method method2() → core::int?
+    return 0;
+  method method3a(core::int a, core::int b) → core::int
+    return 0;
+  method method3b(core::int a, [core::int b = #C3]) → core::int
+    return 0;
+  method method3c([core::int a = #C3, core::int b = #C3]) → core::int
+    return 0;
+  method method4a(core::int? a, core::int? b) → core::int?
+    return 0;
+  method method4b(core::int? a, [core::int? b = #C1]) → core::int?
+    return 0;
+  method method4c([core::int? a = #C1, core::int? b = #C1]) → core::int?
+    return 0;
+  method method5a(core::int a, {core::int b = #C2}) → core::int
+    return 0;
+  method method5b({core::int a = #C2, core::int b = #C2}) → core::int
+    return 0;
+  method method5c({required core::int a = #C1, required core::int b = #C1}) → core::int
+    return 0;
+  method method6a(core::int? a, {core::int? b = #C1}) → core::int?
+    return 0;
+  method method6b({core::int? a = #C1, core::int? b = #C1}) → core::int?
+    return 0;
+  method method6c({required core::int? a = #C1, required core::int? b = #C1}) → core::int?
+    return 0;
+  get getter1() → core::int
+    return 0;
+  get getter2() → core::int?
+    return 0;
+  set setter1(core::int value) → void {}
+  set setter2(core::int? value) → void {}
+  get field3() → core::int
+    return 0;
+  set field3(core::int value) → void {}
+  get field4() → core::int?
+    return 0;
+  set field4(core::int? value) → void {}
+  get property1() → core::int
+    return 0;
+  set property1(core::int value) → void {}
+  get property2() → core::int?
+    return 0;
+  set property2(core::int? value) → void {}
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+}
+class Class3a extends opt::GenericLegacyClass<core::int> {
+  synthetic constructor •() → self::Class3a
+    : super opt::GenericLegacyClass::•()
+    ;
+}
+class Class3b extends opt::GenericLegacyClass<core::int?> {
+  synthetic constructor •() → self::Class3b
+    : super opt::GenericLegacyClass::•()
+    ;
+}
+class Class3c<S extends core::Object? = dynamic> extends opt::GenericLegacyClass<self::Class3c::S%> {
+  synthetic constructor •() → self::Class3c<self::Class3c::S%>
+    : super opt::GenericLegacyClass::•()
+    ;
+}
+static method main() → dynamic {}
+
+library opt_out;
+import self as opt;
+import "dart:core" as core;
+
+class LegacyClass extends core::Object {
+  field core::int* field1 = null;
+  field core::int* field2 = null;
+  field core::int* field3 = null;
+  field core::int* field4 = null;
+  synthetic constructor •() → opt::LegacyClass*
+    : super core::Object::•()
+    ;
+  method method1() → core::int*
+    return 0;
+  method method2() → core::int*
+    return 0;
+  method method3a(core::int* a, core::int* b) → core::int*
+    return 0;
+  method method3b(core::int* a, [core::int* b = #C1]) → core::int*
+    return 0;
+  method method3c([core::int* a = #C1, core::int* b = #C1]) → core::int*
+    return 0;
+  method method4a(core::int* a, core::int* b) → core::int*
+    return 0;
+  method method4b(core::int* a, [core::int* b = #C1]) → core::int*
+    return 0;
+  method method4c([core::int* a = #C1, core::int* b = #C1]) → core::int*
+    return 0;
+  method method5a(core::int* a, {core::int* b = #C1}) → core::int*
+    return 0;
+  method method5b({core::int* a = #C1, core::int* b = #C1}) → core::int*
+    return 0;
+  method method5c({core::int* a = #C1, core::int* b = #C1}) → core::int*
+    return 0;
+  method method6a(core::int* a, {core::int* b = #C1}) → core::int*
+    return 0;
+  method method6b({core::int* a = #C1, core::int* b = #C1}) → core::int*
+    return 0;
+  method method6c({core::int* a = #C1, core::int* b = #C1}) → core::int*
+    return 0;
+  get getter1() → core::int*
+    return 0;
+  get getter2() → core::int*
+    return 0;
+  set setter1(core::int* value) → void {}
+  set setter2(core::int* value) → void {}
+  get property1() → core::int*
+    return 0;
+  set property1(core::int* value) → void {}
+  get property2() → core::int*
+    return 0;
+  set property2(core::int* value) → void {}
+  get property3() → core::int*
+    return 0;
+  set property3(core::int* value) → void {}
+  get property4() → core::int*
+    return 0;
+  set property4(core::int* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class GenericLegacyClass<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → opt::GenericLegacyClass<opt::GenericLegacyClass::T*>*
+    : super core::Object::•()
+    ;
+  method method1() → opt::GenericLegacyClass::T*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+constants  {
+  #C1 = null
+  #C2 = 0
+  #C3 = 42
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart.weak.modular.expect
new file mode 100644
index 0000000..33ff672
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart.weak.modular.expect
@@ -0,0 +1,274 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:17:6: Error: The return type of the method 'SubInIn.nullableBad' is 'T?', which does not match the return type, 'int?', of the overridden method, 'SuperIn.nullableBad'.
+// Change to a subtype of 'int?'.
+//   T? nullableBad<T>(T t) => null;
+//      ^
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:10:8: Context: This is the overridden method ('nullableBad').
+//   int? nullableBad<T>(T t) => 1;
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:18:5: Error: The return type of the method 'SubInIn.nonNullableBad' is 'T', which does not match the return type, 'int', of the overridden method, 'SuperIn.nonNullableBad'.
+// Change to a subtype of 'int'.
+//   T nonNullableBad<T>(T t) => t;
+//     ^
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:11:7: Context: This is the overridden method ('nonNullableBad').
+//   int nonNullableBad<T>(T t) => 2;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:24:6: Error: The return type of the method 'SubOutIn.nullableBad' is 'T?', which does not match the return type, 'int', of the overridden method, 'SuperOut.nullableBad'.
+// Change to a subtype of 'int'.
+//   T? nullableBad<T>(T t) => null;
+//      ^
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:12:7: Context: This is the overridden method ('nullableBad').
+//   int nullableBad<T>(T t) => 1;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:25:5: Error: The return type of the method 'SubOutIn.nonNullableBad' is 'T', which does not match the return type, 'int', of the overridden method, 'SuperOut.nonNullableBad'.
+// Change to a subtype of 'int'.
+//   T nonNullableBad<T>(T t) => t;
+//     ^
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:13:7: Context: This is the overridden method ('nonNullableBad').
+//   int nonNullableBad<T>(T t) => 2;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:32:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()?'.
+//   nullableVar = nonNullableVar;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:33:20: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'double'.
+//   nonNullableVar = nullableVar;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:34:15: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'String'.
+//   legacyVar = nullableVar;
+//               ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:35:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()?'.
+//   nullableVar = legacyVar;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:36:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
+//   nonNullableVar = legacyVar;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:37:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//   legacyVar = nonNullableVar;
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+import "messages_with_types_opt_out.dart" as mes;
+
+import "org-dartlang-testcase:///messages_with_types_opt_out.dart";
+
+class SuperIn extends core::Object {
+  synthetic constructor •() → self::SuperIn
+    : super core::Object::•()
+    ;
+  method nullableSame() → core::String?
+    return "foo";
+  method nonNullableSame() → core::String
+    return "bar";
+  method nullableBad<T extends core::Object? = dynamic>(self::SuperIn::nullableBad::T% t) → core::int?
+    return 1;
+  method nonNullableBad<T extends core::Object? = dynamic>(self::SuperIn::nonNullableBad::T% t) → core::int
+    return 2;
+}
+class SubInIn extends self::SuperIn {
+  synthetic constructor •() → self::SubInIn
+    : super self::SuperIn::•()
+    ;
+  method nullableSame() → core::String?
+    return "foo";
+  method nonNullableSame() → core::String
+    return "bar";
+  method nullableBad<T extends core::Object? = dynamic>(self::SubInIn::nullableBad::T% t) → self::SubInIn::nullableBad::T?
+    return null;
+  method nonNullableBad<T extends core::Object? = dynamic>(self::SubInIn::nonNullableBad::T% t) → self::SubInIn::nonNullableBad::T%
+    return t;
+}
+class SubOutIn extends mes::SuperOut {
+  synthetic constructor •() → self::SubOutIn
+    : super mes::SuperOut::•()
+    ;
+  method nullableSame() → core::String?
+    return "foo";
+  method nonNullableSame() → core::String
+    return "bar";
+  method nullableBad<T extends core::Object? = dynamic>(self::SubOutIn::nullableBad::T% t) → self::SubOutIn::nullableBad::T?
+    return null;
+  method nonNullableBad<T extends core::Object? = dynamic>(self::SubOutIn::nonNullableBad::T% t) → self::SubOutIn::nonNullableBad::T%
+    return t;
+}
+static field () →? core::int nullableVar = () → core::int => 3;
+static field core::double nonNullableVar = 4.0;
+static method testOptIn() → dynamic {
+  self::nullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:32:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()?'.
+  nullableVar = nonNullableVar;
+                ^" in self::nonNullableVar as{TypeError,ForNonNullableByDefault} () →? core::int;
+  self::nonNullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:33:20: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'double'.
+  nonNullableVar = nullableVar;
+                   ^" in self::nullableVar as{TypeError,ForNonNullableByDefault} core::double;
+  mes::legacyVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:34:15: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'String'.
+  legacyVar = nullableVar;
+              ^" in self::nullableVar as{TypeError,ForNonNullableByDefault} core::String*;
+  self::nullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:35:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()?'.
+  nullableVar = legacyVar;
+                ^" in mes::legacyVar as{TypeError,ForNonNullableByDefault} () →? core::int;
+  self::nonNullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:36:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
+  nonNullableVar = legacyVar;
+                   ^" in mes::legacyVar as{TypeError,ForNonNullableByDefault} core::double;
+  mes::legacyVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:37:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  legacyVar = nonNullableVar;
+              ^" in self::nonNullableVar as{TypeError,ForNonNullableByDefault} core::String*;
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:19:5: Error: The return type of the method 'SubOutOut.nullableBad' is 'T', which does not match the return type, 'int', of the overridden method, 'SuperOut.nullableBad'.
+// Change to a subtype of 'int'.
+//   T nullableBad<T>(T t) => null;
+//     ^
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:12:7: Context: This is the overridden method ('nullableBad').
+//   int nullableBad<T>(T t) => 1;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:20:5: Error: The return type of the method 'SubOutOut.nonNullableBad' is 'T', which does not match the return type, 'int', of the overridden method, 'SuperOut.nonNullableBad'.
+// Change to a subtype of 'int'.
+//   T nonNullableBad<T>(T t) => t;
+//     ^
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:13:7: Context: This is the overridden method ('nonNullableBad').
+//   int nonNullableBad<T>(T t) => 2;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:26:5: Error: The return type of the method 'SubInOut.nullableBad' is 'T', which does not match the return type, 'int', of the overridden method, 'SuperIn.nullableBad'.
+// Change to a subtype of 'int'.
+//   T nullableBad<T>(T t) => null;
+//     ^
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:10:8: Context: This is the overridden method ('nullableBad').
+//   int? nullableBad<T>(T t) => 1;
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:27:5: Error: The return type of the method 'SubInOut.nonNullableBad' is 'T', which does not match the return type, 'int', of the overridden method, 'SuperIn.nonNullableBad'.
+// Change to a subtype of 'int'.
+//   T nonNullableBad<T>(T t) => t;
+//     ^
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:11:7: Context: This is the overridden method ('nonNullableBad').
+//   int nonNullableBad<T>(T t) => 2;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:33:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()'.
+//   nullableVar = nonNullableVar;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:34:20: Error: A value of type 'int Function()' can't be assigned to a variable of type 'double'.
+//   nonNullableVar = nullableVar;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:35:15: Error: A value of type 'int Function()' can't be assigned to a variable of type 'String'.
+//   legacyVar = nullableVar;
+//               ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:36:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()'.
+//   nullableVar = legacyVar;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:37:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
+//   nonNullableVar = legacyVar;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:38:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//   legacyVar = nonNullableVar;
+//               ^
+//
+import self as mes;
+import "dart:core" as core;
+import "messages_with_types_opt_in.dart" as self;
+
+import "org-dartlang-testcase:///messages_with_types_opt_in.dart";
+
+class SuperOut extends core::Object {
+  synthetic constructor •() → mes::SuperOut*
+    : super core::Object::•()
+    ;
+  method nullableSame() → core::String*
+    return "foo";
+  method nonNullableSame() → core::String*
+    return "bar";
+  method nullableBad<T extends core::Object* = dynamic>(mes::SuperOut::nullableBad::T* t) → core::int*
+    return 1;
+  method nonNullableBad<T extends core::Object* = dynamic>(mes::SuperOut::nonNullableBad::T* t) → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SubOutOut extends mes::SuperOut {
+  synthetic constructor •() → mes::SubOutOut*
+    : super mes::SuperOut::•()
+    ;
+  method nullableSame() → core::String*
+    return "foo";
+  method nonNullableSame() → core::String*
+    return "bar";
+  method nullableBad<T extends core::Object* = dynamic>(mes::SubOutOut::nullableBad::T* t) → mes::SubOutOut::nullableBad::T*
+    return null;
+  method nonNullableBad<T extends core::Object* = dynamic>(mes::SubOutOut::nonNullableBad::T* t) → mes::SubOutOut::nonNullableBad::T*
+    return t;
+}
+class SubInOut extends self::SuperIn {
+  synthetic constructor •() → mes::SubInOut*
+    : super self::SuperIn::•()
+    ;
+  method nullableSame() → core::String*
+    return "foo";
+  method nonNullableSame() → core::String*
+    return "bar";
+  method nullableBad<T extends core::Object* = dynamic>(mes::SubInOut::nullableBad::T* t) → mes::SubInOut::nullableBad::T*
+    return null;
+  method nonNullableBad<T extends core::Object* = dynamic>(mes::SubInOut::nonNullableBad::T* t) → mes::SubInOut::nonNullableBad::T*
+    return t;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::String* legacyVar = "legacy";
+static method testOptOut() → dynamic {
+  self::nullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:33:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()'.
+  nullableVar = nonNullableVar;
+                ^" in self::nonNullableVar as{TypeError} () →? core::int;
+  self::nonNullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:34:20: Error: A value of type 'int Function()' can't be assigned to a variable of type 'double'.
+  nonNullableVar = nullableVar;
+                   ^" in self::nullableVar as{TypeError} core::double;
+  mes::legacyVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:35:15: Error: A value of type 'int Function()' can't be assigned to a variable of type 'String'.
+  legacyVar = nullableVar;
+              ^" in self::nullableVar as{TypeError} core::String*;
+  self::nullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:36:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()'.
+  nullableVar = legacyVar;
+                ^" in mes::legacyVar as{TypeError} () →? core::int;
+  self::nonNullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:37:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
+  nonNullableVar = legacyVar;
+                   ^" in mes::legacyVar as{TypeError} core::double;
+  mes::legacyVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:38:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  legacyVar = nonNullableVar;
+              ^" in self::nonNullableVar as{TypeError} core::String*;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..8a877f1
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart.weak.modular.expect
@@ -0,0 +1,274 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:19:5: Error: The return type of the method 'SubOutOut.nullableBad' is 'T', which does not match the return type, 'int', of the overridden method, 'SuperOut.nullableBad'.
+// Change to a subtype of 'int'.
+//   T nullableBad<T>(T t) => null;
+//     ^
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:12:7: Context: This is the overridden method ('nullableBad').
+//   int nullableBad<T>(T t) => 1;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:20:5: Error: The return type of the method 'SubOutOut.nonNullableBad' is 'T', which does not match the return type, 'int', of the overridden method, 'SuperOut.nonNullableBad'.
+// Change to a subtype of 'int'.
+//   T nonNullableBad<T>(T t) => t;
+//     ^
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:13:7: Context: This is the overridden method ('nonNullableBad').
+//   int nonNullableBad<T>(T t) => 2;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:26:5: Error: The return type of the method 'SubInOut.nullableBad' is 'T', which does not match the return type, 'int', of the overridden method, 'SuperIn.nullableBad'.
+// Change to a subtype of 'int'.
+//   T nullableBad<T>(T t) => null;
+//     ^
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:10:8: Context: This is the overridden method ('nullableBad').
+//   int? nullableBad<T>(T t) => 1;
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:27:5: Error: The return type of the method 'SubInOut.nonNullableBad' is 'T', which does not match the return type, 'int', of the overridden method, 'SuperIn.nonNullableBad'.
+// Change to a subtype of 'int'.
+//   T nonNullableBad<T>(T t) => t;
+//     ^
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:11:7: Context: This is the overridden method ('nonNullableBad').
+//   int nonNullableBad<T>(T t) => 2;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:33:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()'.
+//   nullableVar = nonNullableVar;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:34:20: Error: A value of type 'int Function()' can't be assigned to a variable of type 'double'.
+//   nonNullableVar = nullableVar;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:35:15: Error: A value of type 'int Function()' can't be assigned to a variable of type 'String'.
+//   legacyVar = nullableVar;
+//               ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:36:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()'.
+//   nullableVar = legacyVar;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:37:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
+//   nonNullableVar = legacyVar;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:38:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//   legacyVar = nonNullableVar;
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+import "messages_with_types_opt_in.dart" as mes;
+
+import "org-dartlang-testcase:///messages_with_types_opt_in.dart";
+
+class SuperOut extends core::Object {
+  synthetic constructor •() → self::SuperOut*
+    : super core::Object::•()
+    ;
+  method nullableSame() → core::String*
+    return "foo";
+  method nonNullableSame() → core::String*
+    return "bar";
+  method nullableBad<T extends core::Object* = dynamic>(self::SuperOut::nullableBad::T* t) → core::int*
+    return 1;
+  method nonNullableBad<T extends core::Object* = dynamic>(self::SuperOut::nonNullableBad::T* t) → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SubOutOut extends self::SuperOut {
+  synthetic constructor •() → self::SubOutOut*
+    : super self::SuperOut::•()
+    ;
+  method nullableSame() → core::String*
+    return "foo";
+  method nonNullableSame() → core::String*
+    return "bar";
+  method nullableBad<T extends core::Object* = dynamic>(self::SubOutOut::nullableBad::T* t) → self::SubOutOut::nullableBad::T*
+    return null;
+  method nonNullableBad<T extends core::Object* = dynamic>(self::SubOutOut::nonNullableBad::T* t) → self::SubOutOut::nonNullableBad::T*
+    return t;
+}
+class SubInOut extends mes::SuperIn {
+  synthetic constructor •() → self::SubInOut*
+    : super mes::SuperIn::•()
+    ;
+  method nullableSame() → core::String*
+    return "foo";
+  method nonNullableSame() → core::String*
+    return "bar";
+  method nullableBad<T extends core::Object* = dynamic>(self::SubInOut::nullableBad::T* t) → self::SubInOut::nullableBad::T*
+    return null;
+  method nonNullableBad<T extends core::Object* = dynamic>(self::SubInOut::nonNullableBad::T* t) → self::SubInOut::nonNullableBad::T*
+    return t;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::String* legacyVar = "legacy";
+static method testOptOut() → dynamic {
+  mes::nullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:33:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()'.
+  nullableVar = nonNullableVar;
+                ^" in mes::nonNullableVar as{TypeError} () →? core::int;
+  mes::nonNullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:34:20: Error: A value of type 'int Function()' can't be assigned to a variable of type 'double'.
+  nonNullableVar = nullableVar;
+                   ^" in mes::nullableVar as{TypeError} core::double;
+  self::legacyVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:35:15: Error: A value of type 'int Function()' can't be assigned to a variable of type 'String'.
+  legacyVar = nullableVar;
+              ^" in mes::nullableVar as{TypeError} core::String*;
+  mes::nullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:36:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()'.
+  nullableVar = legacyVar;
+                ^" in self::legacyVar as{TypeError} () →? core::int;
+  mes::nonNullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:37:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
+  nonNullableVar = legacyVar;
+                   ^" in self::legacyVar as{TypeError} core::double;
+  self::legacyVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:38:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  legacyVar = nonNullableVar;
+              ^" in mes::nonNullableVar as{TypeError} core::String*;
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:17:6: Error: The return type of the method 'SubInIn.nullableBad' is 'T?', which does not match the return type, 'int?', of the overridden method, 'SuperIn.nullableBad'.
+// Change to a subtype of 'int?'.
+//   T? nullableBad<T>(T t) => null;
+//      ^
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:10:8: Context: This is the overridden method ('nullableBad').
+//   int? nullableBad<T>(T t) => 1;
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:18:5: Error: The return type of the method 'SubInIn.nonNullableBad' is 'T', which does not match the return type, 'int', of the overridden method, 'SuperIn.nonNullableBad'.
+// Change to a subtype of 'int'.
+//   T nonNullableBad<T>(T t) => t;
+//     ^
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:11:7: Context: This is the overridden method ('nonNullableBad').
+//   int nonNullableBad<T>(T t) => 2;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:24:6: Error: The return type of the method 'SubOutIn.nullableBad' is 'T?', which does not match the return type, 'int', of the overridden method, 'SuperOut.nullableBad'.
+// Change to a subtype of 'int'.
+//   T? nullableBad<T>(T t) => null;
+//      ^
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:12:7: Context: This is the overridden method ('nullableBad').
+//   int nullableBad<T>(T t) => 1;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:25:5: Error: The return type of the method 'SubOutIn.nonNullableBad' is 'T', which does not match the return type, 'int', of the overridden method, 'SuperOut.nonNullableBad'.
+// Change to a subtype of 'int'.
+//   T nonNullableBad<T>(T t) => t;
+//     ^
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_out.dart:13:7: Context: This is the overridden method ('nonNullableBad').
+//   int nonNullableBad<T>(T t) => 2;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:32:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()?'.
+//   nullableVar = nonNullableVar;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:33:20: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'double'.
+//   nonNullableVar = nullableVar;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:34:15: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'String'.
+//   legacyVar = nullableVar;
+//               ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:35:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()?'.
+//   nullableVar = legacyVar;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:36:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
+//   nonNullableVar = legacyVar;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:37:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//   legacyVar = nonNullableVar;
+//               ^
+//
+import self as mes;
+import "dart:core" as core;
+import "messages_with_types_opt_out.dart" as self;
+
+import "org-dartlang-testcase:///messages_with_types_opt_out.dart";
+
+class SuperIn extends core::Object {
+  synthetic constructor •() → mes::SuperIn
+    : super core::Object::•()
+    ;
+  method nullableSame() → core::String?
+    return "foo";
+  method nonNullableSame() → core::String
+    return "bar";
+  method nullableBad<T extends core::Object? = dynamic>(mes::SuperIn::nullableBad::T% t) → core::int?
+    return 1;
+  method nonNullableBad<T extends core::Object? = dynamic>(mes::SuperIn::nonNullableBad::T% t) → core::int
+    return 2;
+}
+class SubInIn extends mes::SuperIn {
+  synthetic constructor •() → mes::SubInIn
+    : super mes::SuperIn::•()
+    ;
+  method nullableSame() → core::String?
+    return "foo";
+  method nonNullableSame() → core::String
+    return "bar";
+  method nullableBad<T extends core::Object? = dynamic>(mes::SubInIn::nullableBad::T% t) → mes::SubInIn::nullableBad::T?
+    return null;
+  method nonNullableBad<T extends core::Object? = dynamic>(mes::SubInIn::nonNullableBad::T% t) → mes::SubInIn::nonNullableBad::T%
+    return t;
+}
+class SubOutIn extends self::SuperOut {
+  synthetic constructor •() → mes::SubOutIn
+    : super self::SuperOut::•()
+    ;
+  method nullableSame() → core::String?
+    return "foo";
+  method nonNullableSame() → core::String
+    return "bar";
+  method nullableBad<T extends core::Object? = dynamic>(mes::SubOutIn::nullableBad::T% t) → mes::SubOutIn::nullableBad::T?
+    return null;
+  method nonNullableBad<T extends core::Object? = dynamic>(mes::SubOutIn::nonNullableBad::T% t) → mes::SubOutIn::nonNullableBad::T%
+    return t;
+}
+static field () →? core::int nullableVar = () → core::int => 3;
+static field core::double nonNullableVar = 4.0;
+static method testOptIn() → dynamic {
+  mes::nullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:32:17: Error: A value of type 'double' can't be assigned to a variable of type 'int Function()?'.
+  nullableVar = nonNullableVar;
+                ^" in mes::nonNullableVar as{TypeError,ForNonNullableByDefault} () →? core::int;
+  mes::nonNullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:33:20: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'double'.
+  nonNullableVar = nullableVar;
+                   ^" in mes::nullableVar as{TypeError,ForNonNullableByDefault} core::double;
+  self::legacyVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:34:15: Error: A value of type 'int Function()?' can't be assigned to a variable of type 'String'.
+  legacyVar = nullableVar;
+              ^" in mes::nullableVar as{TypeError,ForNonNullableByDefault} core::String*;
+  mes::nullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:35:17: Error: A value of type 'String' can't be assigned to a variable of type 'int Function()?'.
+  nullableVar = legacyVar;
+                ^" in self::legacyVar as{TypeError,ForNonNullableByDefault} () →? core::int;
+  mes::nonNullableVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:36:20: Error: A value of type 'String' can't be assigned to a variable of type 'double'.
+  nonNullableVar = legacyVar;
+                   ^" in self::legacyVar as{TypeError,ForNonNullableByDefault} core::double;
+  self::legacyVar = invalid-expression "pkg/front_end/testcases/nnbd_mixed/messages_with_types_opt_in.dart:37:15: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  legacyVar = nonNullableVar;
+              ^" in mes::nonNullableVar as{TypeError,ForNonNullableByDefault} core::String*;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixed_mixin.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/mixed_mixin.dart.weak.modular.expect
new file mode 100644
index 0000000..04e3fe5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixed_mixin.dart.weak.modular.expect
@@ -0,0 +1,79 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "mixed_mixin_lib.dart" as mix;
+
+import "org-dartlang-testcase:///mixed_mixin_lib.dart";
+
+abstract class _C1&Object&B = core::Object with mix::B /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C1&Object&B*
+    : super core::Object::•()
+    ;
+  mixin-super-stub get a() → core::List<(core::int*) →* core::int*>*
+    return super.{mix::B::a};
+  mixin-super-stub set a(core::List<(core::int*) →* core::int*>* _) → void
+    return super.{mix::B::a} = _;
+  mixin-super-stub method m((core::int*) →* core::int* x) → (core::int*) →* core::int*
+    return super.{mix::B::m}(x);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C1 extends self::_C1&Object&B {
+  synthetic constructor •() → self::C1*
+    : super self::_C1&Object&B::•()
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mix;
+import "dart:core" as core;
+import "mixed_mixin.dart" as self;
+
+import "org-dartlang-testcase:///mixed_mixin.dart";
+
+class B extends core::Object {
+  synthetic constructor •() → mix::B
+    : super core::Object::•()
+    ;
+  get a() → core::List<(core::int) → core::int>
+    return <(core::int) → core::int>[];
+  set a(core::List<(core::int) → core::int> _) → void {}
+  method m((core::int) → core::int x) → (core::int) → core::int
+    return x;
+}
+class Bq extends core::Object {
+  synthetic constructor •() → mix::Bq
+    : super core::Object::•()
+    ;
+  get a() → core::List<(core::int?) → core::int?>
+    return <(core::int?) → core::int?>[];
+  set a(core::List<(core::int?) → core::int?> _) → void {}
+  method m((core::int?) → core::int? x) → (core::int?) → core::int?
+    return x;
+}
+class DiBq1 extends self::C1 implements mix::Bq {
+  synthetic constructor •() → mix::DiBq1
+    : super self::C1::•()
+    ;
+  abstract member-signature get a() → core::List<(core::int?) → core::int?>; -> self::_C1&Object&B::a
+  abstract member-signature set a(core::List<(core::int?) → core::int?> _) → void; -> self::_C1&Object&B::a
+  abstract member-signature method m((core::int?) → core::int? x) → (core::int?) → core::int?; -> self::_C1&Object&B::m
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixed_mode_hierarchy_generic_methods.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/mixed_mode_hierarchy_generic_methods.dart.weak.modular.expect
new file mode 100644
index 0000000..6a49d2f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixed_mode_hierarchy_generic_methods.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "mixed_mode_hierarchy_generic_methods_lib.dart" as mix;
+import "dart:async" as asy;
+
+import "org-dartlang-testcase:///mixed_mode_hierarchy_generic_methods_lib.dart";
+import "dart:async";
+
+class B extends core::Object implements mix::A<core::int*> {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method then<B extends core::Object* = dynamic>() → asy::Future<self::B::then::B*>*
+    return asy::Future::value<self::B::then::B*>();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mix;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+class A<R extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → mix::A<mix::A::R%>
+    : super core::Object::•()
+    ;
+  method then<T extends core::Object? = dynamic>() → asy::Future<mix::A::then::T%>
+    return asy::Future::value<mix::A::then::T%>();
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.modular.expect
new file mode 100644
index 0000000..f168a4e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class RenderAnimatedOpacityMixin<T extends mai::RenderObject> extends mai::RenderObjectWithChildMixin<self::RenderAnimatedOpacityMixin::T> /*isMixinDeclaration*/  {
+}
+abstract class _RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin = mai::RenderProxyBox with mai::RenderProxyBoxMixin<mai::RenderBox> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin
+    : super mai::RenderProxyBox::•()
+    ;
+  mixin-super-stub method hitTestChildren(mai::BoxHitTestResult result, {required mai::Offset position}) → core::bool
+    return super.{mai::RenderProxyBoxMixin::hitTestChildren}(result, position: position);
+}
+abstract class _RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin&RenderAnimatedOpacityMixin = self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin with self::RenderAnimatedOpacityMixin<mai::RenderBox> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin&RenderAnimatedOpacityMixin
+    : super self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin::•()
+    ;
+}
+class RenderAnimatedOpacity extends self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin&RenderAnimatedOpacityMixin {
+  synthetic constructor •() → self::RenderAnimatedOpacity
+    : super self::_RenderAnimatedOpacity&RenderProxyBox&RenderProxyBoxMixin&RenderAnimatedOpacityMixin::•()
+    ;
+}
+static method main() → dynamic {
+  new self::RenderAnimatedOpacity::•();
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.modular.expect
new file mode 100644
index 0000000..9f5295d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "mixin_from_opt_in_lib.dart" as mix;
+
+import "org-dartlang-testcase:///mixin_from_opt_in_lib.dart";
+
+abstract class _Class&Object&Mixin = core::Object with mix::Mixin /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Class&Object&Mixin*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(core::int* i) → core::int*
+    return super.{mix::Mixin::method}(i);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class extends self::_Class&Object&Mixin {
+  synthetic constructor •() → self::Class*
+    : super self::_Class&Object&Mixin::•()
+    ;
+}
+static method main() → dynamic {
+  core::print(new self::Class::•().{self::_Class&Object&Mixin::method}(null){(core::int*) →* core::int*});
+}
+
+library /*isNonNullableByDefault*/;
+import self as mix;
+import "dart:core" as core;
+
+class Mixin extends core::Object {
+  synthetic constructor •() → mix::Mixin
+    : super core::Object::•()
+    ;
+  method method(core::int? i) → core::int
+    return let final core::int? #t1 = i in #t1 == null ?{core::int} 0 : #t1{core::int};
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.weak.modular.expect
new file mode 100644
index 0000000..ca9496c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "test_lib.dart" as tes;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic {
+  tes::test();
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:10:27: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+//   int j = sub.mixinMethod(null);
+//                           ^
+//
+// pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:10:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   int j = sub.mixinMethod(null);
+//               ^
+//
+// pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:12:25: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+//   sub.mixinField2 = sub.mixinField1;
+//                         ^
+//
+import self as tes;
+import "opt_out_lib.dart" as opt;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic {
+  opt::SubClass sub = new opt::SubClass::•();
+  core::int i = sub.{opt::_SubClass&Class&Mixin::classMethod}(null){(core::int*) →* core::int*};
+  core::int j = invalid-expression "pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:10:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  int j = sub.mixinMethod(null);
+              ^" in sub.{opt::_SubClass&Class&Mixin::mixinMethod}(invalid-expression "pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:10:27: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+  int j = sub.mixinMethod(null);
+                          ^" in null as{TypeError,ForNonNullableByDefault} core::int){(core::int) →* core::int?} as{TypeError,ForNonNullableByDefault} core::int;
+  sub.{opt::_SubClass&Class&Mixin::classField2} = sub.{opt::_SubClass&Class&Mixin::classField1}{core::int*};
+  sub.{opt::_SubClass&Class&Mixin::mixinField2} = invalid-expression "pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/test_lib.dart:12:25: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
+  sub.mixinField2 = sub.mixinField1;
+                        ^" in sub.{opt::_SubClass&Class&Mixin::mixinField1}{core::int?} as{TypeError,ForNonNullableByDefault} core::int;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.weak.modular.expect
new file mode 100644
index 0000000..5c88ecc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in/main.no_link.dart.weak.modular.expect
@@ -0,0 +1,85 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "test_lib.dart" as tes;
+
+import "org-dartlang-testcase:///test_lib.dart";
+
+static method main() → dynamic {
+  tes::test();
+}
+
+library /*isNonNullableByDefault*/;
+import self as tes;
+import "opt_out_lib.dart" as opt;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+static method test() → dynamic {
+  opt::SubClass sub = new opt::SubClass::•();
+  core::int i = sub.{opt::_SubClass&Class&Mixin::classMethod}(null){(core::int*) →* core::int*};
+  core::int j = sub.{opt::_SubClass&Class&Mixin::mixinMethod}(null){(core::int*) →* core::int*};
+  sub.{opt::_SubClass&Class&Mixin::classField2} = sub.{opt::_SubClass&Class&Mixin::classField1}{core::int*};
+  sub.{opt::_SubClass&Class&Mixin::mixinField2} = sub.{opt::_SubClass&Class&Mixin::mixinField1}{core::int*};
+}
+
+library;
+import self as opt;
+import "opt_in_lib.dart" as opt2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+abstract class _SubClass&Class&Mixin = opt2::Class with opt2::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → opt::_SubClass&Class&Mixin*
+    : super opt2::Class::•()
+    ;
+  mixin-super-stub get mixinField1() → core::int*
+    return super.{opt2::Mixin::mixinField1};
+  mixin-super-stub set mixinField1(core::int* value) → void
+    return super.{opt2::Mixin::mixinField1} = value;
+  mixin-super-stub get mixinField2() → core::int*
+    return super.{opt2::Mixin::mixinField2};
+  mixin-super-stub set mixinField2(core::int* value) → void
+    return super.{opt2::Mixin::mixinField2} = value;
+  abstract member-signature get classField1() → core::int*; -> opt2::Class::classField1
+  abstract member-signature set classField1(core::int* value) → void; -> opt2::Class::classField1
+  abstract member-signature get classField2() → core::int*; -> opt2::Class::classField2
+  abstract member-signature set classField2(core::int* value) → void; -> opt2::Class::classField2
+  mixin-super-stub method mixinMethod(core::int* i) → core::int*
+    return super.{opt2::Mixin::mixinMethod}(i);
+  abstract member-signature method classMethod(core::int* i) → core::int*; -> opt2::Class::classMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SubClass extends opt::_SubClass&Class&Mixin {
+  synthetic constructor •() → opt::SubClass*
+    : super opt::_SubClass&Class&Mixin::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? classField1 = null;
+  field core::int classField2 = 0;
+  synthetic constructor •() → opt2::Class
+    : super core::Object::•()
+    ;
+  method classMethod(core::int i) → core::int? {}
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  field core::int? mixinField1 = null;
+  field core::int mixinField2 = 0;
+  method mixinMethod(core::int i) → core::int? {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in_out_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in_out_in.dart.weak.modular.expect
new file mode 100644
index 0000000..d8ff996
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in_out_in.dart.weak.modular.expect
@@ -0,0 +1,247 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "mixin_from_opt_in_out_in_lib1.dart" as mix;
+import "mixin_from_opt_in_out_in_lib2.dart" as mix2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///mixin_from_opt_in_out_in_lib1.dart";
+import "org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart";
+
+class DiB0 extends mix::C0 implements mix2::B {
+  synthetic constructor •() → self::DiB0
+    : super mix::C0::•()
+    ;
+  abstract member-signature get a() → core::List<(core::int) → core::int>; -> mix2::B::a
+  abstract member-signature set a(core::List<(core::int) → core::int> _) → void; -> mix2::B::a
+  abstract member-signature method m((core::int) → core::int x) → (core::int) → core::int; -> mix2::B::m
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+}
+class DiBq0 extends mix::C0 implements mix2::Bq {
+  synthetic constructor •() → self::DiBq0
+    : super mix::C0::•()
+    ;
+  abstract member-signature get a() → core::List<(core::int?) → core::int?>; -> mix2::B::a
+  abstract member-signature set a(core::List<(core::int?) → core::int?> _) → void; -> mix2::B::a
+  abstract member-signature method m((core::int?) → core::int? x) → (core::int?) → core::int?; -> mix2::B::m
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+}
+abstract class _DwB0&C0&B = mix::C0 with mix2::B /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_DwB0&C0&B
+    : super mix::C0::•()
+    ;
+  mixin-super-stub get a() → core::List<(core::int) → core::int>
+    return super.{mix2::B::a};
+  mixin-super-stub set a(core::List<(core::int) → core::int> _) → void
+    return super.{mix2::B::a} = _;
+  mixin-super-stub method m((core::int) → core::int x) → (core::int) → core::int
+    return super.{mix2::B::m}(x);
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+}
+class DwB0 extends self::_DwB0&C0&B {
+  synthetic constructor •() → self::DwB0
+    : super self::_DwB0&C0&B::•()
+    ;
+}
+abstract class _DwBq0&C0&Bq = mix::C0 with mix2::Bq /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_DwBq0&C0&Bq
+    : super mix::C0::•()
+    ;
+  mixin-super-stub get a() → core::List<(core::int?) → core::int?>
+    return super.{mix2::Bq::a};
+  mixin-super-stub set a(core::List<(core::int?) → core::int?> _) → void
+    return super.{mix2::Bq::a} = _;
+  mixin-super-stub method m((core::int?) → core::int? x) → (core::int?) → core::int?
+    return super.{mix2::Bq::m}(x);
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+}
+class DwBq0 extends self::_DwBq0&C0&Bq {
+  synthetic constructor •() → self::DwBq0
+    : super self::_DwBq0&C0&Bq::•()
+    ;
+}
+class DiB3 extends mix::C3 implements mix2::B {
+  synthetic constructor •() → self::DiB3
+    : super mix::C3::•()
+    ;
+  abstract member-signature get a() → core::List<(core::int) → core::int>; -> mix2::Bq::a
+  abstract member-signature set a(core::List<(core::int) → core::int> _) → void; -> mix2::Bq::a
+  abstract member-signature method m((core::int) → core::int x) → (core::int) → core::int; -> mix2::Bq::m
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+}
+class DiBq3 extends mix::C3 implements mix2::Bq {
+  synthetic constructor •() → self::DiBq3
+    : super mix::C3::•()
+    ;
+  abstract member-signature get a() → core::List<(core::int?) → core::int?>; -> mix2::Bq::a
+  abstract member-signature set a(core::List<(core::int?) → core::int?> _) → void; -> mix2::Bq::a
+  abstract member-signature method m((core::int?) → core::int? x) → (core::int?) → core::int?; -> mix2::Bq::m
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+}
+abstract class _DwB3&C3&B = mix::C3 with mix2::B /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_DwB3&C3&B
+    : super mix::C3::•()
+    ;
+  mixin-super-stub get a() → core::List<(core::int) → core::int>
+    return super.{mix2::B::a};
+  mixin-super-stub set a(core::List<(core::int) → core::int> _) → void
+    return super.{mix2::B::a} = _;
+  mixin-super-stub method m((core::int) → core::int x) → (core::int) → core::int
+    return super.{mix2::B::m}(x);
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+}
+class DwB3 extends self::_DwB3&C3&B {
+  synthetic constructor •() → self::DwB3
+    : super self::_DwB3&C3&B::•()
+    ;
+}
+abstract class _DwBq3&C3&Bq = mix::C3 with mix2::Bq /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_DwBq3&C3&Bq
+    : super mix::C3::•()
+    ;
+  mixin-super-stub get a() → core::List<(core::int?) → core::int?>
+    return super.{mix2::Bq::a};
+  mixin-super-stub set a(core::List<(core::int?) → core::int?> _) → void
+    return super.{mix2::Bq::a} = _;
+  mixin-super-stub method m((core::int?) → core::int? x) → (core::int?) → core::int?
+    return super.{mix2::Bq::m}(x);
+  abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type; -> core::Object::runtimeType
+}
+class DwBq3 extends self::_DwBq3&C3&Bq {
+  synthetic constructor •() → self::DwBq3
+    : super self::_DwBq3&C3&Bq::•()
+    ;
+}
+static method main() → dynamic {}
+
+library;
+import self as mix;
+import "mixin_from_opt_in_out_in_lib2.dart" as mix2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///mixin_from_opt_in_out_in_lib2.dart";
+
+class C0 extends mix2::B {
+  synthetic constructor •() → mix::C0*
+    : super mix2::B::•()
+    ;
+  abstract member-signature get a() → core::List<(core::int*) →* core::int*>*; -> mix2::B::a
+  abstract member-signature set a(core::List<(core::int*) →* core::int*>* _) → void; -> mix2::B::a
+  abstract member-signature method m((core::int*) →* core::int* x) → (core::int*) →* core::int*; -> mix2::B::m
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C3 extends mix2::Bq {
+  synthetic constructor •() → mix::C3*
+    : super mix2::Bq::•()
+    ;
+  abstract member-signature get a() → core::List<(core::int*) →* core::int*>*; -> mix2::Bq::a
+  abstract member-signature set a(core::List<(core::int*) →* core::int*>* _) → void; -> mix2::Bq::a
+  abstract member-signature method m((core::int*) →* core::int* x) → (core::int*) →* core::int*; -> mix2::Bq::m
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+library /*isNonNullableByDefault*/;
+import self as mix2;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → mix2::B
+    : super core::Object::•()
+    ;
+  get a() → core::List<(core::int) → core::int>
+    return <(core::int) → core::int>[];
+  set a(core::List<(core::int) → core::int> _) → void {}
+  method m((core::int) → core::int x) → (core::int) → core::int
+    return x;
+}
+class Bq extends core::Object {
+  synthetic constructor •() → mix2::Bq
+    : super core::Object::•()
+    ;
+  get a() → core::List<(core::int?) → core::int?>
+    return <(core::int?) → core::int?>[];
+  set a(core::List<(core::int?) → core::int?> _) → void {}
+  method m((core::int?) → core::int? x) → (core::int?) → core::int?
+    return x;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..d267d60
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_out.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "mixin_from_opt_out_lib.dart" as mix;
+
+import "org-dartlang-testcase:///mixin_from_opt_out_lib.dart";
+
+abstract class _Class&Object&Mixin = core::Object with mix::Mixin /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Class&Object&Mixin
+    : super core::Object::•()
+    ;
+  mixin-super-stub method /*isLegacy*/ method(core::int* i) → core::int*
+    return super.{mix::Mixin::method}(i);
+  abstract member-signature operator /*isLegacy*/ ==(dynamic other) → core::bool*; -> core::Object::==
+}
+class Class extends self::_Class&Object&Mixin {
+  synthetic constructor •() → self::Class
+    : super self::_Class&Object&Mixin::•()
+    ;
+}
+static method main() → dynamic {
+  core::print(new self::Class::•().{self::_Class&Object&Mixin::method}(null){(core::int*) → core::int*});
+}
+
+library;
+import self as mix;
+import "dart:core" as core;
+
+class Mixin extends core::Object {
+  synthetic constructor •() → mix::Mixin*
+    : super core::Object::•()
+    ;
+  method method(core::int* i) → core::int*
+    return let final core::int* #t1 = i in #t1 == null ?{core::int*} 0 : #t1;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.modular.expect
new file mode 100644
index 0000000..740dfc6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/mock_http_headers.dart.weak.modular.expect
@@ -0,0 +1,118 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:_http" as _ht;
+
+import "dart:io";
+
+class Mock extends core::Object {
+  synthetic constructor •() → self::Mock*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class MockHttpHeaders extends self::Mock implements _ht::HttpHeaders {
+  synthetic constructor •() → self::MockHttpHeaders*
+    : super self::Mock::•()
+    ;
+  no-such-method-forwarder get date() → core::DateTime*
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::DateTime*;
+  no-such-method-forwarder set date(core::DateTime* value) → void
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder get expires() → core::DateTime*
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::DateTime*;
+  no-such-method-forwarder set expires(core::DateTime* value) → void
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder get ifModifiedSince() → core::DateTime*
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::DateTime*;
+  no-such-method-forwarder set ifModifiedSince(core::DateTime* value) → void
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder get host() → core::String*
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::String*;
+  no-such-method-forwarder set host(core::String* value) → void
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder get port() → core::int*
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
+  no-such-method-forwarder set port(core::int* value) → void
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder get contentType() → _ht::ContentType*
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} _ht::ContentType*;
+  no-such-method-forwarder set contentType(_ht::ContentType* value) → void
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder get contentLength() → core::int*
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
+  no-such-method-forwarder set contentLength(core::int* value) → void
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder get persistentConnection() → core::bool*
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C18, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
+  no-such-method-forwarder set persistentConnection(core::bool* value) → void
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C19, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder get chunkedTransferEncoding() → core::bool*
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C20, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
+  no-such-method-forwarder set chunkedTransferEncoding(core::bool* value) → void
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C21, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder operator [](core::String* name) → core::List<core::String*>*
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C22, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::List<core::String*>*;
+  no-such-method-forwarder method value(core::String* name) → core::String*
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C23, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::String*;
+  no-such-method-forwarder method add(core::String* name, core::Object* value, {core::bool* preserveHeaderCase = #C24}) → void
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C25, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name, value]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C26: preserveHeaderCase}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method set(core::String* name, core::Object* value, {core::bool* preserveHeaderCase = #C24}) → void
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C27, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name, value]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C26: preserveHeaderCase}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method remove(core::String* name, core::Object* value) → void
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C28, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name, value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method removeAll(core::String* name) → void
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C29, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method forEach((core::String*, core::List<core::String*>*) →* void action) → void
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C30, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method noFolding(core::String* name) → void
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C31, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[name]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/_http/http.dart */ clear() → void
+    return this.{self::Mock::noSuchMethod}(new core::_InvocationMirror::_withType(#C32, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #date
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+  #C5 = #date=
+  #C6 = #expires
+  #C7 = #expires=
+  #C8 = #ifModifiedSince
+  #C9 = #ifModifiedSince=
+  #C10 = #host
+  #C11 = #host=
+  #C12 = #port
+  #C13 = #port=
+  #C14 = #contentType
+  #C15 = #contentType=
+  #C16 = #contentLength
+  #C17 = #contentLength=
+  #C18 = #persistentConnection
+  #C19 = #persistentConnection=
+  #C20 = #chunkedTransferEncoding
+  #C21 = #chunkedTransferEncoding=
+  #C22 = #[]
+  #C23 = #value
+  #C24 = false
+  #C25 = #add
+  #C26 = #preserveHeaderCase
+  #C27 = #set
+  #C28 = #remove
+  #C29 = #removeAll
+  #C30 = #forEach
+  #C31 = #noFolding
+  #C32 = #clear
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..3a15eee
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/never_opt_out.dart.weak.modular.expect
@@ -0,0 +1,187 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "never_opt_out_lib.dart" as nev;
+
+import "org-dartlang-testcase:///never_opt_out_lib.dart";
+
+class GenericClass<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends nev::A {
+  field Null neverField = null;
+  field Null nullField = null;
+  synthetic constructor •() → self::B*
+    : super nev::A::•()
+    ;
+  method neverMethod(Null value) → Null
+    return value;
+  get neverProperty() → Null
+    return null;
+  set neverProperty(Null value) → void {}
+  method nullMethod(Null value) → Null
+    return value;
+  get nullProperty() → Null
+    return null;
+  set nullProperty(Null value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends nev::A {
+  field Never* neverField = null;
+  field Never* nullField = null;
+  synthetic constructor •() → self::C*
+    : super nev::A::•()
+    ;
+  method neverMethod(Null value) → Never*
+    return value;
+  get neverProperty() → Never*
+    return null;
+  set neverProperty(Null value) → void {}
+  method nullMethod(Null value) → Never*
+    return value;
+  get nullProperty() → Never*
+    return null;
+  set nullProperty(Null value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field Never* optOutNever;
+static field dynamic inferredOptOutNever = nev::optInNever;
+static method genericMethod<T extends core::Object* = dynamic>() → dynamic {}
+static method main() → dynamic {
+  nev::optInNever = self::optOutNever;
+  core::Type* typeNever = #C1;
+  self::genericMethod<Never*>();
+  new self::GenericClass::•<Never*>();
+  Never* localNever = null;
+  Null localNull = null;
+  dynamic inferredLocalNever = nev::optInNever;
+  localNever = localNever;
+  self::optOutNever = localNever;
+  nev::optInNever = localNever;
+  localNull = localNever;
+  self::inferredOptOutNever = localNever;
+  inferredLocalNever = localNever;
+  localNever = self::optOutNever;
+  self::optOutNever = self::optOutNever;
+  nev::optInNever = self::optOutNever;
+  localNull = self::optOutNever;
+  self::inferredOptOutNever = self::optOutNever;
+  inferredLocalNever = self::optOutNever;
+  localNever = nev::optInNever;
+  self::optOutNever = nev::optInNever;
+  nev::optInNever = nev::optInNever;
+  localNull = nev::optInNever;
+  self::inferredOptOutNever = nev::optInNever;
+  inferredLocalNever = nev::optInNever;
+  localNever = localNull;
+  self::optOutNever = localNull;
+  nev::optInNever = localNull;
+  localNull = localNull;
+  self::inferredOptOutNever = localNull;
+  inferredLocalNever = localNull;
+  localNever = self::inferredOptOutNever as{TypeError,ForDynamic} Never*;
+  self::optOutNever = self::inferredOptOutNever as{TypeError,ForDynamic} Never*;
+  nev::optInNever = self::inferredOptOutNever as{TypeError,ForDynamic} Never;
+  localNull = self::inferredOptOutNever as{TypeError,ForDynamic} Null;
+  self::inferredOptOutNever = self::inferredOptOutNever;
+  inferredLocalNever = self::inferredOptOutNever;
+  localNever = inferredLocalNever as{TypeError,ForDynamic} Never*;
+  self::optOutNever = inferredLocalNever as{TypeError,ForDynamic} Never*;
+  nev::optInNever = inferredLocalNever as{TypeError,ForDynamic} Never;
+  localNull = inferredLocalNever as{TypeError,ForDynamic} Null;
+  self::inferredOptOutNever = inferredLocalNever;
+  inferredLocalNever = inferredLocalNever;
+  self::throws(() → Null => self::optOutNever = nev::throwing());
+  self::throws(() → Null => localNever = nev::throwing());
+  self::throws(() → Null => self::optOutNever = nev::throwing());
+  self::throws(() → Null => nev::optInNever = nev::throwing());
+  self::throws(() → Null => self::inferredOptOutNever = nev::throwing());
+  self::throws(() → Null => inferredLocalNever = nev::throwing());
+  nev::BoundedGenericClass<Null>* boundedGenericClass = new nev::BoundedGenericClass::•<Null>();
+  self::throws(() → Null {
+    dynamic boundedGenericMethodResult1 = nev::boundedGenericMethod1<Null>();
+  });
+  core::List<Null>* boundedGenericMethodResult2 = nev::boundedGenericMethod2<Null>();
+  dynamic dyn = null;
+  nev::optInNever = dyn as{TypeError,ForDynamic} Never;
+}
+static method throws(() →* void f) → dynamic {
+  try {
+    f(){() →* void};
+  }
+  on dynamic catch(final dynamic _) {
+    return;
+  }
+  throw "Expected exception";
+}
+
+library /*isNonNullableByDefault*/;
+import self as nev;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+import "org-dartlang-testcase:///never_opt_out.dart";
+
+class A extends core::Object {
+  field Never neverField = throw "Should not reach here";
+  field Null nullField = null;
+  synthetic constructor •() → nev::A
+    : super core::Object::•()
+    ;
+  method neverMethod(Never value) → Never
+    return let final Never #t1 = value in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  get neverProperty() → Never
+    return throw "Should not reach here";
+  set neverProperty(Never value) → void {}
+  method nullMethod(Null value) → Null
+    return value;
+  get nullProperty() → Null
+    return null;
+  set nullProperty(Null value) → void {}
+}
+class BoundedGenericClass<T extends Never> extends core::Object {
+  synthetic constructor •() → nev::BoundedGenericClass<nev::BoundedGenericClass::T>
+    : super core::Object::•()
+    ;
+}
+late static field Never optInNever;
+static method throwing() → Never
+  return throw "Never!";
+static method boundedGenericMethod1<T extends Never>() → nev::boundedGenericMethod1::T
+  return throw "Should never return";
+static method boundedGenericMethod2<T extends Never>() → core::List<nev::boundedGenericMethod2::T>
+  return <nev::boundedGenericMethod2::T>[];
+
+constants  {
+  #C1 = TypeLiteralConstant(Never*)
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version.dart.weak.modular.expect
new file mode 100644
index 0000000..f6eb3c3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version.dart.weak.modular.expect
@@ -0,0 +1,61 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class late extends core::Object {
+  synthetic constructor •() → self::late*
+    : super core::Object::•()
+    ;
+  get g() → core::int*
+    return 1;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class required extends core::Object {
+  synthetic constructor •() → self::required*
+    : super core::Object::•()
+    ;
+  get g() → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  field self::late* l = new self::late::•();
+  field self::required* r = new self::required::•();
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  if(!(new self::C::•().{self::C::l}{self::late*}.{self::late::g}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 1))
+    throw "Expected 1";
+  if(!(new self::C::•().{self::C::r}{self::required*}.{self::required::g}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2))
+    throw "Expected 2";
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version_try_to_trick.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version_try_to_trick.dart.weak.modular.expect
new file mode 100644
index 0000000..f6eb3c3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/nnbd_opt_out_language_version_try_to_trick.dart.weak.modular.expect
@@ -0,0 +1,61 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class late extends core::Object {
+  synthetic constructor •() → self::late*
+    : super core::Object::•()
+    ;
+  get g() → core::int*
+    return 1;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class required extends core::Object {
+  synthetic constructor •() → self::required*
+    : super core::Object::•()
+    ;
+  get g() → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  field self::late* l = new self::late::•();
+  field self::required* r = new self::required::•();
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  if(!(new self::C::•().{self::C::l}{self::late*}.{self::late::g}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 1))
+    throw "Expected 1";
+  if(!(new self::C::•().{self::C::r}{self::required*}.{self::required::g}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2))
+    throw "Expected 2";
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting.dart.weak.modular.expect
new file mode 100644
index 0000000..9e9eb03
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting.dart.weak.modular.expect
@@ -0,0 +1,161 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field self::Class* field = null;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  method method() → self::Class*
+    return this.{self::Class::field}{self::Class*};
+  operator [](self::Class* key) → self::Class*
+    return this.{self::Class::field}{self::Class*};
+  operator []=(self::Class* key, self::Class* value) → void {
+    this.{self::Class::field} = value;
+  }
+  operator +(core::int* value) → self::Class*
+    return this.{self::Class::field}{self::Class*};
+  operator unary-() → self::Class*
+    return this.{self::Class::field}{self::Class*};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::propertyAccess(null);
+  self::indexAccess(null);
+  self::operatorAccess(null);
+  self::ifNull(null);
+}
+static method propertyAccess(self::Class* c) → void {
+  let final self::Class* #t1 = c in #t1 == null ?{self::Class*} null : #t1.{self::Class::field}{self::Class*};
+  let final self::Class* #t2 = c in #t2 == null ?{self::Class*} null : #t2.{self::Class::field} = new self::Class::•();
+  c = let final self::Class* #t3 = c in #t3 == null ?{self::Class*} null : #t3.{self::Class::field} = new self::Class::•();
+  let final self::Class* #t4 = c in #t4 == null ?{self::Class*} null : #t4.{self::Class::method}(){() →* self::Class*};
+  self::throws(() → self::Class* => (let final self::Class* #t5 = c in #t5 == null ?{self::Class*} null : #t5.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*});
+  let final self::Class* #t6 = let final self::Class* #t7 = c in #t7 == null ?{self::Class*} null : #t7.{self::Class::field}{self::Class*} in #t6 == null ?{self::Class*} null : #t6.{self::Class::field}{self::Class*};
+  self::throws(() → self::Class* => let final self::Class* #t8 = (let final self::Class* #t9 = c in #t9 == null ?{self::Class*} null : #t9.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*} in #t8 == null ?{self::Class*} null : #t8.{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t10 = c in #t10 == null ?{self::Class*} null : #t10.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•());
+  let final self::Class* #t11 = let final self::Class* #t12 = c in #t12 == null ?{self::Class*} null : #t12.{self::Class::field}{self::Class*} in #t11 == null ?{self::Class*} null : #t11.{self::Class::field} = new self::Class::•();
+  self::throws(() → self::Class* => let final self::Class* #t13 = (let final self::Class* #t14 = c in #t14 == null ?{self::Class*} null : #t14.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*} in #t13 == null ?{self::Class*} null : #t13.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t15 = c in #t15 == null ?{self::Class*} null : #t15.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t16 = c in #t16 == null ?{self::Class*} null : #t16.{self::Class::field} = new self::Class::•()).{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t17 = c in #t17 == null ?{self::Class*} null : #t17.{self::Class::method}(){() →* self::Class*}).{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => c = (let final self::Class* #t18 = c in #t18 == null ?{self::Class*} null : #t18.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•());
+  c = let final self::Class* #t19 = let final self::Class* #t20 = c in #t20 == null ?{self::Class*} null : #t20.{self::Class::field}{self::Class*} in #t19 == null ?{self::Class*} null : #t19.{self::Class::field} = new self::Class::•();
+  self::throws(() → self::Class* => c = let final self::Class* #t21 = (let final self::Class* #t22 = c in #t22 == null ?{self::Class*} null : #t22.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*} in #t21 == null ?{self::Class*} null : #t21.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t23 = c in #t23 == null ?{self::Class*} null : #t23.{self::Class::field}{self::Class*}).{self::Class::method}(){() →* self::Class*});
+  let final self::Class* #t24 = c in #t24 == null ?{self::Class*} null : #t24.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*};
+  c = let final self::Class* #t25 = c in #t25 == null ?{self::Class*} null : #t25.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*};
+  let final self::Class* #t26 = c in #t26 == null ?{self::Class*} null : #t26.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
+  c = let final self::Class* #t27 = c in #t27 == null ?{self::Class*} null : #t27.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
+  let final self::Class* #t28 = c in #t28 == null ?{self::Class*} null : #t28.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*};
+  c = let final self::Class* #t29 = c in #t29 == null ?{self::Class*} null : #t29.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*};
+  self::throws(() → self::Class* => (let final self::Class* #t30 = c in #t30 == null ?{self::Class*} null : #t30.{self::Class::method}(){() →* self::Class*}).{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t31 = c in #t31 == null ?{self::Class*} null : #t31.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t32 = c in #t32 == null ?{self::Class*} null : #t32.{self::Class::method}(){() →* self::Class*}).{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t33 = c in #t33 == null ?{self::Class*} null : #t33.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*}.{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t34 = c in #t34 == null ?{self::Class*} null : #t34.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => c = (let final self::Class* #t35 = c in #t35 == null ?{self::Class*} null : #t35.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t36 = c in #t36 == null ?{self::Class*} null : #t36.{self::Class::field}{self::Class*}).{self::Class::field}{self::Class*}.{self::Class::method}(){() →* self::Class*});
+  let final self::Class* #t37 = c in #t37 == null ?{self::Class*} null : #t37.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::field}{self::Class*};
+  c = let final self::Class* #t38 = c in #t38 == null ?{self::Class*} null : #t38.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::field}{self::Class*};
+  let final self::Class* #t39 = c in #t39 == null ?{self::Class*} null : #t39.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::field} = new self::Class::•();
+  c = let final self::Class* #t40 = c in #t40 == null ?{self::Class*} null : #t40.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::field} = new self::Class::•();
+  let final self::Class* #t41 = c in #t41 == null ?{self::Class*} null : #t41.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::method}(){() →* self::Class*};
+  c = let final self::Class* #t42 = c in #t42 == null ?{self::Class*} null : #t42.{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*}.{self::Class::method}(){() →* self::Class*};
+  self::throws(() → self::Class* => (let final self::Class* #t43 = c in #t43 == null ?{self::Class*} null : #t43.{self::Class::method}(){() →* self::Class*}).{self::Class::field}{self::Class*}.{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t44 = c in #t44 == null ?{self::Class*} null : #t44.{self::Class::method}(){() →* self::Class*}).{self::Class::field}{self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t45 = c in #t45 == null ?{self::Class*} null : #t45.{self::Class::method}(){() →* self::Class*}).{self::Class::field}{self::Class*}.{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t46 = c in #t46 == null ?{self::Class*} null : #t46.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => c = (let final self::Class* #t47 = c in #t47 == null ?{self::Class*} null : #t47.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t48 = c in #t48 == null ?{self::Class*} null : #t48.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => c = (let final self::Class* #t49 = c in #t49 == null ?{self::Class*} null : #t49.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t50 = c in #t50 == null ?{self::Class*} null : #t50.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => c = (let final self::Class* #t51 = c in #t51 == null ?{self::Class*} null : #t51.{self::Class::field}{self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*});
+  let final self::Class* #t52 = c in #t52 == null ?{self::Class*} null : #t52.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*};
+  c = let final self::Class* #t53 = c in #t53 == null ?{self::Class*} null : #t53.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*};
+  let final self::Class* #t54 = c in #t54 == null ?{self::Class*} null : #t54.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
+  c = let final self::Class* #t55 = c in #t55 == null ?{self::Class*} null : #t55.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•();
+  let final self::Class* #t56 = c in #t56 == null ?{self::Class*} null : #t56.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*};
+  c = let final self::Class* #t57 = c in #t57 == null ?{self::Class*} null : #t57.{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*};
+  self::throws(() → self::Class* => (let final self::Class* #t58 = c in #t58 == null ?{self::Class*} null : #t58.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => c = (let final self::Class* #t59 = c in #t59 == null ?{self::Class*} null : #t59.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t60 = c in #t60 == null ?{self::Class*} null : #t60.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => c = (let final self::Class* #t61 = c in #t61 == null ?{self::Class*} null : #t61.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t62 = c in #t62 == null ?{self::Class*} null : #t62.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => c = (let final self::Class* #t63 = c in #t63 == null ?{self::Class*} null : #t63.{self::Class::method}(){() →* self::Class*}).{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t64 = c in #t64 == null ?{self::Class*} null : #t64.{self::Class::field}{self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t65 = c in #t65 == null ?{self::Class*} null : #t65.{self::Class::field}{self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => c = (let final self::Class* #t66 = c in #t66 == null ?{self::Class*} null : #t66.{self::Class::field}{self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t67 = c in #t67 == null ?{self::Class*} null : #t67.{self::Class::field}{self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::method}(){() →* self::Class*});
+  let final self::Class* #t68 = c in #t68 == null ?{self::Class*} null : #t68.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::field}{self::Class*};
+  c = let final self::Class* #t69 = c in #t69 == null ?{self::Class*} null : #t69.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::field}{self::Class*};
+  let final self::Class* #t70 = c in #t70 == null ?{self::Class*} null : #t70.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::field} = new self::Class::•();
+  c = let final self::Class* #t71 = c in #t71 == null ?{self::Class*} null : #t71.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::field} = new self::Class::•();
+  let final self::Class* #t72 = c in #t72 == null ?{self::Class*} null : #t72.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::method}(){() →* self::Class*};
+  c = let final self::Class* #t73 = c in #t73 == null ?{self::Class*} null : #t73.{self::Class::field} = new self::Class::•().{self::Class::method}(){() →* self::Class*}.{self::Class::method}(){() →* self::Class*};
+  self::throws(() → self::Class* => (let final self::Class* #t74 = c in #t74 == null ?{self::Class*} null : #t74.{self::Class::method}(){() →* self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::field}{self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t75 = c in #t75 == null ?{self::Class*} null : #t75.{self::Class::method}(){() →* self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::field} = new self::Class::•());
+  self::throws(() → self::Class* => (let final self::Class* #t76 = c in #t76 == null ?{self::Class*} null : #t76.{self::Class::method}(){() →* self::Class*}).{self::Class::method}(){() →* self::Class*}.{self::Class::method}(){() →* self::Class*});
+  let final self::Class* #t77 = let final self::Class* #t78 = c in #t78 == null ?{self::Class*} null : #t78.{self::Class::method}(){() →* self::Class*} in #t77 == null ?{self::Class*} null : #t77.{self::Class::method}(){() →* self::Class*};
+}
+static method indexAccess(self::Class* c) → void {
+  self::throws(() → self::Class* => (let final self::Class* #t79 = c in #t79 == null ?{self::Class*} null : #t79.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*});
+  self::throws(() → self::Class* => let final self::Class* #t80 = let final self::Class* #t81 = c in #t81 == null ?{self::Class*} null : #t81.{self::Class::field}{self::Class*} in let final self::Class* #t82 = c in let final self::Class* #t83 = new self::Class::•() in let final void #t84 = #t80.{self::Class::[]=}(#t82, #t83){(self::Class*, self::Class*) →* void} in #t83);
+  self::throws(() → self::Class* => c = let final self::Class* #t85 = let final self::Class* #t86 = c in #t86 == null ?{self::Class*} null : #t86.{self::Class::field}{self::Class*} in let final self::Class* #t87 = c in let final self::Class* #t88 = new self::Class::•() in let final void #t89 = #t85.{self::Class::[]=}(#t87, #t88){(self::Class*, self::Class*) →* void} in #t88);
+  self::throws(() → self::Class* => (let final self::Class* #t90 = c in #t90 == null ?{self::Class*} null : #t90.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*}.{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => let final self::Class* #t91 = let final self::Class* #t92 = c in #t92 == null ?{self::Class*} null : #t92.{self::Class::field}{self::Class*} in let final self::Class* #t93 = c in let final self::Class* #t94 = #t91.{self::Class::[]}(#t93){(self::Class*) →* self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*} in let final void #t95 = #t91.{self::Class::[]=}(#t93, #t94){(self::Class*, self::Class*) →* void} in #t94);
+  self::throws(() → self::Class* => c = let final self::Class* #t96 = let final self::Class* #t97 = c in #t97 == null ?{self::Class*} null : #t97.{self::Class::field}{self::Class*} in let final self::Class* #t98 = c in let final self::Class* #t99 = #t96.{self::Class::[]}(#t98){(self::Class*) →* self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*} in let final void #t100 = #t96.{self::Class::[]=}(#t98, #t99){(self::Class*, self::Class*) →* void} in #t99);
+  self::throws(() → self::Class* => let final self::Class* #t101 = let final self::Class* #t102 = c in #t102 == null ?{self::Class*} null : #t102.{self::Class::field}{self::Class*} in let final self::Class* #t103 = c in let final self::Class* #t104 = #t101.{self::Class::[]}(#t103){(self::Class*) →* self::Class*} in let final void #t105 = #t101.{self::Class::[]=}(#t103, #t104.{self::Class::+}(1){(core::int*) →* self::Class*}){(self::Class*, self::Class*) →* void} in #t104);
+  self::throws(() → self::Class* => c = let final self::Class* #t106 = let final self::Class* #t107 = c in #t107 == null ?{self::Class*} null : #t107.{self::Class::field}{self::Class*} in let final self::Class* #t108 = c in let final self::Class* #t109 = #t106.{self::Class::[]}(#t108){(self::Class*) →* self::Class*} in let final void #t110 = #t106.{self::Class::[]=}(#t108, #t109.{self::Class::+}(1){(core::int*) →* self::Class*}){(self::Class*, self::Class*) →* void} in #t109);
+  self::throws(() → self::Class* => let final self::Class* #t111 = let final self::Class* #t112 = c in #t112 == null ?{self::Class*} null : #t112.{self::Class::field}{self::Class*} in let final self::Class* #t113 = c in let final self::Class* #t114 = #t111.{self::Class::[]}(#t113){(self::Class*) →* self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t115 = #t111.{self::Class::[]=}(#t113, #t114){(self::Class*, self::Class*) →* void} in #t114);
+  self::throws(() → self::Class* => c = let final self::Class* #t116 = let final self::Class* #t117 = c in #t117 == null ?{self::Class*} null : #t117.{self::Class::field}{self::Class*} in let final self::Class* #t118 = c in let final self::Class* #t119 = #t116.{self::Class::[]}(#t118){(self::Class*) →* self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t120 = #t116.{self::Class::[]=}(#t118, #t119){(self::Class*, self::Class*) →* void} in #t119);
+  self::throws(() → self::Class* => (let final self::Class* #t121 = c in #t121 == null ?{self::Class*} null : #t121.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*}.{self::Class::[]}(c){(self::Class*) →* self::Class*});
+  self::throws(() → self::Class* => let final self::Class* #t122 = (let final self::Class* #t123 = c in #t123 == null ?{self::Class*} null : #t123.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t124 = c in let final self::Class* #t125 = new self::Class::•() in let final void #t126 = #t122.{self::Class::[]=}(#t124, #t125){(self::Class*, self::Class*) →* void} in #t125);
+  self::throws(() → self::Class* => c = let final self::Class* #t127 = (let final self::Class* #t128 = c in #t128 == null ?{self::Class*} null : #t128.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t129 = c in let final self::Class* #t130 = new self::Class::•() in let final void #t131 = #t127.{self::Class::[]=}(#t129, #t130){(self::Class*, self::Class*) →* void} in #t130);
+  self::throws(() → self::Class* => (let final self::Class* #t132 = c in #t132 == null ?{self::Class*} null : #t132.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*}.{self::Class::[]}(c){(self::Class*) →* self::Class*}.{self::Class::method}(){() →* self::Class*});
+  self::throws(() → self::Class* => let final self::Class* #t133 = (let final self::Class* #t134 = c in #t134 == null ?{self::Class*} null : #t134.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t135 = c in let final self::Class* #t136 = #t133.{self::Class::[]}(#t135){(self::Class*) →* self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*} in let final void #t137 = #t133.{self::Class::[]=}(#t135, #t136){(self::Class*, self::Class*) →* void} in #t136);
+  self::throws(() → self::Class* => c = let final self::Class* #t138 = (let final self::Class* #t139 = c in #t139 == null ?{self::Class*} null : #t139.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t140 = c in let final self::Class* #t141 = #t138.{self::Class::[]}(#t140){(self::Class*) →* self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*} in let final void #t142 = #t138.{self::Class::[]=}(#t140, #t141){(self::Class*, self::Class*) →* void} in #t141);
+  self::throws(() → self::Class* => let final self::Class* #t143 = (let final self::Class* #t144 = c in #t144 == null ?{self::Class*} null : #t144.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t145 = c in let final self::Class* #t146 = #t143.{self::Class::[]}(#t145){(self::Class*) →* self::Class*} in let final void #t147 = #t143.{self::Class::[]=}(#t145, #t146.{self::Class::+}(1){(core::int*) →* self::Class*}){(self::Class*, self::Class*) →* void} in #t146);
+  self::throws(() → self::Class* => c = let final self::Class* #t148 = (let final self::Class* #t149 = c in #t149 == null ?{self::Class*} null : #t149.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t150 = c in let final self::Class* #t151 = #t148.{self::Class::[]}(#t150){(self::Class*) →* self::Class*} in let final void #t152 = #t148.{self::Class::[]=}(#t150, #t151.{self::Class::+}(1){(core::int*) →* self::Class*}){(self::Class*, self::Class*) →* void} in #t151);
+  self::throws(() → self::Class* => let final self::Class* #t153 = (let final self::Class* #t154 = c in #t154 == null ?{self::Class*} null : #t154.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t155 = c in let final self::Class* #t156 = #t153.{self::Class::[]}(#t155){(self::Class*) →* self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t157 = #t153.{self::Class::[]=}(#t155, #t156){(self::Class*, self::Class*) →* void} in #t156);
+  self::throws(() → self::Class* => c = let final self::Class* #t158 = (let final self::Class* #t159 = c in #t159 == null ?{self::Class*} null : #t159.{self::Class::field}{self::Class*}).{self::Class::[]}(c){(self::Class*) →* self::Class*} in let final self::Class* #t160 = c in let final self::Class* #t161 = #t158.{self::Class::[]}(#t160){(self::Class*) →* self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t162 = #t158.{self::Class::[]=}(#t160, #t161){(self::Class*, self::Class*) →* void} in #t161);
+}
+static method operatorAccess(self::Class* c) → void {
+  self::throws(() → self::Class* => (let final self::Class* #t163 = c in #t163 == null ?{self::Class*} null : #t163.{self::Class::field}{self::Class*}).{self::Class::+}(0){(core::int*) →* self::Class*});
+  self::throws(() → self::Class* => (let final self::Class* #t164 = c in #t164 == null ?{self::Class*} null : #t164.{self::Class::field}{self::Class*}).{self::Class::unary-}(){() →* self::Class*});
+  let final self::Class* #t165 = c in #t165 == null ?{self::Class*} null : #t165.{self::Class::field} = #t165.{self::Class::field}{self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*};
+  c = let final self::Class* #t166 = c in #t166 == null ?{self::Class*} null : let final self::Class* #t167 = #t166.{self::Class::field}{self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*} in let final void #t168 = #t166.{self::Class::field} = #t167 in #t167;
+  self::throws(() → self::Class* => let final self::Class* #t169 = let final self::Class* #t170 = c in #t170 == null ?{self::Class*} null : #t170.{self::Class::field}{self::Class*} in #t169.{self::Class::field} = #t169.{self::Class::field}{self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*});
+  self::throws(() → self::Class* => c = let final self::Class* #t171 = let final self::Class* #t172 = c in #t172 == null ?{self::Class*} null : #t172.{self::Class::field}{self::Class*} in #t171.{self::Class::field} = #t171.{self::Class::field}{self::Class*}.{self::Class::+}(0){(core::int*) →* self::Class*});
+  let final self::Class* #t173 = c in #t173 == null ?{self::Class*} null : #t173.{self::Class::field} = #t173.{self::Class::field}{self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*};
+  c = let final self::Class* #t174 = c in #t174 == null ?{self::Class*} null : let final self::Class* #t175 = #t174.{self::Class::field}{self::Class*} in let final void #t176 = #t174.{self::Class::field} = #t175.{self::Class::+}(1){(core::int*) →* self::Class*} in #t175;
+  let final self::Class* #t177 = c in #t177 == null ?{self::Class*} null : let final self::Class* #t178 = #t177.{self::Class::field}{self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t179 = #t177.{self::Class::field} = #t178 in #t178;
+  c = let final self::Class* #t180 = c in #t180 == null ?{self::Class*} null : let final self::Class* #t181 = #t180.{self::Class::field}{self::Class*}.{self::Class::+}(1){(core::int*) →* self::Class*} in let final void #t182 = #t180.{self::Class::field} = #t181 in #t181;
+}
+static method ifNull(self::Class* c) → void {
+  let final self::Class* #t183 = c in #t183 == null ?{self::Class*} null : #t183.{self::Class::field}{self::Class*} == null ?{self::Class*} #t183.{self::Class::field} = c : null;
+  c = let final self::Class* #t184 = c in #t184 == null ?{self::Class*} null : let final self::Class* #t185 = #t184.{self::Class::field}{self::Class*} in #t185 == null ?{self::Class*} #t184.{self::Class::field} = c : #t185;
+  self::throws(() → self::Class* => let final self::Class* #t186 = let final self::Class* #t187 = c in #t187 == null ?{self::Class*} null : #t187.{self::Class::field}{self::Class*} in let final self::Class* #t188 = #t186.{self::Class::field}{self::Class*} in #t188 == null ?{self::Class*} #t186.{self::Class::field} = c : #t188);
+  self::throws(() → self::Class* => c = let final self::Class* #t189 = let final self::Class* #t190 = c in #t190 == null ?{self::Class*} null : #t190.{self::Class::field}{self::Class*} in let final self::Class* #t191 = #t189.{self::Class::field}{self::Class*} in #t191 == null ?{self::Class*} #t189.{self::Class::field} = c : #t191);
+  self::throws(() → self::Class* => let final self::Class* #t192 = let final self::Class* #t193 = c in #t193 == null ?{self::Class*} null : #t193.{self::Class::field}{self::Class*} in let final self::Class* #t194 = c in let final self::Class* #t195 = #t192.{self::Class::[]}(#t194){(self::Class*) →* self::Class*} in #t195 == null ?{self::Class*} let final self::Class* #t196 = c in let final void #t197 = #t192.{self::Class::[]=}(#t194, #t196){(self::Class*, self::Class*) →* void} in #t196 : #t195);
+  self::throws(() → self::Class* => c = let final self::Class* #t198 = let final self::Class* #t199 = c in #t199 == null ?{self::Class*} null : #t199.{self::Class::field}{self::Class*} in let final self::Class* #t200 = c in let final self::Class* #t201 = #t198.{self::Class::[]}(#t200){(self::Class*) →* self::Class*} in #t201 == null ?{self::Class*} let final self::Class* #t202 = c in let final void #t203 = #t198.{self::Class::[]=}(#t200, #t202){(self::Class*, self::Class*) →* void} in #t202 : #t201);
+}
+static method throws(() →* void f) → void {
+  try {
+    f(){() →* void};
+  }
+  on dynamic catch(final dynamic _) {
+    return;
+  }
+  throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.modular.expect
new file mode 100644
index 0000000..f8fa444
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_explicit_extension.dart.weak.modular.expect
@@ -0,0 +1,180 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field self::Class* _field = null;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on self::Class* {
+  get field = self::Extension|get#field;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  operator [] = self::Extension|[];
+  operator []= = self::Extension|[]=;
+  operator + = self::Extension|+;
+  operator unary- = self::Extension|unary-;
+  set field = self::Extension|set#field;
+}
+static method Extension|get#field(lowered final self::Class* #this) → self::Class*
+  return #this.{self::Class::_field}{self::Class*};
+static method Extension|set#field(lowered final self::Class* #this, self::Class* value) → void {
+  #this.{self::Class::_field} = value;
+}
+static method Extension|method(lowered final self::Class* #this) → self::Class*
+  return self::Extension|get#field(#this);
+static method Extension|get#method(lowered final self::Class* #this) → () →* self::Class*
+  return () → self::Class* => self::Extension|method(#this);
+static method Extension|[](lowered final self::Class* #this, self::Class* key) → self::Class*
+  return self::Extension|get#field(#this);
+static method Extension|[]=(lowered final self::Class* #this, self::Class* key, self::Class* value) → void {
+  self::Extension|set#field(#this, value);
+}
+static method Extension|+(lowered final self::Class* #this, core::int* value) → self::Class*
+  return self::Extension|get#field(#this);
+static method Extension|unary-(lowered final self::Class* #this) → self::Class*
+  return self::Extension|get#field(#this);
+static method main() → dynamic {
+  self::propertyAccess(null);
+  self::indexAccess(null);
+  self::operatorAccess(null);
+  self::ifNull(null);
+}
+static method propertyAccess(self::Class* c) → void {
+  let final self::Class* #t1 = c in #t1 == null ?{self::Class*} null : self::Extension|get#field(#t1);
+  let final self::Class* #t2 = c in #t2 == null ?{self::Class*} null : self::Extension|set#field(#t2, new self::Class::•());
+  c = let final self::Class* #t3 = c in #t3 == null ?{self::Class*} null : let final self::Class* #t4 = new self::Class::•() in let final void #t5 = self::Extension|set#field(#t3, #t4) in #t4;
+  let final self::Class* #t6 = c in #t6 == null ?{self::Class*} null : self::Extension|method(#t6);
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t7 = c in #t7 == null ?{self::Class*} null : self::Extension|get#field(#t7)));
+  let final self::Class* #t8 = let final self::Class* #t9 = c in #t9 == null ?{self::Class*} null : self::Extension|get#field(#t9) in #t8 == null ?{self::Class*} null : self::Extension|get#field(#t8);
+  self::throws(() → self::Class* => let final self::Class* #t10 = self::Extension|get#field(let final self::Class* #t11 = c in #t11 == null ?{self::Class*} null : self::Extension|get#field(#t11)) in #t10 == null ?{self::Class*} null : self::Extension|get#field(#t10));
+  self::throws(() → self::Class* => let final self::Class* #t12 = new self::Class::•() in let final void #t13 = self::Extension|set#field(let final self::Class* #t14 = c in #t14 == null ?{self::Class*} null : self::Extension|get#field(#t14), #t12) in #t12);
+  let final self::Class* #t15 = let final self::Class* #t16 = c in #t16 == null ?{self::Class*} null : self::Extension|get#field(#t16) in #t15 == null ?{self::Class*} null : self::Extension|set#field(#t15, new self::Class::•());
+  self::throws(() → self::Class* => let final self::Class* #t17 = self::Extension|get#field(let final self::Class* #t18 = c in #t18 == null ?{self::Class*} null : self::Extension|get#field(#t18)) in #t17 == null ?{self::Class*} null : let final self::Class* #t19 = new self::Class::•() in let final void #t20 = self::Extension|set#field(#t17, #t19) in #t19);
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t21 = c in #t21 == null ?{self::Class*} null : self::Extension|get#field(#t21)));
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t22 = c in #t22 == null ?{self::Class*} null : let final self::Class* #t23 = new self::Class::•() in let final void #t24 = self::Extension|set#field(#t22, #t23) in #t23));
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t25 = c in #t25 == null ?{self::Class*} null : self::Extension|method(#t25)));
+  self::throws(() → self::Class* => c = let final self::Class* #t26 = new self::Class::•() in let final void #t27 = self::Extension|set#field(let final self::Class* #t28 = c in #t28 == null ?{self::Class*} null : self::Extension|get#field(#t28), #t26) in #t26);
+  c = let final self::Class* #t29 = let final self::Class* #t30 = c in #t30 == null ?{self::Class*} null : self::Extension|get#field(#t30) in #t29 == null ?{self::Class*} null : let final self::Class* #t31 = new self::Class::•() in let final void #t32 = self::Extension|set#field(#t29, #t31) in #t31;
+  self::throws(() → self::Class* => c = let final self::Class* #t33 = self::Extension|get#field(let final self::Class* #t34 = c in #t34 == null ?{self::Class*} null : self::Extension|get#field(#t34)) in #t33 == null ?{self::Class*} null : let final self::Class* #t35 = new self::Class::•() in let final void #t36 = self::Extension|set#field(#t33, #t35) in #t35);
+  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t37 = c in #t37 == null ?{self::Class*} null : self::Extension|get#field(#t37)));
+  let final self::Class* #t38 = c in #t38 == null ?{self::Class*} null : self::Extension|set#field(#t38, self::Extension|get#field(new self::Class::•()));
+  c = let final self::Class* #t39 = c in #t39 == null ?{self::Class*} null : let final self::Class* #t40 = self::Extension|get#field(new self::Class::•()) in let final void #t41 = self::Extension|set#field(#t39, #t40) in #t40;
+  let final self::Class* #t42 = c in #t42 == null ?{self::Class*} null : self::Extension|set#field(#t42, let final self::Class* #t43 = new self::Class::•() in let final void #t44 = self::Extension|set#field(new self::Class::•(), #t43) in #t43);
+  c = let final self::Class* #t45 = c in #t45 == null ?{self::Class*} null : let final self::Class* #t46 = let final self::Class* #t47 = new self::Class::•() in let final void #t48 = self::Extension|set#field(new self::Class::•(), #t47) in #t47 in let final void #t49 = self::Extension|set#field(#t45, #t46) in #t46;
+  let final self::Class* #t50 = c in #t50 == null ?{self::Class*} null : self::Extension|set#field(#t50, self::Extension|method(new self::Class::•()));
+  c = let final self::Class* #t51 = c in #t51 == null ?{self::Class*} null : let final self::Class* #t52 = self::Extension|method(new self::Class::•()) in let final void #t53 = self::Extension|set#field(#t51, #t52) in #t52;
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t54 = c in #t54 == null ?{self::Class*} null : self::Extension|method(#t54)));
+  self::throws(() → self::Class* => let final self::Class* #t55 = new self::Class::•() in let final void #t56 = self::Extension|set#field(let final self::Class* #t57 = c in #t57 == null ?{self::Class*} null : self::Extension|method(#t57), #t55) in #t55);
+  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t58 = c in #t58 == null ?{self::Class*} null : self::Extension|method(#t58)));
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t59 = c in #t59 == null ?{self::Class*} null : self::Extension|get#field(#t59))));
+  self::throws(() → self::Class* => let final self::Class* #t60 = new self::Class::•() in let final void #t61 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t62 = c in #t62 == null ?{self::Class*} null : self::Extension|get#field(#t62)), #t60) in #t60);
+  self::throws(() → self::Class* => c = let final self::Class* #t63 = new self::Class::•() in let final void #t64 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t65 = c in #t65 == null ?{self::Class*} null : self::Extension|get#field(#t65)), #t63) in #t63);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t66 = c in #t66 == null ?{self::Class*} null : self::Extension|get#field(#t66))));
+  let final self::Class* #t67 = c in #t67 == null ?{self::Class*} null : self::Extension|set#field(#t67, self::Extension|get#field(self::Extension|get#field(new self::Class::•())));
+  c = let final self::Class* #t68 = c in #t68 == null ?{self::Class*} null : let final self::Class* #t69 = self::Extension|get#field(self::Extension|get#field(new self::Class::•())) in let final void #t70 = self::Extension|set#field(#t68, #t69) in #t69;
+  let final self::Class* #t71 = c in #t71 == null ?{self::Class*} null : self::Extension|set#field(#t71, let final self::Class* #t72 = new self::Class::•() in let final void #t73 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t72) in #t72);
+  c = let final self::Class* #t74 = c in #t74 == null ?{self::Class*} null : let final self::Class* #t75 = let final self::Class* #t76 = new self::Class::•() in let final void #t77 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t76) in #t76 in let final void #t78 = self::Extension|set#field(#t74, #t75) in #t75;
+  let final self::Class* #t79 = c in #t79 == null ?{self::Class*} null : self::Extension|set#field(#t79, self::Extension|method(self::Extension|get#field(new self::Class::•())));
+  c = let final self::Class* #t80 = c in #t80 == null ?{self::Class*} null : let final self::Class* #t81 = self::Extension|method(self::Extension|get#field(new self::Class::•())) in let final void #t82 = self::Extension|set#field(#t80, #t81) in #t81;
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t83 = c in #t83 == null ?{self::Class*} null : self::Extension|method(#t83))));
+  self::throws(() → self::Class* => let final self::Class* #t84 = new self::Class::•() in let final void #t85 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t86 = c in #t86 == null ?{self::Class*} null : self::Extension|method(#t86)), #t84) in #t84);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t87 = c in #t87 == null ?{self::Class*} null : self::Extension|method(#t87))));
+  self::throws(() → self::Class* => let final self::Class* #t88 = self::Extension|get#field(new self::Class::•()) in let final void #t89 = self::Extension|set#field(let final self::Class* #t90 = c in #t90 == null ?{self::Class*} null : self::Extension|get#field(#t90), #t88) in #t88);
+  self::throws(() → self::Class* => c = let final self::Class* #t91 = self::Extension|get#field(new self::Class::•()) in let final void #t92 = self::Extension|set#field(let final self::Class* #t93 = c in #t93 == null ?{self::Class*} null : self::Extension|get#field(#t93), #t91) in #t91);
+  self::throws(() → self::Class* => let final self::Class* #t94 = let final self::Class* #t95 = new self::Class::•() in let final void #t96 = self::Extension|set#field(new self::Class::•(), #t95) in #t95 in let final void #t97 = self::Extension|set#field(let final self::Class* #t98 = c in #t98 == null ?{self::Class*} null : self::Extension|get#field(#t98), #t94) in #t94);
+  self::throws(() → self::Class* => c = let final self::Class* #t99 = let final self::Class* #t100 = new self::Class::•() in let final void #t101 = self::Extension|set#field(new self::Class::•(), #t100) in #t100 in let final void #t102 = self::Extension|set#field(let final self::Class* #t103 = c in #t103 == null ?{self::Class*} null : self::Extension|get#field(#t103), #t99) in #t99);
+  self::throws(() → self::Class* => let final self::Class* #t104 = self::Extension|method(new self::Class::•()) in let final void #t105 = self::Extension|set#field(let final self::Class* #t106 = c in #t106 == null ?{self::Class*} null : self::Extension|get#field(#t106), #t104) in #t104);
+  self::throws(() → self::Class* => c = let final self::Class* #t107 = self::Extension|method(new self::Class::•()) in let final void #t108 = self::Extension|set#field(let final self::Class* #t109 = c in #t109 == null ?{self::Class*} null : self::Extension|get#field(#t109), #t107) in #t107);
+  let final self::Class* #t110 = c in #t110 == null ?{self::Class*} null : self::Extension|set#field(#t110, let final self::Class* #t111 = self::Extension|get#field(new self::Class::•()) in let final void #t112 = self::Extension|set#field(new self::Class::•(), #t111) in #t111);
+  c = let final self::Class* #t113 = c in #t113 == null ?{self::Class*} null : let final self::Class* #t114 = let final self::Class* #t115 = self::Extension|get#field(new self::Class::•()) in let final void #t116 = self::Extension|set#field(new self::Class::•(), #t115) in #t115 in let final void #t117 = self::Extension|set#field(#t113, #t114) in #t114;
+  let final self::Class* #t118 = c in #t118 == null ?{self::Class*} null : self::Extension|set#field(#t118, let final self::Class* #t119 = let final self::Class* #t120 = new self::Class::•() in let final void #t121 = self::Extension|set#field(new self::Class::•(), #t120) in #t120 in let final void #t122 = self::Extension|set#field(new self::Class::•(), #t119) in #t119);
+  c = let final self::Class* #t123 = c in #t123 == null ?{self::Class*} null : let final self::Class* #t124 = let final self::Class* #t125 = let final self::Class* #t126 = new self::Class::•() in let final void #t127 = self::Extension|set#field(new self::Class::•(), #t126) in #t126 in let final void #t128 = self::Extension|set#field(new self::Class::•(), #t125) in #t125 in let final void #t129 = self::Extension|set#field(#t123, #t124) in #t124;
+  let final self::Class* #t130 = c in #t130 == null ?{self::Class*} null : self::Extension|set#field(#t130, let final self::Class* #t131 = self::Extension|method(new self::Class::•()) in let final void #t132 = self::Extension|set#field(new self::Class::•(), #t131) in #t131);
+  c = let final self::Class* #t133 = c in #t133 == null ?{self::Class*} null : let final self::Class* #t134 = let final self::Class* #t135 = self::Extension|method(new self::Class::•()) in let final void #t136 = self::Extension|set#field(new self::Class::•(), #t135) in #t135 in let final void #t137 = self::Extension|set#field(#t133, #t134) in #t134;
+  self::throws(() → self::Class* => let final self::Class* #t138 = self::Extension|get#field(new self::Class::•()) in let final void #t139 = self::Extension|set#field(let final self::Class* #t140 = c in #t140 == null ?{self::Class*} null : self::Extension|method(#t140), #t138) in #t138);
+  self::throws(() → self::Class* => c = let final self::Class* #t141 = self::Extension|get#field(new self::Class::•()) in let final void #t142 = self::Extension|set#field(let final self::Class* #t143 = c in #t143 == null ?{self::Class*} null : self::Extension|method(#t143), #t141) in #t141);
+  self::throws(() → self::Class* => let final self::Class* #t144 = let final self::Class* #t145 = new self::Class::•() in let final void #t146 = self::Extension|set#field(new self::Class::•(), #t145) in #t145 in let final void #t147 = self::Extension|set#field(let final self::Class* #t148 = c in #t148 == null ?{self::Class*} null : self::Extension|method(#t148), #t144) in #t144);
+  self::throws(() → self::Class* => c = let final self::Class* #t149 = let final self::Class* #t150 = new self::Class::•() in let final void #t151 = self::Extension|set#field(new self::Class::•(), #t150) in #t150 in let final void #t152 = self::Extension|set#field(let final self::Class* #t153 = c in #t153 == null ?{self::Class*} null : self::Extension|method(#t153), #t149) in #t149);
+  self::throws(() → self::Class* => let final self::Class* #t154 = self::Extension|method(new self::Class::•()) in let final void #t155 = self::Extension|set#field(let final self::Class* #t156 = c in #t156 == null ?{self::Class*} null : self::Extension|method(#t156), #t154) in #t154);
+  self::throws(() → self::Class* => c = let final self::Class* #t157 = self::Extension|method(new self::Class::•()) in let final void #t158 = self::Extension|set#field(let final self::Class* #t159 = c in #t159 == null ?{self::Class*} null : self::Extension|method(#t159), #t157) in #t157);
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t160 = c in #t160 == null ?{self::Class*} null : self::Extension|get#field(#t160))));
+  self::throws(() → self::Class* => let final self::Class* #t161 = new self::Class::•() in let final void #t162 = self::Extension|set#field(self::Extension|method(let final self::Class* #t163 = c in #t163 == null ?{self::Class*} null : self::Extension|get#field(#t163)), #t161) in #t161);
+  self::throws(() → self::Class* => c = let final self::Class* #t164 = new self::Class::•() in let final void #t165 = self::Extension|set#field(self::Extension|method(let final self::Class* #t166 = c in #t166 == null ?{self::Class*} null : self::Extension|get#field(#t166)), #t164) in #t164);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t167 = c in #t167 == null ?{self::Class*} null : self::Extension|get#field(#t167))));
+  let final self::Class* #t168 = c in #t168 == null ?{self::Class*} null : self::Extension|set#field(#t168, self::Extension|get#field(self::Extension|method(new self::Class::•())));
+  c = let final self::Class* #t169 = c in #t169 == null ?{self::Class*} null : let final self::Class* #t170 = self::Extension|get#field(self::Extension|method(new self::Class::•())) in let final void #t171 = self::Extension|set#field(#t169, #t170) in #t170;
+  let final self::Class* #t172 = c in #t172 == null ?{self::Class*} null : self::Extension|set#field(#t172, let final self::Class* #t173 = new self::Class::•() in let final void #t174 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t173) in #t173);
+  c = let final self::Class* #t175 = c in #t175 == null ?{self::Class*} null : let final self::Class* #t176 = let final self::Class* #t177 = new self::Class::•() in let final void #t178 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t177) in #t177 in let final void #t179 = self::Extension|set#field(#t175, #t176) in #t176;
+  let final self::Class* #t180 = c in #t180 == null ?{self::Class*} null : self::Extension|set#field(#t180, self::Extension|method(self::Extension|method(new self::Class::•())));
+  c = let final self::Class* #t181 = c in #t181 == null ?{self::Class*} null : let final self::Class* #t182 = self::Extension|method(self::Extension|method(new self::Class::•())) in let final void #t183 = self::Extension|set#field(#t181, #t182) in #t182;
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t184 = c in #t184 == null ?{self::Class*} null : self::Extension|method(#t184))));
+  self::throws(() → self::Class* => let final self::Class* #t185 = new self::Class::•() in let final void #t186 = self::Extension|set#field(self::Extension|method(let final self::Class* #t187 = c in #t187 == null ?{self::Class*} null : self::Extension|method(#t187)), #t185) in #t185);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t188 = c in #t188 == null ?{self::Class*} null : self::Extension|method(#t188))));
+  let final self::Class* #t189 = let final self::Class* #t190 = c in #t190 == null ?{self::Class*} null : self::Extension|method(#t190) in #t189 == null ?{self::Class*} null : self::Extension|method(#t189);
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t191 = c in #t191 == null ?{self::Class*} null : self::Extension|get#field(#t191)));
+  let final self::Class* #t192 = let final self::Class* #t193 = c in #t193 == null ?{self::Class*} null : self::Extension|get#field(#t193) in #t192 == null ?{self::Class*} null : self::Extension|get#field(#t192);
+}
+static method indexAccess(self::Class* c) → void {
+  self::throws(() → self::Class* => self::Extension|[](let final self::Class* #t194 = c in #t194 == null ?{self::Class*} null : self::Extension|get#field(#t194), c));
+  self::throws(() → self::Class* => let final self::Class* #t195 = let final self::Class* #t196 = c in #t196 == null ?{self::Class*} null : self::Extension|get#field(#t196) in let final self::Class* #t197 = c in let final self::Class* #t198 = new self::Class::•() in let final void #t199 = self::Extension|[]=(#t195, #t197, #t198) in #t198);
+  self::throws(() → self::Class* => c = let final self::Class* #t200 = let final self::Class* #t201 = c in #t201 == null ?{self::Class*} null : self::Extension|get#field(#t201) in let final self::Class* #t202 = c in let final self::Class* #t203 = new self::Class::•() in let final void #t204 = self::Extension|[]=(#t200, #t202, #t203) in #t203);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](let final self::Class* #t205 = c in #t205 == null ?{self::Class*} null : self::Extension|get#field(#t205), c)));
+  self::throws(() → self::Class* => let final self::Class* #t206 = let final self::Class* #t207 = c in #t207 == null ?{self::Class*} null : self::Extension|get#field(#t207) in let final self::Class* #t208 = c in let final self::Class* #t209 = self::Extension|+(self::Extension|[](#t206, #t208), 0) in let final void #t210 = self::Extension|[]=(#t206, #t208, #t209) in #t209);
+  self::throws(() → self::Class* => c = let final self::Class* #t211 = let final self::Class* #t212 = c in #t212 == null ?{self::Class*} null : self::Extension|get#field(#t212) in let final self::Class* #t213 = c in let final self::Class* #t214 = self::Extension|+(self::Extension|[](#t211, #t213), 0) in let final void #t215 = self::Extension|[]=(#t211, #t213, #t214) in #t214);
+  self::throws(() → self::Class* => let final self::Class* #t216 = let final self::Class* #t217 = c in #t217 == null ?{self::Class*} null : self::Extension|get#field(#t217) in let final self::Class* #t218 = c in let final self::Class* #t219 = self::Extension|[](#t216, #t218) in let final void #t220 = self::Extension|[]=(#t216, #t218, self::Extension|+(#t219, 1)) in #t219);
+  self::throws(() → self::Class* => c = let final self::Class* #t221 = let final self::Class* #t222 = c in #t222 == null ?{self::Class*} null : self::Extension|get#field(#t222) in let final self::Class* #t223 = c in let final self::Class* #t224 = self::Extension|[](#t221, #t223) in let final void #t225 = self::Extension|[]=(#t221, #t223, self::Extension|+(#t224, 1)) in #t224);
+  self::throws(() → self::Class* => let final self::Class* #t226 = let final self::Class* #t227 = c in #t227 == null ?{self::Class*} null : self::Extension|get#field(#t227) in let final self::Class* #t228 = c in let final self::Class* #t229 = self::Extension|+(self::Extension|[](#t226, #t228), 1) in let final void #t230 = self::Extension|[]=(#t226, #t228, #t229) in #t229);
+  self::throws(() → self::Class* => c = let final self::Class* #t231 = let final self::Class* #t232 = c in #t232 == null ?{self::Class*} null : self::Extension|get#field(#t232) in let final self::Class* #t233 = c in let final self::Class* #t234 = self::Extension|+(self::Extension|[](#t231, #t233), 1) in let final void #t235 = self::Extension|[]=(#t231, #t233, #t234) in #t234);
+  self::throws(() → self::Class* => self::Extension|[](self::Extension|[](let final self::Class* #t236 = c in #t236 == null ?{self::Class*} null : self::Extension|get#field(#t236), c), c));
+  self::throws(() → self::Class* => let final self::Class* #t237 = self::Extension|[](let final self::Class* #t238 = c in #t238 == null ?{self::Class*} null : self::Extension|get#field(#t238), c) in let final self::Class* #t239 = c in let final self::Class* #t240 = new self::Class::•() in let final void #t241 = self::Extension|[]=(#t237, #t239, #t240) in #t240);
+  self::throws(() → self::Class* => c = let final self::Class* #t242 = self::Extension|[](let final self::Class* #t243 = c in #t243 == null ?{self::Class*} null : self::Extension|get#field(#t243), c) in let final self::Class* #t244 = c in let final self::Class* #t245 = new self::Class::•() in let final void #t246 = self::Extension|[]=(#t242, #t244, #t245) in #t245);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](self::Extension|[](let final self::Class* #t247 = c in #t247 == null ?{self::Class*} null : self::Extension|get#field(#t247), c), c)));
+  self::throws(() → self::Class* => let final self::Class* #t248 = self::Extension|[](let final self::Class* #t249 = c in #t249 == null ?{self::Class*} null : self::Extension|get#field(#t249), c) in let final self::Class* #t250 = c in let final self::Class* #t251 = self::Extension|+(self::Extension|[](#t248, #t250), 0) in let final void #t252 = self::Extension|[]=(#t248, #t250, #t251) in #t251);
+  self::throws(() → self::Class* => c = let final self::Class* #t253 = self::Extension|[](let final self::Class* #t254 = c in #t254 == null ?{self::Class*} null : self::Extension|get#field(#t254), c) in let final self::Class* #t255 = c in let final self::Class* #t256 = self::Extension|+(self::Extension|[](#t253, #t255), 0) in let final void #t257 = self::Extension|[]=(#t253, #t255, #t256) in #t256);
+  self::throws(() → self::Class* => let final self::Class* #t258 = self::Extension|[](let final self::Class* #t259 = c in #t259 == null ?{self::Class*} null : self::Extension|get#field(#t259), c) in let final self::Class* #t260 = c in let final self::Class* #t261 = self::Extension|[](#t258, #t260) in let final void #t262 = self::Extension|[]=(#t258, #t260, self::Extension|+(#t261, 1)) in #t261);
+  self::throws(() → self::Class* => c = let final self::Class* #t263 = self::Extension|[](let final self::Class* #t264 = c in #t264 == null ?{self::Class*} null : self::Extension|get#field(#t264), c) in let final self::Class* #t265 = c in let final self::Class* #t266 = self::Extension|[](#t263, #t265) in let final void #t267 = self::Extension|[]=(#t263, #t265, self::Extension|+(#t266, 1)) in #t266);
+  self::throws(() → self::Class* => let final self::Class* #t268 = self::Extension|[](let final self::Class* #t269 = c in #t269 == null ?{self::Class*} null : self::Extension|get#field(#t269), c) in let final self::Class* #t270 = c in let final self::Class* #t271 = self::Extension|+(self::Extension|[](#t268, #t270), 1) in let final void #t272 = self::Extension|[]=(#t268, #t270, #t271) in #t271);
+  self::throws(() → self::Class* => c = let final self::Class* #t273 = self::Extension|[](let final self::Class* #t274 = c in #t274 == null ?{self::Class*} null : self::Extension|get#field(#t274), c) in let final self::Class* #t275 = c in let final self::Class* #t276 = self::Extension|+(self::Extension|[](#t273, #t275), 1) in let final void #t277 = self::Extension|[]=(#t273, #t275, #t276) in #t276);
+}
+static method operatorAccess(self::Class* c) → void {
+  self::throws(() → self::Class* => self::Extension|+(let final self::Class* #t278 = c in #t278 == null ?{self::Class*} null : self::Extension|get#field(#t278), 0));
+  self::throws(() → self::Class* => self::Extension|unary-(let final self::Class* #t279 = c in #t279 == null ?{self::Class*} null : self::Extension|get#field(#t279)));
+  let final self::Class* #t280 = c in #t280 == null ?{self::Class*} null : self::Extension|set#field(#t280, self::Extension|+(self::Extension|get#field(#t280), 0));
+  c = let final self::Class* #t281 = c in #t281 == null ?{self::Class*} null : let final self::Class* #t282 = self::Extension|+(self::Extension|get#field(#t281), 0) in let final void #t283 = self::Extension|set#field(#t281, #t282) in #t282;
+  self::throws(() → self::Class* => let final self::Class* #t284 = let final self::Class* #t285 = c in #t285 == null ?{self::Class*} null : self::Extension|get#field(#t285) in let final self::Class* #t286 = self::Extension|+(self::Extension|get#field(#t284), 0) in let final void #t287 = self::Extension|set#field(#t284, #t286) in #t286);
+  self::throws(() → self::Class* => c = let final self::Class* #t288 = let final self::Class* #t289 = c in #t289 == null ?{self::Class*} null : self::Extension|get#field(#t289) in let final self::Class* #t290 = self::Extension|+(self::Extension|get#field(#t288), 0) in let final void #t291 = self::Extension|set#field(#t288, #t290) in #t290);
+  let final self::Class* #t292 = c in #t292 == null ?{self::Class*} null : self::Extension|set#field(#t292, self::Extension|+(self::Extension|get#field(#t292), 1));
+  c = let final self::Class* #t293 = c in #t293 == null ?{self::Class*} null : let final self::Class* #t294 = self::Extension|get#field(#t293) in let final self::Class* #t295 = let final self::Class* #t296 = self::Extension|+(#t294, 1) in let final void #t297 = self::Extension|set#field(#t293, #t296) in #t296 in #t294;
+  let final self::Class* #t298 = c in #t298 == null ?{self::Class*} null : let final self::Class* #t299 = self::Extension|+(self::Extension|get#field(#t298), 1) in let final void #t300 = self::Extension|set#field(#t298, #t299) in #t299;
+  c = let final self::Class* #t301 = c in #t301 == null ?{self::Class*} null : let final self::Class* #t302 = self::Extension|+(self::Extension|get#field(#t301), 1) in let final void #t303 = self::Extension|set#field(#t301, #t302) in #t302;
+}
+static method ifNull(self::Class* c) → void {
+  let final self::Class* #t304 = c in #t304 == null ?{self::Class*} null : self::Extension|get#field(#t304) == null ?{self::Class*} self::Extension|set#field(#t304, c) : null;
+  c = let final self::Class* #t305 = c in #t305 == null ?{self::Class*} null : let final self::Class* #t306 = self::Extension|get#field(#t305) in #t306 == null ?{self::Class*} let final self::Class* #t307 = c in let final void #t308 = self::Extension|set#field(#t305, #t307) in #t307 : #t306;
+  self::throws(() → self::Class* => let final self::Class* #t309 = let final self::Class* #t310 = c in #t310 == null ?{self::Class*} null : self::Extension|get#field(#t310) in let final self::Class* #t311 = self::Extension|get#field(#t309) in #t311 == null ?{self::Class*} let final self::Class* #t312 = c in let final void #t313 = self::Extension|set#field(#t309, #t312) in #t312 : #t311);
+  self::throws(() → self::Class* => c = let final self::Class* #t314 = let final self::Class* #t315 = c in #t315 == null ?{self::Class*} null : self::Extension|get#field(#t315) in let final self::Class* #t316 = self::Extension|get#field(#t314) in #t316 == null ?{self::Class*} let final self::Class* #t317 = c in let final void #t318 = self::Extension|set#field(#t314, #t317) in #t317 : #t316);
+  self::throws(() → self::Class* => let final self::Class* #t319 = let final self::Class* #t320 = c in #t320 == null ?{self::Class*} null : self::Extension|get#field(#t320) in let final self::Class* #t321 = c in let final self::Class* #t322 = self::Extension|[](#t319, #t321) in #t322 == null ?{self::Class*} let final self::Class* #t323 = c in let final void #t324 = self::Extension|[]=(#t319, #t321, #t323) in #t323 : #t322);
+  self::throws(() → self::Class* => c = let final self::Class* #t325 = let final self::Class* #t326 = c in #t326 == null ?{self::Class*} null : self::Extension|get#field(#t326) in let final self::Class* #t327 = c in let final self::Class* #t328 = self::Extension|[](#t325, #t327) in #t328 == null ?{self::Class*} let final self::Class* #t329 = c in let final void #t330 = self::Extension|[]=(#t325, #t327, #t329) in #t329 : #t328);
+}
+static method throws(() →* void f) → void {
+  try {
+    f(){() →* void};
+  }
+  on dynamic catch(final dynamic _) {
+    return;
+  }
+  throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.modular.expect
new file mode 100644
index 0000000..ce52b2a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/no_null_shorting_extension.dart.weak.modular.expect
@@ -0,0 +1,178 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field self::Class* _field = null;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension Extension on self::Class* {
+  get field = self::Extension|get#field;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  operator [] = self::Extension|[];
+  operator []= = self::Extension|[]=;
+  operator + = self::Extension|+;
+  operator unary- = self::Extension|unary-;
+  set field = self::Extension|set#field;
+}
+static method Extension|get#field(lowered final self::Class* #this) → self::Class*
+  return #this.{self::Class::_field}{self::Class*};
+static method Extension|set#field(lowered final self::Class* #this, self::Class* value) → void {
+  #this.{self::Class::_field} = value;
+}
+static method Extension|method(lowered final self::Class* #this) → self::Class*
+  return self::Extension|get#field(#this);
+static method Extension|get#method(lowered final self::Class* #this) → () →* self::Class*
+  return () → self::Class* => self::Extension|method(#this);
+static method Extension|[](lowered final self::Class* #this, self::Class* key) → self::Class*
+  return self::Extension|get#field(#this);
+static method Extension|[]=(lowered final self::Class* #this, self::Class* key, self::Class* value) → void {
+  self::Extension|set#field(#this, value);
+}
+static method Extension|+(lowered final self::Class* #this, core::int* value) → self::Class*
+  return self::Extension|get#field(#this);
+static method Extension|unary-(lowered final self::Class* #this) → self::Class*
+  return self::Extension|get#field(#this);
+static method main() → dynamic {
+  self::propertyAccess(null);
+  self::indexAccess(null);
+  self::operatorAccess(null);
+  self::ifNull(null);
+}
+static method propertyAccess(self::Class* c) → void {
+  let final self::Class* #t1 = c in #t1 == null ?{self::Class*} null : self::Extension|get#field(#t1);
+  let final self::Class* #t2 = c in #t2 == null ?{self::Class*} null : self::Extension|set#field(#t2, new self::Class::•());
+  c = let final self::Class* #t3 = c in #t3 == null ?{self::Class*} null : let final self::Class* #t4 = new self::Class::•() in let final void #t5 = self::Extension|set#field(#t3, #t4) in #t4;
+  let final self::Class* #t6 = c in #t6 == null ?{self::Class*} null : self::Extension|method(#t6);
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t7 = c in #t7 == null ?{self::Class*} null : self::Extension|get#field(#t7)));
+  let final self::Class* #t8 = let final self::Class* #t9 = c in #t9 == null ?{self::Class*} null : self::Extension|get#field(#t9) in #t8 == null ?{self::Class*} null : self::Extension|get#field(#t8);
+  self::throws(() → self::Class* => let final self::Class* #t10 = self::Extension|get#field(let final self::Class* #t11 = c in #t11 == null ?{self::Class*} null : self::Extension|get#field(#t11)) in #t10 == null ?{self::Class*} null : self::Extension|get#field(#t10));
+  self::throws(() → self::Class* => let final self::Class* #t12 = new self::Class::•() in let final void #t13 = self::Extension|set#field(let final self::Class* #t14 = c in #t14 == null ?{self::Class*} null : self::Extension|get#field(#t14), #t12) in #t12);
+  let final self::Class* #t15 = let final self::Class* #t16 = c in #t16 == null ?{self::Class*} null : self::Extension|get#field(#t16) in #t15 == null ?{self::Class*} null : self::Extension|set#field(#t15, new self::Class::•());
+  self::throws(() → self::Class* => let final self::Class* #t17 = self::Extension|get#field(let final self::Class* #t18 = c in #t18 == null ?{self::Class*} null : self::Extension|get#field(#t18)) in #t17 == null ?{self::Class*} null : let final self::Class* #t19 = new self::Class::•() in let final void #t20 = self::Extension|set#field(#t17, #t19) in #t19);
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t21 = c in #t21 == null ?{self::Class*} null : self::Extension|get#field(#t21)));
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t22 = c in #t22 == null ?{self::Class*} null : let final self::Class* #t23 = new self::Class::•() in let final void #t24 = self::Extension|set#field(#t22, #t23) in #t23));
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t25 = c in #t25 == null ?{self::Class*} null : self::Extension|method(#t25)));
+  self::throws(() → self::Class* => c = let final self::Class* #t26 = new self::Class::•() in let final void #t27 = self::Extension|set#field(let final self::Class* #t28 = c in #t28 == null ?{self::Class*} null : self::Extension|get#field(#t28), #t26) in #t26);
+  c = let final self::Class* #t29 = let final self::Class* #t30 = c in #t30 == null ?{self::Class*} null : self::Extension|get#field(#t30) in #t29 == null ?{self::Class*} null : let final self::Class* #t31 = new self::Class::•() in let final void #t32 = self::Extension|set#field(#t29, #t31) in #t31;
+  self::throws(() → self::Class* => c = let final self::Class* #t33 = self::Extension|get#field(let final self::Class* #t34 = c in #t34 == null ?{self::Class*} null : self::Extension|get#field(#t34)) in #t33 == null ?{self::Class*} null : let final self::Class* #t35 = new self::Class::•() in let final void #t36 = self::Extension|set#field(#t33, #t35) in #t35);
+  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t37 = c in #t37 == null ?{self::Class*} null : self::Extension|get#field(#t37)));
+  let final self::Class* #t38 = c in #t38 == null ?{self::Class*} null : self::Extension|set#field(#t38, self::Extension|get#field(new self::Class::•()));
+  c = let final self::Class* #t39 = c in #t39 == null ?{self::Class*} null : let final self::Class* #t40 = self::Extension|get#field(new self::Class::•()) in let final void #t41 = self::Extension|set#field(#t39, #t40) in #t40;
+  let final self::Class* #t42 = c in #t42 == null ?{self::Class*} null : self::Extension|set#field(#t42, let final self::Class* #t43 = new self::Class::•() in let final void #t44 = self::Extension|set#field(new self::Class::•(), #t43) in #t43);
+  c = let final self::Class* #t45 = c in #t45 == null ?{self::Class*} null : let final self::Class* #t46 = let final self::Class* #t47 = new self::Class::•() in let final void #t48 = self::Extension|set#field(new self::Class::•(), #t47) in #t47 in let final void #t49 = self::Extension|set#field(#t45, #t46) in #t46;
+  let final self::Class* #t50 = c in #t50 == null ?{self::Class*} null : self::Extension|set#field(#t50, self::Extension|method(new self::Class::•()));
+  c = let final self::Class* #t51 = c in #t51 == null ?{self::Class*} null : let final self::Class* #t52 = self::Extension|method(new self::Class::•()) in let final void #t53 = self::Extension|set#field(#t51, #t52) in #t52;
+  self::throws(() → self::Class* => self::Extension|get#field(let final self::Class* #t54 = c in #t54 == null ?{self::Class*} null : self::Extension|method(#t54)));
+  self::throws(() → self::Class* => let final self::Class* #t55 = new self::Class::•() in let final void #t56 = self::Extension|set#field(let final self::Class* #t57 = c in #t57 == null ?{self::Class*} null : self::Extension|method(#t57), #t55) in #t55);
+  self::throws(() → self::Class* => self::Extension|method(let final self::Class* #t58 = c in #t58 == null ?{self::Class*} null : self::Extension|method(#t58)));
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t59 = c in #t59 == null ?{self::Class*} null : self::Extension|get#field(#t59))));
+  self::throws(() → self::Class* => let final self::Class* #t60 = new self::Class::•() in let final void #t61 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t62 = c in #t62 == null ?{self::Class*} null : self::Extension|get#field(#t62)), #t60) in #t60);
+  self::throws(() → self::Class* => c = let final self::Class* #t63 = new self::Class::•() in let final void #t64 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t65 = c in #t65 == null ?{self::Class*} null : self::Extension|get#field(#t65)), #t63) in #t63);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t66 = c in #t66 == null ?{self::Class*} null : self::Extension|get#field(#t66))));
+  let final self::Class* #t67 = c in #t67 == null ?{self::Class*} null : self::Extension|set#field(#t67, self::Extension|get#field(self::Extension|get#field(new self::Class::•())));
+  c = let final self::Class* #t68 = c in #t68 == null ?{self::Class*} null : let final self::Class* #t69 = self::Extension|get#field(self::Extension|get#field(new self::Class::•())) in let final void #t70 = self::Extension|set#field(#t68, #t69) in #t69;
+  let final self::Class* #t71 = c in #t71 == null ?{self::Class*} null : self::Extension|set#field(#t71, let final self::Class* #t72 = new self::Class::•() in let final void #t73 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t72) in #t72);
+  c = let final self::Class* #t74 = c in #t74 == null ?{self::Class*} null : let final self::Class* #t75 = let final self::Class* #t76 = new self::Class::•() in let final void #t77 = self::Extension|set#field(self::Extension|get#field(new self::Class::•()), #t76) in #t76 in let final void #t78 = self::Extension|set#field(#t74, #t75) in #t75;
+  let final self::Class* #t79 = c in #t79 == null ?{self::Class*} null : self::Extension|set#field(#t79, self::Extension|method(self::Extension|get#field(new self::Class::•())));
+  c = let final self::Class* #t80 = c in #t80 == null ?{self::Class*} null : let final self::Class* #t81 = self::Extension|method(self::Extension|get#field(new self::Class::•())) in let final void #t82 = self::Extension|set#field(#t80, #t81) in #t81;
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|get#field(let final self::Class* #t83 = c in #t83 == null ?{self::Class*} null : self::Extension|method(#t83))));
+  self::throws(() → self::Class* => let final self::Class* #t84 = new self::Class::•() in let final void #t85 = self::Extension|set#field(self::Extension|get#field(let final self::Class* #t86 = c in #t86 == null ?{self::Class*} null : self::Extension|method(#t86)), #t84) in #t84);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|get#field(let final self::Class* #t87 = c in #t87 == null ?{self::Class*} null : self::Extension|method(#t87))));
+  self::throws(() → self::Class* => let final self::Class* #t88 = self::Extension|get#field(new self::Class::•()) in let final void #t89 = self::Extension|set#field(let final self::Class* #t90 = c in #t90 == null ?{self::Class*} null : self::Extension|get#field(#t90), #t88) in #t88);
+  self::throws(() → self::Class* => c = let final self::Class* #t91 = self::Extension|get#field(new self::Class::•()) in let final void #t92 = self::Extension|set#field(let final self::Class* #t93 = c in #t93 == null ?{self::Class*} null : self::Extension|get#field(#t93), #t91) in #t91);
+  self::throws(() → self::Class* => let final self::Class* #t94 = let final self::Class* #t95 = new self::Class::•() in let final void #t96 = self::Extension|set#field(new self::Class::•(), #t95) in #t95 in let final void #t97 = self::Extension|set#field(let final self::Class* #t98 = c in #t98 == null ?{self::Class*} null : self::Extension|get#field(#t98), #t94) in #t94);
+  self::throws(() → self::Class* => c = let final self::Class* #t99 = let final self::Class* #t100 = new self::Class::•() in let final void #t101 = self::Extension|set#field(new self::Class::•(), #t100) in #t100 in let final void #t102 = self::Extension|set#field(let final self::Class* #t103 = c in #t103 == null ?{self::Class*} null : self::Extension|get#field(#t103), #t99) in #t99);
+  self::throws(() → self::Class* => let final self::Class* #t104 = self::Extension|method(new self::Class::•()) in let final void #t105 = self::Extension|set#field(let final self::Class* #t106 = c in #t106 == null ?{self::Class*} null : self::Extension|get#field(#t106), #t104) in #t104);
+  self::throws(() → self::Class* => c = let final self::Class* #t107 = self::Extension|method(new self::Class::•()) in let final void #t108 = self::Extension|set#field(let final self::Class* #t109 = c in #t109 == null ?{self::Class*} null : self::Extension|get#field(#t109), #t107) in #t107);
+  let final self::Class* #t110 = c in #t110 == null ?{self::Class*} null : self::Extension|set#field(#t110, let final self::Class* #t111 = self::Extension|get#field(new self::Class::•()) in let final void #t112 = self::Extension|set#field(new self::Class::•(), #t111) in #t111);
+  c = let final self::Class* #t113 = c in #t113 == null ?{self::Class*} null : let final self::Class* #t114 = let final self::Class* #t115 = self::Extension|get#field(new self::Class::•()) in let final void #t116 = self::Extension|set#field(new self::Class::•(), #t115) in #t115 in let final void #t117 = self::Extension|set#field(#t113, #t114) in #t114;
+  let final self::Class* #t118 = c in #t118 == null ?{self::Class*} null : self::Extension|set#field(#t118, let final self::Class* #t119 = let final self::Class* #t120 = new self::Class::•() in let final void #t121 = self::Extension|set#field(new self::Class::•(), #t120) in #t120 in let final void #t122 = self::Extension|set#field(new self::Class::•(), #t119) in #t119);
+  c = let final self::Class* #t123 = c in #t123 == null ?{self::Class*} null : let final self::Class* #t124 = let final self::Class* #t125 = let final self::Class* #t126 = new self::Class::•() in let final void #t127 = self::Extension|set#field(new self::Class::•(), #t126) in #t126 in let final void #t128 = self::Extension|set#field(new self::Class::•(), #t125) in #t125 in let final void #t129 = self::Extension|set#field(#t123, #t124) in #t124;
+  let final self::Class* #t130 = c in #t130 == null ?{self::Class*} null : self::Extension|set#field(#t130, let final self::Class* #t131 = self::Extension|method(new self::Class::•()) in let final void #t132 = self::Extension|set#field(new self::Class::•(), #t131) in #t131);
+  c = let final self::Class* #t133 = c in #t133 == null ?{self::Class*} null : let final self::Class* #t134 = let final self::Class* #t135 = self::Extension|method(new self::Class::•()) in let final void #t136 = self::Extension|set#field(new self::Class::•(), #t135) in #t135 in let final void #t137 = self::Extension|set#field(#t133, #t134) in #t134;
+  self::throws(() → self::Class* => let final self::Class* #t138 = self::Extension|get#field(new self::Class::•()) in let final void #t139 = self::Extension|set#field(let final self::Class* #t140 = c in #t140 == null ?{self::Class*} null : self::Extension|method(#t140), #t138) in #t138);
+  self::throws(() → self::Class* => c = let final self::Class* #t141 = self::Extension|get#field(new self::Class::•()) in let final void #t142 = self::Extension|set#field(let final self::Class* #t143 = c in #t143 == null ?{self::Class*} null : self::Extension|method(#t143), #t141) in #t141);
+  self::throws(() → self::Class* => let final self::Class* #t144 = let final self::Class* #t145 = new self::Class::•() in let final void #t146 = self::Extension|set#field(new self::Class::•(), #t145) in #t145 in let final void #t147 = self::Extension|set#field(let final self::Class* #t148 = c in #t148 == null ?{self::Class*} null : self::Extension|method(#t148), #t144) in #t144);
+  self::throws(() → self::Class* => c = let final self::Class* #t149 = let final self::Class* #t150 = new self::Class::•() in let final void #t151 = self::Extension|set#field(new self::Class::•(), #t150) in #t150 in let final void #t152 = self::Extension|set#field(let final self::Class* #t153 = c in #t153 == null ?{self::Class*} null : self::Extension|method(#t153), #t149) in #t149);
+  self::throws(() → self::Class* => let final self::Class* #t154 = self::Extension|method(new self::Class::•()) in let final void #t155 = self::Extension|set#field(let final self::Class* #t156 = c in #t156 == null ?{self::Class*} null : self::Extension|method(#t156), #t154) in #t154);
+  self::throws(() → self::Class* => c = let final self::Class* #t157 = self::Extension|method(new self::Class::•()) in let final void #t158 = self::Extension|set#field(let final self::Class* #t159 = c in #t159 == null ?{self::Class*} null : self::Extension|method(#t159), #t157) in #t157);
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t160 = c in #t160 == null ?{self::Class*} null : self::Extension|get#field(#t160))));
+  self::throws(() → self::Class* => let final self::Class* #t161 = new self::Class::•() in let final void #t162 = self::Extension|set#field(self::Extension|method(let final self::Class* #t163 = c in #t163 == null ?{self::Class*} null : self::Extension|get#field(#t163)), #t161) in #t161);
+  self::throws(() → self::Class* => c = let final self::Class* #t164 = new self::Class::•() in let final void #t165 = self::Extension|set#field(self::Extension|method(let final self::Class* #t166 = c in #t166 == null ?{self::Class*} null : self::Extension|get#field(#t166)), #t164) in #t164);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t167 = c in #t167 == null ?{self::Class*} null : self::Extension|get#field(#t167))));
+  let final self::Class* #t168 = c in #t168 == null ?{self::Class*} null : self::Extension|set#field(#t168, self::Extension|get#field(self::Extension|method(new self::Class::•())));
+  c = let final self::Class* #t169 = c in #t169 == null ?{self::Class*} null : let final self::Class* #t170 = self::Extension|get#field(self::Extension|method(new self::Class::•())) in let final void #t171 = self::Extension|set#field(#t169, #t170) in #t170;
+  let final self::Class* #t172 = c in #t172 == null ?{self::Class*} null : self::Extension|set#field(#t172, let final self::Class* #t173 = new self::Class::•() in let final void #t174 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t173) in #t173);
+  c = let final self::Class* #t175 = c in #t175 == null ?{self::Class*} null : let final self::Class* #t176 = let final self::Class* #t177 = new self::Class::•() in let final void #t178 = self::Extension|set#field(self::Extension|method(new self::Class::•()), #t177) in #t177 in let final void #t179 = self::Extension|set#field(#t175, #t176) in #t176;
+  let final self::Class* #t180 = c in #t180 == null ?{self::Class*} null : self::Extension|set#field(#t180, self::Extension|method(self::Extension|method(new self::Class::•())));
+  c = let final self::Class* #t181 = c in #t181 == null ?{self::Class*} null : let final self::Class* #t182 = self::Extension|method(self::Extension|method(new self::Class::•())) in let final void #t183 = self::Extension|set#field(#t181, #t182) in #t182;
+  self::throws(() → self::Class* => self::Extension|get#field(self::Extension|method(let final self::Class* #t184 = c in #t184 == null ?{self::Class*} null : self::Extension|method(#t184))));
+  self::throws(() → self::Class* => let final self::Class* #t185 = new self::Class::•() in let final void #t186 = self::Extension|set#field(self::Extension|method(let final self::Class* #t187 = c in #t187 == null ?{self::Class*} null : self::Extension|method(#t187)), #t185) in #t185);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|method(let final self::Class* #t188 = c in #t188 == null ?{self::Class*} null : self::Extension|method(#t188))));
+  let final self::Class* #t189 = let final self::Class* #t190 = c in #t190 == null ?{self::Class*} null : self::Extension|method(#t190) in #t189 == null ?{self::Class*} null : self::Extension|method(#t189);
+}
+static method indexAccess(self::Class* c) → void {
+  self::throws(() → self::Class* => self::Extension|[](let final self::Class* #t191 = c in #t191 == null ?{self::Class*} null : self::Extension|get#field(#t191), c));
+  self::throws(() → self::Class* => let final self::Class* #t192 = let final self::Class* #t193 = c in #t193 == null ?{self::Class*} null : self::Extension|get#field(#t193) in let final self::Class* #t194 = c in let final self::Class* #t195 = new self::Class::•() in let final void #t196 = self::Extension|[]=(#t192, #t194, #t195) in #t195);
+  self::throws(() → self::Class* => c = let final self::Class* #t197 = let final self::Class* #t198 = c in #t198 == null ?{self::Class*} null : self::Extension|get#field(#t198) in let final self::Class* #t199 = c in let final self::Class* #t200 = new self::Class::•() in let final void #t201 = self::Extension|[]=(#t197, #t199, #t200) in #t200);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](let final self::Class* #t202 = c in #t202 == null ?{self::Class*} null : self::Extension|get#field(#t202), c)));
+  self::throws(() → self::Class* => let final self::Class* #t203 = let final self::Class* #t204 = c in #t204 == null ?{self::Class*} null : self::Extension|get#field(#t204) in let final self::Class* #t205 = c in let final self::Class* #t206 = self::Extension|+(self::Extension|[](#t203, #t205), 0) in let final void #t207 = self::Extension|[]=(#t203, #t205, #t206) in #t206);
+  self::throws(() → self::Class* => c = let final self::Class* #t208 = let final self::Class* #t209 = c in #t209 == null ?{self::Class*} null : self::Extension|get#field(#t209) in let final self::Class* #t210 = c in let final self::Class* #t211 = self::Extension|+(self::Extension|[](#t208, #t210), 0) in let final void #t212 = self::Extension|[]=(#t208, #t210, #t211) in #t211);
+  self::throws(() → self::Class* => let final self::Class* #t213 = let final self::Class* #t214 = c in #t214 == null ?{self::Class*} null : self::Extension|get#field(#t214) in let final self::Class* #t215 = c in let final self::Class* #t216 = self::Extension|[](#t213, #t215) in let final void #t217 = self::Extension|[]=(#t213, #t215, self::Extension|+(#t216, 1)) in #t216);
+  self::throws(() → self::Class* => c = let final self::Class* #t218 = let final self::Class* #t219 = c in #t219 == null ?{self::Class*} null : self::Extension|get#field(#t219) in let final self::Class* #t220 = c in let final self::Class* #t221 = self::Extension|[](#t218, #t220) in let final void #t222 = self::Extension|[]=(#t218, #t220, self::Extension|+(#t221, 1)) in #t221);
+  self::throws(() → self::Class* => let final self::Class* #t223 = let final self::Class* #t224 = c in #t224 == null ?{self::Class*} null : self::Extension|get#field(#t224) in let final self::Class* #t225 = c in let final self::Class* #t226 = self::Extension|+(self::Extension|[](#t223, #t225), 1) in let final void #t227 = self::Extension|[]=(#t223, #t225, #t226) in #t226);
+  self::throws(() → self::Class* => c = let final self::Class* #t228 = let final self::Class* #t229 = c in #t229 == null ?{self::Class*} null : self::Extension|get#field(#t229) in let final self::Class* #t230 = c in let final self::Class* #t231 = self::Extension|+(self::Extension|[](#t228, #t230), 1) in let final void #t232 = self::Extension|[]=(#t228, #t230, #t231) in #t231);
+  self::throws(() → self::Class* => self::Extension|[](self::Extension|[](let final self::Class* #t233 = c in #t233 == null ?{self::Class*} null : self::Extension|get#field(#t233), c), c));
+  self::throws(() → self::Class* => let final self::Class* #t234 = self::Extension|[](let final self::Class* #t235 = c in #t235 == null ?{self::Class*} null : self::Extension|get#field(#t235), c) in let final self::Class* #t236 = c in let final self::Class* #t237 = new self::Class::•() in let final void #t238 = self::Extension|[]=(#t234, #t236, #t237) in #t237);
+  self::throws(() → self::Class* => c = let final self::Class* #t239 = self::Extension|[](let final self::Class* #t240 = c in #t240 == null ?{self::Class*} null : self::Extension|get#field(#t240), c) in let final self::Class* #t241 = c in let final self::Class* #t242 = new self::Class::•() in let final void #t243 = self::Extension|[]=(#t239, #t241, #t242) in #t242);
+  self::throws(() → self::Class* => self::Extension|method(self::Extension|[](self::Extension|[](let final self::Class* #t244 = c in #t244 == null ?{self::Class*} null : self::Extension|get#field(#t244), c), c)));
+  self::throws(() → self::Class* => let final self::Class* #t245 = self::Extension|[](let final self::Class* #t246 = c in #t246 == null ?{self::Class*} null : self::Extension|get#field(#t246), c) in let final self::Class* #t247 = c in let final self::Class* #t248 = self::Extension|+(self::Extension|[](#t245, #t247), 0) in let final void #t249 = self::Extension|[]=(#t245, #t247, #t248) in #t248);
+  self::throws(() → self::Class* => c = let final self::Class* #t250 = self::Extension|[](let final self::Class* #t251 = c in #t251 == null ?{self::Class*} null : self::Extension|get#field(#t251), c) in let final self::Class* #t252 = c in let final self::Class* #t253 = self::Extension|+(self::Extension|[](#t250, #t252), 0) in let final void #t254 = self::Extension|[]=(#t250, #t252, #t253) in #t253);
+  self::throws(() → self::Class* => let final self::Class* #t255 = self::Extension|[](let final self::Class* #t256 = c in #t256 == null ?{self::Class*} null : self::Extension|get#field(#t256), c) in let final self::Class* #t257 = c in let final self::Class* #t258 = self::Extension|[](#t255, #t257) in let final void #t259 = self::Extension|[]=(#t255, #t257, self::Extension|+(#t258, 1)) in #t258);
+  self::throws(() → self::Class* => c = let final self::Class* #t260 = self::Extension|[](let final self::Class* #t261 = c in #t261 == null ?{self::Class*} null : self::Extension|get#field(#t261), c) in let final self::Class* #t262 = c in let final self::Class* #t263 = self::Extension|[](#t260, #t262) in let final void #t264 = self::Extension|[]=(#t260, #t262, self::Extension|+(#t263, 1)) in #t263);
+  self::throws(() → self::Class* => let final self::Class* #t265 = self::Extension|[](let final self::Class* #t266 = c in #t266 == null ?{self::Class*} null : self::Extension|get#field(#t266), c) in let final self::Class* #t267 = c in let final self::Class* #t268 = self::Extension|+(self::Extension|[](#t265, #t267), 1) in let final void #t269 = self::Extension|[]=(#t265, #t267, #t268) in #t268);
+  self::throws(() → self::Class* => c = let final self::Class* #t270 = self::Extension|[](let final self::Class* #t271 = c in #t271 == null ?{self::Class*} null : self::Extension|get#field(#t271), c) in let final self::Class* #t272 = c in let final self::Class* #t273 = self::Extension|+(self::Extension|[](#t270, #t272), 1) in let final void #t274 = self::Extension|[]=(#t270, #t272, #t273) in #t273);
+}
+static method operatorAccess(self::Class* c) → void {
+  self::throws(() → self::Class* => self::Extension|+(let final self::Class* #t275 = c in #t275 == null ?{self::Class*} null : self::Extension|get#field(#t275), 0));
+  self::throws(() → self::Class* => self::Extension|unary-(let final self::Class* #t276 = c in #t276 == null ?{self::Class*} null : self::Extension|get#field(#t276)));
+  let final self::Class* #t277 = c in #t277 == null ?{self::Class*} null : self::Extension|set#field(#t277, self::Extension|+(self::Extension|get#field(#t277), 0));
+  c = let final self::Class* #t278 = c in #t278 == null ?{self::Class*} null : let final self::Class* #t279 = self::Extension|+(self::Extension|get#field(#t278), 0) in let final void #t280 = self::Extension|set#field(#t278, #t279) in #t279;
+  self::throws(() → self::Class* => let final self::Class* #t281 = let final self::Class* #t282 = c in #t282 == null ?{self::Class*} null : self::Extension|get#field(#t282) in let final self::Class* #t283 = self::Extension|+(self::Extension|get#field(#t281), 0) in let final void #t284 = self::Extension|set#field(#t281, #t283) in #t283);
+  self::throws(() → self::Class* => c = let final self::Class* #t285 = let final self::Class* #t286 = c in #t286 == null ?{self::Class*} null : self::Extension|get#field(#t286) in let final self::Class* #t287 = self::Extension|+(self::Extension|get#field(#t285), 0) in let final void #t288 = self::Extension|set#field(#t285, #t287) in #t287);
+  let final self::Class* #t289 = c in #t289 == null ?{self::Class*} null : self::Extension|set#field(#t289, self::Extension|+(self::Extension|get#field(#t289), 1));
+  c = let final self::Class* #t290 = c in #t290 == null ?{self::Class*} null : let final self::Class* #t291 = self::Extension|get#field(#t290) in let final void #t292 = self::Extension|set#field(#t290, self::Extension|+(#t291, 1)) in #t291;
+  let final self::Class* #t293 = c in #t293 == null ?{self::Class*} null : let final self::Class* #t294 = self::Extension|+(self::Extension|get#field(#t293), 1) in let final void #t295 = self::Extension|set#field(#t293, #t294) in #t294;
+  c = let final self::Class* #t296 = c in #t296 == null ?{self::Class*} null : let final self::Class* #t297 = self::Extension|+(self::Extension|get#field(#t296), 1) in let final void #t298 = self::Extension|set#field(#t296, #t297) in #t297;
+}
+static method ifNull(self::Class* c) → void {
+  let final self::Class* #t299 = c in #t299 == null ?{self::Class*} null : self::Extension|get#field(#t299) == null ?{self::Class*} self::Extension|set#field(#t299, c) : null;
+  c = let final self::Class* #t300 = c in #t300 == null ?{self::Class*} null : let final self::Class* #t301 = self::Extension|get#field(#t300) in #t301 == null ?{self::Class*} let final self::Class* #t302 = c in let final void #t303 = self::Extension|set#field(#t300, #t302) in #t302 : #t301;
+  self::throws(() → self::Class* => let final self::Class* #t304 = let final self::Class* #t305 = c in #t305 == null ?{self::Class*} null : self::Extension|get#field(#t305) in let final self::Class* #t306 = self::Extension|get#field(#t304) in #t306 == null ?{self::Class*} let final self::Class* #t307 = c in let final void #t308 = self::Extension|set#field(#t304, #t307) in #t307 : #t306);
+  self::throws(() → self::Class* => c = let final self::Class* #t309 = let final self::Class* #t310 = c in #t310 == null ?{self::Class*} null : self::Extension|get#field(#t310) in let final self::Class* #t311 = self::Extension|get#field(#t309) in #t311 == null ?{self::Class*} let final self::Class* #t312 = c in let final void #t313 = self::Extension|set#field(#t309, #t312) in #t312 : #t311);
+  self::throws(() → self::Class* => let final self::Class* #t314 = let final self::Class* #t315 = c in #t315 == null ?{self::Class*} null : self::Extension|get#field(#t315) in let final self::Class* #t316 = c in let final self::Class* #t317 = self::Extension|[](#t314, #t316) in #t317 == null ?{self::Class*} let final self::Class* #t318 = c in let final void #t319 = self::Extension|[]=(#t314, #t316, #t318) in #t318 : #t317);
+  self::throws(() → self::Class* => c = let final self::Class* #t320 = let final self::Class* #t321 = c in #t321 == null ?{self::Class*} null : self::Extension|get#field(#t321) in let final self::Class* #t322 = c in let final self::Class* #t323 = self::Extension|[](#t320, #t322) in #t323 == null ?{self::Class*} let final self::Class* #t324 = c in let final void #t325 = self::Extension|[]=(#t320, #t322, #t324) in #t324 : #t323);
+}
+static method throws(() →* void f) → void {
+  try {
+    f(){() →* void};
+  }
+  on dynamic catch(final dynamic _) {
+    return;
+  }
+  throw "Expected exception.";
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.modular.expect
new file mode 100644
index 0000000..9262574
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/nsm_from_opt_in.dart.weak.modular.expect
@@ -0,0 +1,113 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "nsm_from_opt_in_lib.dart" as nsm;
+
+import "org-dartlang-testcase:///nsm_from_opt_in_lib.dart";
+
+abstract class A2 extends core::Object implements nsm::A {
+  synthetic constructor •() → self::A2*
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation* invocation) → dynamic {
+    return super.{core::Object::noSuchMethod}(invocation);
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method method(core::int* i) → core::int*; -> nsm::A::method
+  abstract member-signature method genericMethod1<T extends core::Object* = dynamic>(self::A2::genericMethod1::T* t) → self::A2::genericMethod1::T*; -> nsm::A::genericMethod1
+  abstract member-signature method genericMethod2<T extends core::Object*>(self::A2::genericMethod2::T* t) → self::A2::genericMethod2::T*; -> nsm::A::genericMethod2
+  abstract member-signature method genericMethod3<T extends core::Object*>(self::A2::genericMethod3::T* t) → self::A2::genericMethod3::T*; -> nsm::A::genericMethod3
+}
+abstract class B2 extends nsm::A implements self::C2 {
+  synthetic constructor •() → self::B2*
+    : super nsm::A::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation* invocation) → dynamic {
+    return super.{core::Object::noSuchMethod}(invocation);
+  }
+  abstract member-signature method method(core::int* i, {dynamic optional = #C2}) → core::int*; -> self::C2::method
+  abstract member-signature method genericMethod1<T extends core::Object* = dynamic>(self::B2::genericMethod1::T* t) → self::B2::genericMethod1::T*; -> nsm::A::genericMethod1
+  abstract member-signature method genericMethod2<T extends core::Object*>(self::B2::genericMethod2::T* t) → self::B2::genericMethod2::T*; -> nsm::A::genericMethod2
+  abstract member-signature method genericMethod3<T extends core::Object*>(self::B2::genericMethod3::T* t) → self::B2::genericMethod3::T*; -> nsm::A::genericMethod3
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C2 extends core::Object {
+  synthetic constructor •() → self::C2*
+    : super core::Object::•()
+    ;
+  abstract method method(core::int* i, {dynamic optional = #C2}) → core::int*;
+  abstract method genericMethod1<T extends core::Object* = dynamic>(self::C2::genericMethod1::T* t) → self::C2::genericMethod1::T*;
+  abstract method genericMethod2<T extends core::Object*>(self::C2::genericMethod2::T* t) → self::C2::genericMethod2::T*;
+  abstract method genericMethod3<T extends core::Object*>(self::C2::genericMethod3::T* t) → self::C2::genericMethod3::T*;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as nsm;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → nsm::A
+    : super core::Object::•()
+    ;
+  method method(core::int? i) → core::int
+    return let final core::int? #t1 = i in #t1 == null ?{core::int} 0 : #t1{core::int};
+  method genericMethod1<T extends core::Object? = dynamic>(nsm::A::genericMethod1::T% t) → nsm::A::genericMethod1::T%
+    return t;
+  method genericMethod2<T extends core::Object?>(nsm::A::genericMethod2::T% t) → nsm::A::genericMethod2::T%
+    return t;
+  method genericMethod3<T extends core::Object>(nsm::A::genericMethod3::T t) → nsm::A::genericMethod3::T
+    return t;
+}
+abstract class B1 extends nsm::A implements nsm::C1 {
+  synthetic constructor •() → nsm::B1
+    : super nsm::A::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return super.{core::Object::noSuchMethod}(invocation);
+  }
+  abstract member-signature method method(core::int? i, {dynamic optional = #C2}) → core::int; -> nsm::C1::method
+}
+abstract class C1 extends core::Object {
+  synthetic constructor •() → nsm::C1
+    : super core::Object::•()
+    ;
+  abstract method method(core::int? i, {dynamic optional = #C2}) → core::int;
+  abstract method genericMethod1<T extends core::Object? = dynamic>(nsm::C1::genericMethod1::T% t) → nsm::C1::genericMethod1::T%;
+  abstract method genericMethod2<T extends core::Object?>(nsm::C1::genericMethod2::T% t) → nsm::C1::genericMethod2::T%;
+  abstract method genericMethod3<T extends core::Object>(nsm::C1::genericMethod3::T t) → nsm::C1::genericMethod3::T;
+}
+
+constants  {
+  #C1 = core::_Override {}
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/null_safety_invalid_language_version.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/null_safety_invalid_language_version.dart.weak.modular.expect
new file mode 100644
index 0000000..46b2806
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/null_safety_invalid_language_version.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/null_safety_invalid_language_version.dart:7:4: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
+// int? i;
+//    ^
+// pkg/front_end/testcases/nnbd_mixed/null_safety_invalid_language_version.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.7
+// ^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::int? i;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..f4ebaa4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/nullable_extension_on_opt_out.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "nullable_extension_on_opt_out_lib.dart" as nul;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///nullable_extension_on_opt_out_lib.dart";
+
+extension _extension#0 on nul::A? {
+  get text = self::_extension#0|get#text;
+}
+static method _extension#0|get#text(lowered final nul::A? #this) → core::String
+  return "Lily was here";
+static method main() → void {
+  nul::A? a = null;
+  self::expect("Lily was here", self::_extension#0|get#text(a));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+library;
+import self as nul;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::String* text = "";
+  synthetic constructor •() → nul::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.modular.expect
new file mode 100644
index 0000000..e605bd9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_factory/main.dart.weak.modular.expect
@@ -0,0 +1,154 @@
+library;
+import self as self;
+import "opt_in_lib.dart" as opt;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+static method main() → dynamic {
+  new opt::Class1::_<core::Object*>();
+  new opt::Class1::_<core::Object*>();
+  #C1;
+  opt::Class1::fact<core::Object*>();
+  new opt::Class2::_<core::Object*>();
+  new opt::Class2::_<core::Object*>();
+  #C2;
+  opt::Class2::fact<core::Object*>();
+  new opt::Class3::_<core::String*>();
+  new opt::Class3::_<core::String*>();
+  #C3;
+  opt::Class3::fact<core::String*>();
+  new opt::Class4::_<dynamic>();
+  new opt::Class4::_<dynamic>();
+  #C4;
+  opt::Class4::fact<dynamic>();
+  new opt::Class5::_<dynamic>();
+  new opt::Class5::_<dynamic>();
+  #C5;
+  opt::Class5::fact<dynamic>();
+  opt::testOptIn();
+}
+
+library /*isNonNullableByDefault*/;
+import self as opt;
+import "dart:core" as core;
+
+class Class1<T extends core::Object?> extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C6, #C7]/*isLegacy*/;
+  const constructor _() → opt::Class1<opt::Class1::T%>
+    : super core::Object::•()
+    ;
+  static factory redirect<T extends core::Object?>() → opt::Class1<opt::Class1::redirect::T%>
+    return new opt::Class1::_<opt::Class1::redirect::T%>();
+  static factory constRedirect<T extends core::Object?>() → opt::Class1<opt::Class1::constRedirect::T%>
+    return new opt::Class1::_<opt::Class1::constRedirect::T%>();
+  static factory fact<T extends core::Object?>() → opt::Class1<opt::Class1::fact::T%>
+    return new opt::Class1::_<opt::Class1::fact::T%>();
+}
+class Class2<T extends core::Object> extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C8, #C9]/*isLegacy*/;
+  const constructor _() → opt::Class2<opt::Class2::T>
+    : super core::Object::•()
+    ;
+  static factory redirect<T extends core::Object>() → opt::Class2<opt::Class2::redirect::T>
+    return new opt::Class2::_<opt::Class2::redirect::T>();
+  static factory constRedirect<T extends core::Object>() → opt::Class2<opt::Class2::constRedirect::T>
+    return new opt::Class2::_<opt::Class2::constRedirect::T>();
+  static factory fact<T extends core::Object>() → opt::Class2<opt::Class2::fact::T>
+    return new opt::Class2::_<opt::Class2::fact::T>();
+}
+class Class3<T extends core::String> extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C10, #C11]/*isLegacy*/;
+  const constructor _() → opt::Class3<opt::Class3::T>
+    : super core::Object::•()
+    ;
+  static factory redirect<T extends core::String>() → opt::Class3<opt::Class3::redirect::T>
+    return new opt::Class3::_<opt::Class3::redirect::T>();
+  static factory constRedirect<T extends core::String>() → opt::Class3<opt::Class3::constRedirect::T>
+    return new opt::Class3::_<opt::Class3::constRedirect::T>();
+  static factory fact<T extends core::String>() → opt::Class3<opt::Class3::fact::T>
+    return new opt::Class3::_<opt::Class3::fact::T>();
+}
+class Class4<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C12, #C13]/*isLegacy*/;
+  const constructor _() → opt::Class4<opt::Class4::T%>
+    : super core::Object::•()
+    ;
+  static factory redirect<T extends core::Object? = dynamic>() → opt::Class4<opt::Class4::redirect::T%>
+    return new opt::Class4::_<opt::Class4::redirect::T%>();
+  static factory constRedirect<T extends core::Object? = dynamic>() → opt::Class4<opt::Class4::constRedirect::T%>
+    return new opt::Class4::_<opt::Class4::constRedirect::T%>();
+  static factory fact<T extends core::Object? = dynamic>() → opt::Class4<opt::Class4::fact::T%>
+    return new opt::Class4::_<opt::Class4::fact::T%>();
+}
+class Class5<T extends dynamic> extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C14, #C15]/*isLegacy*/;
+  const constructor _() → opt::Class5<opt::Class5::T%>
+    : super core::Object::•()
+    ;
+  static factory redirect<T extends dynamic>() → opt::Class5<opt::Class5::redirect::T%>
+    return new opt::Class5::_<opt::Class5::redirect::T%>();
+  static factory constRedirect<T extends dynamic>() → opt::Class5<opt::Class5::constRedirect::T%>
+    return new opt::Class5::_<opt::Class5::constRedirect::T%>();
+  static factory fact<T extends dynamic>() → opt::Class5<opt::Class5::fact::T%>
+    return new opt::Class5::_<opt::Class5::fact::T%>();
+}
+static method testOptIn() → dynamic {
+  new opt::Class1::_<core::Object?>();
+  new opt::Class1::_<core::Object?>();
+  #C16;
+  opt::Class1::fact<core::Object?>();
+  new opt::Class2::_<core::Object>();
+  new opt::Class2::_<core::Object>();
+  #C2;
+  opt::Class2::fact<core::Object>();
+  new opt::Class3::_<core::String>();
+  new opt::Class3::_<core::String>();
+  #C3;
+  opt::Class3::fact<core::String>();
+  new opt::Class4::_<dynamic>();
+  new opt::Class4::_<dynamic>();
+  #C4;
+  opt::Class4::fact<dynamic>();
+  new opt::Class5::_<dynamic>();
+  new opt::Class5::_<dynamic>();
+  #C5;
+  opt::Class5::fact<dynamic>();
+}
+
+constants  {
+  #C1 = opt::Class1<core::Object*> {}
+  #C2 = opt::Class2<core::Object*> {}
+  #C3 = opt::Class3<core::String*> {}
+  #C4 = opt::Class4<dynamic> {}
+  #C5 = opt::Class5<dynamic> {}
+  #C6 = constructor-tearoff opt::Class1::redirect
+  #C7 = constructor-tearoff opt::Class1::constRedirect
+  #C8 = constructor-tearoff opt::Class2::redirect
+  #C9 = constructor-tearoff opt::Class2::constRedirect
+  #C10 = constructor-tearoff opt::Class3::redirect
+  #C11 = constructor-tearoff opt::Class3::constRedirect
+  #C12 = constructor-tearoff opt::Class4::redirect
+  #C13 = constructor-tearoff opt::Class4::constRedirect
+  #C14 = constructor-tearoff opt::Class5::redirect
+  #C15 = constructor-tearoff opt::Class5::constRedirect
+  #C16 = opt::Class1<core::Object?> {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main.dart:
+- Class1._ (from org-dartlang-testcase:///opt_in_lib.dart:10:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Class2._ (from org-dartlang-testcase:///opt_in_lib.dart:18:9)
+- Class3._ (from org-dartlang-testcase:///opt_in_lib.dart:26:9)
+- Class4._ (from org-dartlang-testcase:///opt_in_lib.dart:34:9)
+- Class5._ (from org-dartlang-testcase:///opt_in_lib.dart:42:9)
+
+org-dartlang-testcase:///opt_in_lib.dart:
+- Class1._ (from org-dartlang-testcase:///opt_in_lib.dart:10:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Class2._ (from org-dartlang-testcase:///opt_in_lib.dart:18:9)
+- Class3._ (from org-dartlang-testcase:///opt_in_lib.dart:26:9)
+- Class4._ (from org-dartlang-testcase:///opt_in_lib.dart:34:9)
+- Class5._ (from org-dartlang-testcase:///opt_in_lib.dart:42:9)
diff --git a/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.modular.expect
new file mode 100644
index 0000000..342dcae
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/object_bound_redirecting_factory/main.dart.weak.modular.expect
@@ -0,0 +1,101 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "opt_in_lib.dart" as opt;
+
+import "org-dartlang-testcase:///opt_in_lib.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class XToken extends opt::Token<core::Object*> /*hasConstConstructor*/  {
+  const constructor •() → self::XToken*
+    : super opt::Token::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static const field core::List<opt::P<core::Object*>*>* list = #C5;
+static const field opt::M* m = #C6;
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as opt;
+import "dart:core" as core;
+
+class P<T extends core::Object> extends core::Object /*hasConstConstructor*/  {
+  final field core::Object token;
+  const constructor _(core::Object token) → opt::P<opt::P::T>
+    : opt::P::token = token, super core::Object::•()
+    ;
+}
+class CP<T extends core::Object> extends opt::P<opt::CP::T> /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
+  const constructor _(core::Object token) → opt::CP<opt::CP::T>
+    : super opt::P::_(token)
+    ;
+  static factory •<T extends core::Object>(core::Type type) → opt::CP<opt::CP::•::T>
+    return new opt::CP::_<opt::CP::•::T>(type);
+}
+class Token<T extends core::Object> extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → opt::Token<opt::Token::T>
+    : super core::Object::•()
+    ;
+}
+class VP<T extends core::Object> extends opt::P<opt::VP::T> /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
+  const constructor _(core::Object token, opt::VP::T useValue) → opt::VP<opt::VP::T>
+    : super opt::P::_(token)
+    ;
+  static factory forToken<T extends core::Object>(opt::Token<opt::VP::forToken::T> token, opt::VP::forToken::T useValue) → opt::VP<opt::VP::forToken::T>
+    return new opt::VP::_<opt::VP::forToken::T>(token, useValue);
+}
+class M extends core::Object /*hasConstConstructor*/  {
+  final field core::List<opt::P<core::Object>> list;
+  const constructor •({core::List<opt::P<core::Object>> list = #C9}) → opt::M
+    : opt::M::list = list, super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::Class*)
+  #C2 = opt::CP<core::Object*> {token:#C1}
+  #C3 = self::XToken {}
+  #C4 = opt::VP<core::Object*> {token:#C3}
+  #C5 = <opt::P<core::Object*>*>[#C2, #C4]
+  #C6 = opt::M {list:#C5}
+  #C7 = constructor-tearoff opt::CP::•
+  #C8 = constructor-tearoff opt::VP::forToken
+  #C9 = <opt::P<core::Object*>*>[]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main.dart:
+- CP._ (from org-dartlang-testcase:///opt_in_lib.dart:14:9)
+- P._ (from org-dartlang-testcase:///opt_in_lib.dart:8:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- XToken. (from org-dartlang-testcase:///main.dart:12:9)
+- Token. (from org-dartlang-testcase:///opt_in_lib.dart:18:9)
+- VP._ (from org-dartlang-testcase:///opt_in_lib.dart:27:9)
+- M. (from org-dartlang-testcase:///opt_in_lib.dart:36:9)
diff --git a/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..6e0d3ce
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/opt_out.dart.weak.modular.expect
@@ -0,0 +1,181 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/opt_out.dart:18:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///opt_out_lib.dart";
+
+typedef F = invalid-type;
+class A<T extends core::Object? = dynamic> extends core::Object {
+  late field core::int field = 42;
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+}
+class B extends self::A<core::String?> {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+static field core::List<core::String?> l = <core::String?>[];
+static field core::String? s = null;
+static field core::String t = self::s!;
+late static field core::int field = 42;
+static method method(() →? void f, {required core::int a = #C1}) → void {}
+static method main() → dynamic {}
+static method noErrors() → dynamic {
+  late core::int local = 42;
+  core::String? s = null;
+  dynamic c;
+  let final dynamic #t1 = c in #t1 == null ?{dynamic} null : block {
+    #t1{dynamic}.f;
+  } =>#t1;
+  let final dynamic #t2 = c in #t2 == null ?{dynamic} null : #t2{dynamic}.[](0);
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:18:25: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
+// class B extends A<String?> {}
+//                         ^
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.5
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:20:28: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
+// typedef F = void Function()?;
+//                            ^
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.5
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:22:12: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
+// List<String?> l = [];
+//            ^
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.5
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:23:7: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
+// String? s = null;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.5
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:28:21: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
+// void method(void f()?, {int a}) {}
+//                     ^
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.5
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:24:10: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
+// var t = s!;
+//          ^
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.5
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:32:14: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
+//   List<String?> l = null;
+//              ^
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.5
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:33:9: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
+//   String? s = null;
+//         ^
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.5
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:34:12: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
+//   var t = s!;
+//            ^
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.5
+// ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:36:6: Error: Expected an identifier, but got '.'.
+// Try inserting an identifier before '.'.
+//   c?..f;
+//      ^
+//
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:36:6: Error: Expected an identifier, but got ''.
+// Try inserting an identifier before ''.
+//   c?..f;
+//      ^
+//
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:37:5: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
+//   c?[0];
+//     ^
+// pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:5:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.5
+// ^^^^^^^^^^^^
+//
+import self as self2;
+import "dart:core" as core;
+
+typedef F = () →? void;
+class A<T extends core::Object* = dynamic> extends core::Object {
+  field core::int* field = 42;
+  synthetic constructor •() → self2::A<self2::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self2::A<core::String*> {
+  synthetic constructor •() → self2::B*
+    : super self2::A::•()
+    ;
+}
+static field core::List<core::String?>* l = <core::String*>[];
+static field core::String? s = null;
+static field core::String* t = self2::s!;
+static field core::int* field = 42;
+static method method(() →* void f, {core::int* a = #C1}) → void {}
+static method errors() → dynamic {
+  core::int* local = 42;
+  core::List<core::String?>* l = null;
+  core::String? s = null;
+  core::String* t = s!;
+  dynamic c;
+  invalid-expression "pkg/front_end/testcases/nnbd_mixed/opt_out_lib.dart:36:6: Error: Expected an identifier, but got ''.
+Try inserting an identifier before ''.
+  c?..f;
+     ^"{<invalid>}.f;
+  let final dynamic #t3 = c in #t3 == null ?{dynamic} null : #t3{dynamic}.[](0);
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/regress_null_aware.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/regress_null_aware.dart.weak.modular.expect
new file mode 100644
index 0000000..54456fa
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/regress_null_aware.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+class Class extends core::Object {
+  field core::Map<core::String*, core::Set<core::String*>*>* map = null;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  method method(core::String* node, core::Set<core::String*>* set) → core::List<core::String*>*
+    return set.{core::Set::add}(node){(core::String*) →* core::bool*} ?{core::List<core::String*>*} block {
+      final core::List<core::String*>* #t1 = <core::String*>[node];
+      final core::Iterable<core::String*>* #t2 = let final core::Iterable<core::String*>* #t3 = let final core::Set<core::String*>* #t4 = this.{self::Class::map}{core::Map<core::String*, core::Set<core::String*>*>*}.{core::Map::[]}(node){(core::Object*) →* core::Set<core::String*>*} in #t4 == null ?{core::Iterable<core::String*>*} null : #t4.{core::Iterable::expand}<core::String*>((core::String* node) → core::List<core::String*>* => this.{self::Class::method}(node, set){(core::String*, core::Set<core::String*>*) →* core::List<core::String*>*}){((core::String*) →* core::Iterable<core::String*>*) →* core::Iterable<core::String*>*} in #t3 == null ?{core::List<core::String*>*} null : #t3.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+      if(!(#t2 == null))
+        #t1.{core::List::addAll}{Invariant}(#t2){(core::Iterable<core::String*>*) →* void};
+    } =>#t1 : <core::String*>[];
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main(dynamic args) → dynamic {
+  if(false)
+    new self::Class::•().{self::Class::method}("", block {
+      final core::Set<core::String*>* #t5 = col::LinkedHashSet::•<core::String*>();
+    } =>#t5){(core::String*, core::Set<core::String*>*) →* core::List<core::String*>*};
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.modular.expect
new file mode 100644
index 0000000..90a553a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/required_name_override.dart.weak.modular.expect
@@ -0,0 +1,71 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/required_name_override.dart:13:36: Error: The required named parameter 'i' in method 'A.test_default' is not required in overridden method 'B.test_default'.
+//   void test_default({required int? i}) {}
+//                                    ^
+// pkg/front_end/testcases/nnbd_mixed/required_name_override.dart:8:8: Context: This is the overridden method ('test_default').
+//   void test_default({int? i}) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/required_name_override.dart:14:39: Error: The required named parameter 'i' in method 'A.test_nondefault' is not required in overridden method 'B.test_nondefault'.
+//   void test_nondefault({required int? i}) {}
+//                                       ^
+// pkg/front_end/testcases/nnbd_mixed/required_name_override.dart:9:8: Context: This is the overridden method ('test_nondefault').
+//   void test_nondefault({int? i = 1}) {}
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+import "required_name_override_lib.dart" as req;
+
+import "org-dartlang-testcase:///required_name_override_lib.dart";
+
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  method test_default({core::int? i = #C1}) → void {}
+  method test_nondefault({core::int? i = #C2}) → void {}
+}
+class A extends self::B implements req::C {
+  synthetic constructor •() → self::A
+    : super self::B::•()
+    ;
+  method test_default({required core::int? i = #C1}) → void {}
+  method test_nondefault({required core::int? i = #C1}) → void {}
+  method test_legacy({required core::int? i = #C1}) → void {}
+  abstract member-signature operator /*isLegacy*/ ==(dynamic other) → core::bool*; -> core::Object::==
+}
+static method main() → dynamic {
+  new self::A::•().{self::A::test_default}(i: 1){({required i: core::int?}) → void};
+  new self::A::•().{self::A::test_nondefault}(i: 1){({required i: core::int?}) → void};
+  new self::A::•().{self::A::test_legacy}(i: 1){({required i: core::int?}) → void};
+}
+
+library;
+import self as req;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → req::C*
+    : super core::Object::•()
+    ;
+  method test_legacy({core::int* i = #C1}) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+constants  {
+  #C1 = null
+  #C2 = 1
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..1d47863
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "required_parameter_mixed_from_opt_out_lib.dart" as req;
+
+import "org-dartlang-testcase:///required_parameter_mixed_from_opt_out_lib.dart";
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method method({required covariant-by-declaration core::int named = #C1}) → void {}
+}
+abstract class _Class&Super&Mixin = self::Super with req::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&Mixin
+    : super self::Super::•()
+    ;
+  forwarding-stub method /*isLegacy*/ method({covariant-by-declaration core::int* named = #C1}) → void
+    return super.{req::Mixin::method}(named: named);
+  abstract member-signature operator /*isLegacy*/ ==(dynamic other) → core::bool*; -> core::Object::==
+}
+class Class extends self::_Class&Super&Mixin {
+  synthetic constructor •() → self::Class
+    : super self::_Class&Super&Mixin::•()
+    ;
+}
+class SubClass extends self::Class {
+  synthetic constructor •() → self::SubClass
+    : super self::Class::•()
+    ;
+  method method({required covariant-by-declaration core::int named = #C1}) → void {}
+}
+static method main() → dynamic {}
+
+library;
+import self as req;
+import "dart:core" as core;
+
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  method method({core::int* named = #C1}) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/sink_hierarchy.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/sink_hierarchy.dart.weak.modular.expect
new file mode 100644
index 0000000..763dc92
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/sink_hierarchy.dart.weak.modular.expect
@@ -0,0 +1,70 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+abstract class Sink<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Sink<self::Sink::T*>*
+    : super core::Object::•()
+    ;
+  abstract method close() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class EventSink<T extends core::Object* = dynamic> extends core::Object implements self::Sink<self::EventSink::T*> {
+  synthetic constructor •() → self::EventSink<self::EventSink::T*>*
+    : super core::Object::•()
+    ;
+  abstract method close() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class StreamConsumer<S extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::StreamConsumer<self::StreamConsumer::S*>*
+    : super core::Object::•()
+    ;
+  abstract method close() → asy::Future<dynamic>*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class StreamSink<S extends core::Object* = dynamic> extends core::Object implements self::EventSink<self::StreamSink::S*>, self::StreamConsumer<self::StreamSink::S*> {
+  synthetic constructor •() → self::StreamSink<self::StreamSink::S*>*
+    : super core::Object::•()
+    ;
+  abstract method close() → asy::Future<dynamic>*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.modular.expect
new file mode 100644
index 0000000..864208b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.modular.expect
@@ -0,0 +1,95 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "main_lib1.dart" as mai;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+import "org-dartlang-testcase:///main_lib2.dart";
+
+abstract class _Class&Object&Mixin1<T extends core::Object* = dynamic> = core::Object with mai::Mixin1<self::_Class&Object&Mixin1::T*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Class&Object&Mixin1<self::_Class&Object&Mixin1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Class&Object&Mixin1&Mixin2<T extends core::Object* = dynamic> = self::_Class&Object&Mixin1<self::_Class&Object&Mixin1&Mixin2::T*> with mai::Mixin2<self::_Class&Object&Mixin1&Mixin2::T*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Object&Mixin1&Mixin2<self::_Class&Object&Mixin1&Mixin2::T*>*
+    : super self::_Class&Object&Mixin1::•()
+    ;
+  mixin-super-stub get field() → (dynamic) →* core::Type*
+    return super.{mai::Mixin2::field};
+  mixin-super-stub set field((dynamic) →* core::Type* value) → void
+    return super.{mai::Mixin2::field} = value;
+  mixin-super-stub method method1() → (dynamic) →* core::Type*
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2((dynamic) →* core::Type* t) → void
+    return super.{mai::Mixin2::method2}(t);
+}
+class Class<T extends core::Object* = dynamic> extends self::_Class&Object&Mixin1&Mixin2<self::Class::T*> {
+  synthetic constructor •() → self::Class<self::Class::T*>*
+    : super self::_Class&Object&Mixin1&Mixin2::•()
+    ;
+  set field((dynamic) →* core::Type* value) → void {
+    super.{self::_Class&Object&Mixin1&Mixin2::field};
+    super.{self::_Class&Object&Mixin1&Mixin2::field} = value;
+    super.{self::_Class&Object&Mixin1&Mixin2::method1}();
+    super.{self::_Class&Object&Mixin1&Mixin2::method2}(null);
+  }
+}
+static method main() → dynamic {}
+
+library;
+import self as mai;
+import "dart:core" as core;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib2.dart";
+
+abstract class Mixin1<T extends core::Object* = dynamic> extends core::Object implements mai2::Interface<mai2::Value<dynamic>*, core::Object*> {
+  synthetic constructor •() → mai::Mixin1<mai::Mixin1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get field() → (core::Object*) →* core::Type*; -> mai2::Interface::field
+  abstract member-signature set field((core::Object*) →* core::Type* value) → void; -> mai2::Interface::field
+  abstract member-signature method method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
+  abstract member-signature method method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Mixin2<T extends core::Object* = dynamic> extends core::Object implements mai2::Interface<mai2::Value<dynamic>*, core::Object*> {
+  field (dynamic) →* core::Type* field = null;
+  synthetic constructor •() → mai::Mixin2<mai::Mixin2::T*>*
+    : super core::Object::•()
+    ;
+  method method1() → (dynamic) →* core::Type*
+    return null;
+  method method2((dynamic) →* core::Type* t) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.modular.expect
new file mode 100644
index 0000000..6bf247e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.modular.expect
@@ -0,0 +1,115 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "main_lib1.dart" as mai;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+import "org-dartlang-testcase:///main_lib2.dart";
+
+abstract class _Class&Object&Mixin1<T extends core::Object* = dynamic> = core::Object with mai::Mixin1<self::_Class&Object&Mixin1::T*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Class&Object&Mixin1<self::_Class&Object&Mixin1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Class&Object&Mixin1&Mixin2<T extends core::Object* = dynamic> = self::_Class&Object&Mixin1<self::_Class&Object&Mixin1&Mixin2::T*> with mai::Mixin2<self::_Class&Object&Mixin1&Mixin2::T*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Object&Mixin1&Mixin2<self::_Class&Object&Mixin1&Mixin2::T*>*
+    : super self::_Class&Object&Mixin1::•()
+    ;
+  mixin-super-stub get field() → (dynamic) →* core::Type*
+    return super.{mai::Mixin2::field};
+  mixin-super-stub set field((dynamic) →* core::Type* value) → void
+    return super.{mai::Mixin2::field} = value;
+  mixin-super-stub method method1() → (dynamic) →* core::Type*
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2((dynamic) →* core::Type* t) → void
+    return super.{mai::Mixin2::method2}(t);
+}
+class Class<T extends core::Object* = dynamic> extends self::_Class&Object&Mixin1&Mixin2<self::Class::T*> {
+  synthetic constructor •() → self::Class<self::Class::T*>*
+    : super self::_Class&Object&Mixin1&Mixin2::•()
+    ;
+  set field((dynamic) →* core::Type* value) → void {
+    super.{self::_Class&Object&Mixin1&Mixin2::field};
+    super.{self::_Class&Object&Mixin1&Mixin2::field} = value;
+    super.{self::_Class&Object&Mixin1&Mixin2::method1}();
+    super.{self::_Class&Object&Mixin1&Mixin2::method2}(null);
+  }
+}
+static method main() → dynamic {}
+
+library;
+import self as mai;
+import "dart:core" as core;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib2.dart";
+
+abstract class Mixin1<T extends core::Object* = dynamic> extends core::Object implements mai2::Interface<mai2::Value<dynamic>*, core::Object*> {
+  synthetic constructor •() → mai::Mixin1<mai::Mixin1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get field() → (core::Object*) →* core::Type*; -> mai2::Interface::field
+  abstract member-signature set field((core::Object*) →* core::Type* value) → void; -> mai2::Interface::field
+  abstract member-signature method method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
+  abstract member-signature method method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class Mixin2<T extends core::Object* = dynamic> extends core::Object implements mai2::Interface<mai2::Value<dynamic>*, core::Object*> {
+  field (dynamic) →* core::Type* field = null;
+  synthetic constructor •() → mai::Mixin2<mai::Mixin2::T*>*
+    : super core::Object::•()
+    ;
+  method method1() → (dynamic) →* core::Type*
+    return null;
+  method method2((dynamic) →* core::Type* t) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai2;
+import "dart:core" as core;
+
+typedef Typedef<unrelated T extends mai2::Value<dynamic>, contravariant I extends core::Object? = dynamic> = (I%) → core::Type;
+abstract class Value<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → mai2::Value<mai2::Value::T%>
+    : super core::Object::•()
+    ;
+}
+class Interface<T extends mai2::Value<dynamic>, I extends core::Object? = dynamic> extends core::Object {
+  field (mai2::Interface::I%) →? core::Type field = null;
+  synthetic constructor •() → mai2::Interface<mai2::Interface::T, mai2::Interface::I%>
+    : super core::Object::•()
+    ;
+  method method1() → (mai2::Interface::I%) →? core::Type
+    return null;
+  method method2((mai2::Interface::I%) →? core::Type t) → void {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.modular.expect
new file mode 100644
index 0000000..c317528
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.modular.expect
@@ -0,0 +1,52 @@
+library;
+import self as self;
+import "super_set_from_opt_in_lib.dart" as sup;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///super_set_from_opt_in_lib.dart";
+
+abstract class Class extends sup::SuperClass<dynamic> {
+  synthetic constructor •() → self::Class*
+    : super sup::SuperClass::•()
+    ;
+  abstract member-signature get property() → core::Object*; -> sup::SuperClass::property
+  abstract member-signature set property(core::Object* value) → void; -> sup::SuperClass::property
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class SubClass extends self::Class {
+  synthetic constructor •() → self::SubClass*
+    : super self::Class::•()
+    ;
+  @#C1
+  set property(core::Object* value) → void {
+    super.{sup::SuperClass::property} = value;
+  }
+}
+static method main() → dynamic {
+  new self::SubClass::•().{self::SubClass::property} = null;
+}
+
+library /*isNonNullableByDefault*/;
+import self as sup;
+import "dart:core" as core;
+
+abstract class SuperClass<T extends core::Object? = dynamic> extends core::Object {
+  @#C1
+  field core::Object? property = null;
+  synthetic constructor •() → sup::SuperClass<sup::SuperClass::T%>
+    : super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = core::_Override {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.modular.expect
new file mode 100644
index 0000000..726b3b6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "type_parameter_nullability_lib.dart" as typ;
+
+import "org-dartlang-testcase:///type_parameter_nullability_lib.dart";
+
+class C<T extends core::num?, S extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%, self::C::S%, self::C::U%>
+    : super core::Object::•()
+    ;
+  method promoteNullable(covariant-by-class self::C::T? t) → void {
+    if(t is{ForNonNullableByDefault} core::int) {
+      t{self::C::T? & core::int /* '?' & '!' = '!' */};
+    }
+    if(t is{ForNonNullableByDefault} core::int?) {
+      t{self::C::T? & core::int? /* '?' & '?' = '?' */};
+    }
+  }
+  method nullableAsUndetermined(covariant-by-class self::C::S? s) → void {
+    s as{ForNonNullableByDefault} self::C::U%;
+  }
+}
+static method main() → dynamic {
+  self::C<core::num, core::num, core::num> c = new self::C::•<core::num, core::num, core::num>();
+  c.{self::C::promoteNullable}(null){(core::num?) → void};
+  c.{self::C::promoteNullable}(0){(core::num?) → void};
+  c.{self::C::nullableAsUndetermined}(null){(core::num?) → void};
+  c.{self::C::nullableAsUndetermined}(0){(core::num?) → void};
+  typ::D<core::num> d = new typ::D::•<core::num>();
+  d.{typ::D::promoteLegacy}(null){(core::num*) →* void};
+  d.{typ::D::promoteLegacy}(0){(core::num*) →* void};
+}
+
+library;
+import self as typ;
+import "dart:core" as core;
+
+class D<T extends core::num*> extends core::Object {
+  synthetic constructor •() → typ::D<typ::D::T*>*
+    : super core::Object::•()
+    ;
+  method promoteLegacy(covariant-by-class typ::D::T* t) → void {
+    if(t is core::int*) {
+      let final typ::D::T* & core::int* /* '*' & '*' = '*' */ #t1 = t{typ::D::T* & core::int* /* '*' & '*' = '*' */} in #t1 == null ?{core::bool*} null : #t1.{core::int::isEven}{core::bool*};
+    }
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.modular.expect
new file mode 100644
index 0000000..bebc221
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/typedef_from_opt_in.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library;
+import self as self;
+import "typedef_from_opt_in_lib.dart" as typ;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///typedef_from_opt_in_lib.dart";
+
+static method method1() → (typ::Request*) →* FutureOr<typ::Response*>*
+  return (typ::Request* r) → asy::Future<typ::Response*>* async => new typ::Response::•();
+static method method2() → (core::int*) →* core::int*
+  return (core::int* r) → core::int* => 0;
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as typ;
+import "dart:core" as core;
+
+import "dart:async";
+
+typedef Handler = (typ::Request) → FutureOr<typ::Response>;
+typedef Typedef = (core::int?) → core::int;
+class Request extends core::Object {
+  synthetic constructor •() → typ::Request
+    : super core::Object::•()
+    ;
+}
+class Response extends core::Object {
+  synthetic constructor •() → typ::Response
+    : super core::Object::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.modular.expect
new file mode 100644
index 0000000..5076108
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.modular.expect
@@ -0,0 +1,626 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "unsound_checks_lib.dart" as uns;
+
+import "org-dartlang-testcase:///unsound_checks_lib.dart";
+
+class OptOutClass1 extends core::Object {
+  synthetic constructor •() → self::OptOutClass1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class OptOutClass2 extends core::Object {
+  synthetic constructor •() → self::OptOutClass2*
+    : super core::Object::•()
+    ;
+  operator [](core::int* index) → core::int*
+    return index;
+  operator []=(core::int* index, core::int* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class OptOutClass3 extends core::Object {
+  field core::int* field;
+  constructor •(core::int* field) → self::OptOutClass3*
+    : self::OptOutClass3::field = field, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class OptOutSuperClass4 extends core::Object {
+  synthetic constructor •() → self::OptOutSuperClass4*
+    : super core::Object::•()
+    ;
+  operator [](core::int* index) → core::int*
+    return index;
+  operator []=(core::int* index, core::int* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class OptOutClass4 extends self::OptOutSuperClass4 {
+  synthetic constructor •() → self::OptOutClass4*
+    : super self::OptOutSuperClass4::•()
+    ;
+  method method(core::int* i) → dynamic
+    return let final core::int* #t1 = i in let final core::int* #t2 = super.{self::OptOutSuperClass4::[]}(#t1) in #t2 == null ?{core::int*} let final core::int* #t3 = 42 in let final void #t4 = super.{self::OptOutSuperClass4::[]=}(#t1, #t3) in #t3 : #t2;
+  method methodForEffect(core::int* i) → dynamic {
+    let final core::int* #t5 = i in super.{self::OptOutSuperClass4::[]}(#t5) == null ?{core::int*} super.{self::OptOutSuperClass4::[]=}(#t5, 42) : null;
+  }
+}
+class OptOutClass5 extends core::Object {
+  field core::int* field;
+  constructor •(core::int* field) → self::OptOutClass5*
+    : self::OptOutClass5::field = field, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+extension OptOutExtension on self::OptOutClass1* {
+  operator [] = self::OptOutExtension|[];
+  operator []= = self::OptOutExtension|[]=;
+}
+static method isNullOptOut1(core::int* i) → dynamic
+  return i == null;
+static method isNotNullOptOut1(core::int* i) → dynamic
+  return !(i == null);
+static method isNullOptOut2(core::int* i) → dynamic
+  return i == null;
+static method isNotNullOptOut2(core::int* i) → dynamic
+  return !(i == null);
+static method ifNullOptOut(core::int* i) → dynamic
+  return let final core::int* #t6 = i in #t6 == null ?{core::int*} 42 : #t6;
+static method OptOutExtension|[](lowered final self::OptOutClass1* #this, core::int* index) → core::int*
+  return index;
+static method OptOutExtension|[]=(lowered final self::OptOutClass1* #this, core::int* index, core::int* value) → void {}
+static method extensionIfNullOptOut1(core::int* i) → dynamic
+  return let final self::OptOutClass1* #t7 = new self::OptOutClass1::•() in let final core::int* #t8 = i in let final core::int* #t9 = self::OptOutExtension|[](#t7, #t8) in #t9 == null ?{core::int*} let final core::int* #t10 = 42 in let final void #t11 = self::OptOutExtension|[]=(#t7, #t8, #t10) in #t10 : #t9;
+static method extensionIfNullOptOut1ForEffect(core::int* i) → dynamic {
+  let final self::OptOutClass1* #t12 = new self::OptOutClass1::•() in let final core::int* #t13 = i in self::OptOutExtension|[](#t12, #t13) == null ?{core::int*} self::OptOutExtension|[]=(#t12, #t13, 42) : null;
+}
+static method extensionIfNullOptOut2(core::int* i) → dynamic
+  return let final self::OptOutClass1* #t14 = new self::OptOutClass1::•() in let final core::int* #t15 = i in let final core::int* #t16 = self::OptOutExtension|[](#t14, #t15) in #t16 == null ?{core::int*} let final core::int* #t17 = 42 in let final void #t18 = self::OptOutExtension|[]=(#t14, #t15, #t17) in #t17 : #t16;
+static method extensionIfNullOptOut2ForEffect(core::int* i) → dynamic {
+  let final self::OptOutClass1* #t19 = new self::OptOutClass1::•() in let final core::int* #t20 = i in self::OptOutExtension|[](#t19, #t20) == null ?{core::int*} self::OptOutExtension|[]=(#t19, #t20, 42) : null;
+}
+static method ifNullIndexSetOptOut(core::int* i) → dynamic
+  return let final self::OptOutClass2* #t21 = new self::OptOutClass2::•() in let final core::int* #t22 = i in let final core::int* #t23 = #t21.{self::OptOutClass2::[]}(#t22){(core::int*) →* core::int*} in #t23 == null ?{core::int*} let final core::int* #t24 = 42 in let final void #t25 = #t21.{self::OptOutClass2::[]=}(#t22, #t24){(core::int*, core::int*) →* void} in #t24 : #t23;
+static method ifNullIndexSetOptOutForEffect(core::int* i) → dynamic {
+  let final self::OptOutClass2* #t26 = new self::OptOutClass2::•() in let final core::int* #t27 = i in #t26.{self::OptOutClass2::[]}(#t27){(core::int*) →* core::int*} == null ?{core::int*} #t26.{self::OptOutClass2::[]=}(#t27, 42){(core::int*, core::int*) →* void} : null;
+}
+static method ifNullPropertySetOptOut(core::int* i) → dynamic
+  return let final self::OptOutClass3* #t28 = new self::OptOutClass3::•(i) in let final core::int* #t29 = #t28.{self::OptOutClass3::field}{core::int*} in #t29 == null ?{core::int*} #t28.{self::OptOutClass3::field} = 42 : #t29;
+static method ifNullPropertySetOptOutForEffect(core::int* i) → dynamic {
+  let final self::OptOutClass3* #t30 = new self::OptOutClass3::•(i) in #t30.{self::OptOutClass3::field}{core::int*} == null ?{core::int*} #t30.{self::OptOutClass3::field} = 42 : null;
+}
+static method ifNullSetOptOut(core::int* i) → dynamic
+  return let final core::int* #t31 = i in #t31 == null ?{core::int*} i = 42 : #t31;
+static method ifNullSetOptOutForEffect(core::int* i) → dynamic {
+  i == null ?{core::int*} i = 42 : null;
+}
+static method ifNullSuperIndexSetOptOut(core::int* i) → dynamic
+  return new self::OptOutClass4::•().{self::OptOutClass4::method}(i){(core::int*) →* dynamic};
+static method ifNullSuperIndexSetOptOutForEffect(core::int* i) → dynamic {
+  new self::OptOutClass4::•().{self::OptOutClass4::methodForEffect}(i){(core::int*) →* dynamic};
+}
+static method nullAwareIfNullSetOptOut(core::int* i) → dynamic {
+  self::OptOutClass5* o = new self::OptOutClass5::•(i);
+  return let final self::OptOutClass5* #t32 = o in #t32 == null ?{core::int*} null : let final core::int* #t33 = #t32.{self::OptOutClass5::field}{core::int*} in #t33 == null ?{core::int*} #t32.{self::OptOutClass5::field} = 42 : #t33;
+}
+static method nullAwareIfNullSetOptOutForEffect(core::int* i) → dynamic {
+  self::OptOutClass5* o = new self::OptOutClass5::•(i);
+  let final self::OptOutClass5* #t34 = o in #t34 == null ?{core::int*} null : #t34.{self::OptOutClass5::field}{core::int*} == null ?{core::int*} #t34.{self::OptOutClass5::field} = 42 : null;
+}
+static method isTestOptOut(core::int* i) → dynamic
+  return i is core::int*;
+static method isNotTestOptOut(core::int* i) → dynamic
+  return !(i is core::int*);
+static method main() → dynamic {
+  self::expect(false, uns::isNullOptIn1(0));
+  self::expect(false, self::isNullOptOut1(0));
+  self::expect(true, uns::isNullOptIn1(null));
+  self::expect(true, self::isNullOptOut1(null));
+  self::expect(true, uns::isNotNullOptIn1(0));
+  self::expect(true, self::isNotNullOptOut1(0));
+  self::expect(false, uns::isNotNullOptIn1(null));
+  self::expect(false, self::isNotNullOptOut1(null));
+  self::expect(false, uns::isNullOptIn2(0));
+  self::expect(false, self::isNullOptOut2(0));
+  self::expect(true, uns::isNullOptIn2(null));
+  self::expect(true, self::isNullOptOut2(null));
+  self::expect(true, uns::isNotNullOptIn2(0));
+  self::expect(true, self::isNotNullOptOut2(0));
+  self::expect(false, uns::isNotNullOptIn2(null));
+  self::expect(false, self::isNotNullOptOut2(null));
+  self::expect(0, uns::ifNullOptIn(0));
+  self::expect(0, self::ifNullOptOut(0));
+  self::expect(42, uns::ifNullOptIn(null));
+  self::expect(42, self::ifNullOptOut(null));
+  self::expect(0, uns::extensionIfNullOptIn1(0));
+  self::expect(0, self::extensionIfNullOptOut1(0));
+  self::expect(42, uns::extensionIfNullOptIn1(null));
+  self::expect(42, self::extensionIfNullOptOut1(null));
+  uns::extensionIfNullOptIn1ForEffect(0);
+  self::extensionIfNullOptOut1ForEffect(0);
+  uns::extensionIfNullOptIn1ForEffect(null);
+  self::extensionIfNullOptOut1ForEffect(null);
+  self::expect(0, uns::extensionIfNullOptIn2(0));
+  self::expect(0, self::extensionIfNullOptOut2(0));
+  self::expect(42, uns::extensionIfNullOptIn2(null));
+  self::expect(42, self::extensionIfNullOptOut2(null));
+  uns::extensionIfNullOptIn2ForEffect(0);
+  self::extensionIfNullOptOut2ForEffect(0);
+  uns::extensionIfNullOptIn2ForEffect(null);
+  self::extensionIfNullOptOut2ForEffect(null);
+  self::expect(0, uns::ifNullIndexSetOptIn(0));
+  self::expect(0, self::ifNullIndexSetOptOut(0));
+  self::expect(42, uns::ifNullIndexSetOptIn(null));
+  self::expect(42, self::ifNullIndexSetOptOut(null));
+  uns::ifNullIndexSetOptInForEffect(0);
+  self::ifNullIndexSetOptOutForEffect(0);
+  uns::ifNullIndexSetOptInForEffect(null);
+  self::ifNullIndexSetOptOutForEffect(null);
+  self::expect(0, uns::ifNullPropertySetOptIn(0));
+  self::expect(0, self::ifNullPropertySetOptOut(0));
+  self::expect(42, uns::ifNullPropertySetOptIn(null));
+  self::expect(42, self::ifNullPropertySetOptOut(null));
+  uns::ifNullPropertySetOptInForEffect(0);
+  self::ifNullPropertySetOptOutForEffect(0);
+  uns::ifNullPropertySetOptInForEffect(null);
+  self::ifNullPropertySetOptOutForEffect(null);
+  self::expect(0, uns::ifNullSetOptIn(0));
+  self::expect(0, self::ifNullSetOptOut(0));
+  self::expect(42, uns::ifNullSetOptIn(null));
+  self::expect(42, self::ifNullSetOptOut(null));
+  uns::ifNullSetOptInForEffect(0);
+  self::ifNullSetOptOutForEffect(0);
+  uns::ifNullSetOptInForEffect(null);
+  self::ifNullSetOptOutForEffect(null);
+  self::expect(0, uns::ifNullSuperIndexSetOptIn(0));
+  self::expect(0, self::ifNullSuperIndexSetOptOut(0));
+  self::expect(42, uns::ifNullSuperIndexSetOptIn(null));
+  self::expect(42, self::ifNullSuperIndexSetOptOut(null));
+  uns::ifNullSuperIndexSetOptInForEffect(0);
+  self::ifNullSuperIndexSetOptOutForEffect(0);
+  uns::ifNullSuperIndexSetOptInForEffect(null);
+  self::ifNullSuperIndexSetOptOutForEffect(null);
+  self::expect(0, uns::nullAwareIfNullSetOptIn(0));
+  self::expect(0, self::nullAwareIfNullSetOptOut(0));
+  self::expect(42, uns::nullAwareIfNullSetOptIn(null));
+  self::expect(42, self::nullAwareIfNullSetOptOut(null));
+  uns::nullAwareIfNullSetOptInForEffect(0);
+  self::nullAwareIfNullSetOptOutForEffect(0);
+  uns::nullAwareIfNullSetOptInForEffect(null);
+  self::nullAwareIfNullSetOptOutForEffect(null);
+  self::expect(true, uns::isTestOptIn(0));
+  self::expect(true, self::isTestOptOut(0));
+  self::expect(false, uns::isTestOptIn(null));
+  self::expect(false, self::isTestOptOut(null));
+  self::expect(false, uns::isNotTestOptIn(0));
+  self::expect(false, self::isNotTestOptOut(0));
+  self::expect(true, uns::isNotTestOptIn(null));
+  self::expect(true, self::isNotTestOptOut(null));
+  self::expect(true, uns::nullAwareAccess1(0));
+  self::expect(null, uns::nullAwareAccess1(null));
+  uns::promotionToNever(0);
+  uns::promotionToNever(null);
+  uns::unnecessaryNullCheck(() → core::int* => 0);
+  uns::unnecessaryNullCheck(() → Null => null);
+  self::expect(0, uns::unnecessaryIfNull(() → core::int* => 0, () → core::int* => 42));
+  self::expect(42, uns::unnecessaryIfNull(() → Null => null, () → core::int* => 42));
+  uns::unnecessaryIfNullAssign(<core::int*>[0], () → core::int* => 42);
+  uns::unnecessaryIfNullAssign(<core::int*>[null], () → core::int* => 42);
+  uns::unnecessaryNullAwareAccess(() → core::int* => 0);
+  uns::unnecessaryNullAwareAccess(() → Null => null);
+  self::throws(() → dynamic => uns::callReturningNever(() → Null => throw "foo"), (core::Object* e) → core::bool* => e =={core::Object::==}{(core::Object*) →* core::bool*} "foo");
+  () →* Null f = () → Null => null;
+  self::throws(() → dynamic => uns::callReturningNever(f));
+  uns::switchOnEnum(#C3);
+  uns::switchOnEnum(#C6);
+  self::throws(() → dynamic => uns::switchOnEnum(null));
+  uns::switchOnEnumWithBreak(#C3);
+  uns::switchOnEnumWithBreak(#C6);
+  self::throws(() → dynamic => uns::switchOnEnumWithBreak(null));
+  uns::switchOnEnumWithFallThrough1(#C3);
+  uns::switchOnEnumWithFallThrough1(#C6);
+  self::throws(() → dynamic => uns::switchOnEnumWithFallThrough1(null));
+  uns::switchOnEnumWithFallThrough2(#C3);
+  uns::switchOnEnumWithFallThrough2(#C6);
+  self::throws(() → dynamic => uns::switchOnEnumWithFallThrough2(null));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() →* void f, [(core::Object*) →* core::bool* testException = #C7]) → dynamic {
+  try {
+    f(){() →* void};
+  }
+  on dynamic catch(final dynamic e) {
+    if(!(testException == null) && !testException(e){(core::Object*) →* core::bool*}) {
+      throw "Unexpected exception: ${e}";
+    }
+    core::print(e);
+    return;
+  }
+  throw "Missing exception.";
+}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:13:23: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+// ifNullOptIn(int i) => i ?? 42;
+//                       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:22:66: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+// extensionIfNullOptIn1(int i) => OptInExtension(new OptInClass1())[i] ??= 42;
+//                                                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:25:36: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   OptInExtension(new OptInClass1())[i] ??= 42;
+//                                    ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:28:50: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+// extensionIfNullOptIn2(int i) => new OptInClass1()[i] ??= 42;
+//                                                  ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:31:20: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   new OptInClass1()[i] ??= 42;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:39:48: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+// ifNullIndexSetOptIn(int i) => new OptInClass2()[i] ??= 42;
+//                                                ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:42:20: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   new OptInClass2()[i] ??= 42;
+//                    ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:51:53: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+// ifNullPropertySetOptIn(int i) => new OptInClass3(i).field ??= 42;
+//                                                     ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:54:22: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   new OptInClass3(i).field ??= 42;
+//                      ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:57:26: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+// ifNullSetOptIn(int i) => i ??= 42;
+//                          ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:60:3: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   i ??= 42;
+//   ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:69:25: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   method(int i) => super[i] ??= 42;
+//                         ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:71:10: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//     super[i] ??= 42;
+//          ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:113:28: Warning: Operand of null-aware operation '?.' has type 'int' which excludes null.
+// nullAwareAccess1(int i) => i?.isEven;
+//                            ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:116:3: Warning: Operand of null-aware operation '?.' has type 'int' which excludes null.
+//   i?.isEven;
+//   ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:128:11: Warning: Operand of null-aware operation '??' has type 'int' which excludes null.
+//   return f() ??
+//           ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:134:4: Warning: Operand of null-aware operation '??=' has type 'int' which excludes null.
+//   x[0] ??= f();
+//    ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:138:4: Warning: Operand of null-aware operation '?.' has type 'int' which excludes null.
+//   f()?.gcd(0); // Should not throw if `f` returns null
+//    ^
+//
+// pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:195:10: Error: Not enough type information to disambiguate between literal set and literal map.
+// Try providing type arguments for the literal explicitly to disambiguate it.
+//   return {...d}; // Should not throw ReachabilityError.
+//          ^
+//
+import self as uns;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class OptInClass1 extends core::Object {
+  synthetic constructor •() → uns::OptInClass1
+    : super core::Object::•()
+    ;
+}
+class OptInClass2 extends core::Object {
+  synthetic constructor •() → uns::OptInClass2
+    : super core::Object::•()
+    ;
+  operator [](core::int index) → core::int
+    return index;
+  operator []=(core::int index, core::int value) → void {}
+}
+class OptInClass3 extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → uns::OptInClass3
+    : uns::OptInClass3::field = field, super core::Object::•()
+    ;
+}
+class OptInSuperClass4 extends core::Object {
+  synthetic constructor •() → uns::OptInSuperClass4
+    : super core::Object::•()
+    ;
+  operator [](core::int index) → core::int
+    return index;
+  operator []=(core::int index, core::int value) → void {}
+}
+class OptInClass4 extends uns::OptInSuperClass4 {
+  synthetic constructor •() → uns::OptInClass4
+    : super uns::OptInSuperClass4::•()
+    ;
+  method method(core::int i) → dynamic
+    return let final core::int #t35 = i in let final core::int #t36 = super.{uns::OptInSuperClass4::[]}(#t35) in #t36 == null ?{core::int} let final core::int #t37 = 42 in let final void #t38 = super.{uns::OptInSuperClass4::[]=}(#t35, #t37) in #t37 : #t36;
+  method methodForEffect(core::int i) → dynamic {
+    let final core::int #t39 = i in super.{uns::OptInSuperClass4::[]}(#t39) == null ?{core::int} super.{uns::OptInSuperClass4::[]=}(#t39, 42) : null;
+  }
+}
+class OptInClass5 extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → uns::OptInClass5
+    : uns::OptInClass5::field = field, super core::Object::•()
+    ;
+}
+class OptInClass6a extends core::Object {
+  final field uns::OptInClass6b cls;
+  constructor •(uns::OptInClass6b cls) → uns::OptInClass6a
+    : uns::OptInClass6a::cls = cls, super core::Object::•()
+    ;
+}
+class OptInClass6b extends core::Object {
+  final field core::int field;
+  constructor •(core::int field) → uns::OptInClass6b
+    : uns::OptInClass6b::field = field, super core::Object::•()
+    ;
+}
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<uns::E> values = #C8;
+  static const field uns::E e1 = #C3;
+  static const field uns::E e2 = #C6;
+  const constructor •(core::int index, core::String name) → uns::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+extension OptInExtension on uns::OptInClass1 {
+  operator [] = uns::OptInExtension|[];
+  operator []= = uns::OptInExtension|[]=;
+}
+static method isNullOptIn1(core::int i) → dynamic
+  return i == null;
+static method isNotNullOptIn1(core::int i) → dynamic
+  return !(i == null);
+static method isNullOptIn2(core::int i) → dynamic
+  return i == null;
+static method isNotNullOptIn2(core::int i) → dynamic
+  return !(i == null);
+static method ifNullOptIn(core::int i) → dynamic
+  return let final core::int #t40 = i in #t40 == null ?{core::int} 42 : #t40;
+static method OptInExtension|[](lowered final uns::OptInClass1 #this, core::int index) → core::int
+  return index;
+static method OptInExtension|[]=(lowered final uns::OptInClass1 #this, core::int index, core::int value) → void {}
+static method extensionIfNullOptIn1(core::int i) → dynamic
+  return let final uns::OptInClass1 #t41 = new uns::OptInClass1::•() in let final core::int #t42 = i in let final core::int #t43 = uns::OptInExtension|[](#t41, #t42) in #t43 == null ?{core::int} let final core::int #t44 = 42 in let final void #t45 = uns::OptInExtension|[]=(#t41, #t42, #t44) in #t44 : #t43;
+static method extensionIfNullOptIn1ForEffect(core::int i) → dynamic {
+  let final uns::OptInClass1 #t46 = new uns::OptInClass1::•() in let final core::int #t47 = i in uns::OptInExtension|[](#t46, #t47) == null ?{core::int} uns::OptInExtension|[]=(#t46, #t47, 42) : null;
+}
+static method extensionIfNullOptIn2(core::int i) → dynamic
+  return let final uns::OptInClass1 #t48 = new uns::OptInClass1::•() in let final core::int #t49 = i in let final core::int #t50 = uns::OptInExtension|[](#t48, #t49) in #t50 == null ?{core::int} let final core::int #t51 = 42 in let final void #t52 = uns::OptInExtension|[]=(#t48, #t49, #t51) in #t51 : #t50;
+static method extensionIfNullOptIn2ForEffect(core::int i) → dynamic {
+  let final uns::OptInClass1 #t53 = new uns::OptInClass1::•() in let final core::int #t54 = i in uns::OptInExtension|[](#t53, #t54) == null ?{core::int} uns::OptInExtension|[]=(#t53, #t54, 42) : null;
+}
+static method ifNullIndexSetOptIn(core::int i) → dynamic
+  return let final uns::OptInClass2 #t55 = new uns::OptInClass2::•() in let final core::int #t56 = i in let final core::int #t57 = #t55.{uns::OptInClass2::[]}(#t56){(core::int) → core::int} in #t57 == null ?{core::int} let final core::int #t58 = 42 in let final void #t59 = #t55.{uns::OptInClass2::[]=}(#t56, #t58){(core::int, core::int) → void} in #t58 : #t57;
+static method ifNullIndexSetOptInForEffect(core::int i) → dynamic {
+  let final uns::OptInClass2 #t60 = new uns::OptInClass2::•() in let final core::int #t61 = i in #t60.{uns::OptInClass2::[]}(#t61){(core::int) → core::int} == null ?{core::int} #t60.{uns::OptInClass2::[]=}(#t61, 42){(core::int, core::int) → void} : null;
+}
+static method ifNullPropertySetOptIn(core::int i) → dynamic
+  return let final uns::OptInClass3 #t62 = new uns::OptInClass3::•(i) in let final core::int #t63 = #t62.{uns::OptInClass3::field}{core::int} in #t63 == null ?{core::int} #t62.{uns::OptInClass3::field} = 42 : #t63;
+static method ifNullPropertySetOptInForEffect(core::int i) → dynamic {
+  let final uns::OptInClass3 #t64 = new uns::OptInClass3::•(i) in #t64.{uns::OptInClass3::field}{core::int} == null ?{core::int} #t64.{uns::OptInClass3::field} = 42 : null;
+}
+static method ifNullSetOptIn(core::int i) → dynamic
+  return let final core::int #t65 = i in #t65 == null ?{core::int} i = 42 : #t65;
+static method ifNullSetOptInForEffect(core::int i) → dynamic {
+  i == null ?{core::int} i = 42 : null;
+}
+static method ifNullSuperIndexSetOptIn(core::int i) → dynamic
+  return new uns::OptInClass4::•().{uns::OptInClass4::method}(i){(core::int) → dynamic};
+static method ifNullSuperIndexSetOptInForEffect(core::int i) → dynamic {
+  new uns::OptInClass4::•().{uns::OptInClass4::methodForEffect}(i){(core::int) → dynamic};
+}
+static method nullAwareIfNullSetOptIn(core::int i) → dynamic {
+  uns::OptInClass5? o = new uns::OptInClass5::•(i) as{ForNonNullableByDefault} uns::OptInClass5?;
+  return let final uns::OptInClass5? #t66 = o in #t66 == null ?{core::int?} null : let final core::int #t67 = #t66.{uns::OptInClass5::field}{core::int} in #t67 == null ?{core::int} #t66.{uns::OptInClass5::field} = 42 : #t67;
+}
+static method nullAwareIfNullSetOptInForEffect(core::int i) → dynamic {
+  uns::OptInClass5? o = new uns::OptInClass5::•(i) as{ForNonNullableByDefault} uns::OptInClass5?;
+  let final uns::OptInClass5? #t68 = o in #t68 == null ?{core::int?} null : #t68.{uns::OptInClass5::field}{core::int} == null ?{core::int} #t68.{uns::OptInClass5::field} = 42 : null;
+}
+static method isTestOptIn(core::int i) → dynamic
+  return i is{ForNonNullableByDefault} core::int;
+static method isNotTestOptIn(core::int i) → dynamic
+  return !(i is{ForNonNullableByDefault} core::int);
+static method nullAwareAccess1(core::int i) → dynamic
+  return let final core::int #t69 = i in #t69 == null ?{core::bool?} null : #t69.{core::int::isEven}{core::bool};
+static method nullAwareAccessForEffect1(core::int i) → dynamic {
+  let final core::int #t70 = i in #t70 == null ?{core::bool?} null : #t70.{core::int::isEven}{core::bool};
+}
+static method promotionToNever(core::int i) → dynamic {
+  if(i is{ForNonNullableByDefault} core::int)
+    return;
+}
+static method unnecessaryNullCheck(() → core::int f) → dynamic {
+  if(!(f(){() → core::int} == null))
+    return;
+}
+static method unnecessaryIfNull(() → core::int f, () → core::int g) → dynamic {
+  return let final core::int #t71 = f(){() → core::int} in #t71 == null ?{core::int} g(){() → core::int} : #t71;
+}
+static method unnecessaryIfNullAssign(core::List<core::int> x, () → core::int f) → dynamic {
+  let final core::List<core::int> #t72 = x in let final core::int #t73 = 0 in #t72.{core::List::[]}(#t73){(core::int) → core::int} == null ?{core::int} #t72.{core::List::[]=}(#t73, f(){() → core::int}){(core::int, core::int) → void} : null;
+}
+static method unnecessaryNullAwareAccess(() → core::int f) → dynamic {
+  let final core::int #t74 = f(){() → core::int} in #t74 == null ?{core::int?} null : #t74.{core::int::gcd}(0){(core::int) → core::int};
+}
+static method callReturningNever(() → Never f) → dynamic {
+  let final Never #t75 = f(){() → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+}
+static method switchOnEnum(uns::E e) → dynamic {
+  switch(e) {
+    #L1:
+    case #C3:
+      {
+        return;
+      }
+    #L2:
+    case #C6:
+      {
+        return;
+      }
+    #L3:
+    default:
+      throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type.");
+  }
+}
+static method switchOnEnumWithBreak(uns::E e) → dynamic {
+  #L4:
+  switch(e) {
+    #L5:
+    case #C3:
+      {
+        break #L4;
+      }
+    #L6:
+    case #C6:
+      {
+        break #L4;
+      }
+    #L7:
+    default:
+      throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type.");
+  }
+}
+static method switchOnEnumWithFallThrough1(uns::E e) → dynamic {
+  #L8:
+  switch(e) {
+    #L9:
+    case #C3:
+      {
+        break #L8;
+      }
+    #L10:
+    case #C6:
+      {
+        break #L8;
+      }
+    #L11:
+    default:
+      throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type.");
+  }
+}
+static method switchOnEnumWithFallThrough2(uns::E e) → dynamic {
+  #L12:
+  switch(e) {
+    #L13:
+    case #C3:
+    case #C6:
+      {
+        break #L12;
+      }
+    #L14:
+    default:
+      throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable enum type.");
+  }
+}
+static method handleThrow() → dynamic {
+  throw "";
+}
+static method handleRethrow() → dynamic {
+  try {
+    uns::handleThrow();
+  }
+  on core::Object catch(final core::Object _) {
+    rethrow;
+  }
+}
+static method handleInvalid(dynamic d) → dynamic {
+  return invalid-expression "pkg/front_end/testcases/nnbd_mixed/unsound_checks_lib.dart:195:10: Error: Not enough type information to disambiguate between literal set and literal map.
+Try providing type arguments for the literal explicitly to disambiguate it.
+  return {...d}; // Should not throw ReachabilityError.
+         ^";
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = uns::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = uns::E {index:#C4, _name:#C5}
+  #C7 = null
+  #C8 = <uns::E*>[#C3, #C6]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///unsound_checks_lib.dart:
+- E. (from org-dartlang-testcase:///unsound_checks_lib.dart:145:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.modular.expect
new file mode 100644
index 0000000..8a70236
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  field core::int* foo = null;
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends core::Object implements self::I {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic
+    return "bar";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder get foo() → core::int*
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
+  no-such-method-forwarder set foo(core::int* value) → void
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+static method expectTypeError(() →* dynamic callback) → void {
+  try {
+    callback(){() →* dynamic};
+    throw "Expected TypeError, did not occur";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
+static method main() → dynamic {
+  self::A* a = new self::A::•();
+  self::expectTypeError(() → core::int* => a.{self::I::foo}{core::int*});
+  self::expectTypeError(() → core::String* => (a as dynamic){dynamic}.foo = "bar");
+}
+
+constants  {
+  #C1 = #foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+  #C5 = #foo=
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.modular.expect
new file mode 100644
index 0000000..c5739de
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_arent_mixed_in.dart.weak.modular.expect
@@ -0,0 +1,85 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  field core::int* foo = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object implements self::A {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic {
+    self::count = self::count.{core::num::+}(1){(core::num*) →* core::int*};
+    return null;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder get foo() → core::int*
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
+  no-such-method-forwarder set foo(core::int* value) → void
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+abstract class _C&Object&B = core::Object with self::B /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&B*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::B::noSuchMethod}(i);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::_C&Object&B {
+  synthetic constructor •() → self::C*
+    : super self::_C&Object&B::•()
+    ;
+  get foo() → core::int*
+    return 42;
+  set foo(core::int* value) → void {}
+}
+static field core::int* count = 0;
+static method main() → dynamic {
+  self::C* c = new self::C::•();
+  if(!(c.{self::C::foo}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 42)) {
+    throw "Value mismatch: c.foo != 42.";
+  }
+  c.{self::C::foo} = 43;
+  if(!(self::count =={core::num::==}{(core::Object*) →* core::bool*} 0)) {
+    throw "Value mismatch: count != 0";
+  }
+}
+
+constants  {
+  #C1 = #foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+  #C5 = #foo=
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.modular.expect
new file mode 100644
index 0000000..49adc6d
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_one_defined.dart.weak.modular.expect
@@ -0,0 +1,91 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  field core::int* foo = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends core::Object implements self::A {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get foo() → core::int*
+    return 42;
+  method noSuchMethod(core::Invocation* i) → dynamic
+    return "bar";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  no-such-method-forwarder set foo(core::int* value) → void
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
+}
+abstract class D extends core::Object implements self::A {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  set foo(core::int* value) → void {}
+  method noSuchMethod(core::Invocation* i) → dynamic
+    return "bar";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E extends self::D {
+  synthetic constructor •() → self::E*
+    : super self::D::•()
+    ;
+  no-such-method-forwarder get foo() → core::int*
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 1, #C2, #C5, core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
+}
+static method expectTypeError(() →* dynamic callback) → void {
+  try {
+    callback(){() →* dynamic};
+    throw "Expected TypeError, did not occur";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
+static method main() → dynamic {
+  self::C* c = new self::C::•();
+  self::expectTypeError(() → core::String* => (c as dynamic){dynamic}.foo = "bar");
+  self::E* e = new self::E::•();
+  self::expectTypeError(() → core::int* => e.{self::A::foo}{core::int*});
+}
+
+constants  {
+  #C1 = #foo=
+  #C2 = <core::Type*>[]
+  #C3 = <core::Symbol*, dynamic>{)
+  #C4 = #foo
+  #C5 = <dynamic>[]
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.modular.expect
new file mode 100644
index 0000000..aa77c05
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.modular.expect
@@ -0,0 +1,61 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<X extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field core::List<self::A::X*>* foo = null;
+  synthetic constructor •() → self::A<self::A::X*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object implements self::A<core::int*> {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic
+    return <dynamic>[];
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder get foo() → core::List<core::int*>*
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::List<core::int*>*;
+  no-such-method-forwarder set foo(covariant-by-class core::List<core::int*>* value) → void
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+static method expectTypeError(() →* dynamic callback) → void {
+  try {
+    callback(){() →* dynamic};
+    throw "Expected TypeError, did not occur";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
+static method main() → dynamic {
+  self::B* b = new self::B::•();
+  self::expectTypeError(() → core::List<core::int*>* => b.{self::A::foo}{core::List<core::int*>*});
+  self::expectTypeError(() → core::List<dynamic>* => (b as dynamic){dynamic}.foo = <dynamic>[]);
+}
+
+constants  {
+  #C1 = #foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+  #C5 = #foo=
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.modular.expect
new file mode 100644
index 0000000..06dbd87
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.weak.modular.expect
@@ -0,0 +1,52 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic {
+    return null;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  abstract method foo() → void;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A implements self::I {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  no-such-method-forwarder method foo() → void
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.modular.expect
new file mode 100644
index 0000000..a135817
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.modular.expect
@@ -0,0 +1,70 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  synthetic constructor •() → self::Base*
+    : super core::Object::•()
+    ;
+  no-such-method-forwarder set push(core::int* x) → void
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder set float(covariant-by-declaration core::int* x) → void
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
+  method noSuchMethod(core::Invocation* i) → dynamic
+    return core::print("${this.{self::Base::runtimeType}{core::Type*}}: ${i.{core::Invocation::positionalArguments}{core::List<dynamic>*}.{core::List::[]}(0){(core::int*) →* dynamic}}");
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Me extends self::Base {
+  synthetic constructor •() → self::Me*
+    : super self::Base::•()
+    ;
+}
+class You extends self::Base {
+  synthetic constructor •() → self::You*
+    : super self::Base::•()
+    ;
+  no-such-method-forwarder set push(core::num* x) → void
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder set float(covariant-by-declaration core::num* x) → void
+    return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
+}
+static method main() → dynamic {
+  core::List<self::Base*>* list = <self::Base*>[new self::Me::•(), new self::You::•()];
+  for (self::Base* baba in list) {
+    baba.{self::Base::push} = 0;
+    baba.{self::Base::float} = 1;
+    if(baba is self::You*) {
+      baba{self::You*}.{self::You::push} = 2.3;
+      baba{self::You*}.{self::You::float} = 4.5;
+    }
+    try {
+      (baba as dynamic){dynamic}.push = 6.7;
+      baba is self::You* || (throw "Fail!");
+    }
+    on core::TypeError* catch(no-exception-var) {
+      baba is self::Me* || (throw "Fail!");
+    }
+    try {
+      (baba as dynamic){dynamic}.float = 8.9;
+      baba is self::You* || (throw "Fail!");
+    }
+    on core::TypeError* catch(no-exception-var) {
+      baba is self::Me* || (throw "Fail!");
+    }
+  }
+}
+
+constants  {
+  #C1 = #push=
+  #C2 = <core::Type*>[]
+  #C3 = <core::Symbol*, dynamic>{)
+  #C4 = #float=
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.modular.expect
new file mode 100644
index 0000000..819fb97
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.weak.modular.expect
@@ -0,0 +1,87 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Cat extends core::Object {
+  synthetic constructor •() → self::Cat*
+    : super core::Object::•()
+    ;
+  method eatFood(core::String* food) → core::bool*
+    return true;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class MockCat extends core::Object implements self::Cat {
+  synthetic constructor •() → self::MockCat*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* invocation) → dynamic {
+    dynamic arg = invocation.{core::Invocation::positionalArguments}{core::List<dynamic>*}.{core::List::[]}(0){(core::int*) →* dynamic};
+    return arg is core::String* && arg{core::String*}.{core::String::isNotEmpty}{core::bool*};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method eatFood(core::String* food) → core::bool*
+    return this.{self::MockCat::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
+}
+class MockCat2 extends self::MockCat {
+  synthetic constructor •() → self::MockCat2*
+    : super self::MockCat::•()
+    ;
+  abstract method noSuchMethod(core::Invocation* _) → dynamic;
+}
+class MockCat3 extends self::MockCat2 implements self::Cat {
+  synthetic constructor •() → self::MockCat3*
+    : super self::MockCat2::•()
+    ;
+  no-such-method-forwarder method eatFood(core::String* food, {core::double* amount = #C4}) → core::bool*
+    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C5: amount}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
+}
+class MockCat4 extends self::MockCat2 implements self::HungryCat {
+  synthetic constructor •() → self::MockCat4*
+    : super self::MockCat2::•()
+    ;
+  no-such-method-forwarder method eatFood(core::String* food, {core::double* amount = #C4, core::double* yetAnother = #C4}) → core::bool*
+    return this.{self::MockCat2::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[food]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C5: amount, #C6: yetAnother}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::bool*;
+}
+abstract class HungryCat extends core::Object {
+  synthetic constructor •() → self::HungryCat*
+    : super core::Object::•()
+    ;
+  abstract method eatFood(core::String* food, {core::double* amount = #C4, core::double* yetAnother = #C4}) → core::bool*;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #eatFood
+  #C2 = <core::Type*>[]
+  #C3 = <core::Symbol*, dynamic>{)
+  #C4 = null
+  #C5 = #amount
+  #C6 = #yetAnother
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.modular.expect
new file mode 100644
index 0000000..701d4d2
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/concrete_method_over_forwarder_in_mixin_application.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  abstract method foo() → dynamic;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {}
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object implements self::I {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* _) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method foo() → dynamic
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
+}
+abstract class _C&A&B = self::A with self::B /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C&A&B*
+    : super self::A::•()
+    ;
+  mixin-super-stub method noSuchMethod(core::Invocation* _) → dynamic
+    return super.{self::B::noSuchMethod}(_);
+}
+class C extends self::_C&A&B {
+  synthetic constructor •() → self::C*
+    : super self::_C&A&B::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.modular.expect
new file mode 100644
index 0000000..bde35bd
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/default_argument_values.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic {
+    if(i.{core::Invocation::memberName}{core::Symbol*} =={core::Symbol::==}{(core::Object*) →* core::bool*} #C1) {
+      return i.{core::Invocation::namedArguments}{core::Map<core::Symbol*, dynamic>*}.{core::Map::[]}(#C2){(core::Object*) →* dynamic};
+    }
+    else
+      if(i.{core::Invocation::memberName}{core::Symbol*} =={core::Symbol::==}{(core::Object*) →* core::bool*} #C3) {
+        return i.{core::Invocation::positionalArguments}{core::List<dynamic>*}.{core::List::[]}(0){(core::int*) →* dynamic};
+      }
+    return null;
+  }
+  abstract method foo({core::String* bar = #C4}) → core::String*;
+  abstract method hest([core::int* fisk = #C5]) → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  no-such-method-forwarder method foo({core::String* bar = #C4}) → core::String*
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C6, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C2: bar}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::String*;
+  no-such-method-forwarder method hest([core::int* fisk = #C5]) → core::int*
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C6, core::List::unmodifiable<dynamic>(<dynamic>[fisk]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C8))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
+}
+static method main() → dynamic {
+  self::B* b = new self::B::•();
+  dynamic value;
+  if(!((value = b.{self::A::foo}(){({bar: core::String*}) →* core::String*}) =={core::String::==}{(core::Object*) →* core::bool*} "baz")) {
+    throw "Unexpected value: '${value}'; expected 'baz'.";
+  }
+  if(!((value = b.{self::A::hest}(){([core::int*]) →* core::int*}) =={core::num::==}{(core::Object*) →* core::bool*} 42)) {
+    throw "Unexpected value: '${value}'; expected '42'.";
+  }
+}
+
+constants  {
+  #C1 = #foo
+  #C2 = #bar
+  #C3 = #hest
+  #C4 = "baz"
+  #C5 = 42
+  #C6 = <core::Type*>[]
+  #C7 = <dynamic>[]
+  #C8 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.modular.expect
new file mode 100644
index 0000000..d8b80bb
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/duplicated_abstract_method.dart.weak.modular.expect
@@ -0,0 +1,62 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I1 extends core::Object {
+  synthetic constructor •() → self::I1*
+    : super core::Object::•()
+    ;
+  abstract method foo() → void;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I2 extends core::Object {
+  synthetic constructor •() → self::I2*
+    : super core::Object::•()
+    ;
+  abstract method foo() → void;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M extends core::Object implements self::I1, self::I2 {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method foo() → void
+    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.modular.expect
new file mode 100644
index 0000000..9966f87
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarder_propagation.dart.weak.modular.expect
@@ -0,0 +1,123 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "forwarder_propagation_lib.dart" as for;
+
+import "org-dartlang-testcase:///forwarder_propagation_lib.dart";
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract set foo(core::int* value) → void;
+  abstract get bar() → core::int*;
+  abstract method baz(core::int* x, {core::String* y = #C1, core::double* z = #C1}) → void;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object implements self::A {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* _) → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder get bar() → core::int*
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
+  no-such-method-forwarder method baz(core::int* x, {core::String* y = #C1, core::double* z = #C1}) → void
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C7: y, #C8: z}))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder set foo(core::int* value) → void
+    return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+class E extends core::Object implements for::D {
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder get /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateGetter() → core::int*
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
+  no-such-method-forwarder get /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateField() → core::int*
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
+  no-such-method-forwarder method /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateMethod() → void
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder set /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateSetter(core::int* value) → void
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
+  no-such-method-forwarder set /* from org-dartlang-testcase:///forwarder_propagation_lib.dart */ _privateField(core::int* value) → void
+    return this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
+}
+class F extends self::E {
+  synthetic constructor •() → self::F*
+    : super self::E::•()
+    ;
+}
+static method main() → dynamic {}
+
+library;
+import self as for;
+import "dart:core" as core;
+
+abstract class D extends core::Object {
+  field core::int* _privateField = null;
+  synthetic constructor •() → for::D*
+    : super core::Object::•()
+    ;
+  abstract get _privateGetter() → core::int*;
+  abstract set _privateSetter(core::int* value) → void;
+  abstract method _privateMethod() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+constants  {
+  #C1 = null
+  #C2 = #bar
+  #C3 = <core::Type*>[]
+  #C4 = <dynamic>[]
+  #C5 = <core::Symbol*, dynamic>{)
+  #C6 = #baz
+  #C7 = #y
+  #C8 = #z
+  #C9 = #foo=
+  #C10 = #org-dartlang-testcase:///forwarder_propagation.dart::_privateGetter
+  #C11 = #org-dartlang-testcase:///forwarder_propagation.dart::_privateField
+  #C12 = #org-dartlang-testcase:///forwarder_propagation.dart::_privateMethod
+  #C13 = #org-dartlang-testcase:///forwarder_propagation.dart::_privateSetter=
+  #C14 = #org-dartlang-testcase:///forwarder_propagation.dart::_privateField=
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.modular.expect
new file mode 100644
index 0000000..ae8492b
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/forwarders_not_assumed_from_mixin.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  abstract method foo() → void;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends core::Object implements self::I {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder method foo() → void
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+abstract class _B&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_B&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::A::noSuchMethod}(i);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::_B&Object&A {
+  synthetic constructor •() → self::B*
+    : super self::_B&Object&A::•()
+    ;
+  no-such-method-forwarder method foo() → void
+    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.modular.expect
new file mode 100644
index 0000000..fc7e726
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.weak.modular.expect
@@ -0,0 +1,52 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic {
+    return null;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A implements self::I {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  no-such-method-forwarder method foo() → void
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.modular.expect
new file mode 100644
index 0000000..6d19094
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_nsm.dart.weak.modular.expect
@@ -0,0 +1,92 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic
+    return null;
+  no-such-method-forwarder method foo() → void
+    return this.{self::I::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A&Object&M = core::Object with self::M /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A&Object&M*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::M::noSuchMethod}(i);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends self::_A&Object&M implements self::I {
+  synthetic constructor •() → self::A*
+    : super self::_A&Object&M::•()
+    ;
+  no-such-method-forwarder method foo() → void
+    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+abstract class _B&Object&M = core::Object with self::M /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_B&Object&M*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::M::noSuchMethod}(i);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::_B&Object&M implements self::I {
+  synthetic constructor •() → self::B*
+    : super self::_B&Object&M::•()
+    ;
+  no-such-method-forwarder method foo() → void
+    return this.{self::_B&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.modular.expect
new file mode 100644
index 0000000..8c67697
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/multiple_abstract_setters.dart.weak.modular.expect
@@ -0,0 +1,87 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  set foo(core::int* value) → void {}
+  get bar() → core::int*
+    return null;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  set foo(core::double* value) → void {}
+  get bar() → core::double*
+    return null;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  set foo(core::num* value) → void {}
+  get bar() → Null
+    return null;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends core::Object implements self::C, self::A, self::B {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* _) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  no-such-method-forwarder get bar() → Null
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} Null;
+  no-such-method-forwarder set foo(core::num* value) → void
+    return this.{self::D::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #bar
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+  #C5 = #foo=
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.modular.expect
new file mode 100644
index 0000000..d2fa4dd
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic
+    return null;
+  abstract method foo() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  no-such-method-forwarder method foo() → void
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.modular.expect
new file mode 100644
index 0000000..c2f527e
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/no_forwarders_for_abstract_classes_chain.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic
+    return null;
+  abstract method foo() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  no-such-method-forwarder method foo() → void
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.modular.expect
new file mode 100644
index 0000000..fadd73d
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_inherited.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends self::M {
+  synthetic constructor •() → self::A*
+    : super self::M::•()
+    ;
+  no-such-method-forwarder method call(core::String* s) → void
+    return this.{self::M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>(<dynamic>[s]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #call
+  #C2 = <core::Type*>[]
+  #C3 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.modular.expect
new file mode 100644
index 0000000..a59d331
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/nsm_mixed_in.dart.weak.modular.expect
@@ -0,0 +1,52 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic {
+    return null;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _B&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_B&Object&A*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::A::noSuchMethod}(i);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::_B&Object&A {
+  synthetic constructor •() → self::B*
+    : super self::_B&Object&A::•()
+    ;
+  no-such-method-forwarder method foo() → void
+    return this.{self::_B&Object&A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.modular.expect
new file mode 100644
index 0000000..00429c3
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library private;
+import self as self;
+import "dart:core" as core;
+import "private_module.dart" as pri;
+
+import "org-dartlang-testcase:///private_module.dart" show Fisk;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return 42;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar extends self::Foo implements pri::Fisk {
+  synthetic constructor •() → self::Bar*
+    : super self::Foo::•()
+    ;
+  no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+class Baz extends self::Foo implements pri::Fisk {
+  synthetic constructor •() → self::Baz*
+    : super self::Foo::•()
+    ;
+  method _hest() → dynamic
+    return null;
+  no-such-method-forwarder method /* from org-dartlang-testcase:///private_module.dart */ _hest() → void
+    return this.{self::Foo::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+static method main() → dynamic {}
+
+library private_module;
+import self as pri;
+import "dart:core" as core;
+
+abstract class Fisk extends core::Object {
+  synthetic constructor •() → pri::Fisk*
+    : super core::Object::•()
+    ;
+  abstract method _hest() → void;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #org-dartlang-testcase:///private.dart::_hest
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.weak.modular.expect
new file mode 100644
index 0000000..1be321b
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_module.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library private_module;
+import self as self;
+import "dart:core" as core;
+
+abstract class Fisk extends core::Object {
+  synthetic constructor •() → self::Fisk*
+    : super core::Object::•()
+    ;
+  abstract method _hest() → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.modular.expect
new file mode 100644
index 0000000..3a2ae93
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private_same.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract method _foo() → void;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar extends self::Foo {
+  synthetic constructor •() → self::Bar*
+    : super self::Foo::•()
+    ;
+  method noSuchMethod(core::Invocation* invocation) → dynamic
+    return null;
+  no-such-method-forwarder method _foo() → void
+    return this.{self::Bar::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #org-dartlang-testcase:///private_same.dart::_foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.modular.expect
new file mode 100644
index 0000000..51c933a
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/same.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic {
+    return null;
+  }
+  no-such-method-forwarder method foo() → void
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.modular.expect
new file mode 100644
index 0000000..8a8122f
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart:12:12: Error: 'foo' is already declared in this scope.
+//   void set foo(int x);
+//            ^^^
+// pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart:10:8: Context: Previous declaration of 'foo'.
+//   void foo(int x) {}
+//        ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method foo(core::int* x) → void {}
+  no-such-method-forwarder set foo(core::int* x) → void
+    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
+  method noSuchMethod(core::Invocation* i) → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #foo=
+  #C2 = <core::Type*>[]
+  #C3 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.modular.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.modular.expect
new file mode 100644
index 0000000..8314ecf
--- /dev/null
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class I<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T*>*
+    : super core::Object::•()
+    ;
+  abstract method foo() → self::I::T*;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic {
+    return null;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A&Object&M = core::Object with self::M /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_A&Object&M*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method noSuchMethod(core::Invocation* i) → dynamic
+    return super.{self::M::noSuchMethod}(i);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends self::_A&Object&M implements self::I<core::int*> {
+  synthetic constructor •() → self::A*
+    : super self::_A&Object&M::•()
+    ;
+  no-such-method-forwarder method foo() → core::int*
+    return this.{self::_A&Object&M::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::int*;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = #foo
+  #C2 = <core::Type*>[]
+  #C3 = <dynamic>[]
+  #C4 = <core::Symbol*, dynamic>{)
+}
diff --git a/pkg/front_end/testcases/none/equals.dart.weak.modular.expect b/pkg/front_end/testcases/none/equals.dart.weak.modular.expect
new file mode 100644
index 0000000..7950f55
--- /dev/null
+++ b/pkg/front_end/testcases/none/equals.dart.weak.modular.expect
@@ -0,0 +1,483 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/none/equals.dart:115:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() == null;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:116:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() != null;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:117:34: Error: Too few positional arguments: 1 required, 0 given.
+//   null == nonNullableClass.method();
+//                                  ^
+//
+// pkg/front_end/testcases/none/equals.dart:118:34: Error: Too few positional arguments: 1 required, 0 given.
+//   null != nonNullableClass.method();
+//                                  ^
+//
+// pkg/front_end/testcases/none/equals.dart:134:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nonNullableClass == nullValue;
+//                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:135:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nonNullableClass != nullValue;
+//                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:139:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nullableClass == nullValue;
+//                    ^
+//
+// pkg/front_end/testcases/none/equals.dart:140:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nullableClass != nullValue;
+//                    ^
+//
+// pkg/front_end/testcases/none/equals.dart:204:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() == nullValue;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:205:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() != nullValue;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:206:39: Error: Too few positional arguments: 1 required, 0 given.
+//   nullValue == nonNullableClass.method();
+//                                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:207:39: Error: Too few positional arguments: 1 required, 0 given.
+//   nullValue != nonNullableClass.method();
+//                                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:233:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nonNullableClass == o;
+//                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:234:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nonNullableClass != o;
+//                       ^
+//
+// pkg/front_end/testcases/none/equals.dart:242:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nullableClass == o;
+//                    ^
+//
+// pkg/front_end/testcases/none/equals.dart:243:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+//   nullableClass != o;
+//                    ^
+//
+// pkg/front_end/testcases/none/equals.dart:355:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() == nullTypedValue;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:356:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() != nullTypedValue;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:357:44: Error: Too few positional arguments: 1 required, 0 given.
+//   nullTypedValue == nonNullableClass.method();
+//                                            ^
+//
+// pkg/front_end/testcases/none/equals.dart:358:44: Error: Too few positional arguments: 1 required, 0 given.
+//   nullTypedValue != nonNullableClass.method();
+//                                            ^
+//
+// pkg/front_end/testcases/none/equals.dart:359:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() == o;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:360:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass.method() != o;
+//                          ^
+//
+// pkg/front_end/testcases/none/equals.dart:361:31: Error: Too few positional arguments: 1 required, 0 given.
+//   o == nonNullableClass.method();
+//                               ^
+//
+// pkg/front_end/testcases/none/equals.dart:362:31: Error: Too few positional arguments: 1 required, 0 given.
+//   o != nonNullableClass.method();
+//                               ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  operator ==(covariant-by-declaration covariant-by-class self::Class<self::Class::T%> other) → core::bool
+    return true;
+  method method(dynamic o) → dynamic {}
+}
+static const field core::Object? nullValue = #C1;
+static method test<T1 extends core::Function, T2 extends (core::int) → core::int>(core::Object o, core::Object nonNullableObject, core::Object? nullableObject, self::Class<core::String> nonNullableClass, self::Class<core::String>? nullableClass, dynamic dyn, Never never, Never? nullableNever, Null nullTypedValue, core::Function nonNullableFunction, core::Function? nullableFunction, (core::int) → core::int nonNullableFunctionType, (core::int) →? core::int nullableFunctionType, self::test::T1 nonNullableTypeVariable1, self::test::T1? nullableTypeVariable1, self::test::T2 nonNullableTypeVariable2, self::test::T2? nullableTypeVariable2) → dynamic {
+  core::print("EqualsNull (literal null)");
+  null == null;
+  !(null == null);
+  nonNullableObject == null;
+  !(nonNullableObject == null);
+  nonNullableObject == null;
+  !(nonNullableObject == null);
+  nullableObject == null;
+  !(nullableObject == null);
+  nullableObject == null;
+  !(nullableObject == null);
+  nullableClass == null;
+  !(nullableClass == null);
+  nullableClass == null;
+  !(nullableClass == null);
+  nonNullableClass == null;
+  !(nonNullableClass == null);
+  nonNullableClass == null;
+  !(nonNullableClass == null);
+  dyn == null;
+  !(dyn == null);
+  dyn == null;
+  !(dyn == null);
+  (let final Never #t1 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null;
+  !((let final Never #t2 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null);
+  (let final Never #t3 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null;
+  !((let final Never #t4 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null);
+  nullableNever == null;
+  !(nullableNever == null);
+  nullableNever == null;
+  !(nullableNever == null);
+  nullTypedValue == null;
+  !(nullTypedValue == null);
+  nullTypedValue == null;
+  !(nullTypedValue == null);
+  nonNullableFunction == null;
+  !(nonNullableFunction == null);
+  nonNullableFunction == null;
+  !(nonNullableFunction == null);
+  nullableFunction == null;
+  !(nullableFunction == null);
+  nullableFunction == null;
+  !(nullableFunction == null);
+  nonNullableFunctionType == null;
+  !(nonNullableFunctionType == null);
+  nonNullableFunctionType == null;
+  !(nonNullableFunctionType == null);
+  nullableFunctionType == null;
+  !(nullableFunctionType == null);
+  nullableFunctionType == null;
+  !(nullableFunctionType == null);
+  nonNullableTypeVariable1 == null;
+  !(nonNullableTypeVariable1 == null);
+  nonNullableTypeVariable1 == null;
+  !(nonNullableTypeVariable1 == null);
+  nullableTypeVariable1 == null;
+  !(nullableTypeVariable1 == null);
+  nullableTypeVariable1 == null;
+  !(nullableTypeVariable1 == null);
+  nonNullableTypeVariable2 == null;
+  !(nonNullableTypeVariable2 == null);
+  nonNullableTypeVariable2 == null;
+  !(nonNullableTypeVariable2 == null);
+  nullableTypeVariable2 == null;
+  !(nullableTypeVariable2 == null);
+  nullableTypeVariable2 == null;
+  !(nullableTypeVariable2 == null);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:115:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() == null;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:116:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() != null;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:117:34: Error: Too few positional arguments: 1 required, 0 given.
+  null == nonNullableClass.method();
+                                 ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:118:34: Error: Too few positional arguments: 1 required, 0 given.
+  null != nonNullableClass.method();
+                                 ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
+  core::print("EqualsNull (constant null)");
+  #C1 == null;
+  !(#C1 == null);
+  nonNullableObject == null;
+  !(nonNullableObject == null);
+  nonNullableObject == null;
+  !(nonNullableObject == null);
+  nullableObject == null;
+  !(nullableObject == null);
+  nullableObject == null;
+  !(nullableObject == null);
+  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:134:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nonNullableClass == nullValue;
+                      ^" in #C1 as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:135:23: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nonNullableClass != nullValue;
+                      ^" in #C1 as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
+  nonNullableClass == null;
+  !(nonNullableClass == null);
+  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:139:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nullableClass == nullValue;
+                   ^" in #C1 as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:140:20: Error: The argument type 'Object?' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nullableClass != nullValue;
+                   ^" in #C1 as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
+  nullableClass == null;
+  !(nullableClass == null);
+  dyn == null;
+  !(dyn == null);
+  dyn == null;
+  !(dyn == null);
+  let final Never #t5 = (let final Never #t6 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t7 = !((let final Never #t8 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  (let final Never #t9 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null;
+  !((let final Never #t10 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) == null);
+  nullableNever == null;
+  !(nullableNever == null);
+  nullableNever == null;
+  !(nullableNever == null);
+  nullTypedValue == null;
+  !(nullTypedValue == null);
+  nullTypedValue == null;
+  !(nullTypedValue == null);
+  nonNullableFunction == null;
+  !(nonNullableFunction == null);
+  nonNullableFunction == null;
+  !(nonNullableFunction == null);
+  nullableFunction == null;
+  !(nullableFunction == null);
+  nullableFunction == null;
+  !(nullableFunction == null);
+  nonNullableFunctionType == null;
+  !(nonNullableFunctionType == null);
+  nonNullableFunctionType == null;
+  !(nonNullableFunctionType == null);
+  nullableFunctionType == null;
+  !(nullableFunctionType == null);
+  nullableFunctionType == null;
+  !(nullableFunctionType == null);
+  nonNullableTypeVariable1 == null;
+  !(nonNullableTypeVariable1 == null);
+  nonNullableTypeVariable1 == null;
+  !(nonNullableTypeVariable1 == null);
+  nullableTypeVariable1 == null;
+  !(nullableTypeVariable1 == null);
+  nullableTypeVariable1 == null;
+  !(nullableTypeVariable1 == null);
+  nonNullableTypeVariable2 == null;
+  !(nonNullableTypeVariable2 == null);
+  nonNullableTypeVariable2 == null;
+  !(nonNullableTypeVariable2 == null);
+  nullableTypeVariable2 == null;
+  !(nullableTypeVariable2 == null);
+  nullableTypeVariable2 == null;
+  !(nullableTypeVariable2 == null);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:204:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() == nullValue;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:205:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() != nullValue;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:206:39: Error: Too few positional arguments: 1 required, 0 given.
+  nullValue == nonNullableClass.method();
+                                      ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:207:39: Error: Too few positional arguments: 1 required, 0 given.
+  nullValue != nonNullableClass.method();
+                                      ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} == null);
+  core::print("EqualsCall");
+  nonNullableObject =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nonNullableObject =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableObject;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableObject);
+  nonNullableObject =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nonNullableObject =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableObject;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableObject);
+  nullableObject =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableObject =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableObject;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableObject);
+  nullableObject =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nullableObject =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableObject;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableObject);
+  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue;
+  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableClass;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableClass);
+  nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:233:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nonNullableClass == o;
+                      ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nonNullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:234:23: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nonNullableClass != o;
+                      ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableClass;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableClass);
+  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue;
+  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableClass;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableClass);
+  nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:242:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nullableClass == o;
+                   ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?;
+  !(nullableClass =={self::Class::==}{(self::Class<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:243:20: Error: The argument type 'Object' can't be assigned to the parameter type 'Class<String>?'.
+ - 'Object' is from 'dart:core'.
+ - 'Class' is from 'pkg/front_end/testcases/none/equals.dart'.
+  nullableClass != o;
+                   ^" in o as{TypeError,ForNonNullableByDefault} self::Class<core::String>?);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableClass;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableClass);
+  dyn =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(dyn =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} dyn;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} dyn);
+  dyn =={core::Object::==}{(core::Object) → core::bool} o;
+  !(dyn =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} dyn;
+  !(o =={core::Object::==}{(core::Object) → core::bool} dyn);
+  let final Never #t11 = (let final Never #t12 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} nullTypedValue in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t13 = !((let final Never #t14 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} nullTypedValue) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} (let final Never #t15 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} (let final Never #t16 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")));
+  let final Never #t17 = (let final Never #t18 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} o in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t19 = !((let final Never #t20 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")) =={core::Object::==}{(dynamic) → Never} o) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  o =={core::Object::==}{(core::Object) → core::bool} (let final Never #t21 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`."));
+  !(o =={core::Object::==}{(core::Object) → core::bool} (let final Never #t22 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")));
+  nullableNever =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableNever =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableNever;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableNever);
+  nullableNever =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nullableNever =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableNever;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableNever);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nonNullableFunction =={core::Function::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nonNullableFunction =={core::Function::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableFunction;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableFunction);
+  nonNullableFunction =={core::Function::==}{(core::Object) → core::bool} o;
+  !(nonNullableFunction =={core::Function::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableFunction;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableFunction);
+  nullableFunction =={core::Function::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableFunction =={core::Function::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableFunction;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableFunction);
+  nullableFunction =={core::Function::==}{(core::Object) → core::bool} o;
+  !(nullableFunction =={core::Function::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableFunction;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableFunction);
+  nonNullableFunctionType =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nonNullableFunctionType =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableFunctionType;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableFunctionType);
+  nonNullableFunctionType =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nonNullableFunctionType =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableFunctionType;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableFunctionType);
+  nullableFunctionType =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableFunctionType =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableFunctionType;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableFunctionType);
+  nullableFunctionType =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nullableFunctionType =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableFunctionType;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableFunctionType);
+  nonNullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nonNullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable1;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable1);
+  nonNullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} o;
+  !(nonNullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable1;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable1);
+  nullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable1;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable1);
+  nullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} o;
+  !(nullableTypeVariable1 =={core::Function::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable1;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable1);
+  nonNullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nonNullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable2;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable2);
+  nonNullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nonNullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable2;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nonNullableTypeVariable2);
+  nullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(nullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable2;
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable2);
+  nullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} o;
+  !(nullableTypeVariable2 =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable2;
+  !(o =={core::Object::==}{(core::Object) → core::bool} nullableTypeVariable2);
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:355:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() == nullTypedValue;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} nullTypedValue;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:356:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() != nullTypedValue;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} nullTypedValue);
+  nullTypedValue =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:357:44: Error: Too few positional arguments: 1 required, 0 given.
+  nullTypedValue == nonNullableClass.method();
+                                           ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type};
+  !(nullTypedValue =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:358:44: Error: Too few positional arguments: 1 required, 0 given.
+  nullTypedValue != nonNullableClass.method();
+                                           ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type});
+  invalid-expression "pkg/front_end/testcases/none/equals.dart:359:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() == o;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} o;
+  !(invalid-expression "pkg/front_end/testcases/none/equals.dart:360:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass.method() != o;
+                         ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type} =={core::Object::==}{(core::Object) → core::bool} o);
+  o =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:361:31: Error: Too few positional arguments: 1 required, 0 given.
+  o == nonNullableClass.method();
+                              ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type};
+  !(o =={core::Object::==}{(core::Object) → core::bool} invalid-expression "pkg/front_end/testcases/none/equals.dart:362:31: Error: Too few positional arguments: 1 required, 0 given.
+  o != nonNullableClass.method();
+                              ^" in nonNullableClass.{self::Class::method}{<inapplicable>}.(){() → invalid-type});
+}
+static method nullEqualsIndexGet(core::Map<core::int, core::String> map) → dynamic {
+  map.{core::Map::[]}(0){(core::Object?) → core::String?} == null;
+  map.{core::Map::[]}(0){(core::Object?) → core::String?} == null;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/none/issue46003.dart.weak.modular.expect b/pkg/front_end/testcases/none/issue46003.dart.weak.modular.expect
new file mode 100644
index 0000000..cbdc1a0
--- /dev/null
+++ b/pkg/front_end/testcases/none/issue46003.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field () → dynamic foo;
+  constructor •(() → dynamic foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+  method bar() → void {
+    this.{self::A::foo}{() → dynamic}(){() → dynamic};
+    () → dynamic x = this.{self::A::foo}{() → dynamic};
+    x(){() → dynamic};
+    () → void y = this.{self::A::foo}{() → dynamic};
+    y(){() → void};
+  }
+}
+static method main() → dynamic {
+  new self::A::•(() → Null {}).{self::A::bar}(){() → void};
+}
diff --git a/pkg/front_end/testcases/none/method_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/none/method_invocation.dart.weak.modular.expect
new file mode 100644
index 0000000..b20ca89
--- /dev/null
+++ b/pkg/front_end/testcases/none/method_invocation.dart.weak.modular.expect
@@ -0,0 +1,297 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/none/method_invocation.dart:84:24: Error: Not a constant expression.
+//   const int call_dyn = dyn.toString(0);
+//                        ^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:84:28: Error: Method invocation is not a constant expression.
+//   const int call_dyn = dyn.toString(0);
+//                            ^^^^^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:147:34: Error: Not a constant expression.
+//   const int call_localFunction = localFunction();
+//                                  ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:152:22: Error: Not a constant expression.
+//   const int call_f = f();
+//                      ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:157:23: Error: Not a constant expression.
+//   const bool equals = i == j;
+//                       ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:68:42: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?.call instead.
+//   nonNullableClass2.nullableFunctionField();
+//                                          ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:69:43: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?.call instead.
+//   nonNullableClass2.nullableFunctionGetter();
+//                                           ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:70:47: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+//   nonNullableClass2.nullableFunctionTypedField();
+//                                               ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:71:48: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+//   nonNullableClass2.nullableFunctionTypedGetter();
+//                                                ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:74:50: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   nonNullableClass2.nonNullableFunctionTypedField(0);
+//                                                  ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:75:51: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   nonNullableClass2.nonNullableFunctionTypedGetter(0);
+//                                                   ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:78:18: Error: Method 'method' cannot be called on 'Class1?' because it is potentially null.
+//  - 'Class1' is from 'pkg/front_end/testcases/none/method_invocation.dart'.
+// Try calling using ?. instead.
+//   nullableClass1.method(0);
+//                  ^^^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:102:21: Error: The method 'unresolved' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/none/method_invocation.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'unresolved'.
+//   nonNullableClass1.unresolved();
+//                     ^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:105:27: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass1.method();
+//                           ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:106:26: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableFunctionType();
+//                          ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:132:19: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?.call instead.
+//   nullableFunction(0);
+//                   ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:133:20: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+//  - 'Function' is from 'dart:core'.
+// Try calling using ?. instead.
+//   nullableFunction.call(0);
+//                    ^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:134:23: Error: Can't use an expression of type 'int Function(int)?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+//   nullableFunctionType(0);
+//                       ^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:135:24: Error: Method 'call' cannot be called on 'int Function(int)?' because it is potentially null.
+// Try calling using ?. instead.
+//   nullableFunctionType.call(0);
+//                        ^^^^
+//
+// pkg/front_end/testcases/none/method_invocation.dart:138:27: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass1.method().method(0);
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+  method method(core::int o) → core::double
+    return 0.5;
+}
+class Class2<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::Class2::T% field;
+  field core::Function nonNullableFunctionField;
+  field core::Function? nullableFunctionField = null;
+  field () → void nonNullableFunctionTypedField;
+  field () →? void nullableFunctionTypedField = null;
+  constructor •(self::Class2::T% field, core::Function nonNullableFunctionField, () → void nonNullableFunctionTypedField) → self::Class2<self::Class2::T%>
+    : self::Class2::field = field, self::Class2::nonNullableFunctionField = nonNullableFunctionField, self::Class2::nonNullableFunctionTypedField = nonNullableFunctionTypedField, super core::Object::•()
+    ;
+  method call() → self::Class2::T%
+    return this.{self::Class2::field}{self::Class2::T%};
+  method method(core::int o) → self::Class2::T%
+    return this.{self::Class2::field}{self::Class2::T%};
+  get nonNullableFunctionGetter() → core::Function
+    return this.{self::Class2::nonNullableFunctionTypedField}{() → void};
+  get nullableFunctionGetter() → core::Function?
+    return this.{self::Class2::nonNullableFunctionTypedField}{() → void};
+  get nonNullableFunctionTypedGetter() → () → void
+    return this.{self::Class2::nonNullableFunctionTypedField}{() → void};
+  get nullableFunctionTypedGetter() → () →? void
+    return this.{self::Class2::nonNullableFunctionTypedField}{() → void};
+}
+static const field core::int i = #C1;
+static const field core::int j = #C2;
+static const field core::int k = #C3;
+static method test<T1 extends core::Function, T2 extends (core::int) → core::int, T3 extends core::Object? = dynamic>(self::Class1 nonNullableClass1, self::Class1? nullableClass1, dynamic dyn, Never never, self::Class2<core::String> nonNullableClass2, self::Class2<core::String>? nullableClass2, core::Function nonNullableFunction, core::Function? nullableFunction, (core::int) → core::int nonNullableFunctionType, (core::int) →? core::int nullableFunctionType, <T extends core::Object? = dynamic>(T%) → T% genericFunctionType, self::test::T1 nonNullableTypeVariable1, self::test::T1? nullableTypeVariable1, self::test::T2 nonNullableTypeVariable2, self::test::T2? nullableTypeVariable2, self::test::T3% undeterminedTypeVariable) → dynamic {
+  core::print("InstanceInvocation");
+  nonNullableClass1.{self::Class1::method}(0){(core::int) → core::double};
+  let final self::Class1? #t1 = nullableClass1 in #t1 == null ?{core::double?} null : #t1{self::Class1}.{self::Class1::method}(0){(core::int) → core::double};
+  core::print("InstanceGet calls");
+  nonNullableClass2.{self::Class2::nonNullableFunctionField}{core::Function}();
+  nonNullableClass2.{self::Class2::nonNullableFunctionGetter}{core::Function}();
+  nonNullableClass2.{self::Class2::nonNullableFunctionTypedField}{() → void}(){() → void};
+  nonNullableClass2.{self::Class2::nonNullableFunctionTypedGetter}{() → void}(){() → void};
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:68:42: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?.call instead.
+  nonNullableClass2.nullableFunctionField();
+                                         ^" in nonNullableClass2.{self::Class2::nullableFunctionField}{core::Function?}{<nullable>}.();
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:69:43: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?.call instead.
+  nonNullableClass2.nullableFunctionGetter();
+                                          ^" in nonNullableClass2.{self::Class2::nullableFunctionGetter}{core::Function?}{<nullable>}.();
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:70:47: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  nonNullableClass2.nullableFunctionTypedField();
+                                              ^" in nonNullableClass2.{self::Class2::nullableFunctionTypedField}{() →? void}{<nullable>}.(){() →? void};
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:71:48: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  nonNullableClass2.nullableFunctionTypedGetter();
+                                               ^" in nonNullableClass2.{self::Class2::nullableFunctionTypedGetter}{() →? void}{<nullable>}.(){() →? void};
+  let final self::Class2<core::String> #t2 = nonNullableClass2 in let final core::int #t3 = 0 in #t2.{self::Class2::nonNullableFunctionField}{core::Function}(#t3);
+  let final self::Class2<core::String> #t4 = nonNullableClass2 in let final core::int #t5 = 0 in #t4.{self::Class2::nonNullableFunctionGetter}{core::Function}(#t5);
+  let final self::Class2<core::String> #t6 = nonNullableClass2 in let final core::int #t7 = 0 in invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:74:50: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  nonNullableClass2.nonNullableFunctionTypedField(0);
+                                                 ^" in #t6.{self::Class2::nonNullableFunctionTypedField}{() → void}{<inapplicable>}.(#t7);
+  let final self::Class2<core::String> #t8 = nonNullableClass2 in let final core::int #t9 = 0 in invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:75:51: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  nonNullableClass2.nonNullableFunctionTypedGetter(0);
+                                                  ^" in #t8.{self::Class2::nonNullableFunctionTypedGetter}{() → void}{<inapplicable>}.(#t9);
+  core::print("InstanceInvocation (Nullable)");
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:78:18: Error: Method 'method' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/none/method_invocation.dart'.
+Try calling using ?. instead.
+  nullableClass1.method(0);
+                 ^^^^^^" in nullableClass1.{self::Class1::method}{<nullable>}.(0){(core::int) → core::double};
+  core::print("DynamicInvocation");
+  dyn{dynamic}.method(0);
+  let final dynamic #t10 = dyn in #t10 == null ?{dynamic} null : #t10{dynamic}.method(0);
+  dyn{dynamic}.toString(0);
+  const core::int call_dyn = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:84:28: Error: Method invocation is not a constant expression.
+  const int call_dyn = dyn.toString(0);
+                           ^^^^^^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:84:28: Error: Method invocation is not a constant expression.
+  const int call_dyn = dyn.toString(0);
+                           ^^^^^^^^");
+  core::print("InstanceInvocation (Object)");
+  dyn.{core::Object::toString}(){() → core::String};
+  nullableClass1.{core::Object::toString}(){() → core::String};
+  nullableClass2.{core::Object::toString}(){() → core::String};
+  nullableFunction.{core::Object::toString}(){() → core::String};
+  nullableFunctionType.{core::Object::toString}(){() → core::String};
+  nullableTypeVariable1.{core::Object::toString}(){() → core::String};
+  nullableTypeVariable2.{core::Object::toString}(){() → core::String};
+  undeterminedTypeVariable.{core::Object::toString}(){() → core::String};
+  core::print("DynamicInvocation (Never)");
+  let final Never #t11 = (let final Never #t12 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.method(0) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t13 = (let final Never #t14 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.toString() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::print("DynamicInvocation (Unresolved)");
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:102:21: Error: The method 'unresolved' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/none/method_invocation.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'unresolved'.
+  nonNullableClass1.unresolved();
+                    ^^^^^^^^^^" in nonNullableClass1{<unresolved>}.unresolved();
+  core::print("DynamicInvocation (Inapplicable)");
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:105:27: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass1.method();
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type};
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:106:26: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableFunctionType();
+                         ^" in nonNullableFunctionType{<inapplicable>}.();
+  core::print("InstanceInvocation (generic)");
+  nonNullableClass2.{self::Class2::method}(0){(core::int) → core::String};
+  let final self::Class2<core::String>? #t15 = nullableClass2 in #t15 == null ?{core::String?} null : #t15{self::Class2<core::String>}.{self::Class2::method}(0){(core::int) → core::String};
+  nonNullableClass2.{self::Class2::call}(){() → core::String};
+  nonNullableClass2.{self::Class2::call}(){() → core::String};
+  core::print("FunctionInvocation");
+  nonNullableFunction(0);
+  nonNullableFunction(0);
+  let final core::Function? #t16 = nullableFunction in #t16 == null ?{dynamic} null : #t16{core::Function}(0);
+  nonNullableFunctionType(0){(core::int) → core::int};
+  nonNullableFunctionType(0){(core::int) → core::int};
+  let final (core::int) →? core::int #t17 = nullableFunctionType in #t17 == null ?{core::int?} null : #t17{(core::int) → core::int}(0){(core::int) → core::int};
+  genericFunctionType<core::int>(0){(core::int) → core::int};
+  genericFunctionType<core::num>(0){(core::num) → core::num};
+  core::num i = genericFunctionType<core::num>(0){(core::num) → core::num};
+  nonNullableTypeVariable1(0);
+  nonNullableTypeVariable1(0);
+  let final self::test::T1? #t18 = nullableTypeVariable1 in #t18 == null ?{dynamic} null : #t18{self::test::T1}(0);
+  nonNullableTypeVariable2(0){(core::int) → core::int};
+  nonNullableTypeVariable2(0){(core::int) → core::int};
+  let final self::test::T2? #t19 = nullableTypeVariable2 in #t19 == null ?{core::int?} null : #t19{self::test::T2}(0){(core::int) → core::int};
+  core::print("FunctionInvocation (Nullable)");
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:132:19: Error: Can't use an expression of type 'Function?' as a function because it's potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?.call instead.
+  nullableFunction(0);
+                  ^" in nullableFunction{<nullable>}.(0);
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:133:20: Error: Method 'call' cannot be called on 'Function?' because it is potentially null.
+ - 'Function' is from 'dart:core'.
+Try calling using ?. instead.
+  nullableFunction.call(0);
+                   ^^^^" in nullableFunction{<nullable>}.(0);
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:134:23: Error: Can't use an expression of type 'int Function(int)?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  nullableFunctionType(0);
+                      ^" in nullableFunctionType{<nullable>}.(0){(core::int) →? core::int};
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:135:24: Error: Method 'call' cannot be called on 'int Function(int)?' because it is potentially null.
+Try calling using ?. instead.
+  nullableFunctionType.call(0);
+                       ^^^^" in nullableFunctionType{<nullable>}.(0){(core::int) →? core::int};
+  core::print("DynamicInvocation (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:138:27: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass1.method().method(0);
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}{dynamic}.method(0);
+  core::print("LocalFunctionInvocation");
+  function localFunction() → core::int
+    return 42;
+  function genericLocalFunction<T extends core::Object? = dynamic>(T% t) → T%
+    return t;
+  localFunction(){() → core::int};
+  genericLocalFunction<core::int>(0){(core::int) → core::int};
+  genericLocalFunction<core::num>(0){(core::num) → core::num};
+  const core::int call_localFunction = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:147:34: Error: Not a constant expression.
+  const int call_localFunction = localFunction();
+                                 ^^^^^^^^^^^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:147:34: Error: Not a constant expression.
+  const int call_localFunction = localFunction();
+                                 ^^^^^^^^^^^^^");
+  () → core::int f = () → core::int => 42;
+  const core::int call_f = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:152:22: Error: Not a constant expression.
+  const int call_f = f();
+                     ^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:152:22: Error: Not a constant expression.
+  const int call_f = f();
+                     ^");
+  core::print(#C4);
+  const core::bool equals = invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:157:23: Error: Not a constant expression.
+  const bool equals = i == j;
+                      ^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/method_invocation.dart:157:23: Error: Not a constant expression.
+  const bool equals = i == j;
+                      ^");
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 4
+  #C2 = 24
+  #C3 = 96
+  #C4 = false
+}
diff --git a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.modular.expect b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.modular.expect
new file mode 100644
index 0000000..eb12b86
--- /dev/null
+++ b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class SubClass extends mai::Class {
+  synthetic constructor •() → self::SubClass
+    : super mai::Class::•()
+    ;
+}
+static method main() → dynamic {
+  new self::SubClass::•();
+}
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.weak.modular.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.weak.modular.expect
new file mode 100644
index 0000000..ebd8305
--- /dev/null
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.weak.modular.expect
@@ -0,0 +1,79 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Superclass extends core::Object {
+  synthetic constructor •() → self::Superclass
+    : super core::Object::•()
+    ;
+  method method1(core::num argument1, core::num argument2) → core::String
+    return "Superclass";
+  method method2(core::num argument1, core::num argument2) → core::String
+    return "Superclass";
+  method method3(core::num argument1, covariant-by-declaration core::int argument2) → core::String
+    return "Superclass";
+  method method4(core::num argument1, covariant-by-declaration core::num argument2) → core::String
+    return "Superclass";
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method method1(core::num argument1, core::num argument2) → core::String
+    return "Mixin";
+  method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
+    return "Mixin";
+  method method3(core::num argument1, core::num argument2) → core::String
+    return "Mixin";
+  method method4(covariant-by-declaration core::int argument1, core::int argument2) → core::String
+    return "Mixin";
+}
+abstract class _Class&Superclass&Mixin = self::Superclass with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Superclass&Mixin
+    : super self::Superclass::•()
+    ;
+  mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
+    return super.{self::Mixin::method1}(argument1, argument2);
+  mixin-super-stub method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
+    return super.{self::Mixin::method2}(argument1, argument2);
+  forwarding-stub method method3(core::num argument1, covariant-by-declaration core::num argument2) → core::String
+    return super.{self::Mixin::method3}(argument1, argument2);
+  forwarding-stub method method4(covariant-by-declaration core::int argument1, covariant-by-declaration core::int argument2) → core::String
+    return super.{self::Mixin::method4}(argument1, argument2);
+}
+class Class extends self::_Class&Superclass&Mixin {
+  synthetic constructor •() → self::Class
+    : super self::_Class&Superclass&Mixin::•()
+    ;
+}
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::int, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::int, core::int) → core::String});
+  self::Superclass s = c;
+  self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5){(core::num, core::num) → core::String});
+  self::throws(() → void => s.{self::Superclass::method2}(0.5, 1.5){(core::num, core::num) → core::String});
+  self::expect("Mixin", s.{self::Superclass::method3}(0.5, 1){(core::num, core::int) → core::String});
+  self::throws(() → void => s.{self::Superclass::method4}(0.5, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", s.{self::Superclass::method4}(1, 0.5){(core::num, core::num) → core::String});
+  self::Mixin m = c;
+  self::expect("Mixin", m.{self::Mixin::method1}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method2}(0, 1){(core::int, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method3}(0, 1){(core::num, core::num) → core::String});
+  self::expect("Mixin", m.{self::Mixin::method4}(0, 1){(core::int, core::int) → core::String});
+}
+static method expect(dynamic expected, dynamic actual) → void {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → void f) → void {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object _) {
+    return;
+  }
+  throw "Expected exception";
+}
diff --git a/pkg/front_end/testcases/none/mixin_super.dart.weak.modular.expect b/pkg/front_end/testcases/none/mixin_super.dart.weak.modular.expect
new file mode 100644
index 0000000..9929e69
--- /dev/null
+++ b/pkg/front_end/testcases/none/mixin_super.dart.weak.modular.expect
@@ -0,0 +1,65 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Diagnosticable extends core::Object /*isMixinDeclaration*/  {
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {}
+}
+class DiagnosticPropertiesBuilder extends core::Object {
+  synthetic constructor •() → self::DiagnosticPropertiesBuilder
+    : super core::Object::•()
+    ;
+}
+abstract class _PointerEvent&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_PointerEvent&Object&Diagnosticable
+    : super core::Object::•()
+    ;
+  mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
+    return super.{self::Diagnosticable::debugFillProperties}(properties);
+}
+abstract class PointerEvent extends self::_PointerEvent&Object&Diagnosticable {
+  synthetic constructor •() → self::PointerEvent
+    : super self::_PointerEvent&Object&Diagnosticable::•()
+    ;
+}
+abstract class PointerSignalEvent extends self::PointerEvent {
+  synthetic constructor •() → self::PointerSignalEvent
+    : super self::PointerEvent::•()
+    ;
+}
+abstract class _PointerEventDescription extends self::PointerEvent /*isMixinDeclaration*/  {
+  @#C1
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
+    super.{self::_PointerEvent&Object&Diagnosticable::debugFillProperties}(properties);
+  }
+}
+abstract class _CopyPointerScrollEvent extends self::PointerEvent /*isMixinDeclaration*/  {
+}
+abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription = self::PointerSignalEvent with self::_PointerEventDescription /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription
+    : super self::PointerSignalEvent::•()
+    ;
+  mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
+    return super.{self::_PointerEventDescription::debugFillProperties}(properties);
+}
+abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent = self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription with self::_CopyPointerScrollEvent /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent
+    : super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::•()
+    ;
+}
+class PointerScrollEvent extends self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent {
+  synthetic constructor •() → self::PointerScrollEvent
+    : super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent::•()
+    ;
+  @#C1
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
+    super.{self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::debugFillProperties}(properties);
+  }
+}
+static method main() → dynamic {
+  new self::PointerScrollEvent::•().{self::PointerScrollEvent::debugFillProperties}(new self::DiagnosticPropertiesBuilder::•()){(self::DiagnosticPropertiesBuilder) → void};
+}
+
+constants  {
+  #C1 = core::_Override {}
+}
diff --git a/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.weak.modular.expect b/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.weak.modular.expect
new file mode 100644
index 0000000..fe8cc3c
--- /dev/null
+++ b/pkg/front_end/testcases/none/new_method_invocation_encodings.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/none/new_method_invocation_encodings.dart:7:8: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   int? getter => null;
+//        ^^^^^^
+//
+// pkg/front_end/testcases/none/new_method_invocation_encodings.dart:14:5: Error: The setter 'setter' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/none/new_method_invocation_encodings.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'setter'.
+//   c.setter = c.getter;
+//     ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? field = null;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method getter() → core::int?
+    return null;
+  method setter(core::int? value) → void {}
+  method method() → void {}
+}
+static method test(self::Class c, dynamic d, core::Function f1, () → void f2) → dynamic {
+  c.{self::Class::field} = c.{self::Class::field}{core::int?};
+  invalid-expression "pkg/front_end/testcases/none/new_method_invocation_encodings.dart:14:5: Error: The setter 'setter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/none/new_method_invocation_encodings.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'setter'.
+  c.setter = c.getter;
+    ^^^^^^" in c{<unresolved>}.setter = c.{self::Class::getter}{() → core::int?};
+  c.{self::Class::method}{() → void};
+  c.{self::Class::method}(){() → void};
+  d{dynamic}.field = d{dynamic}.field;
+  d{dynamic}.setter = d{dynamic}.getter;
+  d{dynamic}.method;
+  d{dynamic}.method();
+  f1();
+  f1.call;
+  f2(){() → void};
+  f2.call;
+  function local() → Null {}
+  local(){() → Null};
+  c =={core::Object::==}{(core::Object) → core::bool} d;
+  !(c =={core::Object::==}{(core::Object) → core::bool} d);
+  c == null;
+  !(c == null);
+  d == null;
+  !(d == null);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/none/operator.dart.weak.modular.expect b/pkg/front_end/testcases/none/operator.dart.weak.modular.expect
new file mode 100644
index 0000000..4de73e4
--- /dev/null
+++ b/pkg/front_end/testcases/none/operator.dart.weak.modular.expect
@@ -0,0 +1,164 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/none/operator.dart:48:10: Error: The operator '-' isn't defined for the class 'String'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
+//   string - 42;
+//          ^
+//
+// pkg/front_end/testcases/none/operator.dart:66:12: Error: Too few positional arguments: 1 required, 0 given.
+//   -c.method();
+//            ^
+//
+// pkg/front_end/testcases/none/operator.dart:69:3: Error: The operator 'unary-' isn't defined for the class 'String'.
+// Try correcting the operator to an existing operator, or defining a 'unary-' operator.
+//   -string;
+//   ^
+//
+// pkg/front_end/testcases/none/operator.dart:86:11: Error: Too few positional arguments: 1 required, 0 given.
+//   c.method()[0];
+//           ^
+//
+// pkg/front_end/testcases/none/operator.dart:109:3: Error: Undefined name 'string'.
+//   string[0] = 42;
+//   ^^^^^^
+//
+// pkg/front_end/testcases/none/operator.dart:106:11: Error: Too few positional arguments: 1 required, 0 given.
+//   c.method()[0] = 42;
+//           ^
+//
+// pkg/front_end/testcases/none/operator.dart:129:3: Error: Undefined name 'string'.
+//   string[0] += 42;
+//   ^^^^^^
+//
+// pkg/front_end/testcases/none/operator.dart:116:14: Error: Operator '+' cannot be called on 'double?' because it is potentially null.
+//   map['foo'] += 0.5;
+//              ^
+//
+// pkg/front_end/testcases/none/operator.dart:126:11: Error: Too few positional arguments: 1 required, 0 given.
+//   c.method()[0] += 42;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  operator +(covariant-by-class self::Class<self::Class::T%> other) → self::Class<self::Class::T%>
+    return other;
+  operator unary-() → self::Class<self::Class::T%>
+    return this;
+  operator [](core::int index) → self::Class<self::Class::T%>
+    return this;
+  operator []=(core::int index, covariant-by-class self::Class<self::Class::T%> value) → void {}
+  method method(core::double o) → core::int
+    return 42;
+}
+static method add(core::num n, core::int i, core::double d, self::Class<core::String> c, dynamic dyn, Never never, core::String string) → dynamic {
+  core::print("InstanceInvocation");
+  n.{core::num::+}(n){(core::num) → core::num};
+  n.{core::num::+}(i){(core::num) → core::num};
+  n.{core::num::+}(d){(core::num) → core::double};
+  n.{core::num::+}(dyn as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  core::print("InstanceInvocation");
+  i.{core::num::+}(n){(core::num) → core::num};
+  i.{core::num::+}(i){(core::num) → core::int};
+  i.{core::num::+}(d){(core::num) → core::double};
+  i.{core::num::+}(dyn as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  core::print("InstanceInvocation");
+  d.{core::double::+}(n){(core::num) → core::double};
+  d.{core::double::+}(i){(core::num) → core::double};
+  d.{core::double::+}(d){(core::num) → core::double};
+  i.{core::num::+}(dyn as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  core::print("InstanceInvocation");
+  c.{self::Class::+}(c){(self::Class<core::String>) → self::Class<core::String>};
+  c.{self::Class::+}(dyn as{TypeError,ForDynamic,ForNonNullableByDefault} self::Class<core::String>){(self::Class<core::String>) → self::Class<core::String>};
+  core::print("DynamicInvocation");
+  dyn{dynamic}.+(n);
+  core::print("DynamicInvocation (Never)");
+  let final Never #t1 = (let final Never #t2 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.+(n) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::print("DynamicInvocation (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:48:10: Error: The operator '-' isn't defined for the class 'String'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
+  string - 42;
+         ^" in string{<unresolved>}.-(42);
+}
+static method unaryMinus(core::num n, core::int i, core::double d, self::Class<core::String> c, dynamic dyn, Never never, core::String string) → dynamic {
+  core::print("InstanceInvocation");
+  n.{core::num::unary-}(){() → core::num};
+  i.{core::int::unary-}(){() → core::int};
+  d.{core::double::unary-}(){() → core::double};
+  c.{self::Class::unary-}(){() → self::Class<core::String>};
+  core::print("DynamicInvocation");
+  dyn{dynamic}.unary-();
+  core::print("DynamicInvocation (Never)");
+  let final Never #t3 = (let final Never #t4 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.unary-() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::print("DynamicInvocation (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:66:12: Error: Too few positional arguments: 1 required, 0 given.
+  -c.method();
+           ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.unary-();
+  core::print("DynamicInvocation (Unresolved)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:69:3: Error: The operator 'unary-' isn't defined for the class 'String'.
+Try correcting the operator to an existing operator, or defining a 'unary-' operator.
+  -string;
+  ^" in string{<unresolved>}.unary-();
+}
+static method indexGet(core::List<core::int> list, core::Map<core::String, core::double> map, self::Class<core::String> c, dynamic dyn, Never never, core::String string) → dynamic {
+  core::print("InstanceInvocation");
+  list.{core::List::[]}(0){(core::int) → core::int};
+  map.{core::Map::[]}("foo"){(core::Object?) → core::double?};
+  c.{self::Class::[]}(0){(core::int) → self::Class<core::String>};
+  core::print("DynamicInvocation");
+  dyn{dynamic}.[](0);
+  core::print("DynamicInvocation (Never)");
+  let final Never #t5 = (let final Never #t6 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[](0) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::print("DynamicInvocation (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:86:11: Error: Too few positional arguments: 1 required, 0 given.
+  c.method()[0];
+          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.[](0);
+  core::print("DynamicInvocation (Unresolved)");
+  string.{core::String::[]}(0){(core::int) → core::String};
+}
+static method indexSet(core::List<core::int> list, core::Map<core::String, core::double> map, self::Class<core::String> c, dynamic dyn, Never never) → dynamic {
+  core::print("InstanceInvocation");
+  list.{core::List::[]=}(0, 42){(core::int, core::int) → void};
+  map.{core::Map::[]=}("foo", 0.5){(core::String, core::double) → void};
+  c.{self::Class::[]=}(0, c){(core::int, self::Class<core::String>) → void};
+  core::print("DynamicInvocation");
+  dyn{dynamic}.[]=(0, 42);
+  core::print("DynamicInvocation (Never)");
+  (let final Never #t7 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.[]=(0, 42);
+  core::print("DynamicInvocation (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:106:11: Error: Too few positional arguments: 1 required, 0 given.
+  c.method()[0] = 42;
+          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.[]=(0, 42);
+  core::print("DynamicInvocation (Unresolved)");
+  invalid-expression "pkg/front_end/testcases/none/operator.dart:109:3: Error: Undefined name 'string'.
+  string[0] = 42;
+  ^^^^^^"{<invalid>}.[]=(0, 42);
+}
+static method compound(core::List<core::int> list, core::Map<core::String, core::double> map, self::Class<core::String> c, dynamic dyn, Never never) → dynamic {
+  core::print("InstanceInvocation");
+  let final core::List<core::int> #t8 = list in let final core::int #t9 = 0 in #t8.{core::List::[]=}(#t9, #t8.{core::List::[]}(#t9){(core::int) → core::int}.{core::num::+}(42){(core::num) → core::int}){(core::int, core::int) → void};
+  let final core::Map<core::String, core::double> #t10 = map in let final core::String #t11 = "foo" in #t10.{core::Map::[]=}(#t11, invalid-expression "pkg/front_end/testcases/none/operator.dart:116:14: Error: Operator '+' cannot be called on 'double?' because it is potentially null.
+  map['foo'] += 0.5;
+             ^" in #t10.{core::Map::[]}(#t11){(core::Object?) → core::double?}.{core::double::+}(0.5){(core::num) → core::double}){(core::String, core::double) → void};
+  let final self::Class<core::String> #t12 = c in let final core::int #t13 = 0 in #t12.{self::Class::[]=}(#t13, #t12.{self::Class::[]}(#t13){(core::int) → self::Class<core::String>}.{self::Class::+}(c){(self::Class<core::String>) → self::Class<core::String>}){(core::int, self::Class<core::String>) → void};
+  core::print("DynamicInvocation");
+  let final dynamic #t14 = dyn in let final core::int #t15 = 0 in #t14{dynamic}.[]=(#t15, #t14{dynamic}.[](#t15){dynamic}.+(42));
+  core::print("DynamicInvocation (Never)");
+  let final Never #t16 = let final Never #t17 = let final Never #t18 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in let final core::int #t19 = 0 in #t17{Never}.[]=(#t19, #t17{Never}.[](#t19){Never}.+(42)) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::print("DynamicInvocation (Invalid)");
+  let final invalid-type #t20 = invalid-expression "pkg/front_end/testcases/none/operator.dart:126:11: Error: Too few positional arguments: 1 required, 0 given.
+  c.method()[0] += 42;
+          ^" in c.{self::Class::method}{<inapplicable>}.(){() → invalid-type} in let final core::int #t21 = 0 in #t20{<invalid>}.[]=(#t21, #t20{<invalid>}.[](#t21){<invalid>}.+(42));
+  core::print("DynamicInvocation (Unresolved)");
+  let final invalid-type #t22 = invalid-expression "pkg/front_end/testcases/none/operator.dart:129:3: Error: Undefined name 'string'.
+  string[0] += 42;
+  ^^^^^^" in let final core::int #t23 = 0 in #t22{<invalid>}.[]=(#t23, #t22{<invalid>}.[](#t23){<invalid>}.+(42));
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/none/property_get.dart.weak.modular.expect b/pkg/front_end/testcases/none/property_get.dart.weak.modular.expect
new file mode 100644
index 0000000..20f72b6
--- /dev/null
+++ b/pkg/front_end/testcases/none/property_get.dart.weak.modular.expect
@@ -0,0 +1,150 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/none/property_get.dart:55:32: Error: Not a constant expression.
+//   const dynamic instance_get = nullableClass1.field;
+//                                ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/property_get.dart:63:36: Error: Not a constant expression.
+//   const dynamic instance_tearOff = nonNullableClass1.method;
+//                                    ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/property_get.dart:82:27: Error: Not a constant expression.
+//   const dynamic dyn_get = dyn.field;
+//                           ^^^
+//
+// pkg/front_end/testcases/none/property_get.dart:106:36: Error: Not a constant expression.
+//   const dynamic function_tearOff = nonNullableFunction.call;
+//                                    ^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/property_get.dart:67:18: Error: Can't tear off method 'call' from a potentially null value.
+//   Function? f2 = nullableClass2;
+//                  ^
+//
+// pkg/front_end/testcases/none/property_get.dart:110:27: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass1.method().field;
+//                           ^
+//
+// pkg/front_end/testcases/none/property_get.dart:113:21: Error: The getter 'unresolved' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/none/property_get.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+//   nonNullableClass1.unresolved;
+//                     ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class1 extends core::Object {
+  field core::int field;
+  static field core::int staticField = 42;
+  constructor •(core::int field) → self::Class1
+    : self::Class1::field = field, super core::Object::•()
+    ;
+  method method(core::double o) → core::int
+    return 0;
+  static method staticMethod(core::double o) → core::int
+    return 0;
+}
+class Class2<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::Class2::T% field;
+  constructor •(self::Class2::T% field) → self::Class2<self::Class2::T%>
+    : self::Class2::field = field, super core::Object::•()
+    ;
+  method call() → core::int
+    return 42;
+}
+static field core::int topLevelField = 42;
+static const field core::String string = #C1;
+static const field core::int stringLength = #C2;
+static const field dynamic dynamicString = #C1;
+static const field core::int dynamicStringLength = #C2;
+static method topLevelMethod(core::double o) → core::int
+  return 0;
+static method test<T1 extends core::Function, T2 extends () → core::int>(self::Class1 nonNullableClass1, self::Class1? nullableClass1, dynamic dyn, Never never, self::Class2<core::String> nonNullableClass2, self::Class2<core::String>? nullableClass2, core::Function nonNullableFunction, core::Function? nullableFunction, () → core::int nonNullableFunctionType, () →? core::int nullableFunctionType, self::test::T1 nonNullableTypeVariable1, self::test::T1? nullableTypeVariable1, self::test::T2 nonNullableTypeVariable2, self::test::T2? nullableTypeVariable2) → dynamic {
+  core::print("InstanceGet");
+  nonNullableClass1.{self::Class1::field}{core::int};
+  let final self::Class1? #t1 = nullableClass1 in #t1 == null ?{core::int?} null : #t1{self::Class1}.{self::Class1::field}{core::int};
+  nonNullableClass2.{self::Class2::field}{core::String};
+  let final self::Class2<core::String>? #t2 = nullableClass2 in #t2 == null ?{core::String?} null : #t2{self::Class2<core::String>}.{self::Class2::field}{core::String};
+  const dynamic instance_get = invalid-expression "pkg/front_end/testcases/none/property_get.dart:55:32: Error: Not a constant expression.
+  const dynamic instance_get = nullableClass1.field;
+                               ^^^^^^^^^^^^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/property_get.dart:55:32: Error: Not a constant expression.
+  const dynamic instance_get = nullableClass1.field;
+                               ^^^^^^^^^^^^^^");
+  core::print("InstanceTearOff");
+  nonNullableClass1.{self::Class1::method}{(core::double) → core::int};
+  let final self::Class1? #t3 = nullableClass1 in #t3 == null ?{(core::double) →? core::int} null : #t3{self::Class1}.{self::Class1::method}{(core::double) → core::int};
+  nonNullableClass2.{self::Class2::call}{() → core::int};
+  let final self::Class2<core::String>? #t4 = nullableClass2 in #t4 == null ?{() →? core::int} null : #t4{self::Class2<core::String>}.{self::Class2::call}{() → core::int};
+  const dynamic instance_tearOff = invalid-expression "pkg/front_end/testcases/none/property_get.dart:63:36: Error: Not a constant expression.
+  const dynamic instance_tearOff = nonNullableClass1.method;
+                                   ^^^^^^^^^^^^^^^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/property_get.dart:63:36: Error: Not a constant expression.
+  const dynamic instance_tearOff = nonNullableClass1.method;
+                                   ^^^^^^^^^^^^^^^^^");
+  core::Function f1 = let final self::Class2<core::String> #t5 = nonNullableClass2 in #t5 == null ?{() → core::int} null : #t5.{self::Class2::call}{() → core::int};
+  core::Function? f2 = invalid-expression "pkg/front_end/testcases/none/property_get.dart:67:18: Error: Can't tear off method 'call' from a potentially null value.
+  Function? f2 = nullableClass2;
+                 ^" in nullableClass2 as{TypeError} core::Function?;
+  core::print("StaticGet");
+  self::Class1::staticField;
+  self::topLevelField;
+  core::print("StaticTearOff");
+  #C3;
+  #C4;
+  core::print(#C4);
+  core::print("DynamicGet");
+  dyn{dynamic}.field;
+  let final dynamic #t6 = dyn in #t6 == null ?{dynamic} null : #t6{dynamic}.field;
+  const dynamic dyn_get = invalid-expression "pkg/front_end/testcases/none/property_get.dart:82:27: Error: Not a constant expression.
+  const dynamic dyn_get = dyn.field;
+                          ^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/property_get.dart:82:27: Error: Not a constant expression.
+  const dynamic dyn_get = dyn.field;
+                          ^^^");
+  core::print("InstanceGet (Object)");
+  dyn.{core::Object::hashCode}{core::int};
+  nullableClass1.{core::Object::hashCode}{core::int};
+  core::print("InstanceGetTearOff (Object)");
+  dyn.{core::Object::toString}{() → core::String};
+  nullableClass1.{core::Object::toString}{() → core::String};
+  core::print("DynamicGet (Never)");
+  let final Never #t7 = (let final Never #t8 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.field in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  let final Never #t9 = (let final Never #t10 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.hashCode in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+  core::print("FunctionTearOff");
+  nonNullableFunction.call;
+  let final core::Function? #t11 = nullableFunction in #t11 == null ?{core::Function?} null : #t11{core::Function}.call;
+  nonNullableFunctionType.call;
+  let final () →? core::int #t12 = nullableFunctionType in #t12 == null ?{() →? core::int} null : #t12{() → core::int}.call;
+  nonNullableTypeVariable1.call;
+  let final self::test::T1? #t13 = nullableTypeVariable1 in #t13 == null ?{self::test::T1?} null : #t13{self::test::T1}.call;
+  nonNullableTypeVariable2.call;
+  let final self::test::T2? #t14 = nullableTypeVariable2 in #t14 == null ?{self::test::T2?} null : #t14{self::test::T2}.call;
+  const dynamic function_tearOff = invalid-expression "pkg/front_end/testcases/none/property_get.dart:106:36: Error: Not a constant expression.
+  const dynamic function_tearOff = nonNullableFunction.call;
+                                   ^^^^^^^^^^^^^^^^^^^";
+  core::print(invalid-expression "pkg/front_end/testcases/none/property_get.dart:106:36: Error: Not a constant expression.
+  const dynamic function_tearOff = nonNullableFunction.call;
+                                   ^^^^^^^^^^^^^^^^^^^");
+  core::print("DynamicGet (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/property_get.dart:110:27: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass1.method().field;
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.field;
+  core::print("DynamicGet (Unresolved)");
+  invalid-expression "pkg/front_end/testcases/none/property_get.dart:113:21: Error: The getter 'unresolved' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/none/property_get.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+  nonNullableClass1.unresolved;
+                    ^^^^^^^^^^" in nonNullableClass1{<unresolved>}.unresolved;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "foo"
+  #C2 = 3
+  #C3 = static-tearoff self::Class1::staticMethod
+  #C4 = static-tearoff self::topLevelMethod
+}
diff --git a/pkg/front_end/testcases/none/property_set.dart.weak.modular.expect b/pkg/front_end/testcases/none/property_set.dart.weak.modular.expect
new file mode 100644
index 0000000..b7f6716
--- /dev/null
+++ b/pkg/front_end/testcases/none/property_set.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/none/property_set.dart:18:34: Error: Not a constant expression.
+//   const int set_instance_field = nonNullableClass1.field = 42;
+//                                  ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/none/property_set.dart:18:58: Error: Not a constant expression.
+//   const int set_instance_field = nonNullableClass1.field = 42;
+//                                                          ^
+//
+// pkg/front_end/testcases/none/property_set.dart:23:33: Error: Not a constant expression.
+//   const int set_dynamic_field = dyn.field = 42;
+//                                 ^^^
+//
+// pkg/front_end/testcases/none/property_set.dart:23:43: Error: Not a constant expression.
+//   const int set_dynamic_field = dyn.field = 42;
+//                                           ^
+//
+// pkg/front_end/testcases/none/property_set.dart:29:27: Error: Too few positional arguments: 1 required, 0 given.
+//   nonNullableClass1.method().field = 42;
+//                           ^
+//
+// pkg/front_end/testcases/none/property_set.dart:32:21: Error: The setter 'unresolved' isn't defined for the class 'Class1'.
+//  - 'Class1' is from 'pkg/front_end/testcases/none/property_set.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
+//   nonNullableClass1.unresolved = 42;
+//                     ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class1 extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::Class1
+    : self::Class1::field = field, super core::Object::•()
+    ;
+  method method(dynamic o) → dynamic {}
+}
+static method test(self::Class1 nonNullableClass1, self::Class1? nullableClass1, dynamic dyn, Never never) → dynamic {
+  core::print("InstanceSet");
+  nonNullableClass1.{self::Class1::field} = 42;
+  let final self::Class1? #t1 = nullableClass1 in #t1 == null ?{core::int?} null : #t1{self::Class1}.{self::Class1::field} = 42;
+  const core::int set_instance_field = invalid-expression "pkg/front_end/testcases/none/property_set.dart:18:58: Error: Not a constant expression.
+  const int set_instance_field = nonNullableClass1.field = 42;
+                                                         ^";
+  core::print("DynamicSet");
+  dyn{dynamic}.field = 42;
+  let final dynamic #t2 = dyn in #t2 == null ?{core::int?} null : #t2{dynamic}.field = 42;
+  const core::int set_dynamic_field = invalid-expression "pkg/front_end/testcases/none/property_set.dart:23:43: Error: Not a constant expression.
+  const int set_dynamic_field = dyn.field = 42;
+                                          ^";
+  core::print("DynamicSet (Never)");
+  (let final Never #t3 = never in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.")){Never}.field = 42;
+  core::print("DynamicSet (Invalid)");
+  invalid-expression "pkg/front_end/testcases/none/property_set.dart:29:27: Error: Too few positional arguments: 1 required, 0 given.
+  nonNullableClass1.method().field = 42;
+                          ^" in nonNullableClass1.{self::Class1::method}{<inapplicable>}.(){() → invalid-type}{<invalid>}.field = 42;
+  core::print("DynamicSet (Unresolved)");
+  invalid-expression "pkg/front_end/testcases/none/property_set.dart:32:21: Error: The setter 'unresolved' isn't defined for the class 'Class1'.
+ - 'Class1' is from 'pkg/front_end/testcases/none/property_set.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
+  nonNullableClass1.unresolved = 42;
+                    ^^^^^^^^^^" in nonNullableClass1{<unresolved>}.unresolved = 42;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/none/tearoff_opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/none/tearoff_opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..3be713b
--- /dev/null
+++ b/pkg/front_end/testcases/none/tearoff_opt_out.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  method call() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test(self::Class* c) → dynamic {
+  core::Function* f = let final self::Class* #t1 = c in #t1 == null ?{() →* void} null : #t1.{self::Class::call}{() →* void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.weak.modular.expect
new file mode 100644
index 0000000..ebbaed4
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart.weak.modular.expect
@@ -0,0 +1,218 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:20:17: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// bar3a<X extends B<A<int>>>() => throw 42;
+//                 ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:21:19: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// bar3b<X extends A<B<A<int>>>>() => throw 42;
+//                   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:23:22: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class Bar1<X extends B<A<int>>> {
+//                      ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:26:22: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   barBar13<X extends B<A<int>>>() => throw 42;
+//                      ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:29:24: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// class Bar2<X extends A<B<A<int>>>> {
+//                        ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:32:24: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   barBar23<X extends A<B<A<int>>>>() => throw 42;
+//                        ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:14:1: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// B<A<int>> bar1a() => throw 42;
+// ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:15:3: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// A<B<A<int>>> bar1b() => throw 42;
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:17:7: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// bar2a(B<A<int>> x) => throw 42;
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:18:9: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// bar2b(A<B<A<int>>> x) => throw 42;
+//         ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:24:3: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   B<A<int>> barBar11() => throw 42;
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:25:12: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   barBar12(B<A<int>> x) => throw 42;
+//            ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:30:5: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<B<A<int>>> barBar21() => throw 42;
+//     ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:31:14: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   barBar22(A<B<A<int>>> x) => throw 42;
+//              ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:35:16: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef Baz1 = B<A<int>>;
+//                ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:36:18: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef Baz2 = A<B<A<int>>>;
+//                  ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:10:3: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   B<A<int>> x1;
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:11:5: Error: Type argument 'A<int>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<B<A<int>>> x2;
+//     ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef B<X extends self::A<X> = self::A<dynamic>> = self::A<X>;
+typedef Baz1 = self::A<self::A<core::int>>;
+typedef Baz2 = self::A<self::A<self::A<core::int>>>;
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+}
+class Bar1<X extends self::A<self::A<core::int>>> extends core::Object {
+  synthetic constructor •() → self::Bar1<self::Bar1::X>
+    : super core::Object::•()
+    ;
+  method barBar11() → self::A<self::A<core::int>>
+    return throw 42;
+  method barBar12(self::A<self::A<core::int>> x) → dynamic
+    return throw 42;
+  method barBar13<X extends self::A<self::A<core::int>>>() → dynamic
+    return throw 42;
+}
+class Bar2<X extends self::A<self::A<self::A<core::int>>>> extends core::Object {
+  synthetic constructor •() → self::Bar2<self::Bar2::X>
+    : super core::Object::•()
+    ;
+  method barBar21() → self::A<self::A<self::A<core::int>>>
+    return throw 42;
+  method barBar22(self::A<self::A<self::A<core::int>>> x) → dynamic
+    return throw 42;
+  method barBar23<X extends self::A<self::A<self::A<core::int>>>>() → dynamic
+    return throw 42;
+}
+static method foo() → dynamic {
+  self::A<self::A<core::int>> x1;
+  self::A<self::A<self::A<core::int>>> x2;
+}
+static method bar1a() → self::A<self::A<core::int>>
+  return throw 42;
+static method bar1b() → self::A<self::A<self::A<core::int>>>
+  return throw 42;
+static method bar2a(self::A<self::A<core::int>> x) → dynamic
+  return throw 42;
+static method bar2b(self::A<self::A<self::A<core::int>>> x) → dynamic
+  return throw 42;
+static method bar3a<X extends self::A<self::A<core::int>>>() → dynamic
+  return throw 42;
+static method bar3b<X extends self::A<self::A<self::A<core::int>>>>() → dynamic
+  return throw 42;
+static method main() → dynamic {}
+static method _#B#new#tearOff<X extends self::A<self::_#B#new#tearOff::X> = self::A<dynamic>>() → self::A<self::_#B#new#tearOff::X>
+  return new self::A::•<self::_#B#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.modular.expect
new file mode 100644
index 0000000..94e4635
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.modular.expect
@@ -0,0 +1,56 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart:10:28: Error: Type argument 'String' doesn't conform to the bound 'int' of the type variable 'X' on 'C'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef B<X extends int> = C<String>;
+//                            ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart:11:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef C<X extends int> = X;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart:9:28: Error: Type argument 'String' doesn't conform to the bound 'int' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+// typedef A<X extends int> = B<String>;
+//                            ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart:10:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends int> = C<String>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart:6:3: Error: Type argument 'String' doesn't conform to the bound 'int' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   A<String> a;
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart:9:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef A<X extends int> = B<String>;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef A<unrelated X extends core::int> = core::String;
+typedef B<unrelated X extends core::int> = core::String;
+typedef C<X extends core::int> = X;
+static method foo() → dynamic {
+  core::String a;
+}
+static method main() → dynamic {}
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+  return core::String::fromCharCodes(charCodes, start, end);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+  return core::String::fromCharCode(charCode);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+  return core::String::fromEnvironment(name, defaultValue: defaultValue);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+  return core::String::fromCharCodes(charCodes, start, end);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+  return core::String::fromCharCode(charCode);
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+  return core::String::fromEnvironment(name, defaultValue: defaultValue);
+
+constants  {
+  #C1 = 0
+  #C2 = null
+  #C3 = ""
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.weak.modular.expect
new file mode 100644
index 0000000..cf0d7b6
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_main.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "org-dartlang-testcase:///aliased_checks_no_bodies_lib.dart";
+
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_lib.dart:9:19: Error: Type argument 'int' doesn't conform to the bound 'String' of the type variable 'X' on 'B'.
+// Try changing type arguments so that they conform to the bounds.
+// class C<Y extends B<int>> {}
+//                   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_no_bodies_lib.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends String> = A;
+//           ^
+//
+import self as self2;
+import "dart:core" as core;
+
+typedef B<unrelated X extends core::String> = self2::A;
+class A extends core::Object {
+  synthetic constructor •() → self2::A
+    : super core::Object::•()
+    ;
+}
+class C<Y extends self2::A> extends core::Object {
+  synthetic constructor •() → self2::C<self2::C::Y>
+    : super core::Object::•()
+    ;
+}
+static method _#B#new#tearOff<unrelated X extends core::String>() → self2::A
+  return new self2::A::•();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.modular.expect
new file mode 100644
index 0000000..1527b5e
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:13:42: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A Function()>' because 'FutureOr<A Function()>' is not nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
+//   FutureOr<AAlias> foLegacyNonNullable = null; // error
+//                                          ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:15:47: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
+//   FutureOr<AAliasNonNullable> foNonNullable = null; // error
+//                                               ^
+//
+import self as self;
+import "issue41501_lib.dart" as opt;
+
+import "dart:async";
+import "org-dartlang-testcase:///issue41501_lib.dart";
+
+typedef AAliasNonNullable = opt::A;
+typedef AAliasNullable = opt::A?;
+static method test() → dynamic {
+  FutureOr<() → opt::A*>foLegacyNonNullable = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:13:42: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A Function()>' because 'FutureOr<A Function()>' is not nullable.
+ - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
+  FutureOr<AAlias> foLegacyNonNullable = null; // error
+                                         ^" in null as{TypeError,ForNonNullableByDefault} FutureOr<() → opt::A*>;
+  FutureOr<() →? opt::A*>foLegacyNullable = null;
+  FutureOr<opt::A>foNonNullable = invalid-expression "pkg/front_end/testcases/nonfunction_type_aliases/issue41501.dart:15:47: Error: The value 'null' can't be assigned to a variable of type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+ - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue41501_lib.dart'.
+  FutureOr<AAliasNonNullable> foNonNullable = null; // error
+                                              ^" in null as{TypeError,ForNonNullableByDefault} FutureOr<opt::A>;
+  FutureOr<opt::A?>foNullable = null;
+  FutureOr<opt::A?>foNonNullableNullable = null;
+  FutureOr<opt::A?>foNullableNullable = null;
+}
+static method main() → dynamic {}
+
+library opted_out_lib;
+import self as opt;
+import "dart:core" as core;
+
+import "dart:async";
+import "org-dartlang-testcase:///issue41501.dart";
+
+typedef AAlias = () →* opt::A*;
+class A extends core::Object {
+  synthetic constructor •() → opt::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  FutureOr<() →* opt::A*>* foLegacy = null;
+  FutureOr<opt::A*>* foNonNullable = null;
+  FutureOr<opt::A*>* foNullable = null;
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart.weak.modular.expect
new file mode 100644
index 0000000..99ac769
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart.weak.modular.expect
@@ -0,0 +1,75 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart:15:3: Error: Inferred type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   A(); // Error.
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart:17:3: Error: Inferred type argument 'A2<Object?>' doesn't conform to the bound 'A2<X>' of the type variable 'X' on 'A2'.
+//  - 'A2' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   A2(); // Error.
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart:8:10: Context: This is the type variable whose bound isn't conformed to.
+// class A2<X extends A2<X>> {
+//          ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart:14:3: Error: Inferred type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   B(); // Error.
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart:6:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart:16:3: Error: Inferred type argument 'A2<Object?>' doesn't conform to the bound 'A2<X>' of the type variable 'X' on 'B2'.
+//  - 'A2' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   B2(); // Error.
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart:11:12: Context: This is the type variable whose bound isn't conformed to.
+// typedef B2<X extends A2<X>> = A2<X>;
+//            ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart:16:3: Error: Inferred type argument 'A2<Object?>' doesn't conform to the bound 'A2<X>' of the type variable 'X' on 'A2'.
+//  - 'A2' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   B2(); // Error.
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue42446.dart:8:10: Context: This is the type variable whose bound isn't conformed to.
+// class A2<X extends A2<X>> {
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef B<X extends self::A<X> = self::A<dynamic>> = self::A<X>;
+typedef B2<X extends self::A2<X> = self::A2<dynamic>> = self::A2<X>;
+class A<X extends self::A<self::A::X> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+}
+class A2<X extends self::A2<self::A2::X> = self::A2<dynamic>> extends core::Object {
+  static factory •<X extends self::A2<self::A2::•::X> = self::A2<dynamic>>() → self::A2<self::A2::•::X>
+    return throw 42;
+}
+static method foo() → dynamic {
+  new self::A::•<self::A<core::Object?>>();
+  new self::A::•<self::A<core::Object?>>();
+  self::A2::•<self::A2<core::Object?>>();
+  self::A2::•<self::A2<core::Object?>>();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.modular.expect
new file mode 100644
index 0000000..ae8fcc4
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45051.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef BAlias = self::B;
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2]/*isLegacy*/;
+  static factory •() → self::A
+    return new self::B::•();
+  static factory named() → self::A
+    return new self::B::named();
+}
+class B extends core::Object implements self::A {
+  constructor •() → self::B
+    : super core::Object::•()
+    ;
+  constructor named() → self::B
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = constructor-tearoff self::A::•
+  #C2 = constructor-tearoff self::A::named
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.weak.modular.expect
new file mode 100644
index 0000000..61ac447
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart.weak.modular.expect
@@ -0,0 +1,160 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart:32:9: Error: Inferred type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     new A();
+//         ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart:13:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>> {}
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart:34:7: Error: Inferred type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'call'.
+//  - 'Object' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     f1(() => captureTypeArgument());
+//       ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart:35:7: Error: Inferred type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'call'.
+//  - 'Object' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     f2(() => captureTypeArgument());
+//       ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart:36:11: Error: Inferred type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'local1'.
+//  - 'Object' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     local1(() => captureTypeArgument());
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart:37:11: Error: Inferred type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'local2'.
+//  - 'Object' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     local2(() => captureTypeArgument());
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart:38:5: Error: Inferred type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'topLevel1'.
+//  - 'Object' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     topLevel1(() => captureTypeArgument());
+//     ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart:16:16: Context: This is the type variable whose bound isn't conformed to.
+// void topLevel1<X extends A<X>>(A<X> Function() g) => g();
+//                ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart:39:5: Error: Inferred type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'topLevel2'.
+//  - 'Object' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     topLevel2(() => captureTypeArgument());
+//     ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart:18:16: Context: This is the type variable whose bound isn't conformed to.
+// void topLevel2<X extends C<X>>(C<X> Function() g) => g();
+//                ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart:40:5: Error: Inferred type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'Class.instance1'.
+//  - 'Object' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart'.
+//  - 'Class' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     instance1(() => captureTypeArgument());
+//     ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart:41:5: Error: Inferred type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'Class.instance2'.
+//  - 'Object' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart'.
+//  - 'Class' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     instance2(() => captureTypeArgument());
+//     ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart:33:9: Error: Inferred type argument 'A<Object?>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'C'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     new C();
+//         ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart:14:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef C<X extends A<X>> = A<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart:47:11: Error: Inferred type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'Subclass.instance1'.
+//  - 'Object' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart'.
+//  - 'Subclass' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     super.instance1(() => captureTypeArgument());
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart:48:11: Error: Inferred type argument 'Object?' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'Subclass.instance2'.
+//  - 'Object' is from 'dart:core'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart'.
+//  - 'Subclass' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45464.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//     super.instance2(() => captureTypeArgument());
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef C<X extends self::A<X> = self::A<dynamic>> = self::A<X>;
+class A<X extends self::A<self::A::X> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+}
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method instance1<X extends self::A<self::Class::instance1::X> = self::A<dynamic>>(() → self::A<self::Class::instance1::X> g) → void
+    return g(){() → self::A<self::Class::instance1::X>};
+  method instance2<X extends self::A<self::Class::instance2::X> = self::A<dynamic>>(() → self::A<self::Class::instance2::X> g) → void
+    return g(){() → self::A<self::Class::instance2::X>};
+  method test() → void {
+    function local1<X extends self::A<X> = self::A<dynamic>>(() → self::A<X> g) → void
+      return g(){() → self::A<X>};
+    function local2<X extends self::A<X> = self::A<dynamic>>(() → self::A<X> g) → void
+      return g(){() → self::A<X>};
+    <X extends self::A<X> = self::A<dynamic>>(() → self::A<X>) → void f1 = local1;
+    <X extends self::A<X> = self::A<dynamic>>(() → self::A<X>) → void f2 = local2;
+    new self::A::•<self::A<core::Object?>>();
+    new self::A::•<self::A<core::Object?>>();
+    f1<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    f2<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    local1<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    local2<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    self::topLevel1<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
+    self::topLevel2<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
+    this.{self::Class::instance1}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+    this.{self::Class::instance2}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>()){(() → self::A<core::Object?>) → void};
+  }
+}
+class Subclass extends self::Class {
+  synthetic constructor •() → self::Subclass
+    : super self::Class::•()
+    ;
+  method test() → void {
+    super.{self::Class::instance1}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
+    super.{self::Class::instance2}<core::Object?>(() → self::A<core::Object?> => self::captureTypeArgument<self::A<core::Object?>>());
+  }
+}
+static field core::Type? _capturedTypeArgument;
+static method captureTypeArgument<X extends core::Object? = dynamic>() → self::captureTypeArgument::X% {
+  self::_capturedTypeArgument = self::captureTypeArgument::X%;
+  core::print("X: ${self::captureTypeArgument::X%}");
+  throw "Error";
+}
+static method topLevel1<X extends self::A<self::topLevel1::X> = self::A<dynamic>>(() → self::A<self::topLevel1::X> g) → void
+  return g(){() → self::A<self::topLevel1::X>};
+static method topLevel2<X extends self::A<self::topLevel2::X> = self::A<dynamic>>(() → self::A<self::topLevel2::X> g) → void
+  return g(){() → self::A<self::topLevel2::X>};
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.weak.modular.expect
new file mode 100644
index 0000000..ada86f5
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart:7:21: Error: Inferred type argument 'A<dynamic>' doesn't conform to the bound 'A<X>' of the type variable 'X' on 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// typedef AAlias<X> = A;
+//                     ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45491.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
+// class A<X extends A<X>> {}
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef AAlias<unrelated X extends core::Object? = dynamic> = self::A<self::A<dynamic>>;
+class A<X extends self::A<self::A::X> = self::A<dynamic>> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X>
+    : super core::Object::•()
+    ;
+}
+static method main() → void {}
+static method _#AAlias#new#tearOff<unrelated X extends core::Object? = dynamic>() → self::A<self::A<dynamic>>
+  return new self::A::•<self::A<dynamic>>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.modular.expect
new file mode 100644
index 0000000..0d5fcd0
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:10:3: Error: Inferred type argument 'C<dynamic> Function(C<dynamic>)' doesn't conform to the bound 'C<X> Function(C<X>)' of the type variable 'X' on 'A'.
+//  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   A a = throw 42; // Error.
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:7:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef A<X extends G<C<X>>> = C<X>;
+//           ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart:10:3: Context: If you want 'A<C<dynamic> Function(C<dynamic>)>' to be a super-bounded type, note that the inverted type 'A<G<C<Never>>>' must then satisfy its bounds, which it does not.
+//  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519.dart'.
+//   A a = throw 42; // Error.
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef G<invariant X extends core::Object? = dynamic> = (X%) → X%;
+typedef A<X extends (self::C<X>) → self::C<X> = (self::C<dynamic>) → self::C<dynamic>> = self::C<X>;
+class C<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%>
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  self::C<(self::C<dynamic>) → self::C<dynamic>> a = throw 42;
+}
+static method main() → dynamic {}
+static method _#A#new#tearOff<X extends (self::C<self::_#A#new#tearOff::X>) → self::C<self::_#A#new#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.modular.expect
new file mode 100644
index 0000000..14a187b
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart.weak.modular.expect
@@ -0,0 +1,115 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart:21:5: Error: Inferred type argument 'C<Object?> Function(C<Never>)' doesn't conform to the bound 'C<X> Function(C<X>)' of the type variable 'X' on 'A'.
+//  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   A.foo(); // Error.
+//     ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart:16:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef A<X extends G<C<X>>> = C<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart:23:3: Error: Inferred type argument 'D<Object?> Function(D<Never>)' doesn't conform to the bound 'D<X> Function(D<X>)' of the type variable 'X' on 'B'.
+//  - 'D' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   B(); // Error.
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart:17:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends G<D<X>>> = D<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart:20:3: Error: Inferred type argument 'C<Object?> Function(C<Never>)' doesn't conform to the bound 'C<X> Function(C<X>)' of the type variable 'X' on 'A'.
+//  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   A(); // Error.
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart:16:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef A<X extends G<C<X>>> = C<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart:22:5: Error: Inferred type argument 'C<Object?> Function(C<Never>)' doesn't conform to the bound 'C<X> Function(C<X>)' of the type variable 'X' on 'A'.
+//  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   A.bar(); // Error.
+//     ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart:16:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef A<X extends G<C<X>>> = C<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart:24:5: Error: Inferred type argument 'D<Object?> Function(D<Never>)' doesn't conform to the bound 'D<X> Function(D<X>)' of the type variable 'X' on 'B'.
+//  - 'D' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   B.foo(); // Error.
+//     ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart:17:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends G<D<X>>> = D<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart:25:5: Error: Inferred type argument 'D<Object?> Function(D<Never>)' doesn't conform to the bound 'D<X> Function(D<X>)' of the type variable 'X' on 'B'.
+//  - 'D' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   B.bar(); // Error.
+//     ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45519_2.dart:17:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef B<X extends G<D<X>>> = D<X>;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef G<invariant X extends core::Object? = dynamic> = (X%) → X%;
+typedef A<X extends (self::C<X>) → self::C<X> = (self::C<dynamic>) → self::C<dynamic>> = self::C<X>;
+typedef B<X extends (self::D<X>) → self::D<X> = (self::D<dynamic>) → self::D<dynamic>> = self::D<X>;
+class C<X extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
+  constructor foo() → self::C<self::C::X%>
+    : super core::Object::•() {}
+  static factory •<X extends core::Object? = dynamic>() → self::C<self::C::•::X%>
+    return new self::C::foo<self::C::•::X%>();
+  static factory bar<X extends core::Object? = dynamic>() → self::C<self::C::bar::X%>
+    return self::C::•<self::C::bar::X%>();
+}
+class D<X extends core::Object? = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
+  constructor •() → self::D<self::D::X%>
+    : super core::Object::•()
+    ;
+  static factory foo<X extends core::Object? = dynamic>() → self::D<self::D::foo::X%>
+    return new self::D::•<self::D::foo::X%>();
+  static factory bar<X extends core::Object? = dynamic>() → self::D<self::D::bar::X%>
+    return new self::D::•<self::D::bar::X%>();
+}
+static method test() → dynamic {
+  self::C::•<(self::C<Never>) → self::C<core::Object?>>();
+  new self::C::foo<(self::C<Never>) → self::C<core::Object?>>();
+  self::C::•<(self::C<Never>) → self::C<core::Object?>>();
+  new self::D::•<(self::D<Never>) → self::D<core::Object?>>();
+  self::D::foo<(self::D<Never>) → self::D<core::Object?>>();
+  new self::D::•<(self::D<Never>) → self::D<core::Object?>>();
+}
+static method main() → dynamic {}
+static method _#A#new#tearOff<X extends (self::C<self::_#A#new#tearOff::X>) → self::C<self::_#A#new#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return self::C::•<self::_#A#new#tearOff::X>();
+static method _#A#foo#tearOff<X extends (self::C<self::_#A#foo#tearOff::X>) → self::C<self::_#A#foo#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#foo#tearOff::X>
+  return new self::C::foo<self::_#A#foo#tearOff::X>();
+static method _#A#bar#tearOff<X extends (self::C<self::_#A#bar#tearOff::X>) → self::C<self::_#A#bar#tearOff::X> = (self::C<dynamic>) → self::C<dynamic>>() → self::C<self::_#A#bar#tearOff::X>
+  return self::C::bar<self::_#A#bar#tearOff::X>();
+static method _#B#new#tearOff<X extends (self::D<self::_#B#new#tearOff::X>) → self::D<self::_#B#new#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#new#tearOff::X>
+  return new self::D::•<self::_#B#new#tearOff::X>();
+static method _#B#foo#tearOff<X extends (self::D<self::_#B#foo#tearOff::X>) → self::D<self::_#B#foo#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#foo#tearOff::X>
+  return self::D::foo<self::_#B#foo#tearOff::X>();
+static method _#B#bar#tearOff<X extends (self::D<self::_#B#bar#tearOff::X>) → self::D<self::_#B#bar#tearOff::X> = (self::D<dynamic>) → self::D<dynamic>>() → self::D<self::_#B#bar#tearOff::X>
+  return self::D::bar<self::_#B#bar#tearOff::X>();
+
+constants  {
+  #C1 = constructor-tearoff self::C::bar
+  #C2 = constructor-tearoff self::D::bar
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45626.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45626.dart.weak.modular.expect
new file mode 100644
index 0000000..84c660a
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45626.dart.weak.modular.expect
@@ -0,0 +1,126 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45626.dart:10:23: Error: 'C' can only be implemented once.
+// Try removing 1 of the occurrences.
+// class D implements C, C {}
+//                       ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45626.dart:11:24: Error: 'C' can only be implemented once.
+// Try removing 1 of the occurrences.
+// class D2 implements C, CAlias {}
+//                        ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45626.dart:12:29: Error: 'C' can only be implemented once.
+// Try removing 1 of the occurrences.
+// class D3 implements CAlias, C {}
+//                             ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45626.dart:13:24: Error: 'C' can only be implemented once.
+// Try removing 1 of the occurrences.
+// class D4 implements C, self.C {}
+//                        ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45626.dart:14:29: Error: 'C' can only be implemented once.
+// Try removing 1 of the occurrences.
+// class D5 implements self.C, C {}
+//                             ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45626.dart:16:16: Error: 'C' can only be implemented once.
+// Try removing 1 of the occurrences.
+// mixin CM on C, C {}
+//                ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45626.dart:17:17: Error: 'C' can only be implemented once.
+// Try removing 1 of the occurrences.
+// mixin CM2 on C, CAlias {}
+//                 ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45626.dart:18:22: Error: 'C' can only be implemented once.
+// Try removing 1 of the occurrences.
+// mixin CM3 on CAlias, C {}
+//                      ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45626.dart:19:22: Error: 'C' can only be implemented once.
+// Try removing 1 of the occurrences.
+// mixin CM4 on self.C, C {}
+//                      ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45626.dart:20:17: Error: 'C' can only be implemented once.
+// Try removing 1 of the occurrences.
+// mixin CM5 on C, self.C {}
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue45626.dart" as self;
+
+typedef CAlias = self::C;
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+class D extends core::Object implements self::C, self::C {
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+}
+class D2 extends core::Object implements self::C, self::C {
+  synthetic constructor •() → self::D2
+    : super core::Object::•()
+    ;
+}
+class D3 extends core::Object implements self::C, self::C {
+  synthetic constructor •() → self::D3
+    : super core::Object::•()
+    ;
+}
+class D4 extends core::Object implements self::C, self::C {
+  synthetic constructor •() → self::D4
+    : super core::Object::•()
+    ;
+}
+class D5 extends core::Object implements self::C, self::C {
+  synthetic constructor •() → self::D5
+    : super core::Object::•()
+    ;
+}
+abstract class _CM&C&C extends core::Object implements self::C, self::C /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_CM&C&C
+    : super core::Object::•()
+    ;
+}
+abstract class CM extends self::_CM&C&C /*isMixinDeclaration*/  {
+}
+abstract class _CM2&C&CAlias extends core::Object implements self::C, self::C /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_CM2&C&CAlias
+    : super core::Object::•()
+    ;
+}
+abstract class CM2 extends self::_CM2&C&CAlias /*isMixinDeclaration*/  {
+}
+abstract class _CM3&CAlias&C extends core::Object implements self::C, self::C /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_CM3&CAlias&C
+    : super core::Object::•()
+    ;
+}
+abstract class CM3 extends self::_CM3&CAlias&C /*isMixinDeclaration*/  {
+}
+abstract class _CM4&C&C extends core::Object implements self::C, self::C /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_CM4&C&C
+    : super core::Object::•()
+    ;
+}
+abstract class CM4 extends self::_CM4&C&C /*isMixinDeclaration*/  {
+}
+abstract class _CM5&C&C extends core::Object implements self::C, self::C /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_CM5&C&C
+    : super core::Object::•()
+    ;
+}
+abstract class CM5 extends self::_CM5&C&C /*isMixinDeclaration*/  {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.weak.modular.expect
new file mode 100644
index 0000000..0ed8715
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart:13:3: Error: Inferred type argument 'C<Object?>' doesn't conform to the bound 'C<X>' of the type variable 'X' on 'A'.
+//  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   A();
+//   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart:10:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef A<X extends C<X>> = C<X>;
+//           ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart:14:5: Error: Inferred type argument 'C<Object?>' doesn't conform to the bound 'C<X>' of the type variable 'X' on 'A'.
+//  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart'.
+//  - 'Object' is from 'dart:core'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+//   A.foo();
+//     ^
+// pkg/front_end/testcases/nonfunction_type_aliases/issue45658.dart:10:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef A<X extends C<X>> = C<X>;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef A<X extends self::C<X> = self::C<dynamic>> = self::C<X>;
+class C<X extends core::Object? = dynamic> extends core::Object {
+  constructor •() → self::C<self::C::X%>
+    : super core::Object::•()
+    ;
+  static factory foo<X extends core::Object? = dynamic>() → self::C<self::C::foo::X%>
+    return new self::C::•<self::C::foo::X%>();
+}
+static method foo() → dynamic {
+  new self::C::•<self::C<core::Object?>>();
+  self::C::foo<self::C<core::Object?>>();
+}
+static method main() → dynamic {}
+static method _#A#new#tearOff<X extends self::C<self::_#A#new#tearOff::X> = self::C<dynamic>>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
+static method _#A#foo#tearOff<X extends self::C<self::_#A#foo#tearOff::X> = self::C<dynamic>>() → self::C<self::_#A#foo#tearOff::X>
+  return self::C::foo<self::_#A#foo#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/issue_43084/issue_43084.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/issue_43084/issue_43084.dart.weak.modular.expect
new file mode 100644
index 0000000..da53398
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/issue_43084/issue_43084.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "issue_43084_lib.dart" as iss;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue_43084_lib.dart";
+
+static method main() → dynamic {
+  iss::Foo<core::int*>* x = new iss::Foo::•<core::int*>();
+  core::print(x);
+}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.modular.expect
new file mode 100644
index 0000000..6095355
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.modular.expect
@@ -0,0 +1,383 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:32:18: Error: Can't use a typedef denoting a type variable as a constructor, nor for a static member access.
+// class D1 extends TAlias<A> {}
+//                  ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:16: Context: This is the type variable ultimately denoted.
+// typedef TAlias<T> = T?;
+//                ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:34:19: Error: Can't use a typedef denoting a type variable as a constructor, nor for a static member access.
+// class D1a extends prefix.TAlias<A> {}
+//                   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:16: Context: This is the type variable ultimately denoted.
+// typedef TAlias<T> = T?;
+//                ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:36:19: Error: Can't use a typedef denoting a type variable as a constructor, nor for a static member access.
+// class D1b extends TAlias<prefix.A> {}
+//                   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:16: Context: This is the type variable ultimately denoted.
+// typedef TAlias<T> = T?;
+//                ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:38:21: Error: Can't use a typedef denoting a type variable as a constructor, nor for a static member access.
+// class D2 implements TAlias<A> {}
+//                     ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:16: Context: This is the type variable ultimately denoted.
+// typedef TAlias<T> = T?;
+//                ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:40:19: Error: Can't use a typedef denoting a type variable as a constructor, nor for a static member access.
+// class D3 = A with TAlias<B>;
+//                   ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:16: Context: This is the type variable ultimately denoted.
+// typedef TAlias<T> = T?;
+//                ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:42:32: Error: Can't use a typedef denoting a type variable as a constructor, nor for a static member access.
+// class D4 = A with B implements TAlias<C>;
+//                                ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:16: Context: This is the type variable ultimately denoted.
+// typedef TAlias<T> = T?;
+//                ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:44:25: Error: Can't use a typedef denoting a type variable as a constructor, nor for a static member access.
+// class D5 extends A with TAlias<B> {}
+//                         ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:16: Context: This is the type variable ultimately denoted.
+// typedef TAlias<T> = T?;
+//                ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:46:13: Error: Can't use a typedef denoting a type variable as a constructor, nor for a static member access.
+// mixin N1 on TAlias<A> {}
+//             ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:16: Context: This is the type variable ultimately denoted.
+// typedef TAlias<T> = T?;
+//                ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:48:14: Error: Can't use a typedef denoting a type variable as a constructor, nor for a static member access.
+// mixin N1a on prefix.TAlias<A> {}
+//              ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:16: Context: This is the type variable ultimately denoted.
+// typedef TAlias<T> = T?;
+//                ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:50:14: Error: Can't use a typedef denoting a type variable as a constructor, nor for a static member access.
+// mixin N1b on TAlias<prefix.A> {}
+//              ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:16: Context: This is the type variable ultimately denoted.
+// typedef TAlias<T> = T?;
+//                ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:52:16: Error: Can't use a typedef denoting a type variable as a constructor, nor for a static member access.
+// mixin N2 on A, TAlias<B> {}
+//                ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:16: Context: This is the type variable ultimately denoted.
+// typedef TAlias<T> = T?;
+//                ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:54:26: Error: Can't use a typedef denoting a type variable as a constructor, nor for a static member access.
+// mixin N3 on A implements TAlias<B> {}
+//                          ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:16: Context: This is the type variable ultimately denoted.
+// typedef TAlias<T> = T?;
+//                ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:40:7: Error: The type 'TAlias' can't be mixed in.
+// class D3 = A with TAlias<B>;
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
+// typedef TAlias<T> = T?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:44:7: Error: The type 'TAlias' can't be mixed in.
+// class D5 extends A with TAlias<B> {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
+// typedef TAlias<T> = T?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:16:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// class C1 extends AAlias {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
+// typedef AAlias = A?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:18:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// class C2 implements AAlias {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
+// typedef AAlias = A?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:20:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+//  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// class C3 = A with BAlias;
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
+// typedef BAlias = B?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:22:7: Error: The type 'CAlias' which is an alias of 'C?' can't be used as supertype because it is nullable.
+//  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// class C4 = A with B implements CAlias;
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:13:9: Context: The issue arises via this type alias.
+// typedef CAlias = C?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:24:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+//  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// class C5 extends A with BAlias {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
+// typedef BAlias = B?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:26:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// mixin M1 on AAlias {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
+// typedef AAlias = A?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:28:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+//  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// mixin M2 on A, BAlias {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
+// typedef BAlias = B?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:30:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+//  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// mixin M3 on A implements BAlias {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
+// typedef BAlias = B?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:32:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// class D1 extends TAlias<A> {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
+// typedef TAlias<T> = T?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:34:7: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// class D1a extends prefix.TAlias<A> {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
+// typedef TAlias<T> = T?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:36:7: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// class D1b extends TAlias<prefix.A> {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
+// typedef TAlias<T> = T?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:38:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// class D2 implements TAlias<A> {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
+// typedef TAlias<T> = T?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:40:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+//  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// class D3 = A with TAlias<B>;
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
+// typedef TAlias<T> = T?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:42:7: Error: The type 'TAlias<C>' which is an alias of 'C?' can't be used as supertype because it is nullable.
+//  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// class D4 = A with B implements TAlias<C>;
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
+// typedef TAlias<T> = T?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:44:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+//  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// class D5 extends A with TAlias<B> {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
+// typedef TAlias<T> = T?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:46:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// mixin N1 on TAlias<A> {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
+// typedef TAlias<T> = T?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:48:7: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// mixin N1a on prefix.TAlias<A> {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
+// typedef TAlias<T> = T?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:50:7: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+//  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// mixin N1b on TAlias<prefix.A> {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
+// typedef TAlias<T> = T?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:52:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+//  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// mixin N2 on A, TAlias<B> {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
+// typedef TAlias<T> = T?;
+//         ^
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:54:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+//  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
+// mixin N3 on A implements TAlias<B> {}
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
+// typedef TAlias<T> = T?;
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///nullable_supertypes.dart" as prefix;
+
+typedef AAlias = self::A?;
+typedef BAlias = self::B?;
+typedef CAlias = self::C?;
+typedef TAlias<T extends core::Object? = dynamic> = T?;
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+class C1 extends core::Object {
+  synthetic constructor •() → self::C1
+    : super core::Object::•()
+    ;
+}
+class C2 extends core::Object {
+  synthetic constructor •() → self::C2
+    : super core::Object::•()
+    ;
+}
+class C3 extends self::A {
+  synthetic constructor •() → self::C3
+    : super self::A::•()
+    ;
+}
+class C4 = self::A with self::B {
+  synthetic constructor •() → self::C4
+    : super self::A::•()
+    ;
+}
+abstract class _C5&A&BAlias extends self::A /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C5&A&BAlias
+    : super self::A::•()
+    ;
+}
+class C5 extends self::_C5&A&BAlias {
+  synthetic constructor •() → self::C5
+    : super self::_C5&A&BAlias::•()
+    ;
+}
+abstract class M1 extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class _M2&A&BAlias extends core::Object implements self::A /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_M2&A&BAlias
+    : super core::Object::•()
+    ;
+}
+abstract class M2 extends self::_M2&A&BAlias /*isMixinDeclaration*/  {
+}
+abstract class M3 extends self::A /*isMixinDeclaration*/  {
+}
+class D1 extends core::Object {
+  synthetic constructor •() → self::D1
+    : super core::Object::•()
+    ;
+}
+class D1a extends core::Object {
+  synthetic constructor •() → self::D1a
+    : super core::Object::•()
+    ;
+}
+class D1b extends core::Object {
+  synthetic constructor •() → self::D1b
+    : super core::Object::•()
+    ;
+}
+class D2 extends core::Object {
+  synthetic constructor •() → self::D2
+    : super core::Object::•()
+    ;
+}
+class D3 extends self::A {
+  synthetic constructor •() → self::D3
+    : super self::A::•()
+    ;
+}
+class D4 = self::A with self::B {
+  synthetic constructor •() → self::D4
+    : super self::A::•()
+    ;
+}
+abstract class _D5&A&TAlias extends self::A /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_D5&A&TAlias
+    : super self::A::•()
+    ;
+}
+class D5 extends self::_D5&A&TAlias {
+  synthetic constructor •() → self::D5
+    : super self::_D5&A&TAlias::•()
+    ;
+}
+abstract class N1 extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class N1a extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class N1b extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class _N2&A&TAlias extends core::Object implements self::A /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_N2&A&TAlias
+    : super core::Object::•()
+    ;
+}
+abstract class N2 extends self::_N2&A&TAlias /*isMixinDeclaration*/  {
+}
+abstract class N3 extends self::A /*isMixinDeclaration*/  {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/old_version.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/old_version.dart.weak.modular.expect
new file mode 100644
index 0000000..104aeb2
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/old_version.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/old_version.dart:7:11: Error: Can't create typedef from non-function type.
+// typedef A = int;
+//           ^
+//
+import self as self;
+
+typedef A = invalid-type;
+static method main() → void {}
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.weak.modular.expect
new file mode 100644
index 0000000..1dd5191
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart:9:7: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   new A<dynamic, String>();
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls.dart:6:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef A<X extends num, Y> = C<X>;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef A<X extends core::num, unrelated Y extends core::Object? = dynamic> = self::C<X>;
+class C<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::X%>
+    : super core::Object::•()
+    ;
+}
+static method foo() → dynamic {
+  new self::C::•<dynamic>();
+}
+static method main() → dynamic {}
+static method _#A#new#tearOff<X extends core::num, unrelated Y extends core::Object? = dynamic>() → self::C<self::_#A#new#tearOff::X>
+  return new self::C::•<self::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.weak.modular.expect
new file mode 100644
index 0000000..f7eab09
--- /dev/null
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_main.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "org-dartlang-testcase:///unaliased_bounds_checks_in_constructor_calls_with_parts_lib.dart";
+
+static method main() → dynamic {}
+
+library unaliased_bounds_checks_in_constructor_calls_with_parts_lib /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_part_lib.dart:11:7: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// Try changing type arguments so that they conform to the bounds.
+//   new A<dynamic, String>();
+//       ^
+// pkg/front_end/testcases/nonfunction_type_aliases/unaliased_bounds_checks_in_constructor_calls_with_parts_part_lib.dart:8:11: Context: This is the type variable whose bound isn't conformed to.
+// typedef A<X extends num, Y> = C<X>;
+//           ^
+//
+import self as self2;
+import "dart:core" as core;
+
+part ./unaliased_bounds_checks_in_constructor_calls_with_parts_part_lib.dart;
+typedef A<X extends core::num, unrelated Y extends core::Object? = dynamic> = self2::C<X>;
+class C<X extends core::Object? = dynamic> extends core::Object { // from org-dartlang-testcase:///unaliased_bounds_checks_in_constructor_calls_with_parts_part_lib.dart
+  synthetic constructor •() → self2::C<self2::C::X%>
+    : super core::Object::•()
+    ;
+}
+static method /* from org-dartlang-testcase:///unaliased_bounds_checks_in_constructor_calls_with_parts_part_lib.dart */ foo() → dynamic {
+  new self2::C::•<dynamic>();
+}
+static method /* from org-dartlang-testcase:///unaliased_bounds_checks_in_constructor_calls_with_parts_part_lib.dart */ _#A#new#tearOff<X extends core::num, unrelated Y extends core::Object? = dynamic>() → self2::C<self2::_#A#new#tearOff::X>
+  return new self2::C::•<self2::_#A#new#tearOff::X>();
diff --git a/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..bbfdd17
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/abstract_constructor.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/abstract_constructor.dart:8:7: Error: The class 'C' is abstract and can't be instantiated.
+//   new C();
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  throw new core::AbstractClassInstantiationError::•("C");
+}
diff --git a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.modular.expect
new file mode 100644
index 0000000..c1d156b
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/bad_constructor_redirection.dart:6:21: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   const C() : this.x(1);
+//                     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_constructor_redirection.dart:6:21: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  const C() : this.x(1);
+                    ^"
+    ;
+  const constructor x() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::C::•();
+  invalid-expression "pkg/front_end/testcases/rasta/bad_constructor_redirection.dart:6:21: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  const C() : this.x(1);
+                    ^";
+}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///bad_constructor_redirection.dart:
+- C. (from org-dartlang-testcase:///bad_constructor_redirection.dart:6:9)
diff --git a/pkg/front_end/testcases/rasta/bad_continue.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_continue.dart.weak.modular.expect
new file mode 100644
index 0000000..755a3f3
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/bad_continue.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/bad_continue.dart:6:3: Error: A continue statement can't be used outside of a loop or switch statement.
+// Try removing the continue statement.
+//   continue here;
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/bad_continue.dart:6:12: Error: Can't find label 'here'.
+// Try defining the label, or correcting the name to match an existing label.
+//   continue here;
+//            ^
+//
+// pkg/front_end/testcases/rasta/bad_continue.dart:7:10: Error: A continue statement can't be used outside of a loop or switch statement.
+// Try removing the continue statement.
+//   label: continue label;
+//          ^^^^^^^^
+//
+import self as self;
+
+static method main() → dynamic {
+  invalid-expression "pkg/front_end/testcases/rasta/bad_continue.dart:6:12: Error: Can't find label 'here'.
+Try defining the label, or correcting the name to match an existing label.
+  continue here;
+           ^";
+  #L1:
+  break #L1;
+}
diff --git a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..864e20e
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/bad_default_constructor.dart:13:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const B();
+//         ^
+//
+// pkg/front_end/testcases/rasta/bad_default_constructor.dart:9:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(dynamic x) → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : invalid-initializer
+    ;
+}
+static method main() → dynamic {
+  new self::B::•();
+  invalid-expression "pkg/front_end/testcases/rasta/bad_default_constructor.dart:13:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const B();
+        ^";
+}
diff --git a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..f42bd18
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:20: Error: Too few positional arguments: 1 required, 0 given.
+//   const B() : super();
+//                    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(dynamic x) → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A /*hasConstConstructor*/  {
+  const constructor •() → self::B*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:20: Error: Too few positional arguments: 1 required, 0 given.
+  const B() : super();
+                   ^"
+    ;
+}
+static method main() → dynamic {
+  new self::B::•();
+  invalid-expression "pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:20: Error: Too few positional arguments: 1 required, 0 given.
+  const B() : super();
+                   ^";
+}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///bad_explicit_super_constructor.dart:
+- B. (from org-dartlang-testcase:///bad_explicit_super_constructor.dart:10:9)
diff --git a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..add2a41
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.weak.modular.expect
@@ -0,0 +1,51 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:10:9: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+//   const B();
+//         ^
+//
+// pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:6:10: Error: 'x' isn't an instance field of this class.
+//   A(this.x);
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(dynamic x) → self::A*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:6:10: Error: 'x' isn't an instance field of this class.
+  A(this.x);
+         ^"
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A /*hasConstConstructor*/  {
+  const constructor •() → self::B*
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:10:9: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+  const B();
+        ^"
+    ;
+}
+static method main() → dynamic {
+  new self::B::•();
+  invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:10:9: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+  const B();
+        ^";
+}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///bad_implicit_super_constructor.dart:
+- B. (from org-dartlang-testcase:///bad_implicit_super_constructor.dart:10:9)
diff --git a/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.modular.expect
new file mode 100644
index 0000000..e09a8ab
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/bad_interpolation.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/bad_interpolation.dart:6:13: Error: String starting with " must end with ".
+//   print(" $x.);
+//             ^^^
+//
+// pkg/front_end/testcases/rasta/bad_interpolation.dart:6:8: Error: Can't find ')' to match '('.
+//   print(" $x.);
+//        ^
+//
+// pkg/front_end/testcases/rasta/bad_interpolation.dart:6:12: Error: Undefined name 'x'.
+//   print(" $x.);
+//            ^
+//
+// pkg/front_end/testcases/rasta/bad_interpolation.dart:6:13: Error: Expected ';' after this.
+//   print(" $x.);
+//             ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::print(" ${invalid-expression "pkg/front_end/testcases/rasta/bad_interpolation.dart:6:12: Error: Undefined name 'x'.
+  print(\" \$x.);
+           ^"}.);\"");
+}
diff --git a/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.modular.expect
new file mode 100644
index 0000000..e0af5b5
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/bad_redirection.dart.weak.modular.expect
@@ -0,0 +1,47 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/bad_redirection.dart:6:9: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   Foo() = Bar;
+//         ^
+//
+// pkg/front_end/testcases/rasta/bad_redirection.dart:6:9: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Foo() = Bar;
+//         ^
+//
+// pkg/front_end/testcases/rasta/bad_redirection.dart:6:11: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   Foo() = Bar;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  constructor •() → self::Foo*
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/rasta/bad_redirection.dart:6:11: Error: Constructors can't have a return type.
+Try removing the return type.
+  Foo() = Bar;
+          ^";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar extends self::Foo {
+  static factory •() → self::Bar*
+    return null;
+}
+static method main() → dynamic {
+  new self::Foo::•();
+}
diff --git a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..09e385e1
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/bad_setter_initializer.dart:6:9: Error: 'field' isn't an instance field of this class.
+//   C() : field = null;
+//         ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  constructor •() → self::C*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_setter_initializer.dart:6:9: Error: 'field' isn't an instance field of this class.
+  C() : field = null;
+        ^^^^^"
+    ;
+  set field(dynamic value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::C::•();
+}
diff --git a/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.modular.expect
new file mode 100644
index 0000000..749bace
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/bad_unicode.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/bad_unicode.dart:6:10: Error: An escape sequence starting with '\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'.
+//   print("\u00"); // Bad Unicode escape, must have 4 hex digits.
+//          ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::print("\\u00");
+}
diff --git a/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.modular.expect
new file mode 100644
index 0000000..b2fb346
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/breaking_bad.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/breaking_bad.dart:6:3: Error: A break statement can't be used outside of a loop or switch statement.
+// Try removing the break statement.
+//   break;
+//   ^^^^^
+//
+import self as self;
+
+static method main() → dynamic {
+  invalid-expression "pkg/front_end/testcases/rasta/breaking_bad.dart:6:3: Error: A break statement can't be used outside of a loop or switch statement.
+Try removing the break statement.
+  break;
+  ^";
+  #L1:
+  break #L1;
+}
diff --git a/pkg/front_end/testcases/rasta/cascades.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/cascades.dart.weak.modular.expect
new file mode 100644
index 0000000..73ffa41
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/cascades.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method add(dynamic x) → dynamic
+    return x;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::A* a = new self::A::•();
+  function f(dynamic x) → dynamic
+    return x;
+  let final self::A* #t1 = a in block {
+    #t1.{self::A::add}(f){(dynamic) →* dynamic}{dynamic}.call("WHAT");
+  } =>#t1;
+}
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.modular.expect
new file mode 100644
index 0000000..b641197
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.weak.modular.expect
@@ -0,0 +1,105 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:5:17: Error: Type 'Missing' not found.
+// class A extends Missing {}
+//                 ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:7:20: Error: Type 'Missing' not found.
+// class B implements Missing {}
+//                    ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:9:23: Error: Type 'Missing' not found.
+// class C = Object with Missing;
+//                       ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:9:7: Error: The type 'Missing' can't be mixed in.
+// class C = Object with Missing;
+//       ^
+//
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Couldn't find constructor 'Missing'.
+//   factory D() = Missing;
+//                 ^
+//
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
+//   factory D() = Missing;
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  static factory •() → self::D*
+    return invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
+  factory D() = Missing;
+                ^";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {
+  new self::A::•();
+  new self::B::•();
+  new self::C::•();
+  invalid-expression "pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Redirection constructor target not found: 'Missing'
+  factory D() = Missing;
+                ^";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::D::•
+}
diff --git a/pkg/front_end/testcases/rasta/class_member.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/class_member.dart.weak.modular.expect
new file mode 100644
index 0000000..e692877
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/class_member.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  field dynamic field1 = null;
+  field dynamic field2 = null;
+  field dynamic field3 = null;
+  constructor constructor1() → self::Foo*
+    : super core::Object::•()
+    ;
+  constructor constructor2() → self::Foo*
+    : super core::Object::•()
+    ;
+  constructor constructor3() → self::Foo*
+    : super core::Object::•()
+    ;
+  method a() → dynamic {}
+  method b() → dynamic {}
+  method c() → dynamic {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.modular.expect
new file mode 100644
index 0000000..ada899d
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/constant_get_and_invoke.dart:8:4: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//   c();
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+
+static const field core::int* c = #C1;
+static method main() → dynamic {
+  #C1;
+  invalid-expression "pkg/front_end/testcases/rasta/constant_get_and_invoke.dart:8:4: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+  c();
+   ^" in #C1{<unresolved>}.call();
+}
+
+constants  {
+  #C1 = 1
+}
diff --git a/pkg/front_end/testcases/rasta/deferred_load.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/deferred_load.dart.weak.modular.expect
new file mode 100644
index 0000000..d01ac3d
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/deferred_load.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library;
+import self as self;
+import "dart:async" as asy;
+
+import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
+
+static method main() → dynamic {
+  #C1;
+  LoadLibrary(lib);
+}
+static method _#loadLibrary_lib() → asy::Future<dynamic>*
+  return LoadLibrary(lib);
+
+library deferred_lib;
+import self as self2;
+
+static method foo() → dynamic
+  return null;
+
+constants  {
+  #C1 = static-tearoff self::_#loadLibrary_lib
+}
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.modular.expect
new file mode 100644
index 0000000..3324351
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Mixin extends core::Object {
+  field dynamic field = null;
+  synthetic constructor •() → self::Mixin*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A&Object&Mixin = core::Object with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&Object&Mixin*
+    : super core::Object::•()
+    ;
+  mixin-super-stub get field() → dynamic
+    return super.{self::Mixin::field};
+  mixin-super-stub set field(dynamic value) → void
+    return super.{self::Mixin::field} = value;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A&Object&Mixin&Mixin = self::_A&Object&Mixin with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_A&Object&Mixin&Mixin*
+    : super self::_A&Object&Mixin::•()
+    ;
+  mixin-super-stub get field() → dynamic
+    return super.{self::Mixin::field};
+  mixin-super-stub set field(dynamic value) → void
+    return super.{self::Mixin::field} = value;
+}
+class A extends self::_A&Object&Mixin&Mixin {
+  synthetic constructor •() → self::A*
+    : super self::_A&Object&Mixin&Mixin::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect
new file mode 100644
index 0000000..71a6850
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Foo*>* values = #C7;
+  static const field self::Foo* ec1 = #C3;
+  static const field self::Foo* ec2 = #C6;
+  const constructor •(core::int* index, core::String* name) → self::Foo*
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String*
+    return "Foo.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "ec1"
+  #C3 = self::Foo {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "ec2"
+  #C6 = self::Foo {index:#C4, _name:#C5}
+  #C7 = <self::Foo*>[#C3, #C6]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum.dart:
+- Foo. (from org-dartlang-testcase:///enum.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/rasta/export.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/export.dart.weak.modular.expect
new file mode 100644
index 0000000..6eb1e47
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/export.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library export;
+import self as self;
+import "foo.dart" as foo;
+additionalExports = (foo::foo)
+
+export "org-dartlang-testcase:///foo.dart";
+
+
+library foo;
+import self as foo;
+import "dart:core" as core;
+
+static method foo() → dynamic {
+  core::print("Hello, World!");
+}
diff --git a/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.modular.expect
new file mode 100644
index 0000000..8b7a99d
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/external_factory_redirection.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  "Should redirect to LinkedHashMap constructor.";
+  core::Map::•<core::Symbol*, dynamic>();
+}
diff --git a/pkg/front_end/testcases/rasta/foo.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/foo.dart.weak.modular.expect
new file mode 100644
index 0000000..5f90b5a
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/foo.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library foo;
+import self as self;
+import "dart:core" as core;
+
+static method foo() → dynamic {
+  core::print("Hello, World!");
+}
diff --git a/pkg/front_end/testcases/rasta/for_loop.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/for_loop.dart.weak.modular.expect
new file mode 100644
index 0000000..94b2d41
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/for_loop.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int* c = new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*};
+  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    core::print(let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1);
+  }
+  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; c.{core::num::<}(42){(core::num*) →* core::bool*} ?{core::int*} throw "fisk" : let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3) {
+    core::print(let final core::int* #t5 = i in let final core::int* #t6 = i = #t5.{core::num::+}(1){(core::num*) →* core::int*} in #t5);
+  }
+}
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.modular.expect
new file mode 100644
index 0000000..05e4007
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.weak.modular.expect
@@ -0,0 +1,150 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Couldn't find constructor 'Missing'.
+//   factory A.c() = Missing;
+//                   ^
+//
+// pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
+//   factory A.c() = Missing;
+//                   ^
+//
+// pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
+//  - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+//  - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+//  - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+//   factory A.b() = B<C1>.a;
+//                   ^
+//
+// pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
+//  - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+//  - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+//   factory B.b() = C<C2>;
+//                   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  synthetic constructor •() → self::C1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C2 extends core::Object {
+  synthetic constructor •() → self::C2*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C3 extends core::Object {
+  synthetic constructor •() → self::C3*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A<T extends core::Object* = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1, #C2, #C3];
+  constructor internal() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  static factory a<T extends core::Object* = dynamic>() → self::A<self::A::a::T*>*
+    return self::B::a<self::A::a::T*>();
+  static factory b<T extends core::Object* = dynamic>() → self::A<self::A::b::T*>*
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory A.b() = B<C1>.a;
+                  ^";
+  static factory c<T extends core::Object* = dynamic>() → self::A<self::A::c::T*>*
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
+  factory A.c() = Missing;
+                  ^";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<S extends core::Object* = dynamic> extends self::A<self::B::S*> {
+  static final field dynamic _redirecting# = <dynamic>[#C4, #C5];
+  constructor internal() → self::B<self::B::S*>*
+    : super self::A::internal()
+    ;
+  static factory a<S extends core::Object* = dynamic>() → self::B<self::B::a::S*>*
+    return new self::C::•<self::B::a::S*>();
+  static factory b<S extends core::Object* = dynamic>() → self::B<self::B::b::S*>*
+    return invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
+ - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory B.b() = C<C2>;
+                  ^";
+}
+class C<U extends core::Object* = dynamic> extends self::B<self::C::U*> {
+  constructor •() → self::C<self::C::U*>*
+    : super self::B::internal()
+    ;
+}
+static method main() → dynamic {
+  new self::C::•<self::C3*>();
+  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory A.b() = B<C1>.a;
+                  ^";
+  new self::C::•<self::C3*>();
+  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
+ - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+ - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+  factory B.b() = C<C2>;
+                  ^";
+  invalid-expression "pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Redirection constructor target not found: 'Missing'
+  factory A.c() = Missing;
+                  ^";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::a
+  #C2 = constructor-tearoff self::A::b
+  #C3 = constructor-tearoff self::A::c
+  #C4 = constructor-tearoff self::B::a
+  #C5 = constructor-tearoff self::B::b
+}
diff --git a/pkg/front_end/testcases/rasta/hello.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/hello.dart.weak.modular.expect
new file mode 100644
index 0000000..fea7b39
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/hello.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::print("Hello, World!");
+}
diff --git a/pkg/front_end/testcases/rasta/import_export.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/import_export.dart.weak.modular.expect
new file mode 100644
index 0000000..18b095f
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/import_export.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library;
+import self as self;
+import "foo.dart" as foo;
+
+import "org-dartlang-testcase:///export.dart";
+
+static method main() → dynamic {
+  foo::foo();
+}
+
+library export;
+import self as self2;
+import "foo.dart" as foo;
+additionalExports = (foo::foo)
+
+export "org-dartlang-testcase:///foo.dart";
+
+
+library foo;
+import self as foo;
+import "dart:core" as core;
+
+static method foo() → dynamic {
+  core::print("Hello, World!");
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000001.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000001.dart.weak.modular.expect
new file mode 100644
index 0000000..aa235f1
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000001.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000001.dart:11:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   test0(0, 1);
+//        ^
+// pkg/front_end/testcases/rasta/issue_000001.dart:5:1: Context: Found this candidate, but the arguments don't match.
+// test0(x) {
+// ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test0(dynamic x) → dynamic {
+  core::print("test0");
+}
+static method main() → dynamic {
+  invalid-expression "pkg/front_end/testcases/rasta/issue_000001.dart:11:8: Error: Too many positional arguments: 1 allowed, but 2 found.
+Try removing the extra positional arguments.
+  test0(0, 1);
+       ^";
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000002.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000002.dart.weak.modular.expect
new file mode 100644
index 0000000..90a6469
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000002.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+import "dart:typed_data" as typ;
+
+import "dart:typed_data";
+import "package:expect/expect.dart";
+
+class Foo extends core::Object {
+  final field dynamic value;
+  constructor •(dynamic value) → self::Foo*
+    : self::Foo::value = value, super core::Object::•() {}
+  static factory fac(dynamic value) → self::Foo* {
+    return new self::Foo::•(value);
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::List<core::int*>* list = <core::int*>[1, 2, 3];
+static method main() → dynamic {
+  exp::Expect::isTrue(typ::Uint8List::fromList(self::list).{core::List::[]}(1){(core::int*) →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2);
+  exp::Expect::isTrue(self::Foo::fac(10).{self::Foo::value}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} 10);
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000004.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000004.dart.weak.modular.expect
new file mode 100644
index 0000000..8b66203
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000004.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static field dynamic global;
+static method fact4() → dynamic {
+  core::int* f = 1;
+  for (core::int* n in <core::int*>[1, 2, 3, 4]) {
+    f = f.{core::num::*}(n){(core::num*) →* core::int*};
+  }
+  return f;
+}
+static method fact5() → dynamic {
+  core::int* f = 1;
+  dynamic n;
+  for (final dynamic #t1 in <dynamic>[1, 2, 3, 4, 5]) {
+    n = #t1;
+    f = f.{core::num::*}(n as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*} as{TypeError} core::int*;
+  }
+  return f;
+}
+static method fact6() → dynamic {
+  core::int* f = 1;
+  for (final dynamic #t2 in <dynamic>[1, 2, 3, 4, 5, 6]) {
+    self::global = #t2;
+    f = f.{core::num::*}(self::global as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*} as{TypeError} core::int*;
+  }
+  return f;
+}
+static method main() → dynamic {
+  exp::Expect::isTrue(self::fact4() =={core::Object::==}{(core::Object*) →* core::bool*} 24);
+  exp::Expect::isTrue(self::fact5() =={core::Object::==}{(core::Object*) →* core::bool*} 120);
+  exp::Expect::isTrue(self::fact6() =={core::Object::==}{(core::Object*) →* core::bool*} 720);
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000006.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000006.dart.weak.modular.expect
new file mode 100644
index 0000000..d8e5d49
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000006.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int*>* list = <core::int*>[1, 2, 3];
+static method main() → dynamic {
+  self::list.{core::List::add}(1){(core::int*) →* void};
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.weak.modular.expect
new file mode 100644
index 0000000..6cd1688
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.weak.modular.expect
@@ -0,0 +1,51 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  synthetic constructor •() → self::Base*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic
+    return core::print("foo");
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Sub&Base&Mixin = self::Base with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Sub&Base&Mixin*
+    : super self::Base::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::Mixin::foo}();
+}
+class Sub extends self::_Sub&Base&Mixin {
+  synthetic constructor •() → self::Sub*
+    : super self::_Sub&Base&Mixin::•()
+    ;
+}
+static method main() → dynamic {
+  new self::Sub::•().{self::_Sub&Base&Mixin::foo}(){() →* dynamic};
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000008.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000008.dart.weak.modular.expect
new file mode 100644
index 0000000..c1f058b
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000008.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  final field dynamic x;
+  constructor •(dynamic x) → self::C*
+    : self::C::x = x, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::C::•(42);
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000011.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000011.dart.weak.modular.expect
new file mode 100644
index 0000000..aa88a42
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000011.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  try {
+    core::print(42);
+  }
+  finally {
+    core::print(87);
+  }
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000012.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000012.dart.weak.modular.expect
new file mode 100644
index 0000000..e6e3429
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000012.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field dynamic field = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  method m() → dynamic {
+    super.{self::A::field} = 42;
+  }
+}
+static method main() → dynamic {
+  new self::B::•().{self::B::m}(){() →* dynamic};
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000025.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000025.dart.weak.modular.expect
new file mode 100644
index 0000000..3be7ccc
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000025.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static get x() → dynamic
+  return 42;
+static set x(dynamic val) → void {}
+static method main() → dynamic {
+  core::print(self::x);
+  core::print(self::x = 87);
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000026.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000026.dart.weak.modular.expect
new file mode 100644
index 0000000..9e127fd
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000026.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field dynamic a = null;
+  field core::int* b = 0;
+  field core::int* c = 1.{core::num::+}(2){(core::num*) →* core::int*};
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends core::Object {
+  field dynamic a = null;
+  field core::int* b = 1;
+  field core::int* c = 2.{core::num::-}(3){(core::num*) →* core::int*};
+  constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::C::•();
+  new self::D::•();
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000031.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.modular.expect
new file mode 100644
index 0000000..5147d08
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000031.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000031.dart:8:3: Error: A prefix can't be used as an expression.
+//   math..toString();
+//   ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:math" as math;
+
+static method main() → dynamic {
+  let final invalid-type #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000031.dart:8:3: Error: A prefix can't be used as an expression.
+  math..toString();
+  ^^^^" in block {
+    #t1.{core::Object::toString}(){() →* core::String*};
+  } =>#t1;
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.modular.expect
new file mode 100644
index 0000000..a34f230
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart.weak.modular.expect
@@ -0,0 +1,63 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000032.dart:7:1: Error: Expected a type, but got '}'.
+// }
+// ^
+//
+// pkg/front_end/testcases/rasta/issue_000032.dart:7:1: Error: Expected an identifier, but got '}'.
+// Try inserting an identifier before '}'.
+// }
+// ^
+//
+// pkg/front_end/testcases/rasta/issue_000032.dart:6:4: Error: Expected ';' after this.
+//   C<
+//    ^
+//
+// pkg/front_end/testcases/rasta/issue_000032.dart:11:1: Error: Expected an identifier, but got '}'.
+// Try inserting an identifier before '}'.
+// }
+// ^
+//
+// pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: Expected ';' after this.
+//   C<
+//    ^
+//
+// pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The operator '<' isn't defined for the class 'Type'.
+//  - 'Type' is from 'dart:core'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
+//   C<
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  invalid-expression "pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The operator '<' isn't defined for the class 'Type'.
+ - 'Type' is from 'dart:core'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
+  C<
+   ^" in #C1{<unresolved>}.<(invalid-expression "pkg/front_end/testcases/rasta/issue_000032.dart:11:1: Error: This couldn't be parsed.
+}
+^");
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::C*)
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000033.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000033.dart.weak.modular.expect
new file mode 100644
index 0000000..e288dc4
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Couldn't find constructor 'JS'.
+// @JS()
+//  ^^
+//
+import self as self;
+
+@invalid-expression "pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Couldn't find constructor 'JS'.
+@JS()
+ ^^"
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/issue_000034.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000034.dart.weak.modular.expect
new file mode 100644
index 0000000..58227f9
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000034.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: Expected an assignment after the field name.
+// To initialize a field, use the syntax 'name = value'.
+//   const C() : this.x;
+//               ^^^^
+//
+// pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: Can't access 'this' in a field initializer.
+//   const C() : this.x;
+//               ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
+  const C() : this.x;
+              ^"
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  invalid-expression "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
+  const C() : this.x;
+              ^";
+}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue_000034.dart:
+- C. (from org-dartlang-testcase:///issue_000034.dart:6:9)
diff --git a/pkg/front_end/testcases/rasta/issue_000035.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000035.dart.weak.modular.expect
new file mode 100644
index 0000000..d27cbe4
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000035.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000035.dart:5:10: Error: The non-ASCII character 'æ' (U+00E6) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+// class C {æøC();}
+//          ^
+//
+// pkg/front_end/testcases/rasta/issue_000035.dart:5:11: Error: The non-ASCII character 'ø' (U+00F8) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+// class C {æøC();}
+//           ^
+//
+// pkg/front_end/testcases/rasta/issue_000035.dart:5:7: Error: The non-abstract class 'C' is missing implementations for these members:
+//  - C.æøC
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class C {æøC();}
+//       ^
+// pkg/front_end/testcases/rasta/issue_000035.dart:5:10: Context: 'C.æøC' is defined here.
+// class C {æøC();}
+//          ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract method æøC() → dynamic;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.modular.expect
new file mode 100644
index 0000000..ffef0ea
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000035a.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000035a.dart:5:9: Error: The non-ASCII space character U+2028 can only be used in strings and comments.
+// class C{

C();}
+//         ^
+//
+// pkg/front_end/testcases/rasta/issue_000035a.dart:5:10: Error: The non-ASCII space character U+2028 can only be used in strings and comments.
+// class C{

C();}
+//          ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/issue_000036.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.modular.expect
new file mode 100644
index 0000000..255d67d
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000036.dart.weak.modular.expect
@@ -0,0 +1,21 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000036.dart:5:14: Error: Expected an identifier, but got '-'.
+// Try inserting an identifier before '-'.
+// main() => a. - 5;
+//              ^
+//
+// pkg/front_end/testcases/rasta/issue_000036.dart:5:14: Error: Expected an identifier, but got ''.
+// Try inserting an identifier before ''.
+// main() => a. - 5;
+//              ^
+//
+import self as self;
+
+static method main() → dynamic
+  return invalid-expression "pkg/front_end/testcases/rasta/issue_000036.dart:5:14: Error: Expected an identifier, but got ''.
+Try inserting an identifier before ''.
+main() => a. - 5;
+             ^"{<invalid>}.-(5);
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.modular.expect
new file mode 100644
index 0000000..289c890
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000039.dart:10:3: Error: Expected an identifier, but got '}'.
+// Try inserting an identifier before '}'.
+//   }
+//   ^
+//
+// pkg/front_end/testcases/rasta/issue_000039.dart:10:3: Error: Expected an identifier, but got ''.
+// Try inserting an identifier before ''.
+//   }
+//   ^
+//
+// pkg/front_end/testcases/rasta/issue_000039.dart:9:15: Error: Expected ';' after this.
+//     this.a = x.
+//               ^
+//
+// pkg/front_end/testcases/rasta/issue_000039.dart:13:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field dynamic a = null;
+  constructor •(dynamic x) → self::A*
+    : super core::Object::•() {
+    this.{self::A::a} = invalid-expression "pkg/front_end/testcases/rasta/issue_000039.dart:10:3: Error: Expected an identifier, but got ''.
+Try inserting an identifier before ''.
+  }
+  ^";
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : invalid-initializer
+    ;
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.modular.expect
new file mode 100644
index 0000000..2026340
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000041.dart:7:9: Error: '+' is not a prefix operator.
+// Try removing '+'.
+//     use(+super);
+//         ^
+//
+// pkg/front_end/testcases/rasta/issue_000041.dart:7:10: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//     use(+super);
+//          ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method test() → dynamic {
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/issue_000041.dart:7:9: Error: This couldn't be parsed.
+    use(+super);
+        ^"{<invalid>}.+(invalid-expression "pkg/front_end/testcases/rasta/issue_000041.dart:7:10: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+    use(+super);
+         ^^^^^"));
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method use(dynamic _) → dynamic
+  return null;
+static method main() → dynamic {
+  new self::C::•().{self::C::test}(){() →* dynamic};
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000042.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000042.dart.weak.modular.expect
new file mode 100644
index 0000000..2abfb5d
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000042.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000042.dart:6:13: Error: Unexpected token ','.
+//   for (var x, y in []) {}
+//             ^
+//
+// pkg/front_end/testcases/rasta/issue_000042.dart:6:8: Error: A for-in loop can't have more than one loop variable.
+//   for (var x, y in []) {}
+//        ^^^
+//
+// pkg/front_end/testcases/rasta/issue_000042.dart:7:8: Error: A continue statement can't be used outside of a loop or switch statement.
+// Try removing the continue statement.
+//   L: { continue L; }
+//        ^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/issue_000042.dart:8:18: Error: A continue statement can't be used outside of a loop or switch statement.
+// Try removing the continue statement.
+//   L: if (true) { continue L; }
+//                  ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  {
+    invalid-expression "pkg/front_end/testcases/rasta/issue_000042.dart:6:8: Error: A for-in loop can't have more than one loop variable.
+  for (var x, y in []) {}
+       ^^^";
+    for (final dynamic #t1 in <dynamic>[]) {
+      invalid-expression "pkg/front_end/testcases/rasta/issue_000042.dart:6:8: Error: A for-in loop can't have more than one loop variable.
+  for (var x, y in []) {}
+       ^^^";
+      dynamic x;
+      dynamic y;
+    }
+  }
+  #L1:
+  {
+    break #L1;
+  }
+  #L2:
+  if(true) {
+    break #L2;
+  }
+  #L3:
+  switch(1) {
+    #L4:
+    case #C1:
+      {
+        break #L3;
+      }
+    #L5:
+    case #C2:
+      {
+        break #L3;
+      }
+  }
+  try {
+  }
+  on core::NoSuchMethodError* catch(no-exception-var) {
+  }
+}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000043.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000043.dart.weak.modular.expect
new file mode 100644
index 0000000..0c2f2cb
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000043.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  get x() → dynamic
+    return "${#C1}".{core::String::hashCode}{core::int*};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::C*)
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.modular.expect
new file mode 100644
index 0000000..b0dbf3f
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.weak.modular.expect
@@ -0,0 +1,119 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:7:8: Error: Expected a function body or '=>'.
+// Try adding {}.
+// a b(c) = d;
+//        ^
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:14:29: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   C.missingFactoryKeyword() = C.constant;
+//                             ^
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:21:28: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   C notEvenAConstructor(a) = h;
+//                            ^
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:7:1: Error: Type 'a' not found.
+// a b(c) = d;
+// ^
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Error: Couldn't find constructor 'h'.
+//   C notEvenAConstructor(a) = h;
+//                              ^
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Undefined name 'd'.
+// a b(c) = d;
+//          ^
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:14:29: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   C.missingFactoryKeyword() = C.constant;
+//                             ^
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:14:33: Error: Member not found: 'constant'.
+//   C.missingFactoryKeyword() = C.constant;
+//                                 ^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:14:31: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   C.missingFactoryKeyword() = C.constant;
+//                               ^
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:21:28: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   C notEvenAConstructor(a) = h;
+//                            ^
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Error: The getter 'h' isn't defined for the class 'C'.
+//  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000044.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'h'.
+//   C notEvenAConstructor(a) = h;
+//                              ^
+//
+// pkg/front_end/testcases/rasta/issue_000044.dart:27:15: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   print(const C.missingFactoryKeyword());
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object /*hasConstConstructor*/  {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  const constructor constant() → self::C*
+    : super core::Object::•()
+    ;
+  constructor missingFactoryKeyword() → self::C*
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:14:31: Error: Constructors can't have a return type.
+Try removing the return type.
+  C.missingFactoryKeyword() = C.constant;
+                              ^";
+  static factory good() → self::C*
+    return new self::C::constant();
+  method notEvenAConstructor(dynamic a) → self::C*
+    return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Error: The getter 'h' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/rasta/issue_000044.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'h'.
+  C notEvenAConstructor(a) = h;
+                             ^" in this{<unresolved>}.h as{TypeError,ForDynamic} self::C*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method b(dynamic c) → invalid-type
+  return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:7:10: Error: Undefined name 'd'.
+a b(c) = d;
+         ^";
+static method main() → dynamic {
+  self::C* c = null;
+  core::print(#C2);
+  core::print(invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:27:15: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  print(const C.missingFactoryKeyword());
+              ^");
+  core::print(#C2);
+  core::print(new self::C::constant().{self::C::notEvenAConstructor}(null){(dynamic) →* self::C*});
+}
+
+constants  {
+  #C1 = constructor-tearoff self::C::good
+  #C2 = self::C {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue_000044.dart:
+- C.constant (from org-dartlang-testcase:///issue_000044.dart:11:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/rasta/issue_000045.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000045.dart.weak.modular.expect
new file mode 100644
index 0000000..2622c42
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000045.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000045.dart:5:18: Error: String starting with """ must end with """.
+// main() => """${1}
+//                  ^...
+//
+// pkg/front_end/testcases/rasta/issue_000045.dart:5:18: Error: Expected ';' after this.
+// main() => """${1}
+//                  ^...
+//
+// pkg/front_end/testcases/rasta/issue_000045.dart:6:1: Error: Unexpected token ''.
+//
+import self as self;
+
+static method main() → dynamic
+  return "${1}
+\"\"\"";
diff --git a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.modular.expect
new file mode 100644
index 0000000..4625b85
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.modular.expect
@@ -0,0 +1,52 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: Expected '(' after this.
+//   C c = new Object)();
+//             ^^^^^^
+//
+// pkg/front_end/testcases/rasta/issue_000046.dart:6:19: Error: Expected ';' after this.
+//   C c = new Object)();
+//                   ^
+//
+// pkg/front_end/testcases/rasta/issue_000046.dart:6:19: Error: Expected a class member, but got ')'.
+//   C c = new Object)();
+//                   ^
+//
+// pkg/front_end/testcases/rasta/issue_000046.dart:6:20: Error: Expected an identifier, but got '('.
+// Try inserting an identifier before '('.
+//   C c = new Object)();
+//                    ^
+//
+// pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: The constructor returns type 'Object' that isn't of expected type 'C'.
+//  - 'Object' is from 'dart:core'.
+//  - 'C' is from 'pkg/front_end/testcases/rasta/issue_000046.dart'.
+// Change the type of the object being constructed or the context in which it is used.
+//   C c = new Object)();
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field self::C* c = invalid-expression "pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: The constructor returns type 'Object' that isn't of expected type 'C'.
+ - 'Object' is from 'dart:core'.
+ - 'C' is from 'pkg/front_end/testcases/rasta/issue_000046.dart'.
+Change the type of the object being constructed or the context in which it is used.
+  C c = new Object)();
+            ^" in new core::Object::•();
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000047.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000047.dart.weak.modular.expect
new file mode 100644
index 0000000..2ae0040
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000047.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000047.dart:5:17: Error: Expected ')' before this.
+// typedef void T(C<C>);
+//                 ^
+//
+import self as self;
+
+typedef T = (dynamic) →* void;
+static method main() → (dynamic) →* void
+  return null;
diff --git a/pkg/front_end/testcases/rasta/issue_000048.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000048.dart.weak.modular.expect
new file mode 100644
index 0000000..a297249
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000048.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::bool* v1;
+  field core::num* v2;
+  constructor •(core::bool* v1, core::num* v2) → self::A*
+    : self::A::v1 = v1, self::A::v2 = v2, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M1 extends core::Object {
+  field core::num* v2 = 0;
+  synthetic constructor •() → self::M1*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C = self::A with self::M1 {
+  synthetic constructor •(core::bool* v1, core::num* v2) → self::C*
+    : super self::A::•(v1, v2)
+    ;
+  mixin-super-stub get v2() → core::num*
+    return super.{self::M1::v2};
+  mixin-super-stub set v2(core::num* value) → void
+    return super.{self::M1::v2} = value;
+}
+static method main() → dynamic {
+  self::C* c = new self::C::•(true, 2);
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000052.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000052.dart.weak.modular.expect
new file mode 100644
index 0000000..4c2e652
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000052.dart.weak.modular.expect
@@ -0,0 +1,10 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  function f() → Null {
+    core::print("hello");
+  }
+  f(){() →* Null};
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000053.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000053.dart.weak.modular.expect
new file mode 100644
index 0000000..f4841de
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000053.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  operator ==(dynamic other) → core::bool*
+    return throw "x";
+  method test() → dynamic {
+    super.{core::Object::==}(null);
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::C::•().{self::C::test}(){() →* dynamic};
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.modular.expect
new file mode 100644
index 0000000..66f50c0
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.weak.modular.expect
@@ -0,0 +1,52 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+class A extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  constructor •() → self::A*
+    : super core::Object::•() {}
+  static factory foo() → self::A*
+    return self::C::bar();
+  method m() → core::int* {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::A {
+  static final field dynamic _redirecting# = <dynamic>[#C2];
+  constructor •() → self::C*
+    : super self::A::•() {}
+  static factory bar() → self::C*
+    return new self::D::•();
+  method m() → core::int* {
+    return 1;
+  }
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method m() → core::int* {
+    return 2;
+  }
+}
+static method main() → dynamic {
+  self::A* a = new self::D::•();
+  exp::Expect::equals(2, a.{self::A::m}(){() →* core::int*});
+}
+
+constants  {
+  #C1 = constructor-tearoff self::A::foo
+  #C2 = constructor-tearoff self::C::bar
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000068.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000068.dart.weak.modular.expect
new file mode 100644
index 0000000..9de7e9e
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000068.dart.weak.modular.expect
@@ -0,0 +1,56 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+class G<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::G<self::G::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+static method main() → dynamic {
+  exp::Expect::isFalse(new self::G::•<self::B*>() is self::G<self::C*>*);
+  exp::Expect::isFalse(new self::G::•<self::A*>() is self::G<self::B*>*);
+  exp::Expect::isFalse(new self::G::•<self::A*>() is self::G<self::C*>*);
+  exp::Expect::isFalse(new self::G::•<core::Object*>() is self::G<self::B*>*);
+  exp::Expect::isFalse(new self::G::•<core::int*>() is self::G<self::B*>*);
+  exp::Expect::isFalse(new self::G::•<core::int*>() is self::G<core::double*>*);
+  exp::Expect::isFalse(new self::G::•<core::int*>() is self::G<core::String*>*);
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000069.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000069.dart.weak.modular.expect
new file mode 100644
index 0000000..07c2ec1
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000069.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  dynamic x;
+  core::int* i = 0;
+  while ((let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1).{core::num::<}(5){(core::num*) →* core::bool*}) {
+    core::int* x = i;
+  }
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.modular.expect
new file mode 100644
index 0000000..a5f9ac1
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.modular.expect
@@ -0,0 +1,77 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+class A<N extends core::Object* = dynamic, S extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field core::List<self::A::U*>* field;
+  constructor •(self::A::N* n, self::A::S* s) → self::A<self::A::N*, self::A::S*, self::A::U*>*
+    : self::A::field = <self::A::U*>[], super core::Object::•() {
+    exp::Expect::isTrue(n is self::A::N*);
+    exp::Expect::isTrue(s is self::A::S*);
+  }
+  constructor empty() → self::A<self::A::N*, self::A::S*, self::A::U*>*
+    : self::A::field = null, super core::Object::•() {}
+  const constructor c(self::A::U* u, self::A::S* s) → self::A<self::A::N*, self::A::S*, self::A::U*>*
+    : self::A::field = #C2, super core::Object::•()
+    ;
+  static factory f<N extends core::Object* = dynamic, S extends core::Object* = dynamic, U extends core::Object* = dynamic>(self::A::f::S* s) → self::A<self::A::f::N*, self::A::f::S*, self::A::f::U*>* {
+    exp::Expect::isTrue(s is self::A::f::S*);
+    return new self::A::empty<self::A::f::N*, self::A::f::S*, self::A::f::U*>();
+  }
+  get getter() → core::List<self::A::U*>* {
+    return this.{self::A::field}{core::List<self::A::U*>*};
+  }
+  set setter(covariant-by-class self::A::S* s) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class J<Aa extends core::Object* = dynamic, B extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::J<self::J::Aa*, self::J::B*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I<H extends core::Object* = dynamic, C extends core::Object* = dynamic, K extends core::Object* = dynamic> extends self::J<self::I::C*, self::I::K*> {
+  synthetic constructor •() → self::I<self::I::H*, self::I::C*, self::I::K*>*
+    : super self::J::•()
+    ;
+}
+static method main() → dynamic {
+  new self::A::•<core::num*, core::double*, core::List<dynamic>*>(1, 2.0);
+  self::A<dynamic, dynamic, dynamic>* a = self::A::f<core::int*, core::int*, core::int*>(1);
+  #C3;
+  core::List<dynamic>* z = a.{self::A::getter}{core::List<dynamic>*};
+  a.{self::A::setter} = 1;
+}
+
+constants  {
+  #C1 = null
+  #C2 = <Null>[#C1]
+  #C3 = self::A<core::int*, core::int*, core::List<dynamic>*> {field:#C2}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue_000070.dart:
+- A.c (from org-dartlang-testcase:///issue_000070.dart:22:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.weak.modular.expect
new file mode 100644
index 0000000..e61a3ce
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Mixin extends core::Object {
+  field dynamic field = null;
+  synthetic constructor •() → self::Mixin*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic
+    return 87;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Foo&Object&Mixin = core::Object with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Foo&Object&Mixin*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method foo() → dynamic
+    return super.{self::Mixin::foo}();
+  mixin-super-stub get field() → dynamic
+    return super.{self::Mixin::field};
+  mixin-super-stub set field(dynamic value) → void
+    return super.{self::Mixin::field} = value;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Foo extends self::_Foo&Object&Mixin {
+  synthetic constructor •() → self::Foo*
+    : super self::_Foo&Object&Mixin::•()
+    ;
+  method foo() → dynamic
+    return super.{self::_Foo&Object&Mixin::foo}();
+  method bar() → dynamic
+    return super.{self::_Foo&Object&Mixin::field};
+}
+static method main() → dynamic {
+  self::Foo* f = new self::Foo::•();
+  f.{self::_Foo&Object&Mixin::field} = 42;
+  core::print(f.{self::Foo::bar}(){() →* dynamic});
+}
diff --git a/pkg/front_end/testcases/rasta/issue_000081.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000081.dart.weak.modular.expect
new file mode 100644
index 0000000..5549963
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/issue_000081.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Base extends core::Object {
+  field core::int* hashCode = 42;
+  synthetic constructor •() → self::Base*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Sub extends self::Base {
+  field core::int* _hashCode = null;
+  synthetic constructor •() → self::Sub*
+    : super self::Base::•()
+    ;
+  get hashCode() → core::int*
+    return let final core::int* #t1 = this.{self::Sub::_hashCode}{core::int*} in #t1 == null ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : #t1;
+  method foo() → dynamic {
+    this.{self::Sub::_hashCode}{core::int*} == null ?{core::int*} this.{self::Sub::_hashCode} = super.{self::Base::hashCode} : null;
+  }
+}
+static method main() → dynamic {
+  core::print(new self::Sub::•().{self::Sub::hashCode}{core::int*});
+  core::List<Null>* l = <Null>[null];
+  let final core::List<Null>* #t2 = l in let final core::int* #t3 = 0 in #t2.{core::List::[]}(#t3){(core::int*) →* Null} == null ?{core::String*} #t2.{core::List::[]=}(#t3, "fisk" as{TypeError} Null){(core::int*, Null) →* void} : null;
+}
diff --git a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..40bd823
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.weak.modular.expect
@@ -0,0 +1,52 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/malformed_const_constructor.dart:8:5: Error: Expected '{' before this.
+//     : x = 'foo'
+//     ^
+//
+// pkg/front_end/testcases/rasta/malformed_const_constructor.dart:6:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const A()
+//   ^^^^^
+//
+// pkg/front_end/testcases/rasta/malformed_const_constructor.dart:8:5: Error: Expected a class member, but got ':'.
+//     : x = 'foo'
+//     ^
+//
+// pkg/front_end/testcases/rasta/malformed_const_constructor.dart:8:7: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+//     : x = 'foo'
+//       ^
+//
+// pkg/front_end/testcases/rasta/malformed_const_constructor.dart:13:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const A();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::String* x = "foo";
+  constructor •() → self::A*
+    : self::A::x = "foo", super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  invalid-expression "pkg/front_end/testcases/rasta/malformed_const_constructor.dart:13:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const A();
+        ^";
+  new self::A::•();
+}
diff --git a/pkg/front_end/testcases/rasta/malformed_function.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/malformed_function.dart.weak.modular.expect
new file mode 100644
index 0000000..35bc1cd
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/malformed_function.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/malformed_function.dart:7:8: Error: Can't assign to a parenthesized expression.
+//   (null) = null;
+//        ^
+//
+import self as self;
+
+static method main() → dynamic {
+  invalid-expression "pkg/front_end/testcases/rasta/malformed_function.dart:7:8: Error: Can't assign to a parenthesized expression.
+  (null) = null;
+       ^";
+}
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.modular.expect
new file mode 100644
index 0000000..50a886c
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/malformed_function_type.dart:5:16: Error: The typedef 'Handle' has a reference to itself.
+// typedef Handle Handle(String command);
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Handle = invalid-type;
+static method main() → dynamic {
+  invalid-type h;
+}
diff --git a/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..ac6a230
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart:5:16: Error: Non-optional parameters can't have a default value.
+// Try removing the default value or making the parameter optional.
+// main(arguments = [x]) {
+//                ^
+//
+// pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart:5:18: Error: Constant expression expected.
+// Try inserting 'const'.
+// main(arguments = [x]) {
+//                  ^
+//
+// pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart:5:19: Error: Undefined name 'x'.
+// main(arguments = [x]) {
+//                   ^
+//
+// pkg/front_end/testcases/rasta/mandatory_parameter_initializer.dart:5:18: Error: Non-constant list literal is not a constant expression.
+// main(arguments = [x]) {
+//                  ^
+//
+import self as self;
+
+static method main(dynamic arguments = invalid-expression "Non-constant list literal is not a constant expression.") → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.weak.modular.expect
new file mode 100644
index 0000000..e6d1af6
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library test.mixin_library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
+//   foo() => super.foo() + f();
+//                  ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Mixin<T extends core::Object* = dynamic> extends core::Object {
+  field dynamic x = self::f();
+  field dynamic y = null;
+  field dynamic z = null;
+  covariant-by-class field self::Mixin::T* t = null;
+  synthetic constructor •() → self::Mixin<self::Mixin::T*>*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic
+    return super.foo(){dynamic}.+(self::f());
+  method g(covariant-by-class self::Mixin::T* a) → self::Mixin::T*
+    return null;
+  method h() → dynamic
+    return self::V();
+  method l() → dynamic
+    return self::_private();
+  method _privateMethod() → dynamic
+    return 49;
+  method publicMethod() → dynamic
+    return this.{self::Mixin::_privateMethod}(){() →* dynamic};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f() → dynamic
+  return 2;
+static method V() → dynamic
+  return 87;
+static method _private() → dynamic
+  return 117;
+static method foo(dynamic m) → dynamic
+  return m{dynamic}._privateMethod();
diff --git a/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.modular.expect
new file mode 100644
index 0000000..7670aed
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Bar extends core::Object {
+  @#C2
+  external get x() → self::Bar*;
+  @#C4
+  external set x(self::Bar* value) → void;
+  @#C6
+  external method f() → dynamic;
+  @#C8
+  external static factory •() → self::Bar*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+@#C10
+external static method foo() → dynamic;
+
+constants  {
+  #C1 = "Bar_get_x"
+  #C2 = _in::ExternalName {name:#C1}
+  #C3 = "Bar_set_x"
+  #C4 = _in::ExternalName {name:#C3}
+  #C5 = "Bar_f"
+  #C6 = _in::ExternalName {name:#C5}
+  #C7 = "Bar_constructor"
+  #C8 = _in::ExternalName {name:#C7}
+  #C9 = "foo"
+  #C10 = _in::ExternalName {name:#C9}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///native_is_illegal.dart:
+- ExternalName. (from org-dartlang-sdk:///sdk/lib/internal/internal.dart:92:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/rasta/parser_error.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/parser_error.dart.weak.modular.expect
new file mode 100644
index 0000000..b83c501
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/parser_error.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/parser_error.dart:10:7: Error: Expected an identifier, but got '?'.
+// Try inserting an identifier before '?'.
+//   if (?b) return b;  /// 01: compile-time error
+//       ^
+//
+// pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: Expected ':' before this.
+//   if (?b) return b;  /// 01: compile-time error
+//         ^
+//
+// pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+//   if (?b) return b;  /// 01: compile-time error
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static method test(dynamic a, {dynamic b = #C1, dynamic c = #C1}) → core::int* {
+  if(invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:7: Error: This couldn't be parsed.
+  if (?b) return b;  /// 01: compile-time error
+      ^" ?{invalid-type} b : invalid-expression "pkg/front_end/testcases/rasta/parser_error.dart:10:9: Error: This couldn't be parsed.
+  if (?b) return b;  /// 01: compile-time error
+        ^")
+    return b as{TypeError,ForDynamic} core::int*;
+  return a{dynamic}.+(b){dynamic}.+(c) as{TypeError,ForDynamic} core::int*;
+}
+static method main() → dynamic {
+  exp::Expect::equals(6, self::test(1, b: 2, c: 3));
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.modular.expect
new file mode 100644
index 0000000..0a16b0d
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/previsit_deferred.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "deferred_lib.dart" as def;
+
+import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
+
+static method main() → dynamic {}
+static method test() → dynamic {
+  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::foo();
+}
+
+library deferred_lib;
+import self as def;
+
+static method foo() → dynamic
+  return null;
diff --git a/pkg/front_end/testcases/rasta/static.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/static.dart.weak.modular.expect
new file mode 100644
index 0000000..3be7b62
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/static.dart.weak.modular.expect
@@ -0,0 +1,339 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/static.dart:28:9: Error: Getter not found: 'staticSetter'.
+//     Foo.staticSetter;
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:29:13: Error: Getter not found: 'staticSetter'.
+//     use(Foo.staticSetter);
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:31:9: Error: Setter not found: 'staticConstant'.
+//     Foo.staticConstant++;
+//         ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:32:13: Error: Setter not found: 'staticConstant'.
+//     use(Foo.staticConstant++);
+//             ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:35:9: Error: Setter not found: 'staticFunction'.
+//     Foo.staticFunction++;
+//         ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:36:13: Error: Setter not found: 'staticFunction'.
+//     use(Foo.staticFunction++);
+//             ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:37:9: Error: Setter not found: 'staticGetter'.
+//     Foo.staticGetter++;
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:38:13: Error: Setter not found: 'staticGetter'.
+//     use(Foo.staticGetter++);
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:39:9: Error: Getter not found: 'staticSetter'.
+//     Foo.staticSetter++;
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:40:13: Error: Getter not found: 'staticSetter'.
+//     use(Foo.staticSetter++);
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:42:11: Error: Setter not found: 'staticConstant'.
+//     ++Foo.staticConstant;
+//           ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:43:15: Error: Setter not found: 'staticConstant'.
+//     use(++Foo.staticConstant);
+//               ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:46:11: Error: Setter not found: 'staticFunction'.
+//     ++Foo.staticFunction;
+//           ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:47:15: Error: Setter not found: 'staticFunction'.
+//     use(++Foo.staticFunction);
+//               ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:48:11: Error: Setter not found: 'staticGetter'.
+//     ++Foo.staticGetter;
+//           ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:49:15: Error: Setter not found: 'staticGetter'.
+//     use(++Foo.staticGetter);
+//               ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:50:11: Error: Getter not found: 'staticSetter'.
+//     ++Foo.staticSetter;
+//           ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:51:15: Error: Getter not found: 'staticSetter'.
+//     use(++Foo.staticSetter);
+//               ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:61:9: Error: Getter not found: 'staticSetter'.
+//     Foo.staticSetter();
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:62:13: Error: Getter not found: 'staticSetter'.
+//     use(Foo.staticSetter());
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:64:9: Error: Setter not found: 'staticConstant'.
+//     Foo.staticConstant = 87;
+//         ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:65:13: Error: Setter not found: 'staticConstant'.
+//     use(Foo.staticConstant = 87);
+//             ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:68:9: Error: Setter not found: 'staticFunction'.
+//     Foo.staticFunction = 87;
+//         ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:69:13: Error: Setter not found: 'staticFunction'.
+//     use(Foo.staticFunction = 87);
+//             ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:70:9: Error: Setter not found: 'staticGetter'.
+//     Foo.staticGetter = 87;
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:71:13: Error: Setter not found: 'staticGetter'.
+//     use(Foo.staticGetter = 87);
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:75:9: Error: Setter not found: 'staticConstant'.
+//     Foo.staticConstant ??= 87;
+//         ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
+//     use(Foo.staticConstant ??= 87);
+//             ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
+//     Foo.staticFunction ??= 87;
+//         ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:80:13: Error: Setter not found: 'staticFunction'.
+//     use(Foo.staticFunction ??= 87);
+//             ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:81:9: Error: Setter not found: 'staticGetter'.
+//     Foo.staticGetter ??= 87;
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:82:13: Error: Setter not found: 'staticGetter'.
+//     use(Foo.staticGetter ??= 87);
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:83:9: Error: Getter not found: 'staticSetter'.
+//     Foo.staticSetter ??= 87;
+//         ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:84:13: Error: Getter not found: 'staticSetter'.
+//     use(Foo.staticSetter ??= 87);
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/static.dart:53:23: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     Foo.staticConstant();
+//                       ^
+//
+// pkg/front_end/testcases/rasta/static.dart:54:27: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     use(Foo.staticConstant());
+//                           ^
+//
+// pkg/front_end/testcases/rasta/static.dart:55:20: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     Foo.staticField();
+//                    ^
+//
+// pkg/front_end/testcases/rasta/static.dart:56:24: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     use(Foo.staticField());
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  static const field core::int* staticConstant = #C1;
+  static field core::int* staticField = 42;
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  static method staticFunction() → dynamic {}
+  static get staticGetter() → dynamic
+    return null;
+  static set staticSetter(dynamic _) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method use(dynamic x) → dynamic {
+  if(x =={core::Object::==}{(core::Object*) →* core::bool*} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*})
+    throw "Shouldn't happen";
+}
+static method main() → dynamic {
+  try {
+    #C1;
+    self::use(#C1);
+    self::Foo::staticField;
+    self::use(self::Foo::staticField);
+    #C2;
+    self::use(#C2);
+    self::Foo::staticGetter;
+    self::use(self::Foo::staticGetter);
+    invalid-expression "pkg/front_end/testcases/rasta/static.dart:28:9: Error: Getter not found: 'staticSetter'.
+    Foo.staticSetter;
+        ^^^^^^^^^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:29:13: Error: Getter not found: 'staticSetter'.
+    use(Foo.staticSetter);
+            ^^^^^^^^^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/static.dart:31:9: Error: Setter not found: 'staticConstant'.
+    Foo.staticConstant++;
+        ^^^^^^^^^^^^^^";
+    self::use(let final core::int* #t1 = #C1 in let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:32:13: Error: Setter not found: 'staticConstant'.
+    use(Foo.staticConstant++);
+            ^^^^^^^^^^^^^^" in #t1);
+    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*};
+    self::use(let final core::int* #t3 = self::Foo::staticField in let final core::int* #t4 = self::Foo::staticField = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3);
+    invalid-expression "pkg/front_end/testcases/rasta/static.dart:35:9: Error: Setter not found: 'staticFunction'.
+    Foo.staticFunction++;
+        ^^^^^^^^^^^^^^";
+    self::use(let final () →* dynamic #t5 = #C2 in let final invalid-type #t6 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:36:13: Error: Setter not found: 'staticFunction'.
+    use(Foo.staticFunction++);
+            ^^^^^^^^^^^^^^" in #t5);
+    invalid-expression "pkg/front_end/testcases/rasta/static.dart:37:9: Error: Setter not found: 'staticGetter'.
+    Foo.staticGetter++;
+        ^^^^^^^^^^^^";
+    self::use(let final dynamic #t7 = self::Foo::staticGetter in let final invalid-type #t8 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:38:13: Error: Setter not found: 'staticGetter'.
+    use(Foo.staticGetter++);
+            ^^^^^^^^^^^^" in #t7);
+    self::Foo::staticSetter = invalid-expression "pkg/front_end/testcases/rasta/static.dart:39:9: Error: Getter not found: 'staticSetter'.
+    Foo.staticSetter++;
+        ^^^^^^^^^^^^"{<invalid>}.+(1);
+    self::use(let final invalid-type #t9 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:40:13: Error: Getter not found: 'staticSetter'.
+    use(Foo.staticSetter++);
+            ^^^^^^^^^^^^" in let final invalid-type #t10 = self::Foo::staticSetter = #t9{<invalid>}.+(1) in #t9);
+    invalid-expression "pkg/front_end/testcases/rasta/static.dart:42:11: Error: Setter not found: 'staticConstant'.
+    ++Foo.staticConstant;
+          ^^^^^^^^^^^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:43:15: Error: Setter not found: 'staticConstant'.
+    use(++Foo.staticConstant);
+              ^^^^^^^^^^^^^^");
+    self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*};
+    self::use(self::Foo::staticField = self::Foo::staticField.{core::num::+}(1){(core::num*) →* core::int*});
+    invalid-expression "pkg/front_end/testcases/rasta/static.dart:46:11: Error: Setter not found: 'staticFunction'.
+    ++Foo.staticFunction;
+          ^^^^^^^^^^^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:47:15: Error: Setter not found: 'staticFunction'.
+    use(++Foo.staticFunction);
+              ^^^^^^^^^^^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/static.dart:48:11: Error: Setter not found: 'staticGetter'.
+    ++Foo.staticGetter;
+          ^^^^^^^^^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:49:15: Error: Setter not found: 'staticGetter'.
+    use(++Foo.staticGetter);
+              ^^^^^^^^^^^^");
+    self::Foo::staticSetter = invalid-expression "pkg/front_end/testcases/rasta/static.dart:50:11: Error: Getter not found: 'staticSetter'.
+    ++Foo.staticSetter;
+          ^^^^^^^^^^^^"{<invalid>}.+(1);
+    self::use(self::Foo::staticSetter = invalid-expression "pkg/front_end/testcases/rasta/static.dart:51:15: Error: Getter not found: 'staticSetter'.
+    use(++Foo.staticSetter);
+              ^^^^^^^^^^^^"{<invalid>}.+(1));
+    invalid-expression "pkg/front_end/testcases/rasta/static.dart:53:23: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    Foo.staticConstant();
+                      ^" in #C1{<unresolved>}.call();
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:54:27: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    use(Foo.staticConstant());
+                          ^" in #C1{<unresolved>}.call());
+    invalid-expression "pkg/front_end/testcases/rasta/static.dart:55:20: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    Foo.staticField();
+                   ^" in self::Foo::staticField{<unresolved>}.call();
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:56:24: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    use(Foo.staticField());
+                       ^" in self::Foo::staticField{<unresolved>}.call());
+    self::Foo::staticFunction();
+    self::use(self::Foo::staticFunction());
+    self::Foo::staticGetter{dynamic}.call();
+    self::use(self::Foo::staticGetter{dynamic}.call());
+    invalid-expression "pkg/front_end/testcases/rasta/static.dart:61:9: Error: Getter not found: 'staticSetter'.
+    Foo.staticSetter();
+        ^^^^^^^^^^^^"{dynamic}.call();
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:62:13: Error: Getter not found: 'staticSetter'.
+    use(Foo.staticSetter());
+            ^^^^^^^^^^^^"{dynamic}.call());
+    invalid-expression "pkg/front_end/testcases/rasta/static.dart:64:9: Error: Setter not found: 'staticConstant'.
+    Foo.staticConstant = 87;
+        ^^^^^^^^^^^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:65:13: Error: Setter not found: 'staticConstant'.
+    use(Foo.staticConstant = 87);
+            ^^^^^^^^^^^^^^");
+    self::Foo::staticField = 87;
+    self::use(self::Foo::staticField = 87);
+    invalid-expression "pkg/front_end/testcases/rasta/static.dart:68:9: Error: Setter not found: 'staticFunction'.
+    Foo.staticFunction = 87;
+        ^^^^^^^^^^^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:69:13: Error: Setter not found: 'staticFunction'.
+    use(Foo.staticFunction = 87);
+            ^^^^^^^^^^^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/static.dart:70:9: Error: Setter not found: 'staticGetter'.
+    Foo.staticGetter = 87;
+        ^^^^^^^^^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/static.dart:71:13: Error: Setter not found: 'staticGetter'.
+    use(Foo.staticGetter = 87);
+            ^^^^^^^^^^^^");
+    self::Foo::staticSetter = 87;
+    self::use(self::Foo::staticSetter = 87);
+    #C1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:75:9: Error: Setter not found: 'staticConstant'.
+    Foo.staticConstant ??= 87;
+        ^^^^^^^^^^^^^^" : null;
+    self::use(let final core::int* #t11 = #C1 in #t11 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:76:13: Error: Setter not found: 'staticConstant'.
+    use(Foo.staticConstant ??= 87);
+            ^^^^^^^^^^^^^^" : #t11);
+    self::Foo::staticField == null ?{core::int*} self::Foo::staticField = 87 : null;
+    self::use(let final core::int* #t12 = self::Foo::staticField in #t12 == null ?{core::int*} self::Foo::staticField = 87 : #t12);
+    #C2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:79:9: Error: Setter not found: 'staticFunction'.
+    Foo.staticFunction ??= 87;
+        ^^^^^^^^^^^^^^" : null;
+    self::use(let final () →* dynamic #t13 = #C2 in #t13 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:80:13: Error: Setter not found: 'staticFunction'.
+    use(Foo.staticFunction ??= 87);
+            ^^^^^^^^^^^^^^" : #t13);
+    self::Foo::staticGetter == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:81:9: Error: Setter not found: 'staticGetter'.
+    Foo.staticGetter ??= 87;
+        ^^^^^^^^^^^^" : null;
+    self::use(let final dynamic #t14 = self::Foo::staticGetter in #t14 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/static.dart:82:13: Error: Setter not found: 'staticGetter'.
+    use(Foo.staticGetter ??= 87);
+            ^^^^^^^^^^^^" : #t14);
+    invalid-expression "pkg/front_end/testcases/rasta/static.dart:83:9: Error: Getter not found: 'staticSetter'.
+    Foo.staticSetter ??= 87;
+        ^^^^^^^^^^^^" == null ?{invalid-type} self::Foo::staticSetter = 87 : null;
+    self::use(let final invalid-type #t15 = invalid-expression "pkg/front_end/testcases/rasta/static.dart:84:13: Error: Getter not found: 'staticSetter'.
+    use(Foo.staticSetter ??= 87);
+            ^^^^^^^^^^^^" in #t15 == null ?{invalid-type} self::Foo::staticSetter = 87 : #t15);
+  }
+  on core::NoSuchMethodError* catch(no-exception-var) {
+  }
+}
+
+constants  {
+  #C1 = 42
+  #C2 = static-tearoff self::Foo::staticFunction
+}
diff --git a/pkg/front_end/testcases/rasta/super.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/super.dart.weak.modular.expect
new file mode 100644
index 0000000..e24c07d
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/super.dart.weak.modular.expect
@@ -0,0 +1,687 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/super.dart:27:7: Error: 'n' is already declared in this scope.
+//   set n(_) {}
+//       ^
+// pkg/front_end/testcases/rasta/super.dart:26:8: Context: Previous declaration of 'n'.
+//   void n() {}
+//        ^
+//
+// pkg/front_end/testcases/rasta/super.dart:43:5: Error: '+' is not a prefix operator.
+// Try removing '+'.
+//     +super;
+//     ^
+//
+// pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//     +super;
+//      ^^^^^
+//
+// pkg/front_end/testcases/rasta/super.dart:44:9: Error: '+' is not a prefix operator.
+// Try removing '+'.
+//     use(+super);
+//         ^
+//
+// pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//     use(+super);
+//          ^^^^^
+//
+// pkg/front_end/testcases/rasta/super.dart:62:11: Error: Superclass has no getter named 'g'.
+//     super.g;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:63:15: Error: Superclass has no getter named 'g'.
+//     use(super.g);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:83:11: Error: Superclass has no setter named 'e'.
+//     super.e++;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:84:15: Error: Superclass has no setter named 'e'.
+//     use(super.e++);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:85:11: Error: Superclass has no setter named 'f'.
+//     super.f++;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:86:15: Error: Superclass has no setter named 'f'.
+//     use(super.f++);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:87:11: Error: Superclass has no getter named 'g'.
+//     super.g++;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:88:15: Error: Superclass has no getter named 'g'.
+//     use(super.g++);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:95:11: Error: Superclass has no setter named 'm'.
+//     super.m++;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:96:15: Error: Superclass has no setter named 'm'.
+//     use(super.m++);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:108:13: Error: Superclass has no setter named 'e'.
+//     ++super.e;
+//             ^
+//
+// pkg/front_end/testcases/rasta/super.dart:109:17: Error: Superclass has no setter named 'e'.
+//     use(++super.e);
+//                 ^
+//
+// pkg/front_end/testcases/rasta/super.dart:110:13: Error: Superclass has no setter named 'f'.
+//     ++super.f;
+//             ^
+//
+// pkg/front_end/testcases/rasta/super.dart:111:17: Error: Superclass has no setter named 'f'.
+//     use(++super.f);
+//                 ^
+//
+// pkg/front_end/testcases/rasta/super.dart:112:13: Error: Superclass has no getter named 'g'.
+//     ++super.g;
+//             ^
+//
+// pkg/front_end/testcases/rasta/super.dart:113:17: Error: Superclass has no getter named 'g'.
+//     use(++super.g);
+//                 ^
+//
+// pkg/front_end/testcases/rasta/super.dart:120:13: Error: Superclass has no setter named 'm'.
+//     ++super.m;
+//             ^
+//
+// pkg/front_end/testcases/rasta/super.dart:121:17: Error: Superclass has no setter named 'm'.
+//     use(++super.m);
+//                 ^
+//
+// pkg/front_end/testcases/rasta/super.dart:137:11: Error: Superclass has no method named 'g'.
+//     super.g();
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:138:15: Error: Superclass has no method named 'g'.
+//     use(super.g());
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:160:11: Error: Superclass has no setter named 'e'.
+//     super.e = 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:161:15: Error: Superclass has no setter named 'e'.
+//     use(super.e = 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:162:11: Error: Superclass has no setter named 'f'.
+//     super.f = 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:163:15: Error: Superclass has no setter named 'f'.
+//     use(super.f = 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:172:11: Error: Superclass has no setter named 'm'.
+//     super.m = 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:173:15: Error: Superclass has no setter named 'm'.
+//     use(super.m = 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:185:11: Error: Superclass has no setter named 'e'.
+//     super.e ??= 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:186:15: Error: Superclass has no setter named 'e'.
+//     use(super.e ??= 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:187:11: Error: Superclass has no setter named 'f'.
+//     super.f ??= 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:188:15: Error: Superclass has no setter named 'f'.
+//     use(super.f ??= 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:189:11: Error: Superclass has no getter named 'g'.
+//     super.g ??= 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:190:15: Error: Superclass has no getter named 'g'.
+//     use(super.g ??= 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:197:11: Error: Superclass has no setter named 'm'.
+//     super.m ??= 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:198:15: Error: Superclass has no setter named 'm'.
+//     use(super.m ??= 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:210:11: Error: Superclass has no setter named 'e'.
+//     super.e += 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:211:15: Error: Superclass has no setter named 'e'.
+//     use(super.e += 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:212:11: Error: Superclass has no setter named 'f'.
+//     super.f += 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:213:15: Error: Superclass has no setter named 'f'.
+//     use(super.f += 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:214:11: Error: Superclass has no getter named 'g'.
+//     super.g += 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:215:15: Error: Superclass has no getter named 'g'.
+//     use(super.g += 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:222:11: Error: Superclass has no setter named 'm'.
+//     super.m += 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:223:15: Error: Superclass has no setter named 'm'.
+//     use(super.m += 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:235:11: Error: Superclass has no setter named 'e'.
+//     super.e -= 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:236:15: Error: Superclass has no setter named 'e'.
+//     use(super.e -= 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:237:11: Error: Superclass has no setter named 'f'.
+//     super.f -= 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:238:15: Error: Superclass has no setter named 'f'.
+//     use(super.f -= 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:239:11: Error: Superclass has no getter named 'g'.
+//     super.g -= 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:240:15: Error: Superclass has no getter named 'g'.
+//     use(super.g -= 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:247:11: Error: Superclass has no setter named 'm'.
+//     super.m -= 42;
+//           ^
+//
+// pkg/front_end/testcases/rasta/super.dart:248:15: Error: Superclass has no setter named 'm'.
+//     use(super.m -= 42);
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:95:12: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//     super.m++;
+//            ^
+//
+// pkg/front_end/testcases/rasta/super.dart:96:16: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//     use(super.m++);
+//                ^
+//
+// pkg/front_end/testcases/rasta/super.dart:97:12: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//     super.n++;
+//            ^
+//
+// pkg/front_end/testcases/rasta/super.dart:98:16: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//     use(super.n++);
+//                ^
+//
+// pkg/front_end/testcases/rasta/super.dart:120:5: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//     ++super.m;
+//     ^
+//
+// pkg/front_end/testcases/rasta/super.dart:121:9: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//     use(++super.m);
+//         ^
+//
+// pkg/front_end/testcases/rasta/super.dart:122:5: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//     ++super.n;
+//     ^
+//
+// pkg/front_end/testcases/rasta/super.dart:123:9: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//     use(++super.n);
+//         ^
+//
+// pkg/front_end/testcases/rasta/super.dart:146:15: Error: This expression has type 'void' and can't be used.
+//     use(super.m());
+//               ^
+//
+// pkg/front_end/testcases/rasta/super.dart:147:12: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     super.m(87);
+//            ^
+//
+// pkg/front_end/testcases/rasta/super.dart:148:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     use(super.m(87));
+//                ^
+//
+// pkg/front_end/testcases/rasta/super.dart:149:12: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     super.n(87);
+//            ^
+//
+// pkg/front_end/testcases/rasta/super.dart:150:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     use(super.n(87));
+//                ^
+//
+// pkg/front_end/testcases/rasta/super.dart:222:13: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//     super.m += 42;
+//             ^
+//
+// pkg/front_end/testcases/rasta/super.dart:223:17: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//     use(super.m += 42);
+//                 ^
+//
+// pkg/front_end/testcases/rasta/super.dart:224:13: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//     super.n += 42;
+//             ^
+//
+// pkg/front_end/testcases/rasta/super.dart:225:17: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
+//     use(super.n += 42);
+//                 ^
+//
+// pkg/front_end/testcases/rasta/super.dart:247:13: Error: The operator '-' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
+//     super.m -= 42;
+//             ^
+//
+// pkg/front_end/testcases/rasta/super.dart:248:17: Error: The operator '-' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
+//     use(super.m -= 42);
+//                 ^
+//
+// pkg/front_end/testcases/rasta/super.dart:249:13: Error: The operator '-' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
+//     super.n -= 42;
+//             ^
+//
+// pkg/front_end/testcases/rasta/super.dart:250:17: Error: The operator '-' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
+//     use(super.n -= 42);
+//                 ^
+//
+// pkg/front_end/testcases/rasta/super.dart:11:9: Error: Final field 'f' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final f;
+//         ^
+//
+// pkg/front_end/testcases/rasta/super.dart:33:9: Error: Final field 'd' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final d;
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field dynamic a = null;
+  field dynamic b = null;
+  field dynamic c = null;
+  field dynamic d = null;
+  final field dynamic f = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  get e() → dynamic
+    return null;
+  set g(dynamic _) → void {}
+  get h() → dynamic
+    return null;
+  set h(dynamic _) → void {}
+  get i() → dynamic
+    return null;
+  operator [](dynamic _) → dynamic
+    return null;
+  operator []=(dynamic a, dynamic b) → void {}
+  operator ~() → dynamic
+    return 117;
+  operator unary-() → dynamic
+    return 117;
+  operator ==(dynamic other) → core::bool*
+    return true;
+  method m() → void {}
+  method n() → void {}
+  set n(dynamic _) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  final field dynamic d = null;
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  get b() → dynamic
+    return null;
+  set c(dynamic x) → void {}
+  set i(dynamic x) → void {}
+}
+class C extends self::B {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  method test() → dynamic {
+    super.{self::A::~}();
+    self::use(super.{self::A::~}());
+    super.{self::A::unary-}();
+    self::use(super.{self::A::unary-}());
+    invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:5: Error: This couldn't be parsed.
+    +super;
+    ^"{<invalid>}.+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+    +super;
+     ^^^^^");
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:9: Error: This couldn't be parsed.
+    use(+super);
+        ^"{<invalid>}.+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+    use(+super);
+         ^^^^^"));
+    super.{self::A::==}(87);
+    self::use(super.{self::A::==}(87));
+    !super.{self::A::==}(87);
+    self::use(!super.{self::A::==}(87));
+    super.{self::A::a};
+    self::use(super.{self::A::a});
+    super.{self::B::b};
+    self::use(super.{self::B::b});
+    super.{self::A::c};
+    self::use(super.{self::A::c});
+    super.{self::B::d};
+    self::use(super.{self::B::d});
+    super.{self::A::e};
+    self::use(super.{self::A::e});
+    super.{self::A::f};
+    self::use(super.{self::A::f});
+    super.g;
+    self::use(super.g);
+    super.{self::A::h};
+    self::use(super.{self::A::h});
+    super.{self::A::i};
+    self::use(super.{self::A::i});
+    super.{self::A::[]}(87);
+    self::use(super.{self::A::[]}(87));
+    super.{self::A::m};
+    self::use(super.{self::A::m});
+    super.{self::A::n};
+    self::use(super.{self::A::n});
+    super.{self::A::a} = super.{self::A::a}{dynamic}.+(1);
+    self::use(let final dynamic #t1 = super.{self::A::a} in let final dynamic #t2 = super.{self::A::a} = #t1{dynamic}.+(1) in #t1);
+    super.{self::A::b} = super.{self::B::b}{dynamic}.+(1);
+    self::use(let final dynamic #t3 = super.{self::B::b} in let final dynamic #t4 = super.{self::A::b} = #t3{dynamic}.+(1) in #t3);
+    super.{self::B::c} = super.{self::A::c}{dynamic}.+(1);
+    self::use(let final dynamic #t5 = super.{self::A::c} in let final dynamic #t6 = super.{self::B::c} = #t5{dynamic}.+(1) in #t5);
+    super.{self::A::d} = super.{self::B::d}{dynamic}.+(1);
+    self::use(let final dynamic #t7 = super.{self::B::d} in let final dynamic #t8 = super.{self::A::d} = #t7{dynamic}.+(1) in #t7);
+    super.e = super.{self::A::e}{dynamic}.+(1);
+    self::use(let final dynamic #t9 = super.{self::A::e} in let final dynamic #t10 = super.e = #t9{dynamic}.+(1) in #t9);
+    super.f = super.{self::A::f}{dynamic}.+(1);
+    self::use(let final dynamic #t11 = super.{self::A::f} in let final dynamic #t12 = super.f = #t11{dynamic}.+(1) in #t11);
+    super.{self::A::g} = super.g{dynamic}.+(1);
+    self::use(let final dynamic #t13 = super.g in let final dynamic #t14 = super.{self::A::g} = #t13{dynamic}.+(1) in #t13);
+    super.{self::A::h} = super.{self::A::h}{dynamic}.+(1);
+    self::use(let final dynamic #t15 = super.{self::A::h} in let final dynamic #t16 = super.{self::A::h} = #t15{dynamic}.+(1) in #t15);
+    super.{self::B::i} = super.{self::A::i}{dynamic}.+(1);
+    self::use(let final dynamic #t17 = super.{self::A::i} in let final dynamic #t18 = super.{self::B::i} = #t17{dynamic}.+(1) in #t17);
+    let final core::int* #t19 = 87 in super.{self::A::[]=}(#t19, super.{self::A::[]}(#t19){dynamic}.+(1));
+    self::use(let final core::int* #t20 = 87 in let final dynamic #t21 = super.{self::A::[]}(#t20) in let final void #t22 = super.{self::A::[]=}(#t20, #t21{dynamic}.+(1)) in #t21);
+    super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:95:12: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+    super.m++;
+           ^" in super.{self::A::m}{<unresolved>}.+(1);
+    self::use(let final () →* void #t23 = super.{self::A::m} in let final dynamic #t24 = super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:96:16: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+    use(super.m++);
+               ^" in #t23{<unresolved>}.+(1) in #t23);
+    super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:97:12: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+    super.n++;
+           ^" in super.{self::A::n}{<unresolved>}.+(1);
+    self::use(let final () →* void #t25 = super.{self::A::n} in let final dynamic #t26 = super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:98:16: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+    use(super.n++);
+               ^" in #t25{<unresolved>}.+(1) in #t25);
+    super.{self::A::a} = super.{self::A::a}{dynamic}.+(1);
+    self::use(super.{self::A::a} = super.{self::A::a}{dynamic}.+(1));
+    super.{self::A::b} = super.{self::B::b}{dynamic}.+(1);
+    self::use(super.{self::A::b} = super.{self::B::b}{dynamic}.+(1));
+    super.{self::B::c} = super.{self::A::c}{dynamic}.+(1);
+    self::use(super.{self::B::c} = super.{self::A::c}{dynamic}.+(1));
+    super.{self::A::d} = super.{self::B::d}{dynamic}.+(1);
+    self::use(super.{self::A::d} = super.{self::B::d}{dynamic}.+(1));
+    super.e = super.{self::A::e}{dynamic}.+(1);
+    self::use(super.e = super.{self::A::e}{dynamic}.+(1));
+    super.f = super.{self::A::f}{dynamic}.+(1);
+    self::use(super.f = super.{self::A::f}{dynamic}.+(1));
+    super.{self::A::g} = super.g{dynamic}.+(1);
+    self::use(super.{self::A::g} = super.g{dynamic}.+(1));
+    super.{self::A::h} = super.{self::A::h}{dynamic}.+(1);
+    self::use(super.{self::A::h} = super.{self::A::h}{dynamic}.+(1));
+    super.{self::B::i} = super.{self::A::i}{dynamic}.+(1);
+    self::use(super.{self::B::i} = super.{self::A::i}{dynamic}.+(1));
+    let final core::int* #t27 = 87 in let final dynamic #t28 = super.{self::A::[]}(#t27){dynamic}.+(1) in let final void #t29 = super.{self::A::[]=}(#t27, #t28) in #t28;
+    self::use(let final core::int* #t30 = 87 in let final dynamic #t31 = super.{self::A::[]}(#t30){dynamic}.+(1) in let final void #t32 = super.{self::A::[]=}(#t30, #t31) in #t31);
+    super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:120:5: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+    ++super.m;
+    ^" in super.{self::A::m}{<unresolved>}.+(1);
+    self::use(super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:121:9: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+    use(++super.m);
+        ^" in super.{self::A::m}{<unresolved>}.+(1));
+    super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:122:5: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+    ++super.n;
+    ^" in super.{self::A::n}{<unresolved>}.+(1);
+    self::use(super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:123:9: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+    use(++super.n);
+        ^" in super.{self::A::n}{<unresolved>}.+(1));
+    super.{self::A::a}{dynamic}.call();
+    self::use(super.{self::A::a}{dynamic}.call());
+    super.{self::B::b}{dynamic}.call();
+    self::use(super.{self::B::b}{dynamic}.call());
+    super.{self::A::c}{dynamic}.call();
+    self::use(super.{self::A::c}{dynamic}.call());
+    super.{self::B::d}{dynamic}.call();
+    self::use(super.{self::B::d}{dynamic}.call());
+    super.{self::A::e}{dynamic}.call();
+    self::use(super.{self::A::e}{dynamic}.call());
+    super.{self::A::f}{dynamic}.call();
+    self::use(super.{self::A::f}{dynamic}.call());
+    super.g();
+    self::use(super.g());
+    super.{self::A::h}{dynamic}.call();
+    self::use(super.{self::A::h}{dynamic}.call());
+    super.{self::A::i}{dynamic}.call();
+    self::use(super.{self::A::i}{dynamic}.call());
+    super.{self::A::[]}(87){dynamic}.call();
+    self::use(super.{self::A::[]}(87){dynamic}.call());
+    super.{self::A::m}();
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/super.dart:146:15: Error: This expression has type 'void' and can't be used.
+    use(super.m());
+              ^" in super.{self::A::m}());
+    invalid-expression "pkg/front_end/testcases/rasta/super.dart:147:12: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    super.m(87);
+           ^" in super.{self::A::m}(87);
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/super.dart:148:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    use(super.m(87));
+               ^" in super.{self::A::m}(87));
+    invalid-expression "pkg/front_end/testcases/rasta/super.dart:149:12: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    super.n(87);
+           ^" in super.{self::A::n}(87);
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/super.dart:150:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    use(super.n(87));
+               ^" in super.{self::A::n}(87));
+    super.{self::A::a} = 42;
+    self::use(super.{self::A::a} = 42);
+    super.{self::A::b} = 42;
+    self::use(super.{self::A::b} = 42);
+    super.{self::B::c} = 42;
+    self::use(super.{self::B::c} = 42);
+    super.{self::A::d} = 42;
+    self::use(super.{self::A::d} = 42);
+    super.e = 42;
+    self::use(super.e = 42);
+    super.f = 42;
+    self::use(super.f = 42);
+    super.{self::A::g} = 42;
+    self::use(super.{self::A::g} = 42);
+    super.{self::A::h} = 42;
+    self::use(super.{self::A::h} = 42);
+    super.{self::B::i} = 42;
+    self::use(super.{self::B::i} = 42);
+    super.{self::A::[]=}(87, 42);
+    self::use(let final core::int* #t33 = 87 in let final core::int* #t34 = 42 in let final void #t35 = super.{self::A::[]=}(#t33, #t34) in #t34);
+    super.m = 42;
+    self::use(super.m = 42);
+    super.{self::A::n} = 42;
+    self::use(super.{self::A::n} = 42);
+    super.{self::A::a} == null ?{dynamic} super.{self::A::a} = 42 : null;
+    self::use(let final dynamic #t36 = super.{self::A::a} in #t36 == null ?{dynamic} super.{self::A::a} = 42 : #t36);
+    super.{self::B::b} == null ?{dynamic} super.{self::A::b} = 42 : null;
+    self::use(let final dynamic #t37 = super.{self::B::b} in #t37 == null ?{dynamic} super.{self::A::b} = 42 : #t37);
+    super.{self::A::c} == null ?{dynamic} super.{self::B::c} = 42 : null;
+    self::use(let final dynamic #t38 = super.{self::A::c} in #t38 == null ?{dynamic} super.{self::B::c} = 42 : #t38);
+    super.{self::B::d} == null ?{dynamic} super.{self::A::d} = 42 : null;
+    self::use(let final dynamic #t39 = super.{self::B::d} in #t39 == null ?{dynamic} super.{self::A::d} = 42 : #t39);
+    super.{self::A::e} == null ?{dynamic} super.e = 42 : null;
+    self::use(let final dynamic #t40 = super.{self::A::e} in #t40 == null ?{dynamic} super.e = 42 : #t40);
+    super.{self::A::f} == null ?{dynamic} super.f = 42 : null;
+    self::use(let final dynamic #t41 = super.{self::A::f} in #t41 == null ?{dynamic} super.f = 42 : #t41);
+    super.g == null ?{dynamic} super.{self::A::g} = 42 : null;
+    self::use(let final dynamic #t42 = super.g in #t42 == null ?{dynamic} super.{self::A::g} = 42 : #t42);
+    super.{self::A::h} == null ?{dynamic} super.{self::A::h} = 42 : null;
+    self::use(let final dynamic #t43 = super.{self::A::h} in #t43 == null ?{dynamic} super.{self::A::h} = 42 : #t43);
+    super.{self::A::i} == null ?{dynamic} super.{self::B::i} = 42 : null;
+    self::use(let final dynamic #t44 = super.{self::A::i} in #t44 == null ?{dynamic} super.{self::B::i} = 42 : #t44);
+    let final core::int* #t45 = 87 in super.{self::A::[]}(#t45) == null ?{dynamic} super.{self::A::[]=}(#t45, 42) : null;
+    self::use(let final core::int* #t46 = 87 in let final dynamic #t47 = super.{self::A::[]}(#t46) in #t47 == null ?{dynamic} let final core::int* #t48 = 42 in let final void #t49 = super.{self::A::[]=}(#t46, #t48) in #t48 : #t47);
+    super.{self::A::m} == null ?{core::Object*} super.m = 42 : null;
+    self::use(let final () →* void #t50 = super.{self::A::m} in #t50 == null ?{core::Object*} super.m = 42 : #t50);
+    super.{self::A::n} == null ?{core::Object*} super.{self::A::n} = 42 : null;
+    self::use(let final () →* void #t51 = super.{self::A::n} in #t51 == null ?{core::Object*} super.{self::A::n} = 42 : #t51);
+    super.{self::A::a} = super.{self::A::a}{dynamic}.+(42);
+    self::use(super.{self::A::a} = super.{self::A::a}{dynamic}.+(42));
+    super.{self::A::b} = super.{self::B::b}{dynamic}.+(42);
+    self::use(super.{self::A::b} = super.{self::B::b}{dynamic}.+(42));
+    super.{self::B::c} = super.{self::A::c}{dynamic}.+(42);
+    self::use(super.{self::B::c} = super.{self::A::c}{dynamic}.+(42));
+    super.{self::A::d} = super.{self::B::d}{dynamic}.+(42);
+    self::use(super.{self::A::d} = super.{self::B::d}{dynamic}.+(42));
+    super.e = super.{self::A::e}{dynamic}.+(42);
+    self::use(super.e = super.{self::A::e}{dynamic}.+(42));
+    super.f = super.{self::A::f}{dynamic}.+(42);
+    self::use(super.f = super.{self::A::f}{dynamic}.+(42));
+    super.{self::A::g} = super.g{dynamic}.+(42);
+    self::use(super.{self::A::g} = super.g{dynamic}.+(42));
+    super.{self::A::h} = super.{self::A::h}{dynamic}.+(42);
+    self::use(super.{self::A::h} = super.{self::A::h}{dynamic}.+(42));
+    super.{self::B::i} = super.{self::A::i}{dynamic}.+(42);
+    self::use(super.{self::B::i} = super.{self::A::i}{dynamic}.+(42));
+    let final core::int* #t52 = 87 in super.{self::A::[]=}(#t52, super.{self::A::[]}(#t52){dynamic}.+(42));
+    self::use(let final core::int* #t53 = 87 in let final dynamic #t54 = super.{self::A::[]}(#t53){dynamic}.+(42) in let final void #t55 = super.{self::A::[]=}(#t53, #t54) in #t54);
+    super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:222:13: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+    super.m += 42;
+            ^" in super.{self::A::m}{<unresolved>}.+(42);
+    self::use(super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:223:17: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+    use(super.m += 42);
+                ^" in super.{self::A::m}{<unresolved>}.+(42));
+    super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:224:13: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+    super.n += 42;
+            ^" in super.{self::A::n}{<unresolved>}.+(42);
+    self::use(super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:225:17: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+    use(super.n += 42);
+                ^" in super.{self::A::n}{<unresolved>}.+(42));
+    super.{self::A::a} = super.{self::A::a}{dynamic}.-(42);
+    self::use(super.{self::A::a} = super.{self::A::a}{dynamic}.-(42));
+    super.{self::A::b} = super.{self::B::b}{dynamic}.-(42);
+    self::use(super.{self::A::b} = super.{self::B::b}{dynamic}.-(42));
+    super.{self::B::c} = super.{self::A::c}{dynamic}.-(42);
+    self::use(super.{self::B::c} = super.{self::A::c}{dynamic}.-(42));
+    super.{self::A::d} = super.{self::B::d}{dynamic}.-(42);
+    self::use(super.{self::A::d} = super.{self::B::d}{dynamic}.-(42));
+    super.e = super.{self::A::e}{dynamic}.-(42);
+    self::use(super.e = super.{self::A::e}{dynamic}.-(42));
+    super.f = super.{self::A::f}{dynamic}.-(42);
+    self::use(super.f = super.{self::A::f}{dynamic}.-(42));
+    super.{self::A::g} = super.g{dynamic}.-(42);
+    self::use(super.{self::A::g} = super.g{dynamic}.-(42));
+    super.{self::A::h} = super.{self::A::h}{dynamic}.-(42);
+    self::use(super.{self::A::h} = super.{self::A::h}{dynamic}.-(42));
+    super.{self::B::i} = super.{self::A::i}{dynamic}.-(42);
+    self::use(super.{self::B::i} = super.{self::A::i}{dynamic}.-(42));
+    let final core::int* #t56 = 87 in super.{self::A::[]=}(#t56, super.{self::A::[]}(#t56){dynamic}.-(42));
+    self::use(let final core::int* #t57 = 87 in let final dynamic #t58 = super.{self::A::[]}(#t57){dynamic}.-(42) in let final void #t59 = super.{self::A::[]=}(#t57, #t58) in #t58);
+    super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:247:13: Error: The operator '-' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
+    super.m -= 42;
+            ^" in super.{self::A::m}{<unresolved>}.-(42);
+    self::use(super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:248:17: Error: The operator '-' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
+    use(super.m -= 42);
+                ^" in super.{self::A::m}{<unresolved>}.-(42));
+    super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:249:13: Error: The operator '-' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
+    super.n -= 42;
+            ^" in super.{self::A::n}{<unresolved>}.-(42);
+    self::use(super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:250:17: Error: The operator '-' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
+    use(super.n -= 42);
+                ^" in super.{self::A::n}{<unresolved>}.-(42));
+  }
+}
+static method use(dynamic x) → dynamic {
+  if(x =={core::Object::==}{(core::Object*) →* core::bool*} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*})
+    throw "Shouldn't happen";
+}
+static method main() → dynamic {
+  new self::C::•().{self::C::test}(){() →* dynamic};
+}
diff --git a/pkg/front_end/testcases/rasta/super_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/super_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..03f043f
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/super_initializer.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/super_initializer.dart:15:15: Error: Can't have initializers after 'super'.
+//         field = 42;
+//               ^
+//
+// pkg/front_end/testcases/rasta/super_initializer.dart:18:15: Error: Can't have initializers after 'super'.
+//         field = 42;
+//               ^
+//
+// pkg/front_end/testcases/rasta/super_initializer.dart:21:15: Error: Can't have initializers after 'super'.
+//         field = 42;
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  constructor arg0() → self::Super*
+    : super core::Object::•()
+    ;
+  constructor arg1(dynamic a) → self::Super*
+    : super core::Object::•()
+    ;
+  constructor arg2(dynamic a, dynamic b) → self::Super*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Sub extends self::Super {
+  field dynamic field;
+  constructor arg0() → self::Sub*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/super_initializer.dart:15:15: Error: Can't have initializers after 'super'.
+        field = 42;
+              ^", super self::Super::arg0()
+    ;
+  constructor arg1(dynamic a) → self::Sub*
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/rasta/super_initializer.dart:18:15: Error: Can't have initializers after 'super'.
+        field = 42;
+              ^", super self::Super::arg1(a)
+    ;
+  constructor arg2(dynamic a, dynamic b) → self::Sub*
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/rasta/super_initializer.dart:21:15: Error: Can't have initializers after 'super'.
+        field = 42;
+              ^", super self::Super::arg2(a, b)
+    ;
+}
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.weak.modular.expect
new file mode 100644
index 0000000..0327051
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.weak.modular.expect
@@ -0,0 +1,223 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "mixin_library.dart" as mix;
+
+import "org-dartlang-testcase:///mixin_library.dart" show Mixin;
+
+class Super<S extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Super<self::Super::S*>*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic
+    return 40;
+  method f() → dynamic
+    return 3;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&Super&Mixin<V extends core::Object* = dynamic> = self::Super<self::_C&Super&Mixin::V*> with mix::Mixin<self::_C&Super&Mixin::V*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C&Super&Mixin<self::_C&Super&Mixin::V*>*
+    : super self::Super::•()
+    ;
+  mixin-super-stub get x() → dynamic
+    return super.{mix::Mixin::x};
+  mixin-super-stub set x(dynamic value) → void
+    return super.{mix::Mixin::x} = value;
+  mixin-super-stub get y() → dynamic
+    return super.{mix::Mixin::y};
+  mixin-super-stub set y(dynamic value) → void
+    return super.{mix::Mixin::y} = value;
+  mixin-super-stub get z() → dynamic
+    return super.{mix::Mixin::z};
+  mixin-super-stub set z(dynamic value) → void
+    return super.{mix::Mixin::z} = value;
+  mixin-super-stub get t() → self::_C&Super&Mixin::V*
+    return super.{mix::Mixin::t};
+  mixin-super-stub set t(covariant-by-class self::_C&Super&Mixin::V* value) → void
+    return super.{mix::Mixin::t} = value;
+  mixin-super-stub method foo() → dynamic
+    return super.{mix::Mixin::foo}();
+  mixin-super-stub method g(covariant-by-class self::_C&Super&Mixin::V* a) → self::_C&Super&Mixin::V*
+    return super.{mix::Mixin::g}(a);
+  mixin-super-stub method h() → dynamic
+    return super.{mix::Mixin::h}();
+  mixin-super-stub method l() → dynamic
+    return super.{mix::Mixin::l}();
+  mixin-super-stub method _privateMethod() → dynamic
+    return super.{mix::Mixin::_privateMethod}();
+  mixin-super-stub method publicMethod() → dynamic
+    return super.{mix::Mixin::publicMethod}();
+}
+class C<V extends core::Object* = dynamic> extends self::_C&Super&Mixin<self::C::V*> {
+  synthetic constructor •() → self::C<self::C::V*>*
+    : super self::_C&Super&Mixin::•()
+    ;
+}
+abstract class _D&Super&Mixin = self::Super<dynamic> with mix::Mixin<dynamic> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_D&Super&Mixin*
+    : super self::Super::•()
+    ;
+  mixin-super-stub get x() → dynamic
+    return super.{mix::Mixin::x};
+  mixin-super-stub set x(dynamic value) → void
+    return super.{mix::Mixin::x} = value;
+  mixin-super-stub get y() → dynamic
+    return super.{mix::Mixin::y};
+  mixin-super-stub set y(dynamic value) → void
+    return super.{mix::Mixin::y} = value;
+  mixin-super-stub get z() → dynamic
+    return super.{mix::Mixin::z};
+  mixin-super-stub set z(dynamic value) → void
+    return super.{mix::Mixin::z} = value;
+  mixin-super-stub get t() → dynamic
+    return super.{mix::Mixin::t};
+  mixin-super-stub set t(covariant-by-class dynamic value) → void
+    return super.{mix::Mixin::t} = value;
+  mixin-super-stub method foo() → dynamic
+    return super.{mix::Mixin::foo}();
+  mixin-super-stub method g(covariant-by-class dynamic a) → dynamic
+    return super.{mix::Mixin::g}(a);
+  mixin-super-stub method h() → dynamic
+    return super.{mix::Mixin::h}();
+  mixin-super-stub method l() → dynamic
+    return super.{mix::Mixin::l}();
+  mixin-super-stub method _privateMethod() → dynamic
+    return super.{mix::Mixin::_privateMethod}();
+  mixin-super-stub method publicMethod() → dynamic
+    return super.{mix::Mixin::publicMethod}();
+}
+class D extends self::_D&Super&Mixin {
+  synthetic constructor •() → self::D*
+    : super self::_D&Super&Mixin::•()
+    ;
+}
+class C2<V extends core::Object* = dynamic> = self::Super<self::C2::V*> with mix::Mixin<self::C2::V*> {
+  synthetic constructor •() → self::C2<self::C2::V*>*
+    : super self::Super::•()
+    ;
+  mixin-super-stub get x() → dynamic
+    return super.{mix::Mixin::x};
+  mixin-super-stub set x(dynamic value) → void
+    return super.{mix::Mixin::x} = value;
+  mixin-super-stub get y() → dynamic
+    return super.{mix::Mixin::y};
+  mixin-super-stub set y(dynamic value) → void
+    return super.{mix::Mixin::y} = value;
+  mixin-super-stub get z() → dynamic
+    return super.{mix::Mixin::z};
+  mixin-super-stub set z(dynamic value) → void
+    return super.{mix::Mixin::z} = value;
+  mixin-super-stub get t() → self::C2::V*
+    return super.{mix::Mixin::t};
+  mixin-super-stub set t(covariant-by-class self::C2::V* value) → void
+    return super.{mix::Mixin::t} = value;
+  mixin-super-stub method foo() → dynamic
+    return super.{mix::Mixin::foo}();
+  mixin-super-stub method g(covariant-by-class self::C2::V* a) → self::C2::V*
+    return super.{mix::Mixin::g}(a);
+  mixin-super-stub method h() → dynamic
+    return super.{mix::Mixin::h}();
+  mixin-super-stub method l() → dynamic
+    return super.{mix::Mixin::l}();
+  mixin-super-stub method _privateMethod() → dynamic
+    return super.{mix::Mixin::_privateMethod}();
+  mixin-super-stub method publicMethod() → dynamic
+    return super.{mix::Mixin::publicMethod}();
+}
+class D2 = self::Super<dynamic> with mix::Mixin<dynamic> {
+  synthetic constructor •() → self::D2*
+    : super self::Super::•()
+    ;
+  mixin-super-stub get x() → dynamic
+    return super.{mix::Mixin::x};
+  mixin-super-stub set x(dynamic value) → void
+    return super.{mix::Mixin::x} = value;
+  mixin-super-stub get y() → dynamic
+    return super.{mix::Mixin::y};
+  mixin-super-stub set y(dynamic value) → void
+    return super.{mix::Mixin::y} = value;
+  mixin-super-stub get z() → dynamic
+    return super.{mix::Mixin::z};
+  mixin-super-stub set z(dynamic value) → void
+    return super.{mix::Mixin::z} = value;
+  mixin-super-stub get t() → dynamic
+    return super.{mix::Mixin::t};
+  mixin-super-stub set t(covariant-by-class dynamic value) → void
+    return super.{mix::Mixin::t} = value;
+  mixin-super-stub method foo() → dynamic
+    return super.{mix::Mixin::foo}();
+  mixin-super-stub method g(covariant-by-class dynamic a) → dynamic
+    return super.{mix::Mixin::g}(a);
+  mixin-super-stub method h() → dynamic
+    return super.{mix::Mixin::h}();
+  mixin-super-stub method l() → dynamic
+    return super.{mix::Mixin::l}();
+  mixin-super-stub method _privateMethod() → dynamic
+    return super.{mix::Mixin::_privateMethod}();
+  mixin-super-stub method publicMethod() → dynamic
+    return super.{mix::Mixin::publicMethod}();
+}
+static method main() → dynamic {
+  core::print(new self::C::•<dynamic>().{self::_C&Super&Mixin::foo}(){() →* dynamic});
+  core::print(new self::C2::•<dynamic>().{self::C2::foo}(){() →* dynamic});
+}
+
+library test.mixin_library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
+//   foo() => super.foo() + f();
+//                  ^^^
+//
+import self as mix;
+import "dart:core" as core;
+
+class Mixin<T extends core::Object* = dynamic> extends core::Object {
+  field dynamic x = mix::f();
+  field dynamic y = null;
+  field dynamic z = null;
+  covariant-by-class field mix::Mixin::T* t = null;
+  synthetic constructor •() → mix::Mixin<mix::Mixin::T*>*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic
+    return super.foo(){dynamic}.+(mix::f());
+  method g(covariant-by-class mix::Mixin::T* a) → mix::Mixin::T*
+    return null;
+  method h() → dynamic
+    return mix::V();
+  method l() → dynamic
+    return mix::_private();
+  method _privateMethod() → dynamic
+    return 49;
+  method publicMethod() → dynamic
+    return this.{mix::Mixin::_privateMethod}(){() →* dynamic};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method f() → dynamic
+  return 2;
+static method V() → dynamic
+  return 87;
+static method _private() → dynamic
+  return 117;
+static method foo(dynamic m) → dynamic
+  return m{dynamic}._privateMethod();
diff --git a/pkg/front_end/testcases/rasta/super_operator.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/super_operator.dart.weak.modular.expect
new file mode 100644
index 0000000..8b04b02
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/super_operator.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/super_operator.dart:22:15: Error: Superclass has no method named '[]'.
+//   g() => super[0];
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator +(core::String* s) → dynamic
+    return null;
+  operator [](dynamic i) → dynamic
+    return null;
+  operator []=(dynamic i, dynamic val) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator +(core::String* s) → dynamic
+    return super.{self::A::+}("${s}${s}");
+  operator [](dynamic i) → dynamic
+    return super.{self::A::[]}(i);
+  operator []=(dynamic i, dynamic val) → void
+    return let final dynamic #t1 = let final dynamic #t2 = i in let final dynamic #t3 = i = #t2{dynamic}.+(1) in #t2 in let final dynamic #t4 = super.{self::A::[]}(#t1){dynamic}.+(val) in let final void #t5 = super.{self::A::[]=}(#t1, #t4) in #t4;
+}
+class Autobianchi extends core::Object {
+  synthetic constructor •() → self::Autobianchi*
+    : super core::Object::•()
+    ;
+  method g() → dynamic
+    return super.[](0);
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.modular.expect
new file mode 100644
index 0000000..d2d46a3
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/supports_reflection.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::print(#C1);
+}
+
+constants  {
+  #C1 = false
+}
diff --git a/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.modular.expect
new file mode 100644
index 0000000..4a25d3e
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_execution_case_t02.dart.weak.modular.expect
@@ -0,0 +1,85 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/switch_execution_case_t02.dart:35:5: Error: Switch case may fall through to the next case.
+//     case 2:  result = 2; /// static warning - case fall-through, see "Switch"
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_execution_case_t02.dart:36:5: Error: Switch case may fall through to the next case.
+//     case 3:  result = 3; /// static warning - case fall-through, see "Switch"
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_execution_case_t02.dart:46:5: Error: Switch case may fall through to the next case.
+//     case 1:
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method test(dynamic value) → dynamic {
+  dynamic result;
+  #L1:
+  switch(value) {
+    #L2:
+    case #C1:
+      {
+        result = 1;
+        break #L1;
+      }
+    #L3:
+    case #C2:
+      {
+        result = 2;
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 35);
+      }
+    #L4:
+    case #C3:
+      {
+        result = 3;
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 36);
+      }
+    #L5:
+    default:
+      {
+        result = 4;
+      }
+  }
+  return result;
+}
+static method testEmptyCases(dynamic value) → dynamic {
+  dynamic result;
+  #L6:
+  switch(value) {
+    #L7:
+    case #C1:
+    case #C2:
+      {
+        result = 1;
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_execution_case_t02.dart", 46);
+      }
+    #L8:
+    case #C3:
+    case #C4:
+      {
+        result = 2;
+        break #L6;
+      }
+    #L9:
+    case #C5:
+    case #C6:
+    default:
+      {}
+  }
+  return result;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+  #C3 = 3
+  #C4 = 4
+  #C5 = 5
+  #C6 = 6
+}
diff --git a/pkg/front_end/testcases/rasta/switch_fall_through.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/switch_fall_through.dart.weak.modular.expect
new file mode 100644
index 0000000..c69920c
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/switch_fall_through.dart.weak.modular.expect
@@ -0,0 +1,99 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:7:5: Error: Switch case may fall through to the next case.
+//     case 1:
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:13:5: Error: Switch case may fall through to the next case.
+//     case 2:
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:20:5: Error: Switch case may fall through to the next case.
+//     case 3:
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:26:5: Error: Switch case may fall through to the next case.
+//     case 4:
+//     ^
+//
+// pkg/front_end/testcases/rasta/switch_fall_through.dart:31:5: Error: Switch case may fall through to the next case.
+//     case 5:
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  #L1:
+  switch(1) {
+    #L2:
+    case #C1:
+      {
+        {
+          "No fall-through error needed.";
+          break #L1;
+          ;
+        }
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 7);
+      }
+    #L3:
+    case #C2:
+      {
+        {
+          "Fall-through error needed.";
+          if(true) {
+            break #L1;
+          }
+        }
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 13);
+      }
+    #L4:
+    case #C3:
+      {
+        try {
+          "No fall-through error needed.";
+        }
+        finally {
+          break #L1;
+        }
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 20);
+      }
+    #L5:
+    case #C4:
+      {
+        try {
+          "No fall-through error needed.";
+          break #L1;
+        }
+        finally {
+        }
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 26);
+      }
+    #L6:
+    case #C5:
+      {
+        try {
+          "Fall-through error needed.";
+        }
+        finally {
+        }
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///switch_fall_through.dart", 31);
+      }
+    #L7:
+    case #C6:
+      {
+        "Should be last. No fall-through error, falling through allowed here.";
+      }
+  }
+}
+
+constants  {
+  #C1 = 1
+  #C2 = 2
+  #C3 = 3
+  #C4 = 4
+  #C5 = 5
+  #C6 = 10000
+}
diff --git a/pkg/front_end/testcases/rasta/this_invoke.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/this_invoke.dart.weak.modular.expect
new file mode 100644
index 0000000..37dfbd7
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/this_invoke.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method m(dynamic x) → dynamic
+    return this.{self::C::call}(x){(dynamic) →* dynamic};
+  method call(dynamic x) → dynamic
+    return 42;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::print(new self::C::•().{self::C::m}(42){(dynamic) →* dynamic});
+}
diff --git a/pkg/front_end/testcases/rasta/try_label.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/try_label.dart.weak.modular.expect
new file mode 100644
index 0000000..14f6249
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/try_label.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/try_label.dart:9:5: Error: A continue statement can't be used outside of a loop or switch statement.
+// Try removing the continue statement.
+//     continue L;
+//     ^^^^^^^^
+//
+import self as self;
+
+static method main() → dynamic {
+  #L1:
+  try {
+    break #L1;
+  }
+  finally {
+    break #L1;
+  }
+}
diff --git a/pkg/front_end/testcases/rasta/type_literals.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/type_literals.dart.weak.modular.expect
new file mode 100644
index 0000000..de13441
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/type_literals.dart.weak.modular.expect
@@ -0,0 +1,538 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:22:5: Error: Couldn't find constructor 'dynamic'.
+//     dynamic();
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:23:9: Error: Couldn't find constructor 'dynamic'.
+//     use(dynamic());
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:24:5: Error: Couldn't find constructor 'T'.
+//     T();
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:25:9: Error: Couldn't find constructor 'T'.
+//     use(T());
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:26:5: Error: Couldn't find constructor 'Func'.
+//     Func();
+//     ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:27:9: Error: Couldn't find constructor 'Func'.
+//     use(Func());
+//         ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:29:5: Error: Can't assign to a type literal.
+//     C = 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:30:9: Error: Can't assign to a type literal.
+//     use(C = 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:31:5: Error: Can't assign to a type literal.
+//     dynamic = 42;
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:32:9: Error: Can't assign to a type literal.
+//     use(dynamic = 42);
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:33:5: Error: Can't assign to a type literal.
+//     T = 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:34:9: Error: Can't assign to a type literal.
+//     use(T = 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:35:5: Error: Can't assign to a type literal.
+//     Func = 42;
+//     ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:36:9: Error: Can't assign to a type literal.
+//     use(Func = 42);
+//         ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:38:5: Error: Can't assign to a type literal.
+//     C++;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:39:9: Error: Can't assign to a type literal.
+//     use(C++);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:40:5: Error: Can't assign to a type literal.
+//     dynamic++;
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:41:9: Error: Can't assign to a type literal.
+//     use(dynamic++);
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:42:5: Error: Can't assign to a type literal.
+//     T++;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:43:9: Error: Can't assign to a type literal.
+//     use(T++);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:44:5: Error: Can't assign to a type literal.
+//     Func++;
+//     ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:45:9: Error: Can't assign to a type literal.
+//     use(Func++);
+//         ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:47:7: Error: Can't assign to a type literal.
+//     ++C;
+//       ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:48:11: Error: Can't assign to a type literal.
+//     use(++C);
+//           ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:49:7: Error: Can't assign to a type literal.
+//     ++dynamic;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:50:11: Error: Can't assign to a type literal.
+//     use(++dynamic);
+//           ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:51:7: Error: Can't assign to a type literal.
+//     ++T;
+//       ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:52:11: Error: Can't assign to a type literal.
+//     use(++T);
+//           ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:53:7: Error: Can't assign to a type literal.
+//     ++Func;
+//       ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:54:11: Error: Can't assign to a type literal.
+//     use(++Func);
+//           ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:56:5: Error: Can't assign to a type literal.
+//     C--;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:57:9: Error: Can't assign to a type literal.
+//     use(C--);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:58:5: Error: Can't assign to a type literal.
+//     dynamic--;
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:59:9: Error: Can't assign to a type literal.
+//     use(dynamic--);
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:60:5: Error: Can't assign to a type literal.
+//     T--;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:61:9: Error: Can't assign to a type literal.
+//     use(T--);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:62:5: Error: Can't assign to a type literal.
+//     Func--;
+//     ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:63:9: Error: Can't assign to a type literal.
+//     use(Func--);
+//         ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:65:7: Error: Can't assign to a type literal.
+//     --C;
+//       ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:66:11: Error: Can't assign to a type literal.
+//     use(--C);
+//           ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:67:7: Error: Can't assign to a type literal.
+//     --dynamic;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:68:11: Error: Can't assign to a type literal.
+//     use(--dynamic);
+//           ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:69:7: Error: Can't assign to a type literal.
+//     --T;
+//       ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:70:11: Error: Can't assign to a type literal.
+//     use(--T);
+//           ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:71:7: Error: Can't assign to a type literal.
+//     --Func;
+//       ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:72:11: Error: Can't assign to a type literal.
+//     use(--Func);
+//           ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:74:5: Error: Can't assign to a type literal.
+//     C ??= 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:75:9: Error: Can't assign to a type literal.
+//     use(C ??= 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:76:5: Error: Can't assign to a type literal.
+//     dynamic ??= 42;
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:77:9: Error: Can't assign to a type literal.
+//     use(dynamic ??= 42);
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:78:5: Error: Can't assign to a type literal.
+//     T ??= 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:79:9: Error: Can't assign to a type literal.
+//     use(T ??= 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:80:5: Error: Can't assign to a type literal.
+//     Func ??= 42;
+//     ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:81:9: Error: Can't assign to a type literal.
+//     use(Func ??= 42);
+//         ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:83:5: Error: Can't assign to a type literal.
+//     C += 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:84:9: Error: Can't assign to a type literal.
+//     use(C += 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:85:5: Error: Can't assign to a type literal.
+//     dynamic += 42;
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:86:9: Error: Can't assign to a type literal.
+//     use(dynamic += 42);
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:87:5: Error: Can't assign to a type literal.
+//     T += 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:88:9: Error: Can't assign to a type literal.
+//     use(T += 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:89:5: Error: Can't assign to a type literal.
+//     Func += 42;
+//     ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:90:9: Error: Can't assign to a type literal.
+//     use(Func += 42);
+//         ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:92:5: Error: Can't assign to a type literal.
+//     C -= 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:93:9: Error: Can't assign to a type literal.
+//     use(C -= 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:94:5: Error: Can't assign to a type literal.
+//     dynamic -= 42;
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:95:9: Error: Can't assign to a type literal.
+//     use(dynamic -= 42);
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:96:5: Error: Can't assign to a type literal.
+//     T -= 42;
+//     ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:97:9: Error: Can't assign to a type literal.
+//     use(T -= 42);
+//         ^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:98:5: Error: Can't assign to a type literal.
+//     Func -= 42;
+//     ^^^^
+//
+// pkg/front_end/testcases/rasta/type_literals.dart:99:9: Error: Can't assign to a type literal.
+//     use(Func -= 42);
+//         ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Func = () →* void;
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method test() → dynamic {
+    #C1;
+    self::use(#C1);
+    #C2;
+    self::use(#C2);
+    self::C::T*;
+    self::use(self::C::T*);
+    #C3;
+    self::use(#C3);
+    new self::C::•<dynamic>();
+    self::use(new self::C::•<dynamic>());
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:22:5: Error: Couldn't find constructor 'dynamic'.
+    dynamic();
+    ^^^^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:23:9: Error: Couldn't find constructor 'dynamic'.
+    use(dynamic());
+        ^^^^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:24:5: Error: Couldn't find constructor 'T'.
+    T();
+    ^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:25:9: Error: Couldn't find constructor 'T'.
+    use(T());
+        ^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:26:5: Error: Couldn't find constructor 'Func'.
+    Func();
+    ^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:27:9: Error: Couldn't find constructor 'Func'.
+    use(Func());
+        ^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:29:5: Error: Can't assign to a type literal.
+    C = 42;
+    ^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:30:9: Error: Can't assign to a type literal.
+    use(C = 42);
+        ^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:31:5: Error: Can't assign to a type literal.
+    dynamic = 42;
+    ^^^^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:32:9: Error: Can't assign to a type literal.
+    use(dynamic = 42);
+        ^^^^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:33:5: Error: Can't assign to a type literal.
+    T = 42;
+    ^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:34:9: Error: Can't assign to a type literal.
+    use(T = 42);
+        ^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:35:5: Error: Can't assign to a type literal.
+    Func = 42;
+    ^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:36:9: Error: Can't assign to a type literal.
+    use(Func = 42);
+        ^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:38:5: Error: Can't assign to a type literal.
+    C++;
+    ^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:39:9: Error: Can't assign to a type literal.
+    use(C++);
+        ^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:40:5: Error: Can't assign to a type literal.
+    dynamic++;
+    ^^^^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:41:9: Error: Can't assign to a type literal.
+    use(dynamic++);
+        ^^^^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:42:5: Error: Can't assign to a type literal.
+    T++;
+    ^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:43:9: Error: Can't assign to a type literal.
+    use(T++);
+        ^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:44:5: Error: Can't assign to a type literal.
+    Func++;
+    ^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:45:9: Error: Can't assign to a type literal.
+    use(Func++);
+        ^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:47:7: Error: Can't assign to a type literal.
+    ++C;
+      ^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:48:11: Error: Can't assign to a type literal.
+    use(++C);
+          ^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:49:7: Error: Can't assign to a type literal.
+    ++dynamic;
+      ^^^^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:50:11: Error: Can't assign to a type literal.
+    use(++dynamic);
+          ^^^^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:51:7: Error: Can't assign to a type literal.
+    ++T;
+      ^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:52:11: Error: Can't assign to a type literal.
+    use(++T);
+          ^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:53:7: Error: Can't assign to a type literal.
+    ++Func;
+      ^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:54:11: Error: Can't assign to a type literal.
+    use(++Func);
+          ^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:56:5: Error: Can't assign to a type literal.
+    C--;
+    ^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:57:9: Error: Can't assign to a type literal.
+    use(C--);
+        ^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:58:5: Error: Can't assign to a type literal.
+    dynamic--;
+    ^^^^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:59:9: Error: Can't assign to a type literal.
+    use(dynamic--);
+        ^^^^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:60:5: Error: Can't assign to a type literal.
+    T--;
+    ^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:61:9: Error: Can't assign to a type literal.
+    use(T--);
+        ^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:62:5: Error: Can't assign to a type literal.
+    Func--;
+    ^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:63:9: Error: Can't assign to a type literal.
+    use(Func--);
+        ^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:65:7: Error: Can't assign to a type literal.
+    --C;
+      ^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:66:11: Error: Can't assign to a type literal.
+    use(--C);
+          ^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:67:7: Error: Can't assign to a type literal.
+    --dynamic;
+      ^^^^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:68:11: Error: Can't assign to a type literal.
+    use(--dynamic);
+          ^^^^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:69:7: Error: Can't assign to a type literal.
+    --T;
+      ^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:70:11: Error: Can't assign to a type literal.
+    use(--T);
+          ^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:71:7: Error: Can't assign to a type literal.
+    --Func;
+      ^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:72:11: Error: Can't assign to a type literal.
+    use(--Func);
+          ^^^^");
+    #C1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:74:5: Error: Can't assign to a type literal.
+    C ??= 42;
+    ^" : null;
+    self::use(let final core::Type* #t1 = #C1 in #t1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:75:9: Error: Can't assign to a type literal.
+    use(C ??= 42);
+        ^" : #t1);
+    #C2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:76:5: Error: Can't assign to a type literal.
+    dynamic ??= 42;
+    ^^^^^^^" : null;
+    self::use(let final core::Type* #t2 = #C2 in #t2 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:77:9: Error: Can't assign to a type literal.
+    use(dynamic ??= 42);
+        ^^^^^^^" : #t2);
+    self::C::T* == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:78:5: Error: Can't assign to a type literal.
+    T ??= 42;
+    ^" : null;
+    self::use(let final core::Type* #t3 = self::C::T* in #t3 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:79:9: Error: Can't assign to a type literal.
+    use(T ??= 42);
+        ^" : #t3);
+    #C3 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:80:5: Error: Can't assign to a type literal.
+    Func ??= 42;
+    ^^^^" : null;
+    self::use(let final core::Type* #t4 = #C3 in #t4 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:81:9: Error: Can't assign to a type literal.
+    use(Func ??= 42);
+        ^^^^" : #t4);
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:83:5: Error: Can't assign to a type literal.
+    C += 42;
+    ^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:84:9: Error: Can't assign to a type literal.
+    use(C += 42);
+        ^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:85:5: Error: Can't assign to a type literal.
+    dynamic += 42;
+    ^^^^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:86:9: Error: Can't assign to a type literal.
+    use(dynamic += 42);
+        ^^^^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:87:5: Error: Can't assign to a type literal.
+    T += 42;
+    ^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:88:9: Error: Can't assign to a type literal.
+    use(T += 42);
+        ^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:89:5: Error: Can't assign to a type literal.
+    Func += 42;
+    ^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:90:9: Error: Can't assign to a type literal.
+    use(Func += 42);
+        ^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:92:5: Error: Can't assign to a type literal.
+    C -= 42;
+    ^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:93:9: Error: Can't assign to a type literal.
+    use(C -= 42);
+        ^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:94:5: Error: Can't assign to a type literal.
+    dynamic -= 42;
+    ^^^^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:95:9: Error: Can't assign to a type literal.
+    use(dynamic -= 42);
+        ^^^^^^^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:96:5: Error: Can't assign to a type literal.
+    T -= 42;
+    ^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:97:9: Error: Can't assign to a type literal.
+    use(T -= 42);
+        ^");
+    invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:98:5: Error: Can't assign to a type literal.
+    Func -= 42;
+    ^^^^";
+    self::use(invalid-expression "pkg/front_end/testcases/rasta/type_literals.dart:99:9: Error: Can't assign to a type literal.
+    use(Func -= 42);
+        ^^^^");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method use(dynamic x) → dynamic {
+  if(x =={core::Object::==}{(core::Object*) →* core::bool*} new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int*})
+    throw "Shouldn't happen";
+}
+static method main() → dynamic {
+  new self::C::•<dynamic>().{self::C::test}(){() →* dynamic};
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::C<dynamic>*)
+  #C2 = TypeLiteralConstant(dynamic)
+  #C3 = TypeLiteralConstant(() →* void)
+}
diff --git a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.modular.expect
new file mode 100644
index 0000000..3d3d7f0
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/type_with_parse_error.dart:21:7: Error: Expected ';' after this.
+//   int i
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    new self::B::•<self::A*>();
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B<T extends core::Object* = dynamic> extends core::Object {
+  field core::int* i = null;
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::B::•<self::A*>();
+}
diff --git a/pkg/front_end/testcases/rasta/typedef.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/typedef.dart.weak.modular.expect
new file mode 100644
index 0000000..72932b9
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/typedef.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/typedef.dart:9:3: Error: Can't assign to a type literal.
+//   Foo = null;
+//   ^^^
+//
+// pkg/front_end/testcases/rasta/typedef.dart:10:3: Error: Can't assign to a type literal.
+//   Foo ??= null;
+//   ^^^
+//
+// pkg/front_end/testcases/rasta/typedef.dart:11:3: Error: Couldn't find constructor 'Foo'.
+//   Foo();
+//   ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef Foo = () →* void;
+static method main() → dynamic {
+  core::print(#C1);
+  invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:9:3: Error: Can't assign to a type literal.
+  Foo = null;
+  ^^^";
+  #C1 == null ?{invalid-type} invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:10:3: Error: Can't assign to a type literal.
+  Foo ??= null;
+  ^^^" : null;
+  invalid-expression "pkg/front_end/testcases/rasta/typedef.dart:11:3: Error: Couldn't find constructor 'Foo'.
+  Foo();
+  ^^^";
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(() →* void)
+}
diff --git a/pkg/front_end/testcases/rasta/unresolved.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/unresolved.dart.weak.modular.expect
new file mode 100644
index 0000000..39e56f4
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/unresolved.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/unresolved.dart:6:7: Error: Couldn't find constructor 'Missing'.
+//   new Missing();
+//       ^^^^^^^
+//
+import self as self;
+
+static method main() → dynamic {
+  invalid-expression "pkg/front_end/testcases/rasta/unresolved.dart:6:7: Error: Couldn't find constructor 'Missing'.
+  new Missing();
+      ^^^^^^^";
+}
diff --git a/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..fc47b33
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/unresolved_constructor.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/unresolved_constructor.dart:10:10: Error: Too few positional arguments: 2 required, 0 given.
+//   new Foo();
+//          ^
+// pkg/front_end/testcases/rasta/unresolved_constructor.dart:6:3: Context: Found this candidate, but the arguments don't match.
+//   Foo(x, y);
+//   ^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_constructor.dart:11:11: Error: Couldn't find constructor 'Foo.notHere'.
+//   new Foo.notHere();
+//           ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  constructor •(dynamic x, dynamic y) → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  invalid-expression "pkg/front_end/testcases/rasta/unresolved_constructor.dart:10:10: Error: Too few positional arguments: 2 required, 0 given.
+  new Foo();
+         ^";
+  invalid-expression "pkg/front_end/testcases/rasta/unresolved_constructor.dart:11:11: Error: Couldn't find constructor 'Foo.notHere'.
+  new Foo.notHere();
+          ^^^^^^^";
+}
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.modular.expect
new file mode 100644
index 0000000..1600ec3
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.weak.modular.expect
@@ -0,0 +1,209 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:14:10: Error: Can't assign to a type literal.
+//     for (Fisk in x) {
+//          ^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:18:13: Error: A prefix can't be used as an expression.
+//       print(collection);
+//             ^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:17:10: Error: A prefix can't be used as an expression.
+//     for (collection in x) {
+//          ^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:20:10: Error: Can't assign to a type literal.
+//     for (VoidFunction in x) {
+//          ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Expected an identifier, but got '1'.
+// Try inserting an identifier before '1'.
+//     for (1 in x) {
+//          ^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Can't assign to this, so it can't be used in a for-in loop.
+//     for (1 in x) {
+//          ^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:11:10: Error: The setter 'key' isn't defined for the class 'Fisk'.
+//  - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'key'.
+//     for (key in x) {
+//          ^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:12:13: Error: The getter 'key' isn't defined for the class 'Fisk'.
+//  - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'key'.
+//       print(key);
+//             ^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:24:13: Error: The getter 'key' isn't defined for the class 'Fisk'.
+//  - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'key'.
+//       print(key);
+//             ^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:32:11: Error: Undefined name 'key'.
+//     print(key);
+//           ^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:31:8: Error: Setter not found: 'key'.
+//   for (key in arguments) {
+//        ^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:34:8: Error: Can't assign to a type literal.
+//   for (Fisk in arguments) {
+//        ^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:38:11: Error: A prefix can't be used as an expression.
+//     print(collection);
+//           ^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:37:8: Error: A prefix can't be used as an expression.
+//   for (collection in arguments) {
+//        ^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:40:8: Error: Can't assign to a type literal.
+//   for (VoidFunction in arguments) {
+//        ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Expected an identifier, but got '1'.
+// Try inserting an identifier before '1'.
+//   for (1 in arguments) {
+//        ^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:44:11: Error: Undefined name 'key'.
+//     print(key);
+//           ^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Can't assign to this, so it can't be used in a for-in loop.
+//   for (1 in arguments) {
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "dart:collection" as collection;
+
+typedef VoidFunction = () →* void;
+class Fisk extends core::Object {
+  synthetic constructor •() → self::Fisk*
+    : super core::Object::•()
+    ;
+  method it1(dynamic x) → dynamic {
+    for (final dynamic #t1 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:11:10: Error: The setter 'key' isn't defined for the class 'Fisk'.
+ - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'key'.
+    for (key in x) {
+         ^^^" in this{<unresolved>}.key = invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:11:10: Error: The setter 'key' isn't defined for the class 'Fisk'.
+ - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'key'.
+    for (key in x) {
+         ^^^";
+      core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:12:13: Error: The getter 'key' isn't defined for the class 'Fisk'.
+ - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'key'.
+      print(key);
+            ^^^" in this{<unresolved>}.key);
+    }
+    for (final dynamic #t2 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:14:10: Error: Can't assign to a type literal.
+    for (Fisk in x) {
+         ^^^^";
+      core::print(#C1);
+    }
+    for (final dynamic #t3 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:17:10: Error: A prefix can't be used as an expression.
+    for (collection in x) {
+         ^^^^^^^^^^";
+      core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:18:13: Error: A prefix can't be used as an expression.
+      print(collection);
+            ^^^^^^^^^^");
+    }
+    for (final dynamic #t4 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:20:10: Error: Can't assign to a type literal.
+    for (VoidFunction in x) {
+         ^^^^^^^^^^^^";
+      core::print(#C2);
+    }
+    {
+      invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Can't assign to this, so it can't be used in a for-in loop.
+    for (1 in x) {
+         ^";
+      for (final dynamic #t5 in x as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+        invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Can't assign to this, so it can't be used in a for-in loop.
+    for (1 in x) {
+         ^";
+        1;
+        core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:24:13: Error: The getter 'key' isn't defined for the class 'Fisk'.
+ - 'Fisk' is from 'pkg/front_end/testcases/rasta/unresolved_for_in.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'key'.
+      print(key);
+            ^^^" in this{<unresolved>}.key);
+      }
+    }
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main(dynamic arguments) → dynamic {
+  new self::Fisk::•();
+  for (final dynamic #t6 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:31:8: Error: Setter not found: 'key'.
+  for (key in arguments) {
+       ^^^";
+    core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:32:11: Error: Undefined name 'key'.
+    print(key);
+          ^^^");
+  }
+  for (final dynamic #t7 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:34:8: Error: Can't assign to a type literal.
+  for (Fisk in arguments) {
+       ^^^^";
+    core::print(#C1);
+  }
+  for (final dynamic #t8 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:37:8: Error: A prefix can't be used as an expression.
+  for (collection in arguments) {
+       ^^^^^^^^^^";
+    core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:38:11: Error: A prefix can't be used as an expression.
+    print(collection);
+          ^^^^^^^^^^");
+  }
+  for (final dynamic #t9 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:40:8: Error: Can't assign to a type literal.
+  for (VoidFunction in arguments) {
+       ^^^^^^^^^^^^";
+    core::print(#C2);
+  }
+  {
+    invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Can't assign to this, so it can't be used in a for-in loop.
+  for (1 in arguments) {
+       ^";
+    for (final dynamic #t10 in arguments as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Can't assign to this, so it can't be used in a for-in loop.
+  for (1 in arguments) {
+       ^";
+      1;
+      core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:44:11: Error: Undefined name 'key'.
+    print(key);
+          ^^^");
+    }
+  }
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::Fisk*)
+  #C2 = TypeLiteralConstant(() →* void)
+}
diff --git a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.modular.expect
new file mode 100644
index 0000000..8bd61ac
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.weak.modular.expect
@@ -0,0 +1,81 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/unresolved_recovery.dart:7:10: Error: Superclass has no method named '[]='.
+//     super[4] = 42;
+//          ^
+//
+// pkg/front_end/testcases/rasta/unresolved_recovery.dart:9:17: Error: Superclass has no method named '[]'.
+//     return super[2];
+//                 ^
+//
+// pkg/front_end/testcases/rasta/unresolved_recovery.dart:8:10: Error: Superclass has no method named '[]'.
+//     super[4] += 5;
+//          ^
+//
+// pkg/front_end/testcases/rasta/unresolved_recovery.dart:8:10: Error: Superclass has no method named '[]='.
+//     super[4] += 5;
+//          ^
+//
+// pkg/front_end/testcases/rasta/unresolved_recovery.dart:20:3: Error: 'on' isn't a type.
+//   on Exception catch (e) { }
+//   ^^
+//
+// pkg/front_end/testcases/rasta/unresolved_recovery.dart:20:6: Error: Expected ';' after this.
+//   on Exception catch (e) { }
+//      ^^^^^^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_recovery.dart:20:16: Error: 'catch' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+//   on Exception catch (e) { }
+//                ^^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_recovery.dart:20:23: Error: Undefined name 'e'.
+//   on Exception catch (e) { }
+//                       ^
+//
+// pkg/front_end/testcases/rasta/unresolved_recovery.dart:20:16: Error: Method not found: 'catch'.
+//   on Exception catch (e) { }
+//                ^^^^^
+//
+// pkg/front_end/testcases/rasta/unresolved_recovery.dart:20:24: Error: Expected ';' after this.
+//   on Exception catch (e) { }
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::Object {
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic {
+    super.[]=(4, 42);
+    let final core::int* #t1 = 4 in invalid-expression "pkg/front_end/testcases/rasta/unresolved_recovery.dart:8:10: Error: Superclass has no method named '[]='.
+    super[4] += 5;
+         ^";
+    return super.[](2);
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method beforeTestMissingTry() → dynamic {
+  self::testMissingTry();
+}
+static method testMissingTry() → dynamic {
+  invalid-type Exception;
+  invalid-expression "pkg/front_end/testcases/rasta/unresolved_recovery.dart:20:16: Error: Method not found: 'catch'.
+  on Exception catch (e) { }
+               ^^^^^";
+  {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.modular.expect
new file mode 100644
index 0000000..7651a58
--- /dev/null
+++ b/pkg/front_end/testcases/rasta/unsupported_platform_library.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+//
+// Problems outside component:
+//
+// pkg/front_end/testcases/rasta/unsupported_platform_library.dart:5:8: Error: Not found: 'dart:html'
+// import 'dart:html';
+//        ^
+//
+library;
+import self as self;
+
+import "dart:html";
+import "dart:io";
+
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.modular.expect b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.modular.expect
new file mode 100644
index 0000000..d9c6c13
--- /dev/null
+++ b/pkg/front_end/testcases/regress/ambiguous_builder_01.dart.weak.modular.expect
@@ -0,0 +1,72 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/ambiguous_builder_01.dart:5:1: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// x.y = 42;
+// ^
+//
+// pkg/front_end/testcases/regress/ambiguous_builder_01.dart:5:2: Error: Expected '{' before this.
+// x.y = 42;
+//  ^
+//
+// pkg/front_end/testcases/regress/ambiguous_builder_01.dart:5:2: Error: Expected a declaration, but got '.'.
+// x.y = 42;
+//  ^
+//
+// pkg/front_end/testcases/regress/ambiguous_builder_01.dart:5:3: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// x.y = 42;
+//   ^
+//
+// pkg/front_end/testcases/regress/ambiguous_builder_01.dart:6:1: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// x.z = true;
+// ^
+//
+// pkg/front_end/testcases/regress/ambiguous_builder_01.dart:6:2: Error: Expected '{' before this.
+// x.z = true;
+//  ^
+//
+// pkg/front_end/testcases/regress/ambiguous_builder_01.dart:6:1: Error: 'x' is already declared in this scope.
+// x.z = true;
+// ^
+// pkg/front_end/testcases/regress/ambiguous_builder_01.dart:5:1: Context: Previous declaration of 'x'.
+// x.y = 42;
+// ^
+//
+// pkg/front_end/testcases/regress/ambiguous_builder_01.dart:6:2: Error: Expected a declaration, but got '.'.
+// x.z = true;
+//  ^
+//
+// pkg/front_end/testcases/regress/ambiguous_builder_01.dart:6:3: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// x.z = true;
+//   ^
+//
+// pkg/front_end/testcases/regress/ambiguous_builder_01.dart:8:7: Error: Can't use 'x' because it is declared more than once.
+//   if (x != null) {}
+//       ^
+//
+// pkg/front_end/testcases/regress/ambiguous_builder_01.dart:9:15: Error: Can't use 'x' because it is declared more than once.
+//   if (null != x) {}
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::int* y = 42;
+static field core::bool* z = true;
+static method x() → dynamic {}
+static method foo() → void {
+  if(!(invalid-expression "pkg/front_end/testcases/regress/ambiguous_builder_01.dart:8:7: Error: Can't use 'x' because it is declared more than once.
+  if (x != null) {}
+      ^" == null)) {
+  }
+  if(!(invalid-expression "pkg/front_end/testcases/regress/ambiguous_builder_01.dart:9:15: Error: Can't use 'x' because it is declared more than once.
+  if (null != x) {}
+              ^" == null)) {
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29937.dart.weak.modular.expect
new file mode 100644
index 0000000..07a6b9a7
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.
+//   [f() {}];
+//    ^
+//
+import self as self;
+
+static method main() → dynamic {
+  <() →* Null>[let final () →* Null f = () → Null {} in f];
+}
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29940.dart.weak.modular.expect
new file mode 100644
index 0000000..eee3efe
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29940.dart:7:3: Error: 'a.b' can't be used as a type because 'a' doesn't refer to an import prefix.
+//   a.b c = null;
+//   ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::String* a = "";
+  invalid-type c = null;
+}
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29941.dart.weak.modular.expect
new file mode 100644
index 0000000..82b995b
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '""'.
+// Try inserting an identifier before '""'.
+//   a."";
+//     ^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method bad() → dynamic {
+  core::String* a = "";
+  invalid-expression "pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '\"\"'.
+Try inserting an identifier before '\"\"'.
+  a.\"\";
+    ^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29942.dart.weak.modular.expect
new file mode 100644
index 0000000..f545925
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.
+// Try adding {}.
+// f() =
+//     ^
+//
+// pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.
+// h() => null;
+// ^
+//
+import self as self;
+
+static method main() → dynamic {}
+static method f() → dynamic
+  return let final () →* Null h = () → Null => null in h;
diff --git a/pkg/front_end/testcases/regress/issue_29943.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29943.dart.weak.modular.expect
new file mode 100644
index 0000000..cc07a5e
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29943.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29943.dart:6:5: Error: Expected an identifier, but got '('.
+// Try inserting an identifier before '('.
+//   x.(null);
+//     ^
+//
+import self as self;
+
+static method bad() → dynamic {
+  invalid-expression "pkg/front_end/testcases/regress/issue_29943.dart:6:5: Error: Expected an identifier, but got '('.
+Try inserting an identifier before '('.
+  x.(null);
+    ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29944.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29944.dart.weak.modular.expect
new file mode 100644
index 0000000..4ad1117
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29944.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29944.dart:7:7: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   var C;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field dynamic C = null;
+  constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::C::•();
+}
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29945.dart.weak.modular.expect
new file mode 100644
index 0000000..038a3a7
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29945.dart:6:3: Error: 's.bool' can't be used as a type because 's' isn't defined.
+//   s.bool x = null;
+//   ^^^^^^
+//
+import self as self;
+
+static method main() → dynamic {
+  invalid-type x = null;
+}
diff --git a/pkg/front_end/testcases/regress/issue_29975.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29975.dart.weak.modular.expect
new file mode 100644
index 0000000..cb75715
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29975.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29975.dart:6:14: Error: 'F' is already declared in this scope.
+// typedef void F();
+//              ^
+// pkg/front_end/testcases/regress/issue_29975.dart:5:14: Context: Previous declaration of 'F'.
+// typedef void F();
+//              ^
+//
+import self as self;
+
+typedef F = () →* void;
+static method main() → void {}
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29976.dart.weak.modular.expect
new file mode 100644
index 0000000..b65bb80
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29976.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:14: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//     "x${x*"'"é'}x
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:15: Error: String starting with ' must end with '.
+//     "x${x*"'"é'}x
+//               ^^^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:7: Error: Can't find '}' to match '${'.
+//     "x${x*"'"é'}x
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:5: Error: String starting with " must end with ".
+//     "x${x*"'"é'}x
+//     ^^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:12:1: Error: Expected a declaration, but got ''.
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:9:14: Error: Expected '}' before this.
+//     "x${x*"'"é'}x
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:10:3: Error: Expected a String, but got ')'.
+//   )
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Method not found: 'f'.
+//   f(
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_29976.dart:10:3: Error: Expected ';' after this.
+//   )
+//   ^
+//
+import self as self;
+
+static get x() → dynamic
+  return null;
+static method main() → void {
+  invalid-expression "pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Method not found: 'f'.
+  f(
+  ^";
+}
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29977.dart.weak.modular.expect
new file mode 100644
index 0000000..b0dc750
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29977.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29977.dart:5:19: Error: Couldn't parse URI 'data:async':
+//   Invalid MIME type.
+// import 'data:async';
+//                   ^
+//
+import self as self;
+
+import "org-dartlang-malformed-uri:?data%3Aasync";
+
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29977.dart:5:8: Error: Expected a URI.
+// import 'data:async';
+//        ^
+//
+import self as self2;
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29978.dart.weak.modular.expect
new file mode 100644
index 0000000..a166dcf
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.
+//   foo(null, f() {});
+//             ^
+//
+import self as self;
+
+static method foo(dynamic a, dynamic b) → dynamic
+  return null;
+static method main() → dynamic {
+  self::foo(null, let final () →* Null f = () → Null {} in f);
+}
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29979.dart.weak.modular.expect
new file mode 100644
index 0000000..66cb15d
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.
+//   (f() {})();
+//    ^
+//
+import self as self;
+
+static method main() → dynamic {
+  (let final () →* Null f = () → Null {} in f)(){() →* Null};
+}
diff --git a/pkg/front_end/testcases/regress/issue_29980.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29980.dart.weak.modular.expect
new file mode 100644
index 0000000..1e683cf
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29980.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29980.dart:6:3: Error: 'x.y' can't be used as a type because 'x' isn't defined.
+//   x.y z;
+//   ^^^
+//
+import self as self;
+
+static method main() → dynamic {
+  invalid-type z;
+}
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29981.dart.weak.modular.expect
new file mode 100644
index 0000000..d56e571
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29981.dart:6:3: Error: Expected 1 type arguments.
+//   C<String, String> field;
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  field invalid-type field = null;
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::print(new self::C::•<dynamic>());
+}
diff --git a/pkg/front_end/testcases/regress/issue_29982.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29982.dart.weak.modular.expect
new file mode 100644
index 0000000..382c715
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29982.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: The non-ASCII character 'é' (U+00E9) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//   print('${eh[éh']}');
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:14: Error: Can't find ']' to match '['.
+//   print('${eh[éh']}');
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:10: Error: Can't find '}' to match '${'.
+//   print('${eh[éh']}');
+//          ^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:11: Error: String starting with ' must end with '.
+//   print('${eh[éh']}');
+//           ^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:9:1: Error: Expected a declaration, but got ''.
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:17: Error: Expected ']' before this.
+//   print('${eh[éh']}');
+//                 ^^^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Undefined name 'éh'.
+//   print('${eh[éh']}');
+//               ^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:17: Error: Expected '}' before this.
+//   print('${eh[éh']}');
+//                 ^^^^
+//
+// pkg/front_end/testcases/regress/issue_29982.dart:7:21: Error: Expected a String, but got ')'.
+//   print('${eh[éh']}');
+//                     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::Map<core::String*, core::String*>* eh = <core::String*, core::String*>{"\u0233h": "\u0233h"};
+  core::print("${eh.{core::Map::[]}(invalid-expression "pkg/front_end/testcases/regress/issue_29982.dart:7:15: Error: Undefined name '\u0233h'.
+  print('\${eh[\u0233h']}');
+              ^^"){(core::Object*) →* core::String*}}");
+}
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29983.dart.weak.modular.expect
new file mode 100644
index 0000000..990d69c
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29983.dart:7:10: Error: Undefined name 'missing'.
+//   return missing;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.
+//   return missing;
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: Undefined name 'dummy'.
+// g() sync* => dummy;
+//              ^^^^^
+//
+// pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.
+// g() sync* => dummy;
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f() → dynamic sync* {
+  invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.
+  return missing;
+  ^";
+}
+static method g() → dynamic sync* 
+  invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.
+g() sync* => dummy;
+             ^";
+static method h() → dynamic sync* {
+  (() → core::String* => "return")(){() →* core::String*};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29984.dart.weak.modular.expect
new file mode 100644
index 0000000..0c71c56
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Undefined name 'i'.
+//   for (int i = i;; false) {}
+//                ^
+//
+// pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+//   for (int i = i;; false) {}
+//            ^
+// pkg/front_end/testcases/regress/issue_29984.dart:6:16: Context: Previous use of 'i'.
+//   for (int i = i;; false) {}
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method bad() → dynamic {
+  for (core::int* i = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+  for (int i = i;; false) {}
+           ^" in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Undefined name 'i'.
+  for (int i = i;; false) {}
+               ^"; ; false) {
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29985.dart.weak.modular.expect
new file mode 100644
index 0000000..ca444a5
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '🔛' (U+1F51B) can't be used in identifiers, only in strings and comments.
+// Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign).
+//   🔛
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Expected ';' after this.
+//   🔛
+//   ^^
+//
+// pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Undefined name '🔛'.
+//   🔛
+//   ^^
+//
+import self as self;
+
+static method bad() → dynamic {
+  invalid-expression "pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Undefined name '\u55357\u56603'.
+  \u55357\u56603
+  ^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29986.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29986.dart.weak.modular.expect
new file mode 100644
index 0000000..f0b03d5
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29986.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29986.dart:8:13: Error: Expected a function body or '=>'.
+// Try adding {}.
+// C(this.name);
+//             ^
+//
+// pkg/front_end/testcases/regress/issue_29986.dart:8:3: Error: Field formal parameters can only be used in a constructor.
+// Try removing 'this.'.
+// C(this.name);
+//   ^^^^
+//
+import self as self;
+
+static method main() → dynamic {}
+static abstract method C(dynamic name) → dynamic;
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_29987.dart.weak.modular.expect
new file mode 100644
index 0000000..bd49b16
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_29987.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29987.dart:5:13: Error: Couldn't parse URI 'dart_:core':
+//   Illegal scheme character.
+// import "dart_:core";
+//             ^
+//
+import self as self;
+
+import "org-dartlang-malformed-uri:?dart_%3Acore";
+
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29987.dart:5:8: Error: Expected a URI.
+// import "dart_:core";
+//        ^
+//
+import self as self2;
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_30834.dart.weak.modular.expect
new file mode 100644
index 0000000..6f89ffe
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_30834.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   set A(v) {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  set A(dynamic v) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::A* a = new self::A::•();
+  a.{self::A::A} = 5;
+}
diff --git a/pkg/front_end/testcases/regress/issue_30836.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_30836.dart.weak.modular.expect
new file mode 100644
index 0000000..422b26c
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_30836.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_30836.dart:6:13: Error: Final field 'x' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int x;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::int* x = null;
+  constructor •() → self::A*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_30838.dart.weak.modular.expect
new file mode 100644
index 0000000..f1431a1
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Foo<S extends core::Object* = dynamic> = <T extends core::Object* = dynamic>(T*) →* S*;
+class A extends core::Object {
+  field <T extends core::Object* = dynamic>(T*) →* core::int* f = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method test() → void {
+    let final core::String* #t1 = "hello" in this.{self::A::f}{<T extends core::Object* = dynamic>(T*) →* core::int*}<core::String*>(#t1){(core::String*) →* core::int*};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo<T extends core::Object* = dynamic>(self::foo::T* x) → core::int*
+  return 3;
+static method bar() → <T extends core::Object* = dynamic>(T*) →* core::int*
+  return #C1;
+static method test1() → void {
+  self::bar()<core::String*>("hello"){(core::String*) →* core::int*};
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::foo
+}
diff --git a/pkg/front_end/testcases/regress/issue_30981.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_30981.dart.weak.modular.expect
new file mode 100644
index 0000000..c413ee9
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_30981.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_30981.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   get A {
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  get A() → dynamic {
+    core::print("Actually, I'm a getter, not a constructor.");
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::A::•();
+}
diff --git a/pkg/front_end/testcases/regress/issue_30994.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_30994.dart.weak.modular.expect
new file mode 100644
index 0000000..23676b0
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_30994.dart.weak.modular.expect
@@ -0,0 +1,118 @@
+library lib;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:6:7: Error: Can't use string interpolation in a URI.
+// part '$foo';
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:7:7: Error: Can't use string interpolation in a URI.
+// part '$foo/bar';
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:8:7: Error: Can't use string interpolation in a URI.
+// part '$for/bar';
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:9:7: Error: Can't use string interpolation in a URI.
+// part '${true}';
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:10:10: Error: Can't use string interpolation in a URI.
+// part 'the${1}thing';
+//          ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:11:12: Error: Can't use string interpolation in a URI.
+// part 'part_$foo${'a'}.dart';
+//            ^
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:12:12: Error: Can't use string interpolation in a URI.
+// part 'part_${'a'}_$foo.dart';
+//            ^
+//
+import self as self;
+
+part org-dartlang-malformed-uri:bad247;
+part org-dartlang-malformed-uri:bad260;
+part org-dartlang-malformed-uri:bad277;
+part org-dartlang-malformed-uri:bad294;
+part org-dartlang-malformed-uri:bad310;
+part org-dartlang-malformed-uri:bad331;
+part org-dartlang-malformed-uri:bad360;
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:6:6: Error: Expected a URI.
+// part '$foo';
+//      ^
+//
+import self as self2;
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:7:6: Error: Expected a URI.
+// part '$foo/bar';
+//      ^
+//
+import self as self3;
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:8:6: Error: Expected a URI.
+// part '$for/bar';
+//      ^
+//
+import self as self4;
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:9:6: Error: Expected a URI.
+// part '${true}';
+//      ^
+//
+import self as self5;
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:10:6: Error: Expected a URI.
+// part 'the${1}thing';
+//      ^
+//
+import self as self6;
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:11:6: Error: Expected a URI.
+// part 'part_$foo${'a'}.dart';
+//      ^
+//
+import self as self7;
+
+
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_30994.dart:12:6: Error: Expected a URI.
+// part 'part_${'a'}_$foo.dart';
+//      ^
+//
+import self as self8;
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31155.dart.weak.modular.expect
new file mode 100644
index 0000000..2f83d69
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31155.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31155.dart:11:11: Error: A map literal can't be prefixed by 'Map'.
+// Try removing 'Map'
+//   var f = Map<A, B> {};
+//           ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  field core::Map<self::A*, self::B*>* f = <self::A*, self::B*>{};
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/regress/issue_31157.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31157.dart.weak.modular.expect
new file mode 100644
index 0000000..f999813
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31157.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31157.dart:6:16: Error: Expected an identifier, but got '('.
+// Try inserting an identifier before '('.
+//   return null?.(1);
+//                ^
+//
+import self as self;
+
+static method bad() → dynamic {
+  return invalid-expression "pkg/front_end/testcases/regress/issue_31157.dart:6:16: Error: Expected an identifier, but got '('.
+Try inserting an identifier before '('.
+  return null?.(1);
+               ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31171.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31171.dart.weak.modular.expect
new file mode 100644
index 0000000..7b520a3
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31171.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31171.dart:8:1: Error: Expected a type, but got 'typedef'.
+// typedef F = Map<String, dynamic> Function();
+// ^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Expected ';' after this.
+// typedef T =
+//           ^
+//
+// pkg/front_end/testcases/regress/issue_31171.dart:7:11: Error: Can't create typedef from non-type.
+// typedef T =
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef T = invalid-type;
+typedef F = () →* core::Map<core::String*, dynamic>*;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31180.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31180.dart.weak.modular.expect
new file mode 100644
index 0000000..3412492
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31180.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31180.dart:6:15: Error: Null safety features are disabled for this library.
+// Try removing the `@dart=` annotation or setting the language version to 2.12 or higher.
+//   return null?[1];
+//               ^
+// pkg/front_end/testcases/regress/issue_31180.dart:4:1: Context: This is the annotation that opts out this library from null safety features.
+// // @dart=2.9
+// ^^^^^^^^^^^^
+//
+import self as self;
+
+static method bad() → dynamic {
+  return let final dynamic #t1 = null in #t1 == null ?{dynamic} null : #t1{dynamic}.[](1);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31181.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31181.dart.weak.modular.expect
new file mode 100644
index 0000000..20bc5b5
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31181.dart.weak.modular.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Foo<unrelated T extends core::Object* = dynamic> = <T extends core::Object* = dynamic>(T*) →* T*;
+static field <T extends core::Object* = dynamic>(T*) →* T* x;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31183.dart.weak.modular.expect
new file mode 100644
index 0000000..3c62f2d
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Unexpected token 'unary'.
+//   operator unary- => 0;
+//            ^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   operator unary- => 0;
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  operator unary-() → dynamic
+    return 0;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::C::•();
+}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31184.dart.weak.modular.expect
new file mode 100644
index 0000000..60fc8d2
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' is already declared in this scope.
+//   for (int i = 0, i > 10; i++) {}
+//                   ^
+// pkg/front_end/testcases/regress/issue_31184.dart:6:12: Context: Previous declaration of 'i'.
+//   for (int i = 0, i > 10; i++) {}
+//            ^
+//
+// pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: Expected ';' after this.
+//   for (int i = 0, i > 10; i++) {}
+//                   ^
+//
+// pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected an identifier, but got '>'.
+// Try inserting an identifier before '>'.
+//   for (int i = 0, i > 10; i++) {}
+//                     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method bad() → dynamic {
+  for (core::int* i = 0, core::int* i = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' is already declared in this scope.
+  for (int i = 0, i > 10; i++) {}
+                  ^"; invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: This couldn't be parsed.
+  for (int i = 0, i > 10; i++) {}
+                    ^"{<invalid>}.>(10); i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31185.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31185.dart.weak.modular.expect
new file mode 100644
index 0000000..ec82b98
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31185.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31185.dart:8:12: Error: Expected ';' after this.
+//   return i ++ (i);
+//            ^^
+//
+// pkg/front_end/testcases/regress/issue_31185.dart:12:14: Error: Expected ';' after this.
+//   return (i) ++ (i);
+//              ^^
+//
+// pkg/front_end/testcases/regress/issue_31185.dart:12:12: Error: Can't assign to a parenthesized expression.
+//   return (i) ++ (i);
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::int* i = 5;
+static method test1() → core::int* {
+  return let final core::int* #t1 = self::i in let final core::int* #t2 = self::i = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1;
+  self::i;
+}
+static method test2() → core::int* {
+  return invalid-expression "pkg/front_end/testcases/regress/issue_31185.dart:12:12: Error: Can't assign to a parenthesized expression.
+  return (i) ++ (i);
+           ^";
+  self::i;
+}
+static method main() → dynamic {
+  self::test1();
+}
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31186.dart.weak.modular.expect
new file mode 100644
index 0000000..ce4b4c6
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31186.dart:6:16: Error: Expected an identifier, but got 'true'.
+// Try inserting an identifier before 'true'.
+//   return null?.true;
+//                ^^^^
+//
+import self as self;
+
+static method bad() → dynamic {
+  return invalid-expression "pkg/front_end/testcases/regress/issue_31186.dart:6:16: Error: Expected an identifier, but got 'true'.
+Try inserting an identifier before 'true'.
+  return null?.true;
+               ^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31187.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31187.dart.weak.modular.expect
new file mode 100644
index 0000000..77462b2
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31187.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31187.dart:6:16: Error: Expected an identifier, but got '1'.
+// Try inserting an identifier before '1'.
+//   return null?.1;
+//                ^
+//
+import self as self;
+
+static method bad() → dynamic {
+  return invalid-expression "pkg/front_end/testcases/regress/issue_31187.dart:6:16: Error: Expected an identifier, but got '1'.
+Try inserting an identifier before '1'.
+  return null?.1;
+               ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31188.dart.weak.modular.expect
new file mode 100644
index 0000000..bc17959
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:18: Error: Expected ';' after this.
+// type T = Map<A, B>
+//                  ^
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Error: Type 'type' not found.
+// type T = Map<A, B>
+// ^^^^
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Error: 'type' isn't a type.
+// type T = Map<A, B>
+// ^^^^
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:14: Error: 'A' isn't a type.
+// type T = Map<A, B>
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:17: Error: 'B' isn't a type.
+// type T = Map<A, B>
+//                 ^
+//
+// pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+// type T = Map<A, B>
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field invalid-type T = #C1;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(core::Map<dynamic, dynamic>*)
+}
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31190.dart.weak.modular.expect
new file mode 100644
index 0000000..ba00133
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: Can't use type arguments with type variable 'T'.
+// Try removing the type arguments.
+//   T<U> v;
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_31190.dart:6:5: Error: Type 'U' not found.
+//   T<U> v;
+//     ^
+//
+// pkg/front_end/testcases/regress/issue_31190.dart:6:5: Error: 'U' isn't a type.
+//   T<U> v;
+//     ^
+//
+// pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: Expected 0 type arguments.
+//   T<U> v;
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Typed<T extends core::Object* = dynamic> extends core::Object {
+  field invalid-type v = null;
+  synthetic constructor •() → self::Typed<self::Typed::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31192.dart.weak.modular.expect
new file mode 100644
index 0000000..0640c28
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Expected an assignment after the field name.
+// To initialize a field, use the syntax 'name = value'.
+//   Increment() : x++ {}
+//                 ^
+//
+// pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Can't access 'this' in a field initializer to read 'x'.
+//   Increment() : x++ {}
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Increment extends core::Object {
+  field core::int* x = null;
+  constructor •() → self::Increment*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: This couldn't be parsed.
+  Increment() : x++ {}
+                ^" {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31198.dart.weak.modular.expect
new file mode 100644
index 0000000..ecfe034
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:10:24: Error: Expected an identifier, but got ')'.
+// Try inserting an identifier before ')'.
+//   B.named2(): super().() {}
+//                        ^
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//   B(): super().foo() {}
+//        ^
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:8:16: Error: Expected an initializer.
+//   B(): super().foo() {}
+//                ^
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
+//   B.named1(): super().super() {}
+//                       ^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
+// Try inserting an identifier before '('.
+//   B.named2(): super().() {}
+//                       ^
+//
+// pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an initializer.
+//   B.named2(): super().() {}
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  constructor •() → self::B*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+  B(): super().foo() {}
+       ^"{dynamic}.foo() {}
+  constructor named1() → self::B*
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
+  B.named1(): super().super() {}
+                      ^^^^^" {}
+  constructor named2() → self::B*
+    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
+Try inserting an identifier before '('.
+  B.named2(): super().() {}
+                      ^" {}
+}
+static method bad() → dynamic {
+  new self::B::•();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31213.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31213.dart.weak.modular.expect
new file mode 100644
index 0000000..59e271c
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31213.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef C<contravariant A extends core::Object* = dynamic, contravariant K extends core::Object* = dynamic> = <B extends core::Object* = dynamic>(A*, K*, B*) →* core::int*;
+typedef D<contravariant K extends core::Object* = dynamic> = <A extends core::Object* = dynamic>(core::int*) →* <B extends core::Object* = dynamic>(A*, K*, B*) →* core::int*;
+static method producer<K extends core::Object* = dynamic>() → dynamic {
+  return <A extends core::Object* = dynamic>(core::int* v1) → <B extends core::Object* = dynamic>(A*, self::producer::K*, B*) →* core::int* {
+    return <B extends core::Object* = dynamic>(A* v2, self::producer::K* v3, B* v4) → core::int* => 0;
+  };
+}
+static method main() → dynamic {
+  assert(self::producer<core::String*>() is <A extends core::Object* = dynamic>(core::int*) →* <B extends core::Object* = dynamic>(A*, core::String*, B*) →* core::int*);
+}
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31299.dart.weak.modular.expect
new file mode 100644
index 0000000..c1f0dcb
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.weak.modular.expect
@@ -0,0 +1,52 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_31299.dart:18:12: Error: Too many positional arguments: 0 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//   new A.foo(1, 2);
+//            ^
+// pkg/front_end/testcases/regress/issue_31299.dart:10:3: Context: Found this candidate, but the arguments don't match.
+//   A.foo() : m = 2;
+//   ^^^^^
+//
+// pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
+//   new A().foo();
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* m;
+  constructor •() → self::A*
+    : self::A::m = 1, super core::Object::•()
+    ;
+  constructor foo() → self::A*
+    : self::A::m = 2, super core::Object::•()
+    ;
+  method foo(core::int* a, core::int* b) → core::int*
+    return a.{core::num::+}(b.{core::num::*}(this.{self::A::m}{core::int*}){(core::num*) →* core::int*}){(core::num*) →* core::int*};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
+  new A().foo();
+             ^" in new self::A::•().{self::A::foo}{<inapplicable>}.(){() →* invalid-type};
+  new self::A::•().{self::A::foo}(1, 2){(core::int*, core::int*) →* core::int*};
+  new self::A::foo();
+  invalid-expression "pkg/front_end/testcases/regress/issue_31299.dart:18:12: Error: Too many positional arguments: 0 allowed, but 2 found.
+Try removing the extra positional arguments.
+  new A.foo(1, 2);
+           ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31766.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31766.dart.weak.modular.expect
new file mode 100644
index 0000000..ec4557f
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31766.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method foo() → dynamic
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  function bar<T extends self::A*>(T* t) → void {
+    core::print("t.foo()=${t.{self::A::foo}(){() →* dynamic}}");
+  }
+  bar<self::A*>(new self::A::•()){(self::A*) →* void};
+  (<S extends self::A*>(S* s) → Null {
+    core::print("s.foo()=${s.{self::A::foo}(){() →* dynamic}}");
+  })<self::A*>(new self::A::•()){(self::A*) →* Null};
+}
diff --git a/pkg/front_end/testcases/regress/issue_31846.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31846.dart.weak.modular.expect
new file mode 100644
index 0000000..a893a8d
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31846.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::print(#C1 is () →* dynamic);
+  core::print((<T extends core::Object* = dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print((<T extends core::num*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print((<T extends core::Comparable<T*>* = core::Comparable<dynamic>*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print((<T extends core::Comparable<S*>* = core::Comparable<dynamic>*, S extends core::Object* = dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print((<T extends (T*) →* dynamic = (Null) →* dynamic>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+  core::print((<T extends core::List<core::List<T*>*>* = core::List<core::List<dynamic>*>*>(T* x) → T* => x).{core::Object::runtimeType}{core::Type*});
+}
+
+constants  {
+  #C1 = static-tearoff self::main
+}
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31996.dart.weak.modular.expect
new file mode 100644
index 0000000..6cf6fb4
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31996.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class B<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Base extends core::Object implements self::B<dynamic> {
+  synthetic constructor •() → self::Base*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Child1 extends self::Base implements self::C<core::int*> {
+  synthetic constructor •() → self::Child1*
+    : super self::Base::•()
+    ;
+}
+class Child2 extends self::Base implements self::C<core::double*> {
+  synthetic constructor •() → self::Child2*
+    : super self::Base::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_32182.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_32182.dart.weak.modular.expect
new file mode 100644
index 0000000..3b90e8d
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32182.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue_32182.dart" as self;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  method m() → dynamic
+    return 42;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C&A&M = self::A<self::A<dynamic>*> with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C&A&M*
+    : super self::A::•()
+    ;
+  mixin-super-stub method m() → dynamic
+    return super.{self::M::m}();
+}
+class C extends self::_C&A&M {
+  synthetic constructor •() → self::C*
+    : super self::_C&A&M::•()
+    ;
+}
+static method main() → dynamic {
+  new self::C::•().{self::_C&A&M::m}(){() →* dynamic}{dynamic}.+(1);
+}
diff --git a/pkg/front_end/testcases/regress/issue_32196.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_32196.dart.weak.modular.expect
new file mode 100644
index 0000000..d1c71d6
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32196.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String* name;
+  constructor get(core::String* name) → self::A*
+    : self::A::name = name, super core::Object::•()
+    ;
+  constructor set(core::String* name) → self::A*
+    : self::A::name = name, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::A::get("get");
+  new self::A::set("set");
+}
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_32200.dart.weak.modular.expect
new file mode 100644
index 0000000..d70c7d0
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_32200.dart:8:3: Error: 'self.Foo' can't be used as a type because 'self' doesn't refer to an import prefix.
+//   self.Foo self;
+//   ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue_32200.dart" as self;
+
+class Foo extends core::Object {
+  field invalid-type self = null;
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::Foo* instance = new self::Foo::•();
+  instance.{self::Foo::self} = instance;
+}
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_32660.dart.weak.modular.expect
new file mode 100644
index 0000000..ec03c53
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.weak.modular.expect
@@ -0,0 +1,106 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_32660.dart:13:7: Error: The implementation of 'foo' in the non-abstract class 'C' does not conform to its interface.
+// class C extends A implements B {
+//       ^
+// pkg/front_end/testcases/regress/issue_32660.dart:6:3: Context: The method 'A.foo' has fewer named arguments than those of overridden method 'B.foo'.
+//   foo(int x) => x;
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:10:3: Context: This is the overridden method ('foo').
+//   foo(int x, {int y}) => y;
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_32660.dart:24:7: Error: The implementation of 'foo' in the non-abstract class 'E' does not conform to its interface.
+// class E extends D {
+//       ^
+// pkg/front_end/testcases/regress/issue_32660.dart:21:3: Context: The method 'D.foo' has fewer named arguments than those of overridden method 'E.foo'.
+//   foo(int x) => x;
+//   ^
+// pkg/front_end/testcases/regress/issue_32660.dart:25:3: Context: This is the overridden method ('foo').
+//   foo(int x, {int y});
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method foo(core::int* x) → dynamic
+    return x;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method foo(core::int* x, {core::int* y = #C1}) → dynamic
+    return y;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::A implements self::B {
+  synthetic constructor •() → self::C*
+    : super self::A::•()
+    ;
+  method noSuchMethod(core::Invocation* i) → dynamic {
+    core::print("No such method!");
+    return 42;
+  }
+  abstract member-signature method foo(core::int* x, {core::int* y = #C1}) → dynamic; -> self::B::foo
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  method foo(core::int* x) → dynamic
+    return x;
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E extends self::D {
+  synthetic constructor •() → self::E*
+    : super self::D::•()
+    ;
+  abstract method foo(core::int* x, {core::int* y = #C1}) → dynamic;
+  method noSuchMethod(core::Invocation* i) → dynamic {
+    core::print(i.{core::Invocation::namedArguments}{core::Map<core::Symbol*, dynamic>*});
+    return 42;
+  }
+}
+static method main() → dynamic {
+  self::C* c = new self::C::•();
+  self::E* e = new self::E::•();
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_32972.dart.weak.modular.expect
new file mode 100644
index 0000000..660b650
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.weak.modular.expect
@@ -0,0 +1,90 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:22:3: Error: Expected 1 type arguments.
+//   foo<String, String>("hello world");
+//   ^
+// pkg/front_end/testcases/regress/issue_32972.dart:5:6: Context: Found this candidate, but the arguments don't match.
+// void foo<X>(X i) {
+//      ^^^
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:24:7: Error: Expected 1 type arguments.
+//   Foo.foo<int, int>(42);
+//       ^
+// pkg/front_end/testcases/regress/issue_32972.dart:10:10: Context: Found this candidate, but the arguments don't match.
+//   static foo<X>(X i) {
+//          ^^^
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:29:7: Error: Expected 2 type arguments.
+//   new Bar<String>();
+//       ^
+// pkg/front_end/testcases/regress/issue_32972.dart:19:7: Context: The class 'Bar' has a constructor that takes no arguments.
+// class Bar<X, Y> {}
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:27:5: Error: Expected 1 type arguments.
+//   f.bar<double, double>(42.42);
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo*
+    : super core::Object::•()
+    ;
+  static method foo<X extends core::Object* = dynamic>(self::Foo::foo::X* i) → dynamic {
+    core::print(i);
+  }
+  method bar<X extends core::Object* = dynamic>(self::Foo::bar::X* i) → dynamic {
+    core::print(i);
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Bar<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bar<self::Bar::X*, self::Bar::Y*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo<X extends core::Object* = dynamic>(self::foo::X* i) → void {
+  core::print(i);
+}
+static method main() → dynamic {
+  invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:22:3: Error: Expected 1 type arguments.
+  foo<String, String>(\"hello world\");
+  ^";
+  self::foo<core::String*>("hello world");
+  invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:24:7: Error: Expected 1 type arguments.
+  Foo.foo<int, int>(42);
+      ^";
+  self::Foo::foo<core::int*>(42);
+  self::Foo* f = new self::Foo::•();
+  invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:27:5: Error: Expected 1 type arguments.
+  f.bar<double, double>(42.42);
+    ^" in f.{self::Foo::bar}{<inapplicable>}.<core::double*, core::double*>(42.42){(invalid-type) →* invalid-type};
+  f.{self::Foo::bar}<core::double*>(42.42){(core::double*) →* dynamic};
+  invalid-expression "pkg/front_end/testcases/regress/issue_32972.dart:29:7: Error: Expected 2 type arguments.
+  new Bar<String>();
+      ^";
+  new self::Bar::•<core::String*, core::String*>();
+}
diff --git a/pkg/front_end/testcases/regress/issue_33452.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_33452.dart.weak.modular.expect
new file mode 100644
index 0000000..0f3ef8d
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_33452.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
+//   var x = new ExistingClass.nonExistingConstructor();
+//                             ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:11:11: Error: Couldn't find constructor 'ExistingClass'.
+//   x = new ExistingClass();
+//           ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:12:11: Error: Couldn't find constructor 'ExistingClass'.
+//   x = new ExistingClass<String>();
+//           ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:13:33: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
+//   x = new ExistingClass<String>.nonExistingConstructor();
+//                                 ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:14:41: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
+//   x = new ExistingClass<String, String>.nonExistingConstructor();
+//                                         ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_33452.dart:15:11: Error: Couldn't find constructor 'NonExistingClass'.
+//   x = new NonExistingClass();
+//           ^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ExistingClass extends core::Object {
+  constructor existingConstructor() → self::ExistingClass*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  invalid-type x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
+  var x = new ExistingClass.nonExistingConstructor();
+                            ^^^^^^^^^^^^^^^^^^^^^^";
+  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:11:11: Error: Couldn't find constructor 'ExistingClass'.
+  x = new ExistingClass();
+          ^^^^^^^^^^^^^";
+  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:12:11: Error: Couldn't find constructor 'ExistingClass'.
+  x = new ExistingClass<String>();
+          ^^^^^^^^^^^^^";
+  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:13:33: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
+  x = new ExistingClass<String>.nonExistingConstructor();
+                                ^^^^^^^^^^^^^^^^^^^^^^";
+  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:14:41: Error: Couldn't find constructor 'ExistingClass.nonExistingConstructor'.
+  x = new ExistingClass<String, String>.nonExistingConstructor();
+                                        ^^^^^^^^^^^^^^^^^^^^^^";
+  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:15:11: Error: Couldn't find constructor 'NonExistingClass'.
+  x = new NonExistingClass();
+          ^^^^^^^^^^^^^^^^";
+}
diff --git a/pkg/front_end/testcases/regress/issue_33672.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_33672.dart.weak.modular.expect
new file mode 100644
index 0000000..7caa5cb
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_33672.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int* count = 0;
+  #L1:
+  for (core::int* a = 0; a.{core::num::<}(10){(core::num*) →* core::bool*}; a = a.{core::num::+}(1){(core::num*) →* core::int*}) {
+    for (core::int* b = 0; b.{core::num::<}(10){(core::num*) →* core::bool*}; b = b.{core::num::+}(1){(core::num*) →* core::int*}) {
+      count = count.{core::num::+}(1){(core::num*) →* core::int*};
+      if(count =={core::num::==}{(core::Object*) →* core::bool*} 27)
+        break #L1;
+    }
+    count = count.{core::num::+}(1){(core::num*) →* core::int*};
+  }
+  if(!(count =={core::num::==}{(core::Object*) →* core::bool*} 27))
+    throw "failed: ${count}";
+}
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34225.dart.weak.modular.expect
new file mode 100644
index 0000000..2a92ec9
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.weak.modular.expect
@@ -0,0 +1,65 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   static set C(v) {} //# 01: compile-time error
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:10:7: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   set D(v) {} //# 02: compile-time error
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:15:5: Error: The setter 'C' isn't defined for the class 'C'.
+//  - 'C' is from 'pkg/front_end/testcases/regress/issue_34225.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'C'.
+//   c.C = 5;
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  static set C(dynamic v) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  set D(dynamic v) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C* c = new self::C::•();
+  invalid-expression "pkg/front_end/testcases/regress/issue_34225.dart:15:5: Error: The setter 'C' isn't defined for the class 'C'.
+ - 'C' is from 'pkg/front_end/testcases/regress/issue_34225.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'C'.
+  c.C = 5;
+    ^" in c{<unresolved>}.C = 5;
+  self::D* d = new self::D::•();
+  d.{self::D::D} = 5;
+}
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34291.dart.weak.modular.expect
new file mode 100644
index 0000000..efb5579
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_34291.dart:9:1: Error: Expected 0 type arguments.
+// lib.A<B> foo() {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue_34291_lib.dart" as lib;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method foo() → invalid-type {}
+static method main() → dynamic {}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self2::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/regress/issue_34403.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34403.dart.weak.modular.expect
new file mode 100644
index 0000000..cb1b2fd
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34403.dart.weak.modular.expect
@@ -0,0 +1,216 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:16:14: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var c1 = C.bar<int>();
+//              ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:18:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var c2 = new C.bar<int>();
+//                  ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:20:13: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   var c3 = C<String>.bar<int>();
+//             ^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:20:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var c3 = C<String>.bar<int>();
+//                      ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:22:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var c4 = new C<String>.bar<int>();
+//                          ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:25:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const d1 = D.foo<int>();
+//                ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:27:22: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const d2 = const D.foo<int>();
+//                      ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:29:15: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   const d3 = D<String>.foo<int>();
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:29:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const d3 = D<String>.foo<int>();
+//                        ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:31:30: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const d4 = const D<String>.foo<int>();
+//                              ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:34:16: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var e1 = p.E.bar<int>();
+//                ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:36:20: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var e2 = new p.E.bar<int>();
+//                    ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:38:15: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   var e3 = p.E<String>.bar<int>();
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:38:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var e3 = p.E<String>.bar<int>();
+//                        ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:40:28: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   var e4 = new p.E<String>.bar<int>();
+//                            ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:43:18: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const f1 = p.F.foo<int>();
+//                  ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:45:24: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const f2 = const p.F.foo<int>();
+//                        ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:47:17: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'.
+//   const f3 = p.F<String>.foo<int>();
+//                 ^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:47:26: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const f3 = p.F<String>.foo<int>();
+//                          ^^^
+//
+// pkg/front_end/testcases/regress/issue_34403.dart:49:32: Error: A constructor invocation can't have type arguments after the constructor name.
+// Try removing the type arguments or placing them after the class name.
+//   const f4 = const p.F<String>.foo<int>();
+//                                ^^^
+//
+import self as self;
+import "dart:core" as core;
+import "issue_34403_lib.dart" as iss;
+
+import "org-dartlang-testcase:///issue_34403_lib.dart" as p;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  constructor bar() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C<core::int*>* c1 = new self::C::bar<core::int*>();
+  c1.{self::C::toString}(){() →* core::String*};
+  self::C<core::int*>* c2 = new self::C::bar<core::int*>();
+  c2.{self::C::toString}(){() →* core::String*};
+  self::C<core::int*>* c3 = new self::C::bar<core::int*>();
+  c3.{self::C::toString}(){() →* core::String*};
+  self::C<core::String*>* c4 = new self::C::bar<core::String*>();
+  c4.{self::C::toString}(){() →* core::String*};
+  #C1.{self::D::toString}(){() →* core::String*};
+  #C1.{self::D::toString}(){() →* core::String*};
+  #C1.{self::D::toString}(){() →* core::String*};
+  #C2.{self::D::toString}(){() →* core::String*};
+  iss::E<core::int*>* e1 = new iss::E::bar<core::int*>();
+  e1.{iss::E::toString}(){() →* core::String*};
+  iss::E<dynamic>* e2 = new iss::E::bar<dynamic>();
+  e2.{iss::E::toString}(){() →* core::String*};
+  iss::E<core::int*>* e3 = new iss::E::bar<core::int*>();
+  e3.{iss::E::toString}(){() →* core::String*};
+  iss::E<core::String*>* e4 = new iss::E::bar<core::String*>();
+  e4.{iss::E::toString}(){() →* core::String*};
+  #C3.{iss::F::toString}(){() →* core::String*};
+  #C4.{iss::F::toString}(){() →* core::String*};
+  #C3.{iss::F::toString}(){() →* core::String*};
+  #C5.{iss::F::toString}(){() →* core::String*};
+}
+
+library;
+import self as iss;
+import "dart:core" as core;
+
+class E<T extends core::Object* = dynamic> extends core::Object {
+  constructor bar() → iss::E<iss::E::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class F<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const constructor foo() → iss::F<iss::F::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+constants  {
+  #C1 = self::D<core::int*> {}
+  #C2 = self::D<core::String*> {}
+  #C3 = iss::F<core::int*> {}
+  #C4 = iss::F<dynamic> {}
+  #C5 = iss::F<core::String*> {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue_34403.dart:
+- D.foo (from org-dartlang-testcase:///issue_34403.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- F.foo (from org-dartlang-testcase:///issue_34403_lib.dart:10:9)
diff --git a/pkg/front_end/testcases/regress/issue_34498.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34498.dart.weak.modular.expect
new file mode 100644
index 0000000..fa054b4
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34498.dart.weak.modular.expect
@@ -0,0 +1,91 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_34498.dart:8:3: Error: 'lib.MyClass' can't be used as a type because 'lib' doesn't refer to an import prefix.
+//   lib.MyClass get lib => null; // (1)
+//   ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_34498.dart:10:3: Error: 'foo' isn't a type.
+//   foo foo() {}
+//   ^^^
+// pkg/front_end/testcases/regress/issue_34498.dart:10:7: Context: This isn't a type.
+//   foo foo() {}
+//       ^^^
+//
+// pkg/front_end/testcases/regress/issue_34498.dart:20:3: Error: Can't use type arguments with type variable 'T'.
+// Try removing the type arguments.
+//   T<String> foo() {}
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_34498.dart:12:3: Error: Type 'Missing' not found.
+//   Missing bar() {}
+//   ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue_34498_lib.dart" as lib;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  get lib() → invalid-type
+    return null;
+  method foo() → invalid-type {}
+  method bar() → invalid-type {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method foo() → invalid-type {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static final field self::A* a = null;
+static method main() → dynamic {}
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+class MyClass extends core::Object {
+  synthetic constructor •() → self2::MyClass*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/regress/issue_34563.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34563.dart.weak.modular.expect
new file mode 100644
index 0000000..201e0fa
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34563.dart.weak.modular.expect
@@ -0,0 +1,154 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_34563.dart:9:10: Error: Expected 'on' instead of this.
+// mixin M2 extend M1 {}
+//          ^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_34563.dart:11:10: Error: Expected 'on' instead of this.
+// mixin M3 extends M1 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_34563.dart:17:10: Error: Expected 'extends' instead of this.
+// class C2 extend C1 with M2 {}
+//          ^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_34563.dart:19:10: Error: Expected 'extends' instead of this.
+// class C3 on C1 with M3 {}
+//          ^^
+//
+// pkg/front_end/testcases/regress/issue_34563.dart:23:6: Error: The getter 'm' isn't defined for the class 'C2'.
+//  - 'C2' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
+//   c2.m + c2.c;
+//      ^
+//
+// pkg/front_end/testcases/regress/issue_34563.dart:23:13: Error: The getter 'c' isn't defined for the class 'C2'.
+//  - 'C2' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
+//   c2.m + c2.c;
+//             ^
+//
+// pkg/front_end/testcases/regress/issue_34563.dart:25:6: Error: The getter 'm' isn't defined for the class 'C3'.
+//  - 'C3' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
+//   c3.m + c3.c;
+//      ^
+//
+// pkg/front_end/testcases/regress/issue_34563.dart:25:13: Error: The getter 'c' isn't defined for the class 'C3'.
+//  - 'C3' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
+//   c3.m + c3.c;
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Object /*isMixinDeclaration*/  {
+  get m() → core::int*
+    return 1;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M2 extends core::Object /*isMixinDeclaration*/  {
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class M3 extends core::Object /*isMixinDeclaration*/  {
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C1 extends core::Object {
+  synthetic constructor •() → self::C1*
+    : super core::Object::•()
+    ;
+  get c() → core::int*
+    return 2;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C2 extends core::Object {
+  synthetic constructor •() → self::C2*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C3 extends core::Object {
+  synthetic constructor •() → self::C3*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C2* c2 = new self::C2::•();
+  invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:6: Error: The getter 'm' isn't defined for the class 'C2'.
+ - 'C2' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
+  c2.m + c2.c;
+     ^" in c2{<unresolved>}.m{dynamic}.+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:23:13: Error: The getter 'c' isn't defined for the class 'C2'.
+ - 'C2' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
+  c2.m + c2.c;
+            ^" in c2{<unresolved>}.c);
+  self::C3* c3 = new self::C3::•();
+  invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:6: Error: The getter 'm' isn't defined for the class 'C3'.
+ - 'C3' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'm'.
+  c3.m + c3.c;
+     ^" in c3{<unresolved>}.m{dynamic}.+(invalid-expression "pkg/front_end/testcases/regress/issue_34563.dart:25:13: Error: The getter 'c' isn't defined for the class 'C3'.
+ - 'C3' is from 'pkg/front_end/testcases/regress/issue_34563.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'c'.
+  c3.m + c3.c;
+            ^" in c3{<unresolved>}.c);
+}
diff --git a/pkg/front_end/testcases/regress/issue_34610.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34610.dart.weak.modular.expect
new file mode 100644
index 0000000..db6cda1
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34610.dart.weak.modular.expect
@@ -0,0 +1,109 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_34610.dart:5:15: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+// class A { get A.named => null; get bar => 1; }
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_34610.dart:5:11: Error: Constructors can't be a getter.
+// Try removing 'get'.
+// class A { get A.named => null; get bar => 1; }
+//           ^^^
+//
+// pkg/front_end/testcases/regress/issue_34610.dart:7:11: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+// class B { B.named : super(); get bar => 1; }
+//           ^
+//
+// pkg/front_end/testcases/regress/issue_34610.dart:9:11: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+// class C { C.named => null; get bar => 1; }
+//           ^
+//
+// pkg/front_end/testcases/regress/issue_34610.dart:5:26: Error: Constructors can't have a return type.
+// Try removing the return type.
+// class A { get A.named => null; get bar => 1; }
+//                          ^
+//
+// pkg/front_end/testcases/regress/issue_34610.dart:9:22: Error: Constructors can't have a return type.
+// Try removing the return type.
+// class C { C.named => null; get bar => 1; }
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor named() → self::A*
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/regress/issue_34610.dart:5:26: Error: Constructors can't have a return type.
+Try removing the return type.
+class A { get A.named => null; get bar => 1; }
+                         ^";
+  get bar() → dynamic
+    return 1;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object {
+  constructor named() → self::B*
+    : super core::Object::•()
+    ;
+  get bar() → dynamic
+    return 1;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  constructor named() → self::C*
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/regress/issue_34610.dart:9:22: Error: Constructors can't have a return type.
+Try removing the return type.
+class C { C.named => null; get bar => 1; }
+                     ^";
+  get bar() → dynamic
+    return 1;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  try {
+    core::print(new self::A::named().{self::A::bar}{dynamic});
+    throw "expected exception";
+  }
+  on dynamic catch(final dynamic e) {
+  }
+  core::print(new self::B::named().{self::B::bar}{dynamic});
+  try {
+    core::print(new self::C::named().{self::C::bar}{dynamic});
+    throw "expected exception";
+  }
+  on dynamic catch(final dynamic e) {
+  }
+}
diff --git a/pkg/front_end/testcases/regress/issue_34614.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34614.dart.weak.modular.expect
new file mode 100644
index 0000000..9092aae
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34614.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_34614.dart:5:14: Error: Expected an identifier, but got '}'.
+// Try inserting an identifier before '}'.
+// class C { C. }
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_34614.dart:5:11: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+// class C { C. }
+//           ^
+//
+// pkg/front_end/testcases/regress/issue_34614.dart:5:14: Error: Expected '{' before this.
+// class C { C. }
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::C* c = new self::C::•();
+  c.{self::C::toString}(){() →* core::String*};
+}
diff --git a/pkg/front_end/testcases/regress/issue_34850.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34850.dart.weak.modular.expect
new file mode 100644
index 0000000..ad3a1ce
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34850.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_34850.dart:5:1: Error: Expected a declaration, but got '<'.
+// <foo<
+// ^
+//
+// pkg/front_end/testcases/regress/issue_34850.dart:7:1: Error: Expected '>' after this.
+// int f1() {
+// ^^^
+//
+// pkg/front_end/testcases/regress/issue_34850.dart:12:8: Error: Expected '>' after this.
+// Future<List<int>> f2() async => null;
+//        ^^^^
+//
+// pkg/front_end/testcases/regress/issue_34850.dart:12:1: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// Future<List<int>> f2() async => null;
+// ^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_34850.dart:12:19: Error: Expected '{' before this.
+// Future<List<int>> f2() async => null;
+//                   ^^
+//
+// pkg/front_end/testcases/regress/issue_34850.dart:14:13: Error: Expected a type, but got '>>'.
+// Future<List<>> f3() async {
+//             ^^
+//
+// pkg/front_end/testcases/regress/issue_34850.dart:5:2: Error: Type 'foo' not found.
+// <foo<
+//  ^^^
+//
+// pkg/front_end/testcases/regress/issue_34850.dart:5:2: Error: Expected 0 type arguments.
+// <foo<
+//  ^
+//
+// pkg/front_end/testcases/regress/issue_34850.dart:11:1: Error: Type 'foo' not found.
+// foo
+// ^^^
+//
+// pkg/front_end/testcases/regress/issue_34850.dart:14:1: Error: 'Future' isn't a type.
+// Future<List<>> f3() async {
+// ^^^^^^
+// pkg/front_end/testcases/regress/issue_34850.dart:12:1: Context: This isn't a type.
+// Future<List<int>> f2() async => null;
+// ^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_34850.dart:14:1: Error: Expected 0 type arguments.
+// Future<List<>> f3() async {
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f1() → invalid-type {
+  return null;
+}
+static method Future<List extends core::Object* = dynamic>() → invalid-type {}
+static method f2() → dynamic async 
+  return null;
+static method f3() → invalid-type async {
+  return null;
+}
+static method main() → dynamic async {
+  core::print(self::f1());
+  core::print(await self::f2());
+  core::print(await self::f3());
+}
diff --git a/pkg/front_end/testcases/regress/issue_35151.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35151.dart.weak.modular.expect
new file mode 100644
index 0000000..146d622
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_35151.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_35151.dart:10:15: Error: A field can only be initialized in its declaring class
+// Try passing a value into the superclass constructor, or moving the initialization into the constructor body.
+//   B() : super.a = 42;
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_35151.dart:10:15: Error: Not a valid initializer.
+// To initialize a field, use the syntax 'name = value'.
+//   B() : super.a = 42;
+//               ^
+//
+// pkg/front_end/testcases/regress/issue_35151.dart:14:9: Error: Can't access 'super' in a field initializer.
+//   C() : super = 42;
+//         ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int* a = null;
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends self::A {
+  constructor •() → self::B*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_35151.dart:10:15: Error: Not a valid initializer.
+To initialize a field, use the syntax 'name = value'.
+  B() : super.a = 42;
+              ^"
+    ;
+}
+class C extends core::Object {
+  constructor •() → self::C*
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_35151.dart:14:9: Error: Can't access 'super' in a field initializer.
+  C() : super = 42;
+        ^^^^^"
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  try {
+    self::B* b = new self::B::•();
+  }
+  on dynamic catch(final dynamic _) {
+  }
+  try {
+    self::C* c = new self::C::•();
+  }
+  on dynamic catch(final dynamic _) {
+  }
+}
diff --git a/pkg/front_end/testcases/regress/issue_35177.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35177.dart.weak.modular.expect
new file mode 100644
index 0000000..d0eb552
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_35177.dart.weak.modular.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  () →* dynamic f;
+  f(){() →* dynamic}{dynamic}.call<core::int*>();
+}
diff --git a/pkg/front_end/testcases/regress/issue_35213.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35213.dart.weak.modular.expect
new file mode 100644
index 0000000..e97491d
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_35213.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_35213.dart:5:9: Error: Expected ',' before this.
+// f(int a int b) { }
+//         ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static method f(core::int* a, core::int* b) → dynamic {}
+static method main() → dynamic {
+  self::f(2, 3);
+}
diff --git a/pkg/front_end/testcases/regress/issue_35220.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35220.dart.weak.modular.expect
new file mode 100644
index 0000000..cab6aea
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_35220.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be assigned to a variable of type 'A'.
+//  - 'A' is from 'pkg/front_end/testcases/regress/issue_35220.dart'.
+//   A bad() { return true != 2; }
+//                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  method bad() → self::A* {
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35220.dart:6:25: Error: A value of type 'bool' can't be assigned to a variable of type 'A'.
+ - 'A' is from 'pkg/front_end/testcases/regress/issue_35220.dart'.
+  A bad() { return true != 2; }
+                        ^" in !(true =={core::Object::==}{(core::Object*) →* core::bool*} 2) as{TypeError} self::A*;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_35258.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35258.dart.weak.modular.expect
new file mode 100644
index 0000000..33c1bb2
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_35258.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_35258.dart:13:3: Error: 'C' is already declared in this scope.
+//   C(this.d) {}
+//   ^
+// pkg/front_end/testcases/regress/issue_35258.dart:12:3: Context: Previous declaration of 'C'.
+//   C() {}
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_35258.dart:6:7: Error: Can't use 'C' because it is declared more than once.
+//   new C(42);
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_35258.dart:10:9: Error: Final field 'd' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final d;
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  final field dynamic d = null;
+  constructor •() → self::C*
+    : super core::Object::•() {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  invalid-expression "pkg/front_end/testcases/regress/issue_35258.dart:6:7: Error: Can't use 'C' because it is declared more than once.
+  new C(42);
+      ^";
+}
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35259.dart.weak.modular.expect
new file mode 100644
index 0000000..6a366d0
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_35259.dart:7:11: Error: 'Supertype' is already declared in this scope.
+//   factory Supertype() = Unresolved;
+//           ^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_35259.dart:6:11: Context: Previous declaration of 'Supertype'.
+//   factory Supertype() = Unresolved;
+//           ^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Couldn't find constructor 'Unresolved'.
+//   factory Supertype() = Unresolved;
+//                         ^
+//
+// pkg/front_end/testcases/regress/issue_35259.dart:7:25: Error: Couldn't find constructor 'Unresolved'.
+//   factory Supertype() = Unresolved;
+//                         ^
+//
+// pkg/front_end/testcases/regress/issue_35259.dart:7:25: Error: Redirection constructor target not found: 'Unresolved'
+//   factory Supertype() = Unresolved;
+//                         ^
+//
+// pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Redirection constructor target not found: 'Unresolved'
+//   factory Supertype() = Unresolved;
+//                         ^
+//
+// pkg/front_end/testcases/regress/issue_35259.dart:11:13: Error: Can't use 'Supertype' because it is declared more than once.
+//   print(new Supertype());
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Supertype extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  static factory •() → self::Supertype*
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Redirection constructor target not found: 'Unresolved'
+  factory Supertype() = Unresolved;
+                        ^";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::print(invalid-expression "pkg/front_end/testcases/regress/issue_35259.dart:11:13: Error: Can't use 'Supertype' because it is declared more than once.
+  print(new Supertype());
+            ^");
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Supertype::•
+}
diff --git a/pkg/front_end/testcases/regress/issue_35260.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35260.dart.weak.modular.expect
new file mode 100644
index 0000000..0b4828a
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_35260.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_35260.dart:7:11: Error: 'Supertype' is already declared in this scope.
+//   factory Supertype() = X;
+//           ^^^^^^^^^
+// pkg/front_end/testcases/regress/issue_35260.dart:6:11: Context: Previous declaration of 'Supertype'.
+//   factory Supertype() = X;
+//           ^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_35260.dart:15:13: Error: Can't use 'Supertype' because it is declared more than once.
+//   X x = new Supertype();
+//             ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Supertype extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  static factory •() → self::Supertype*
+    return new self::X::•();
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class X extends core::Object implements self::Supertype {
+  constructor •() → self::X*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  self::X* x = invalid-expression "pkg/front_end/testcases/regress/issue_35260.dart:15:13: Error: Can't use 'Supertype' because it is declared more than once.
+  X x = new Supertype();
+            ^";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::Supertype::•
+}
diff --git a/pkg/front_end/testcases/regress/issue_35266.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35266.dart.weak.modular.expect
new file mode 100644
index 0000000..9885c52
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_35266.dart.weak.modular.expect
@@ -0,0 +1,56 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_35266.dart:8:11: Error: 'B.foo' is already declared in this scope.
+//   factory B.foo() = B<T>;
+//           ^^^^^
+// pkg/front_end/testcases/regress/issue_35266.dart:7:11: Context: Previous declaration of 'B.foo'.
+//   factory B.foo() = B<T>;
+//           ^^^^^
+//
+// pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
+//   factory C.bar() = B<K>.foo;
+//                     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class B<T extends core::Object* = dynamic> extends self::C<self::B::T*> {
+  static final field dynamic _redirecting# = <dynamic>[#C1];
+  constructor •() → self::B<self::B::T*>*
+    : super self::C::•()
+    ;
+  static factory foo<T extends core::Object* = dynamic>() → self::B<self::B::foo::T*>*
+    return new self::B::•<self::B::foo::T*>();
+}
+class C<K extends core::Object* = dynamic> extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[#C2];
+  constructor •() → self::C<self::C::K*>*
+    : super core::Object::•()
+    ;
+  static factory bar<K extends core::Object* = dynamic>() → self::C<self::C::bar::K*>*
+    return invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
+  factory C.bar() = B<K>.foo;
+                    ^";
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  invalid-expression "pkg/front_end/testcases/regress/issue_35266.dart:13:21: Error: Can't use 'B.foo' because it is declared more than once.
+  factory C.bar() = B<K>.foo;
+                    ^";
+}
+
+constants  {
+  #C1 = constructor-tearoff self::B::foo
+  #C2 = constructor-tearoff self::C::bar
+}
diff --git a/pkg/front_end/testcases/regress/issue_35900.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_35900.dart.weak.modular.expect
new file mode 100644
index 0000000..c6fc9e6
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_35900.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_35900.dart:5:25: Error: Can't find '}' to match '${'.
+// main () { int x; print('${x' '); }
+//                         ^
+//
+// pkg/front_end/testcases/regress/issue_35900.dart:5:24: Error: String starting with ' must end with '.
+// main () { int x; print('${x' '); }
+//                        ^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/regress/issue_35900.dart:6:1: Error: Expected a declaration, but got ''.
+//
+// pkg/front_end/testcases/regress/issue_35900.dart:5:28: Error: Expected '}' before this.
+// main () { int x; print('${x' '); }
+//                            ^^^
+//
+// pkg/front_end/testcases/regress/issue_35900.dart:5:31: Error: Expected a String, but got ')'.
+// main () { int x; print('${x' '); }
+//                               ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int* x;
+  core::print("${x}");
+}
diff --git a/pkg/front_end/testcases/regress/issue_36400.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_36400.dart.weak.modular.expect
new file mode 100644
index 0000000..3b5a369
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_36400.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_36400.dart:6:3: Error: Factory constructors cannot have a return type.
+// Try removing the type appearing before 'factory'.
+//   Test factory Test() {
+//   ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Test extends core::Object {
+  static factory •() → self::Test* {
+    return null;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
diff --git a/pkg/front_end/testcases/regress/issue_36647.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_36647.dart.weak.modular.expect
new file mode 100644
index 0000000..85c932b
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_36647.dart.weak.modular.expect
@@ -0,0 +1,85 @@
+library;
+import self as self;
+
+import "org-dartlang-testcase:///issue_36647_lib1.dart";
+
+
+library;
+import self as self2;
+import "issue_36647_lib2.dart" as iss;
+additionalExports = (iss::xxx,
+  iss::XXX,
+  iss::XXX,
+  iss::extends,
+  iss::extends)
+
+export "org-dartlang-testcase:///issue_36647_lib2.dart";
+
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_36647_lib2.dart:5:7: Error: A class declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// class xxx xx XXX extends XXX {
+//       ^^^
+//
+// pkg/front_end/testcases/regress/issue_36647_lib2.dart:5:14: Error: Expected ';' after this.
+// class xxx xx XXX extends XXX {
+//              ^^^
+//
+// pkg/front_end/testcases/regress/issue_36647_lib2.dart:5:18: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// class xxx xx XXX extends XXX {
+//                  ^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_36647_lib2.dart:5:18: Error: 'extends' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
+// class xxx xx XXX extends XXX {
+//                  ^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_36647_lib2.dart:5:18: Error: Expected ';' after this.
+// class xxx xx XXX extends XXX {
+//                  ^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_36647_lib2.dart:5:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// class xxx xx XXX extends XXX {
+//                          ^^^
+//
+// pkg/front_end/testcases/regress/issue_36647_lib2.dart:5:26: Error: 'XXX' is already declared in this scope.
+// class xxx xx XXX extends XXX {
+//                          ^^^
+// pkg/front_end/testcases/regress/issue_36647_lib2.dart:5:14: Context: Previous declaration of 'XXX'.
+// class xxx xx XXX extends XXX {
+//              ^^^
+//
+// pkg/front_end/testcases/regress/issue_36647_lib2.dart:5:11: Error: Type 'xx' not found.
+// class xxx xx XXX extends XXX {
+//           ^^
+//
+// pkg/front_end/testcases/regress/issue_36647_lib2.dart:5:11: Error: 'xx' isn't a type.
+// class xxx xx XXX extends XXX {
+//           ^^
+//
+import self as iss;
+import "dart:core" as core;
+
+class xxx extends core::Object {
+  synthetic constructor •() → iss::xxx*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field invalid-type XXX;
+static field dynamic extends;
diff --git a/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.modular.expect
new file mode 100644
index 0000000..79c30c6
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_36647_2.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library;
+import self as self;
+import "issue_36647_2_lib1.dart" as iss;
+additionalExports = (iss::foo,
+  iss::foo,
+  iss::bar,
+  iss::baz)
+
+export "org-dartlang-testcase:///issue_36647_2_lib1.dart";
+
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_36647_2_lib1.dart:6:5: Error: 'foo' is already declared in this scope.
+// int foo = 43;
+//     ^^^
+// pkg/front_end/testcases/regress/issue_36647_2_lib1.dart:5:5: Context: Previous declaration of 'foo'.
+// int foo = 42;
+//     ^^^
+//
+// pkg/front_end/testcases/regress/issue_36647_2_lib1.dart:8:14: Error: 'bar' is already declared in this scope.
+// typedef bool bar();
+//              ^^^
+// pkg/front_end/testcases/regress/issue_36647_2_lib1.dart:7:14: Context: Previous declaration of 'bar'.
+// typedef bool bar();
+//              ^^^
+//
+// pkg/front_end/testcases/regress/issue_36647_2_lib1.dart:13:5: Error: 'baz' is already declared in this scope.
+// int baz() {
+//     ^^^
+// pkg/front_end/testcases/regress/issue_36647_2_lib1.dart:9:5: Context: Previous declaration of 'baz'.
+// int baz() {
+//     ^^^
+//
+import self as iss;
+import "dart:core" as core;
+
+typedef bar = () →* core::bool*;
+static field core::int* foo;
+static method baz() → core::int* {
+  return 42;
+}
diff --git a/pkg/front_end/testcases/regress/issue_36669.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_36669.dart.weak.modular.expect
new file mode 100644
index 0000000..0c77dc9
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_36669.dart.weak.modular.expect
@@ -0,0 +1,51 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_36669.dart:11:7: Error: The superclass, 'NoUnnamedConstuctor with MixMeIn', has no unnamed constructor that takes no arguments.
+// class Foo extends NoUnnamedConstuctor with MixMeIn {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class NoUnnamedConstuctor extends core::Object {
+  constructor _() → self::NoUnnamedConstuctor*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class MixMeIn extends core::Object {
+  synthetic constructor •() → self::MixMeIn*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Foo&NoUnnamedConstuctor&MixMeIn = self::NoUnnamedConstuctor with self::MixMeIn /*isAnonymousMixin*/  {
+  synthetic constructor _() → self::_Foo&NoUnnamedConstuctor&MixMeIn*
+    : super self::NoUnnamedConstuctor::_()
+    ;
+}
+class Foo extends self::_Foo&NoUnnamedConstuctor&MixMeIn {
+  synthetic constructor •() → self::Foo*
+    : invalid-initializer
+    ;
+}
diff --git a/pkg/front_end/testcases/regress/issue_36793.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_36793.dart.weak.modular.expect
new file mode 100644
index 0000000..ac733f1
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_36793.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_36793.dart:10:5: Error: 'x' is already declared in this scope.
+// int x = 2;
+//     ^
+// pkg/front_end/testcases/regress/issue_36793.dart:8:5: Context: Previous declaration of 'x'.
+// int x = 1;
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+static const field core::int* y = #C1;
+@#C1
+static field core::int* x;
+static method main() → dynamic {
+  core::print(#C1);
+}
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/regress/issue_37285.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_37285.dart.weak.modular.expect
new file mode 100644
index 0000000..84ceeef
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_37285.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_37285.dart:6:17: Error: Expected an identifier, but got ']'.
+// Try inserting an identifier before ']'.
+//   C() : super()[];
+//                 ^
+//
+// pkg/front_end/testcases/regress/issue_37285.dart:6:9: Error: Can't use 'super' as an expression.
+// To delegate a constructor to a super constructor, put the super call as an initializer.
+//   C() : super()[];
+//         ^
+//
+// pkg/front_end/testcases/regress/issue_37285.dart:6:16: Error: Not a valid initializer.
+// To initialize a field, use the syntax 'name = value'.
+//   C() : super()[];
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  constructor •() → self::C*
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_37285.dart:6:16: Error: Not a valid initializer.
+To initialize a field, use the syntax 'name = value'.
+  C() : super()[];
+               ^"
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  new self::C::•();
+}
diff --git a/pkg/front_end/testcases/regress/issue_37681.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_37681.dart.weak.modular.expect
new file mode 100644
index 0000000..c92257e
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_37681.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_37681.dart:6:7: Error: Functions marked 'async' must have a return type assignable to 'Future'.
+//   int f_async() async { return 42; }
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_37681.dart:9:7: Error: Functions marked 'async*' must have a return type assignable to 'Stream'.
+//   int f_async_star() async* { yield 42; }
+//       ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/issue_37681.dart:14:7: Error: Functions marked 'sync*' must have a return type assignable to 'Iterable'.
+//   int f_sync_star() sync* { yield 42; }
+//       ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static method main() → dynamic async {
+  function f_async() → core::int* async {
+    return 42;
+  }
+  core::print(await f_async(){() →* core::int*});
+  function f_async_star() → core::int* async* {
+    yield 42;
+  }
+  await for (dynamic x in (f_async_star(){() →* core::int*} as dynamic) as{TypeError,ForDynamic} asy::Stream<dynamic>*) {
+    core::print(x);
+  }
+  function f_sync_star() → core::int* sync* {
+    yield 42;
+  }
+  for (dynamic x in (f_sync_star(){() →* core::int*} as dynamic) as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+    core::print(x);
+  }
+}
diff --git a/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..6b4145e
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_39035.crash_dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:4: Error: Can't find '}' to match '${'.
+// M("${)=
+//    ^
+//
+// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:6: Error: String starting with " must end with ".
+// M("${)=
+//      ^^
+//
+// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:3: Error: Expected an identifier, but got '"'.
+// Try inserting an identifier before '"'.
+// M("${)=
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:4: Error: Expected ')' before this.
+// M("${)=
+//    ^^
+//
+// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:7: Error: Expected a function body or '=>'.
+// Try adding {}.
+// M("${)=
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:7: Error: Expected ';' after this.
+// M("${)=
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_39035.crash_dart:5:8: Error: Unexpected token ''.
+// M("${)=
+//        ^...
+//
+import self as self;
+
+static method M() → dynamic
+  return "";
diff --git a/pkg/front_end/testcases/regress/issue_39040.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_39040.dart.weak.modular.expect
new file mode 100644
index 0000000..ade6db2
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_39040.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → void {
+  core::List<core::String*>* whereWasI = <core::String*>[];
+  core::int* outer = 1;
+  core::int* inner = 0;
+  #L1:
+  switch(outer) {
+    #L2:
+    case #C1:
+      {
+        whereWasI.{core::List::add}("outer 0"){(core::String*) →* void};
+        break #L1;
+      }
+    #L3:
+    case #C2:
+      {
+        (() → Null {
+          switch(inner) {
+            #L4:
+            case #C1:
+              {
+                whereWasI.{core::List::add}("inner 0"){(core::String*) →* void};
+                continue #L5;
+              }
+            #L5:
+            case #C2:
+              {
+                whereWasI.{core::List::add}("inner 1"){(core::String*) →* void};
+              }
+          }
+        })(){() →* Null};
+      }
+  }
+  if(!(whereWasI.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2) || !(whereWasI.{core::List::[]}(0){(core::int*) →* core::String*} =={core::String::==}{(core::Object*) →* core::bool*} "inner 0") || !(whereWasI.{core::List::[]}(1){(core::int*) →* core::String*} =={core::String::==}{(core::Object*) →* core::bool*} "inner 1")) {
+    throw "Unexpected path.";
+  }
+  core::print(whereWasI);
+}
+
+constants  {
+  #C1 = 0
+  #C2 = 1
+}
diff --git a/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.modular.expect
new file mode 100644
index 0000000..c414477
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_39091_1.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_39091_1.dart:5:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+// Try adding the name of the type of the variable or the keyword 'var'.
+// hello
+// ^^^^^
+//
+// pkg/front_end/testcases/regress/issue_39091_1.dart:5:1: Error: Expected ';' after this.
+// hello
+// ^^^^^
+//
+import self as self;
+
+static field dynamic hello;
diff --git a/pkg/front_end/testcases/regress/issue_39091_2.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_39091_2.dart.weak.modular.expect
new file mode 100644
index 0000000..0ebcc72
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_39091_2.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_39091_2.dart:1:1: Error: The non-ASCII space character U+FEFF can only be used in strings and comments.
+// // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// ^
+//
+// pkg/front_end/testcases/regress/issue_39091_2.dart:13:1: Error: Expected a declaration, but got '""'.
+// "";
+// ^^^
+//
+// pkg/front_end/testcases/regress/issue_39091_2.dart:13:4: Error: Unexpected token ';'.
+// "";
+//    ^
+//
+// pkg/front_end/testcases/regress/issue_39091_2.dart:11:11: Error: Undefined name 'hello'.
+// "";/*æ*/ hello; /*æ*/
+//           ^^^^^
+//
+import self as self;
+
+static method main() → dynamic {
+  "\u65279";
+  "\u65279";
+  "\u65279";
+  "\u65279";
+  "A";
+  "\u65279";
+  "\u65279";
+  invalid-expression "pkg/front_end/testcases/regress/issue_39091_2.dart:11:11: Error: Undefined name 'hello'.
+\"\u65279\";/*\u0230*/ hello; /*\u0230*/
+          ^^^^^";
+}
diff --git a/pkg/front_end/testcases/regress/issue_39682.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_39682.dart.weak.modular.expect
new file mode 100644
index 0000000..9866587
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_39682.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue_39682_lib.dart" deferred as foo;
+
+static method main() → dynamic {
+  () →* asy::Future<dynamic>* f = #C1;
+  f(){() →* asy::Future<dynamic>*};
+  core::print(self::__loadLibrary_foo());
+}
+static method __loadLibrary_foo() → core::String* {
+  return "I'll call my methods what I want!";
+}
+static method _#loadLibrary_foo() → asy::Future<dynamic>*
+  return LoadLibrary(foo);
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+static method foo() → dynamic {
+  core::print("foo!");
+}
+
+constants  {
+  #C1 = static-tearoff self::_#loadLibrary_foo
+}
diff --git a/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..03c63ac
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.modular.expect
@@ -0,0 +1,73 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:9:53: Error: Unexpected token '>'.
+// class DND1 extends Object with M<dynamic> Function()> {
+//                                                     ^
+//
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:9:7: Error: The type '() -> M<dynamic>' can't be mixed in.
+// class DND1 extends Object with M<dynamic> Function()> {
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:12:7: Error: The type '() -> M<dynamic>' can't be mixed in.
+// class DND2 extends Object with M<dynamic> Function() {
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:9:7: Error: Can't use a function type as supertype.
+// class DND1 extends Object with M<dynamic> Function()> {
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:12:7: Error: Can't use a function type as supertype.
+// class DND2 extends Object with M<dynamic> Function() {
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:15:7: Error: Can't use a function type as supertype.
+// class DND3 extends M<dynamic> Function() {
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:18:7: Error: Can't use a function type as supertype.
+// class DND4 implements M<dynamic> Function() {
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+}
+abstract class M<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class _DND1&Object extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_DND1&Object
+    : super core::Object::•()
+    ;
+}
+class DND1 extends self::_DND1&Object {
+  synthetic constructor •() → self::DND1
+    : super self::_DND1&Object::•()
+    ;
+}
+abstract class _DND2&Object extends core::Object /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_DND2&Object
+    : super core::Object::•()
+    ;
+}
+class DND2 extends self::_DND2&Object {
+  synthetic constructor •() → self::DND2
+    : super self::_DND2&Object::•()
+    ;
+}
+class DND3 extends core::Object {
+  synthetic constructor •() → self::DND3
+    : super core::Object::•()
+    ;
+}
+class DND4 extends core::Object {
+  synthetic constructor •() → self::DND4
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_42423.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_42423.dart.weak.modular.expect
new file mode 100644
index 0000000..ed0856a
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_42423.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static method test1(dynamic stringList) → dynamic {
+  core::Set<core::int*>* intSet = block {
+    final core::Set<core::int*>* #t1 = col::LinkedHashSet::•<core::int*>();
+    final core::Iterable<dynamic>* #t2 = stringList as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+    if(!(#t2 == null))
+      for (final dynamic #t3 in #t2) {
+        final core::int* #t4 = #t3 as{TypeError} core::int*;
+        #t1.{core::Set::add}{Invariant}(#t4){(core::int*) →* core::bool*};
+      }
+  } =>#t1;
+}
+static method test2(dynamic stringList) → dynamic {
+  core::List<core::int*>* intList = block {
+    final core::List<core::int*>* #t5 = <core::int*>[];
+    final core::Iterable<dynamic>* #t6 = stringList as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+    if(!(#t6 == null))
+      for (final dynamic #t7 in #t6) {
+        final core::int* #t8 = #t7 as{TypeError} core::int*;
+        #t5.{core::List::add}{Invariant}(#t8){(core::int*) →* void};
+      }
+  } =>#t5;
+}
+static method test3(dynamic stringMap) → dynamic {
+  core::Map<core::int*, core::int*>* intMap = block {
+    final core::Map<core::int*, core::int*>* #t9 = <core::int*, core::int*>{};
+    final core::Map<dynamic, dynamic>* #t10 = stringMap as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*;
+    if(!(#t10 == null))
+      for (final core::MapEntry<dynamic, dynamic>* #t11 in #t10.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>}) {
+        final core::int* #t12 = #t11.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
+        final core::int* #t13 = #t11.{core::MapEntry::value}{dynamic} as{TypeError} core::int*;
+        #t9.{core::Map::[]=}{Invariant}(#t12, #t13){(core::int*, core::int*) →* void};
+      }
+  } =>#t9;
+}
+static method main() → dynamic {
+  dynamic stringList = <core::String*>["string"];
+  exp::Expect::throwsTypeError(() → Null {
+    self::test1(stringList);
+  });
+  exp::Expect::throwsTypeError(() → Null {
+    self::test2(stringList);
+  });
+  dynamic stringMap = <core::String*, core::String*>{"a": "b"};
+  exp::Expect::throwsTypeError(() → Null {
+    self::test3(stringMap);
+  });
+}
diff --git a/pkg/front_end/testcases/regress/utf_16_le_content.crash_dart.weak.modular.expect b/pkg/front_end/testcases/regress/utf_16_le_content.crash_dart.weak.modular.expect
new file mode 100644
index 0000000..bfc33bf
--- /dev/null
+++ b/pkg/front_end/testcases/regress/utf_16_le_content.crash_dart.weak.modular.expect
Binary files differ
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.modular.expect
new file mode 100644
index 0000000..d6a32ed
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = () →* void;
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f() → void {}
+  get g() → () →* void
+    return null;
+  get h() → dynamic
+    return null;
+  method test() → void {
+    this.{self::C::f}(){() →* void};
+    this.{self::C::f}(){() →* void};
+    this.{self::C::g}{() →* void}(){() →* void};
+    this.{self::C::g}{() →* void}(){() →* void};
+    this.{self::C::h}{dynamic}{dynamic}.call();
+    this.{self::C::h}{dynamic}{dynamic}.call();
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test(self::C* c, () →* void f, dynamic d) → void {
+  c.{self::C::f}(){() →* void};
+  f(){() →* void};
+  d{dynamic}.call();
+  d{dynamic}.f();
+  c.{self::C::g}{() →* void}(){() →* void};
+  c.{self::C::h}{dynamic}{dynamic}.call();
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.modular.expect
new file mode 100644
index 0000000..96f9b35
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field dynamic y = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  get x() → dynamic
+    return null;
+  method test() → void {
+    dynamic v1 = this.{self::C::x}{dynamic};
+    dynamic v2 = this.{self::C::x}{dynamic};
+    dynamic v3 = this.{self::C::y}{dynamic};
+    dynamic v4 = this.{self::C::y}{dynamic};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test(self::C* c, dynamic d) → void {
+  dynamic v1 = c.{self::C::x}{dynamic};
+  dynamic v2 = c.{self::C::y}{dynamic};
+  dynamic v3 = d{dynamic}.x;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.modular.expect
new file mode 100644
index 0000000..a78157b
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field dynamic y = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  set x(dynamic value) → void {}
+  method test() → void {
+    this.{self::C::x} = null;
+    this.{self::C::x} = null;
+    this.{self::C::y} = null;
+    this.{self::C::y} = null;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test(self::C* c, dynamic d) → void {
+  c.{self::C::x} = null;
+  c.{self::C::y} = null;
+  d{dynamic}.x = null;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..bffdb53
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method call() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  () →* void x = let final self::C* #t1 = new self::C::•() in #t1 == null ?{() →* void} null : #t1.{self::C::call}{() →* void};
+}
diff --git a/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.modular.expect
new file mode 100644
index 0000000..edf5d5c
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/call_method_implicit_tear_off_future_or.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method call() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  FutureOr<() →* void>* x = let final self::C* #t1 = new self::C::•() in #t1 == null ?{() →* void} null : #t1.{self::C::call}{() →* void};
+}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.modular.expect
new file mode 100644
index 0000000..2142878
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_field.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+class C<T extends core::Object* = dynamic> extends core::Object {
+  field (self::C::T*) →* void y = null;
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method f() → void {
+    (self::C::T*) →* void x = this.{self::C::y}{(self::C::T*) →* void};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method g(self::C<core::num*>* c) → void {
+  (core::num*) →* void x = c.{self::C::y}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.modular.expect
new file mode 100644
index 0000000..3e9cb61
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method f<U extends (self::C::T*) →* void>(self::C::f::U* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method g(self::C<core::num*>* c) → void {
+  c.{self::C::f}<(core::Object*) →* void>((core::Object* o) → Null {}){((core::Object*) →* void) →* void};
+}
+static method test() → void {
+  self::g(new self::C::•<core::int*>());
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.modular.expect
new file mode 100644
index 0000000..a1cb113
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method f1() → (self::C::T*) →* void {}
+  method f2() → core::List<(self::C::T*) →* void>* {
+    return <(self::C::T*) →* void>[this.{self::C::f1}(){() →* (self::C::T*) →* void}];
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method g1(self::C<core::num*>* c) → void {
+  (core::num*) →* void x = c.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  core::print("hello");
+  x(1.5){(core::num*) →* void};
+}
+static method g2(self::C<core::num*>* c) → void {
+  (core::int*) →* void x = c.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  x(1){(core::int*) →* void};
+}
+static method g3(self::C<core::num*>* c) → void {
+  core::List<(core::num*) →* void>* x = c.{self::C::f2}(){() →* core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.weak.modular.expect
new file mode 100644
index 0000000..a8aa298
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method f1() → (self::C::T*) →* void {}
+  method f2() → core::List<(self::C::T*) →* void>* {
+    return <(self::C::T*) →* void>[this.{self::C::f1}(){() →* (self::C::T*) →* void}];
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method g1(self::C<core::num*>* c) → void {
+  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1 == null ?{(core::num*) →* void} null : #t1.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  core::print("hello");
+  x(1.5){(core::num*) →* void};
+}
+static method g2(self::C<core::num*>* c) → void {
+  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2 == null ?{(core::num*) →* void} null : #t2.{self::C::f1}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  x(1){(core::int*) →* void};
+}
+static method g3(self::C<core::num*>* c) → void {
+  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3 == null ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2}(){() →* core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..3f796f1
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_tear_off.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+typedef G<contravariant T extends core::Object* = dynamic> = () →* (T*) →* void;
+class C<T extends core::Object* = dynamic> extends core::Object {
+  field (self::C::T*) →* void _x;
+  constructor •((self::C::T*) →* void _x) → self::C<self::C::T*>*
+    : self::C::_x = _x, super core::Object::•()
+    ;
+  method f() → (self::C::T*) →* void
+    return this.{self::C::_x}{(self::C::T*) →* void};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method g(self::C<core::num*>* c) → () →* (core::num*) →* void {
+  return c.{self::C::f}{() →* (core::num*) →* void} as{TypeError,CovarianceCheck} () →* (core::num*) →* void;
+}
+static method h(core::int* i) → void {
+  core::print("${i}");
+}
+static method test() → void {
+  () →* (core::num*) →* void x = self::g(new self::C::•<core::int*>(#C1));
+}
+static method main() → void {}
+
+constants  {
+  #C1 = static-tearoff self::h
+}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..d641b1f
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+class C<T extends core::Object* = dynamic> extends core::Object {
+  field (self::C::T*) →* void y = null;
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method f(covariant-by-class self::C::T* value) → void {
+    let final self::C::T* #t1 = value in this.{self::C::y}{(self::C::T*) →* void}(#t1){(self::C::T*) →* void};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method g(self::C<core::num*>* c) → void {
+  let final self::C<core::num*>* #t2 = c in let final core::double* #t3 = 1.5 in (#t2.{self::C::y}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void)(#t3){(core::num*) →* void};
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.modular.expect
new file mode 100644
index 0000000..60445df
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  get f1() → (self::C::T*) →* void
+    return null;
+  get f2() → core::List<(self::C::T*) →* void>* {
+    return <(self::C::T*) →* void>[this.{self::C::f1}{(self::C::T*) →* void}];
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method g1(self::C<core::num*>* c) → void {
+  (core::num*) →* void x = c.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  core::print("hello");
+  x(1.5){(core::num*) →* void};
+}
+static method g2(self::C<core::num*>* c) → void {
+  (core::int*) →* void x = c.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  x(1){(core::int*) →* void};
+}
+static method g3(self::C<core::num*>* c) → void {
+  core::List<(core::num*) →* void>* x = c.{self::C::f2}{core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.weak.modular.expect
new file mode 100644
index 0000000..98e1172
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  get f1() → (self::C::T*) →* void
+    return null;
+  get f2() → core::List<(self::C::T*) →* void>* {
+    return <(self::C::T*) →* void>[this.{self::C::f1}{(self::C::T*) →* void}];
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method g1(self::C<core::num*>* c) → void {
+  (core::num*) →* void x = let final self::C<core::num*>* #t1 = c in #t1 == null ?{(core::num*) →* void} null : #t1.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  core::print("hello");
+  x(1.5){(core::num*) →* void};
+}
+static method g2(self::C<core::num*>* c) → void {
+  (core::int*) →* void x = let final self::C<core::num*>* #t2 = c in #t2 == null ?{(core::num*) →* void} null : #t2.{self::C::f1}{(core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+  x(1){(core::int*) →* void};
+}
+static method g3(self::C<core::num*>* c) → void {
+  core::List<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in #t3 == null ?{core::List<(core::num*) →* void>*} null : #t3.{self::C::f2}{core::List<(core::num*) →* void>*} as{TypeError,CovarianceCheck} core::List<(core::num*) →* void>*;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.modular.expect
new file mode 100644
index 0000000..23d142c
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'double' can't be assigned to the parameter type 'U'.
+//     this.f<U>(1.5);
+//               ^
+//
+// pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:20:16: Error: Type argument 'num' doesn't conform to the bound 'int' of the type variable 'U' on 'C<int>.g1'.
+//  - 'C' is from 'pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart'.
+// Try changing type arguments so that they conform to the bounds.
+//   new C<int>().g1<num>();
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method f<covariant-by-class U extends self::C::T*>(self::C::f::U* x) → void {}
+  method g1<covariant-by-class U extends self::C::T*>() → void {
+    this.{self::C::f}<self::C::g1::U*>(invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'double' can't be assigned to the parameter type 'U'.
+    this.f<U>(1.5);
+              ^" in 1.5 as{TypeError} Never){(self::C::g1::U*) →* void};
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method g2(self::C<core::Object*>* c) → void {
+  c.{self::C::f}<core::num*>(1.5){(core::num*) →* void};
+}
+static method test() → void {
+  new self::C::•<core::int*>().{self::C::g1}<core::num*>(){() →* void};
+  self::g2(new self::C::•<core::int*>());
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.modular.expect
new file mode 100644
index 0000000..2794c16
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method f(covariant-by-class self::C::T* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method g1(self::C<core::num*>* c) → void {
+  c.{self::C::f}(1.5){(core::num*) →* void};
+}
+static method g2(self::C<core::int*>* c) → void {
+  c.{self::C::f}(1){(core::int*) →* void};
+}
+static method g3(self::C<core::num*>* c) → void {
+  c.{self::C::f}(null){(core::num*) →* void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.modular.expect
new file mode 100644
index 0000000..41147c6
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method f1(covariant-by-class core::List<self::C::T*>* x) → void {}
+  method f2(covariant-by-class () →* self::C::T* callback) → void {}
+  method f3(covariant-by-class (self::C::T*) →* self::C::T* callback) → void {}
+  method f4((self::C::T*) →* void callback) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method g1(self::C<core::num*>* c, core::List<core::num*>* l) → void {
+  c.{self::C::f1}(l){(core::List<core::num*>*) →* void};
+}
+static method g2(self::C<core::num*>* c, () →* core::num* callback) → void {
+  c.{self::C::f2}(callback){(() →* core::num*) →* void};
+}
+static method g3(self::C<core::num*>* c, (core::num*) →* core::num* callback) → void {
+  c.{self::C::f3}(callback){((core::num*) →* core::num*) →* void};
+}
+static method g4(self::C<core::num*>* c, (core::num*) →* void callback) → void {
+  c.{self::C::f4}(callback){((core::num*) →* void) →* void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.modular.expect
new file mode 100644
index 0000000..b492a06
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class I<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T*>*
+    : super core::Object::•()
+    ;
+  abstract method f1(covariant-by-class self::I::T* x) → void;
+  abstract method f2(covariant-by-class self::I::T* x) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<U extends core::Object* = dynamic> extends core::Object implements self::I<core::int*> {
+  synthetic constructor •() → self::C<self::C::U*>*
+    : super core::Object::•()
+    ;
+  method f1(covariant-by-class core::int* x) → void {}
+  method f2(covariant-by-class core::int* x, [covariant-by-class self::C::U* y = #C1]) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D<U extends core::Object* = dynamic> extends self::C<self::D::U*> {
+  synthetic constructor •() → self::D<self::D::U*>*
+    : super self::C::•()
+    ;
+  method f1(covariant-by-class core::int* x) → void {}
+  method f2(covariant-by-class core::int* x, [covariant-by-class self::D::U* y = #C1]) → void {}
+}
+static method g1(self::C<core::num*>* c) → void {
+  c.{self::C::f1}(1){(core::int*) →* void};
+}
+static method g2(self::I<core::num*>* i) → void {
+  i.{self::I::f1}(1.5){(core::num*) →* void};
+}
+static method g3(self::C<core::num*>* c) → void {
+  c.{self::C::f2}(1, 1.5){(core::int*, [core::num*]) →* void};
+}
+static method g4(self::D<core::num*>* d) → void {
+  d.{self::D::f1}(1){(core::int*) →* void};
+}
+static method g5(self::D<core::num*>* d) → void {
+  d.{self::D::f2}(1, 1.5){(core::int*, [core::num*]) →* void};
+}
+static method test() → void {
+  self::g2(new self::C::•<core::num*>());
+}
+static method main() → void {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.modular.expect
new file mode 100644
index 0000000..c7a7694
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.modular.expect
@@ -0,0 +1,69 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method f(core::int* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T*>*
+    : super core::Object::•()
+    ;
+  abstract method f(covariant-by-class self::I::T* x) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  method f(core::int* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C = self::B with self::M implements self::I<core::int*> {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  forwarding-stub method f(covariant-by-class core::int* x) → void
+    return super.{self::M::f}(x);
+}
+static method g1(self::C* c) → void {
+  c.{self::C::f}(1){(core::int*) →* void};
+}
+static method g2(self::I<core::num*>* i) → void {
+  i.{self::I::f}(1.5){(core::num*) →* void};
+}
+static method test() → void {
+  self::g2(new self::C::•());
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.modular.expect
new file mode 100644
index 0000000..5e85a90
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method f(core::int* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T*>*
+    : super core::Object::•()
+    ;
+  abstract method f(covariant-by-class self::I::T* x) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B implements self::I<core::int*> {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  forwarding-stub method f(covariant-by-class core::int* x) → void
+    return super.{self::B::f}(x);
+}
+static method g1(self::C* c) → void {
+  c.{self::C::f}(1){(core::int*) →* void};
+}
+static method g2(self::I<core::num*>* i) → void {
+  i.{self::I::f}(1.5){(core::num*) →* void};
+}
+static method test() → void {
+  self::g2(new self::C::•());
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.modular.expect
new file mode 100644
index 0000000..e69ba31
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method f(core::int* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T*>*
+    : super core::Object::•()
+    ;
+  abstract method f(covariant-by-class self::I::T* x) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C = self::B with self::M implements self::I<core::int*> {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  forwarding-stub method f(covariant-by-class core::int* x) → void
+    return super.{self::B::f}(x);
+}
+static method g1(self::C* c) → void {
+  c.{self::C::f}(1){(core::int*) →* void};
+}
+static method g2(self::I<core::num*>* i) → void {
+  i.{self::I::f}(1.5){(core::num*) →* void};
+}
+static method test() → void {
+  self::g2(new self::C::•());
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.modular.expect
new file mode 100644
index 0000000..a63dac3
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.modular.expect
@@ -0,0 +1,40 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+typedef G<contravariant T extends core::Object* = dynamic, U extends core::Object* = dynamic> = (T*) →* U*;
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method f1(covariant-by-class self::C::T* x) → void {}
+  method f2(covariant-by-class core::List<self::C::T*>* x) → self::C::T*
+    return x.{core::Iterable::first}{self::C::T*};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method g1(self::C<core::num*>* c) → (core::num*) →* void {
+  return c.{self::C::f1}{(core::num*) →* void};
+}
+static method g2(self::C<core::int*>* c, core::Object* x) → void {
+  (core::Object*) →* void f = self::g1(c) as (core::Object*) →* void;
+  f(x){(core::Object*) →* void};
+}
+static method g3(self::C<core::num*>* c) → (core::List<core::num*>*) →* core::num* {
+  return c.{self::C::f2}{(core::List<core::num*>*) →* core::num*};
+}
+static method test() → void {
+  (core::num*) →* void x = self::g1(new self::C::•<core::int*>());
+  x(1.5){(core::num*) →* void};
+  self::g3(new self::C::•<core::int*>());
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.modular.expect
new file mode 100644
index 0000000..bf44b39
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  method f(core::num* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method f(covariant-by-declaration core::int* x) → void {}
+}
+class E extends self::D {
+  synthetic constructor •() → self::E*
+    : super self::D::•()
+    ;
+  method f(covariant-by-declaration core::int* x) → void {}
+}
+static method g1(self::C* c) → void {
+  c.{self::C::f}(1.5){(core::num*) →* void};
+}
+static method g2(self::C* c) → (core::num*) →* dynamic {
+  return c.{self::C::f}{(core::num*) →* void};
+}
+static method test() → dynamic {
+  self::g1(new self::D::•());
+  (core::num*) →* dynamic x = self::g2(new self::D::•());
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.modular.expect
new file mode 100644
index 0000000..210c2cb
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.modular.expect
@@ -0,0 +1,53 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::num* x = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends core::Object implements self::C {
+  covariant-by-declaration field core::int* x = null;
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E extends core::Object implements self::D {
+  covariant-by-declaration field core::int* x = null;
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..2e274f6
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::num* x = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends core::Object implements self::C {
+  covariant-by-declaration field core::int* x = null;
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E extends core::Object implements self::D {
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  get x() → core::int*
+    return 0;
+  set x(covariant-by-declaration core::int* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..3f5f3e4
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  set x(core::num* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  set x(covariant-by-declaration core::int* value) → void {}
+}
+class E extends self::D {
+  synthetic constructor •() → self::E*
+    : super self::D::•()
+    ;
+  set x(covariant-by-declaration core::int* value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.modular.expect
new file mode 100644
index 0000000..8c69a30
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  set x(core::num* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  set x(covariant-by-declaration core::int* value) → void {}
+}
+class E extends core::Object implements self::D {
+  covariant-by-declaration field core::int* x = null;
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..dee3331
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+class C<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::C::T* x = null;
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  set y(covariant-by-class self::C::T* value) → void {}
+  method f(covariant-by-class self::C::T* value) → void {
+    this.{self::C::x} = value;
+    this.{self::C::y} = value;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method g(self::C<core::num*>* c) → void {
+  c.{self::C::x} = 1.5;
+  c.{self::C::y} = 1.5;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.modular.expect
new file mode 100644
index 0000000..3d1a3dc
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method f1(covariant-by-class self::C::T* x) → void {}
+  method f2(core::int* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C<core::num*> {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  method f1(covariant-by-declaration covariant-by-class core::int* x) → void {}
+}
+static method g1(dynamic d) → void {
+  d{dynamic}.f1(1.5);
+}
+static method g2(dynamic d) → void {
+  d{dynamic}.f2(1.5);
+}
+static method test() → void {
+  self::g1(new self::C::•<core::int*>());
+  self::g2(new self::C::•<dynamic>());
+  self::g1(new self::D::•());
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.modular.expect
new file mode 100644
index 0000000..bbd989a
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.modular.expect
@@ -0,0 +1,31 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method f<covariant-by-class U extends self::C::T*>(self::C::f::U* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method g1(dynamic d) → void {
+  d{dynamic}.f<core::num*>(1.5);
+}
+static method g2(dynamic d) → void {
+  d{dynamic}.f(1.5);
+}
+static method test() → void {
+  self::g1(new self::C::•<core::int*>());
+  self::g2(new self::C::•<core::int*>());
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.modular.expect
new file mode 100644
index 0000000..204effc
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_of_getter.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field dynamic f;
+  constructor •(dynamic f) → self::C*
+    : self::C::f = f, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method g(self::C* c) → void {
+  let final self::C* #t1 = c in let final core::double* #t2 = 1.5 in #t1.{self::C::f}{dynamic}{dynamic}.call(#t2);
+}
+static method h(core::int* i) → void {}
+static method test() → void {
+  self::g(new self::C::•(#C1));
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = static-tearoff self::h
+}
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.modular.expect
new file mode 100644
index 0000000..e0143ec
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::B::T* x = null;
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  field core::num* x = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C implements self::B<core::num*> {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  forwarding-stub set x(covariant-by-class core::num* value) → void
+    return super.{self::C::x} = value;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.modular.expect
new file mode 100644
index 0000000..672eea9
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.modular.expect
@@ -0,0 +1,70 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  field core::Object* _x = null;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method f([core::num* x = #C1]) → void {
+    this.{self::B::_x} = x;
+  }
+  method g({core::num* x = #C2}) → void {
+    this.{self::B::_x} = x;
+  }
+  method check(core::Object* expectedValue) → void {
+    if(!(this.{self::B::_x}{core::Object*} =={core::Object::==}{(core::Object*) →* core::bool*} expectedValue)) {
+      throw "Expected _x == ${expectedValue}; got ${this.{self::B::_x}{core::Object*}}";
+    }
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T*>*
+    : super core::Object::•()
+    ;
+  abstract method f([covariant-by-class self::I::T* x = #C3]) → void;
+  abstract method g({covariant-by-class self::I::T* x = #C3}) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B implements self::I<core::num*> {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  forwarding-stub method f([covariant-by-class core::num* x = #C1]) → void
+    return super.{self::B::f}(x);
+  forwarding-stub method g({covariant-by-class core::num* x = #C2}) → void
+    return super.{self::B::g}(x: x);
+}
+static method main() → dynamic {
+  self::C* c = new self::C::•();
+  c.{self::C::f}(){([core::num*]) →* void};
+  c.{self::B::check}(10){(core::Object*) →* void};
+  c.{self::C::g}(){({x: core::num*}) →* void};
+  c.{self::B::check}(20){(core::Object*) →* void};
+}
+
+constants  {
+  #C1 = 10
+  #C2 = 20
+  #C3 = null
+}
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.modular.expect
new file mode 100644
index 0000000..76facc74
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method f(core::int* x, core::int* y) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T*>*
+    : super core::Object::•()
+    ;
+  abstract method f(covariant-by-class self::I::T* x, core::int* y) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B implements self::I<core::int*> {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  forwarding-stub method f(covariant-by-class core::int* x, core::int* y) → void
+    return super.{self::B::f}(x, y);
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.modular.expect
new file mode 100644
index 0000000..2fc5b5a
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::C::T* y = null;
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  set x(covariant-by-class self::C::T* t) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends core::Object implements self::C<core::num*> {
+  covariant-by-class field core::num* x = null;
+  covariant-by-class field core::num* y = null;
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E extends core::Object implements self::C<core::num*> {
+  synthetic constructor •() → self::E*
+    : super core::Object::•()
+    ;
+  set x(covariant-by-class core::num* t) → void {}
+  get y() → core::num*
+    return null;
+  set y(covariant-by-class core::num* t) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.modular.expect
new file mode 100644
index 0000000..3e9000d
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  abstract set x(covariant-by-declaration core::Object* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class B extends core::Object implements self::A {
+  covariant-by-declaration field core::Object* x = null;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method f(covariant-by-declaration core::Object* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<T extends core::Object* = dynamic> extends core::Object implements self::B {
+  covariant-by-declaration covariant-by-class field self::C::T* x = null;
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method f(covariant-by-declaration covariant-by-class self::C::T* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..c72954d
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_initializer.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  constructor •(core::Object* o) → self::C*
+    : assert(o as{TypeError} core::bool*), super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::Object* o = 1;
+  try {
+    new self::C::•(o);
+    assert(false, "no exception");
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_statement.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_statement.dart.weak.modular.expect
new file mode 100644
index 0000000..c4e012c
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_assert_statement.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::Object* o = 1;
+  try {
+    assert(o as{TypeError} core::bool*);
+    assert(false, "no exception");
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_constructor_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/implicit_downcast_constructor_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..f33aa41
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_constructor_initializer.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::bool* b;
+  constructor •(core::Object* o) → self::C*
+    : self::C::b = o as{TypeError} core::bool*, super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {
+  core::Object* o = 1;
+  try {
+    new self::C::•(o);
+    throw "no exception";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_do.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/implicit_downcast_do.dart.weak.modular.expect
new file mode 100644
index 0000000..21783cf
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_do.dart.weak.modular.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::Object* o = 1;
+  try {
+    do {
+    }
+    while (o as{TypeError} core::bool*)
+    throw "no exception";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart.weak.modular.expect
new file mode 100644
index 0000000..40fe0be
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_for_condition.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → void {
+  core::Object* o = 1;
+  try {
+    for (core::int* i = 0; o as{TypeError} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    }
+    throw "no exception";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_if.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/implicit_downcast_if.dart.weak.modular.expect
new file mode 100644
index 0000000..dae4331
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_if.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::Object* o = 1;
+  try {
+    if(o as{TypeError} core::bool*) {
+    }
+    throw "no exception";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_not.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/implicit_downcast_not.dart.weak.modular.expect
new file mode 100644
index 0000000..84171e4
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_not.dart.weak.modular.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → void {
+  core::Object* o = 1;
+  try {
+    !(o as{TypeError} core::bool*);
+    throw "no exception";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
diff --git a/pkg/front_end/testcases/runtime_checks/implicit_downcast_while.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks/implicit_downcast_while.dart.weak.modular.expect
new file mode 100644
index 0000000..f63e717
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks/implicit_downcast_while.dart.weak.modular.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::Object* o = 1;
+  try {
+    while (o as{TypeError} core::bool*) {
+    }
+    throw "no exception";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.modular.expect
new file mode 100644
index 0000000..761e51b
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method f(core::num* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T*>*
+    : super core::Object::•()
+    ;
+  abstract method f(covariant-by-class self::I::T* x) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B implements self::I<core::num*> {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  forwarding-stub forwarding-semi-stub method f(covariant-by-class core::num* x) → void
+    return super.{self::B::f}(x);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.modular.expect
new file mode 100644
index 0000000..1efedac
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.modular.expect
@@ -0,0 +1,49 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  method f(covariant-by-class self::C::T* x) → void {}
+  method g1(covariant-by-class self::C::T* x) → void {
+    this.{self::C::f}(x){(self::C::T*) →* void};
+  }
+  method g2(covariant-by-class self::C::T* x) → void {
+    this.{self::C::f}(x){(self::C::T*) →* void};
+  }
+  method g3(covariant-by-class self::C<self::C::T*>* c, covariant-by-class self::C::T* x) → void {
+    c.{self::C::f}(x){(self::C::T*) →* void};
+  }
+  method g4() → (self::C::T*) →* dynamic
+    return this.{self::C::f}{(self::C::T*) →* void};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C<core::int*> {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+}
+class E extends self::C<core::num*> {
+  synthetic constructor •() → self::E*
+    : super self::C::•()
+    ;
+  method f(covariant-by-declaration covariant-by-class core::int* x) → void {}
+}
+static method test() → dynamic {
+  (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}(){() →* (core::int*) →* dynamic} as{TypeError,CovarianceCheck} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
+  x("hi"){(core::Object*) →* dynamic};
+  new self::E::•().{self::C::g1}(1.5){(core::num*) →* void};
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.modular.expect
new file mode 100644
index 0000000..d266b53
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.weak.modular.expect
@@ -0,0 +1,59 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+class B<T extends core::Object* = dynamic, U extends (self::B::T*) →* void = (Null) →* void> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*, self::B::U*>*
+    : super core::Object::•()
+    ;
+  operator +(dynamic other) → self::B<self::B::T*, (self::B::T*) →* void>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  field self::B<core::num*, (core::num*) →* void>* x = null;
+  static field self::B<core::num*, (core::num*) →* void>* y = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  operator [](core::int* i) → self::B<core::num*, (core::num*) →* void>*
+    return null;
+  operator []=(core::int* i, self::B<core::num*, (core::num*) →* void>* v) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test1(self::B<core::num*, (core::num*) →* void>* b) → void {
+  b = b.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = b = b.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+}
+static method test2(self::C* c) → void {
+  let final self::C* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, #t1.{self::C::[]}(#t2){(core::int*) →* self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*){(core::int*, self::B<core::num*, (core::num*) →* void>*) →* void};
+  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t3 = c in let final core::int* #t4 = 0 in let final self::B<core::num*, (core::num*) →* void>* #t5 = #t3.{self::C::[]}(#t4){(core::int*) →* self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>* in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int*, self::B<core::num*, (core::num*) →* void>*) →* void} in #t5;
+}
+static method test3(self::C* c) → void {
+  let final self::C* #t7 = c in #t7.{self::C::x} = #t7.{self::C::x}{self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = let final self::C* #t8 = c in #t8.{self::C::x} = #t8.{self::C::x}{self::B<core::num*, (core::num*) →* void>*}.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+}
+static method test4(self::C* c) → void {
+  self::C::y = self::C::y.{self::B::+}(1){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+  self::B<core::num*, (core::num*) →* void>* x = self::C::y = self::C::y.{self::B::+}(2){(dynamic) →* self::B<core::num*, (core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<core::num*, (core::num*) →* void>*;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.modular.expect
new file mode 100644
index 0000000..edcb17e
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.weak.modular.expect
@@ -0,0 +1,99 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:30:14: Error: The type 'C<num>' of the getter 'D.value' is not assignable to the type 'int Function(int)' of the setter 'D.value'.
+//  - 'C' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart'.
+//   C<num> get value => getValue;
+//              ^^^^^
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:32:12: Context: This is the declaration of the setter 'D.value'.
+//   void set value(int Function(int) value) {
+//            ^^^^^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+//   d.value /*@ checkReturn=(num*) ->* num* */ += 1;
+//                                              ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+//     d.value /*@ checkReturn=(num*) ->* num* */ += 1;
+//                                                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+  final field (self::C::T*) →* core::num* plusResult;
+  constructor •((self::C::T*) →* core::num* plusResult) → self::C<self::C::T*>*
+    : self::C::plusResult = plusResult, super core::Object::•()
+    ;
+  operator +(core::int* i) → (self::C::T*) →* core::num*
+    return this.{self::C::plusResult}{(self::C::T*) →* core::num*};
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends core::Object {
+  final field self::C<core::num*>* getValue;
+  field (core::int*) →* core::int* setValue = null;
+  constructor •(self::C<core::num*>* getValue) → self::D*
+    : self::D::getValue = getValue, super core::Object::•()
+    ;
+  get value() → self::C<core::num*>*
+    return this.{self::D::getValue}{self::C<core::num*>*};
+  set value((core::int*) →* core::int* value) → void {
+    this.{self::D::setValue} = value;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method expectTypeError(() →* void callback) → void {
+  try {
+    callback(){() →* void};
+    throw "Expected TypeError, did not occur";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
+static method expect(core::Object* value, core::Object* expected) → void {
+  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
+    throw "Expected ${expected}, got ${value}";
+  }
+}
+static method numToInt(core::num* n) → core::int*
+  return 1;
+static method numToNum(core::num* n) → core::num*
+  return 2;
+static method main() → void {
+  self::D* d = new self::D::•(new self::C::•<core::num*>(#C1));
+  let final self::D* #t1 = d in #t1.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:49:46: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+  d.value /*@ checkReturn=(num*) ->* num* */ += 1;
+                                             ^" in (#t1.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+  self::expect(let final self::D* #t2 = d in let final core::int* #t3 = 0 in #t2.{self::D::setValue}{(core::int*) →* core::int*}(#t3){(core::int*) →* core::int*}, 1);
+  d = new self::D::•(new self::C::•<core::num*>(#C2));
+  self::expectTypeError(() → Null {
+    let final self::D* #t4 = d in #t4.{self::D::value} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:53:48: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'int Function(int)'.
+    d.value /*@ checkReturn=(num*) ->* num* */ += 1;
+                                               ^" in (#t4.{self::D::value}{self::C<core::num*>*}.{self::C::+}(1){(core::int*) →* (core::num*) →* core::num*} as{TypeError,CovarianceCheck} (core::num*) →* core::num*) as{TypeError} (core::int*) →* core::int*;
+  });
+  self::expect(d.{self::D::setValue}{(core::int*) →* core::int*}, null);
+}
+
+constants  {
+  #C1 = static-tearoff self::numToInt
+  #C2 = static-tearoff self::numToNum
+}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.modular.expect
new file mode 100644
index 0000000..c730f2f
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.modular.expect
@@ -0,0 +1,82 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+//  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
+//   c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
+//                                                      ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+//  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
+//   var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
+//                                                              ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+//  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
+//   c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
+//                                                       ^
+//
+// pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+//  - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
+//   var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
+//                                                               ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+class B<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  operator +(covariant-by-class self::B<self::B::T*>* other) → self::B<self::B::T*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  get x() → self::B<(self::C::T*) →* void>*
+    return null;
+  set x(self::B<(self::C::T*) →* void>* value) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test(self::C<core::num*>* c) → void {
+  let final self::C<core::num*>* #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:20:54: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+ - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
+  c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
+                                                     ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t2 = c in #t2.{self::C::x} = (#t2.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:62: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+ - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
+  var y = c. /*@ checkReturn=B<(num*) ->* void>* */ x += new B<num>();
+                                                             ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>*){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*};
+  let final self::C<core::num*>* #t3 = c in #t3.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<core::Object*>*} #t3.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:55: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+ - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
+  c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
+                                                      ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : null;
+  self::B<core::Object*>* z = let final self::C<core::num*>* #t4 = c in let final self::B<(core::num*) →* void>* #t5 = #t4.{self::C::x}{self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t5 == null ?{self::B<core::Object*>*} #t4.{self::C::x} = invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:63: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<void Function(num)>'.
+ - 'B' is from 'pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart'.
+  var z = c. /*@ checkReturn=B<(num*) ->* void>* */ x ??= new B<num>();
+                                                              ^" in new self::B::•<core::num*>() as{TypeError} self::B<(core::num*) →* void>* : #t5;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.modular.expect
new file mode 100644
index 0000000..3769315
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.modular.expect
@@ -0,0 +1,48 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+class B<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  operator +(covariant-by-class self::B<self::B::T*>* other) → self::B<self::B::T*>*
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  operator [](core::int* i) → self::B<(self::C::T*) →* void>*
+    return null;
+  operator []=(core::int* i, self::B<(self::C::T*) →* void>* x) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test(self::C<core::num*>* c) → void {
+  c.{self::C::[]=}(0, new self::B::•<(core::num*) →* void>()){(core::int*, self::B<(core::num*) →* void>*) →* void};
+  let final self::C<core::num*>* #t1 = c in let final core::int* #t2 = 0 in #t1.{self::C::[]=}(#t2, (#t1.{self::C::[]}(#t2){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*}){(core::int*, self::B<(core::num*) →* void>*) →* void};
+  self::B<(core::num*) →* void>* x = let final self::C<core::num*>* #t3 = c in let final core::int* #t4 = 0 in let final self::B<(core::num*) →* void>* #t5 = (#t3.{self::C::[]}(#t4){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>*).{self::B::+}(new self::B::•<(core::num*) →* void>()){(self::B<(core::num*) →* void>*) →* self::B<(core::num*) →* void>*} in let final void #t6 = #t3.{self::C::[]=}(#t4, #t5){(core::int*, self::B<(core::num*) →* void>*) →* void} in #t5;
+  let final self::C<core::num*>* #t7 = c in let final core::int* #t8 = 0 in #t7.{self::C::[]}(#t8){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* == null ?{self::B<(core::num*) →* void>*} #t7.{self::C::[]=}(#t8, new self::B::•<(core::num*) →* void>()){(core::int*, self::B<(core::num*) →* void>*) →* void} : null;
+  self::B<(core::num*) →* void>* y = let final self::C<core::num*>* #t9 = c in let final core::int* #t10 = 0 in let final self::B<(core::num*) →* void>* #t11 = #t9.{self::C::[]}(#t10){(core::int*) →* self::B<(core::num*) →* void>*} as{TypeError,CovarianceCheck} self::B<(core::num*) →* void>* in #t11 == null ?{self::B<(core::num*) →* void>*} let final self::B<(core::num*) →* void>* #t12 = new self::B::•<(core::num*) →* void>() in let final void #t13 = #t9.{self::C::[]=}(#t10, #t12){(core::int*, self::B<(core::num*) →* void>*) →* void} in #t12 : #t11;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.modular.expect
new file mode 100644
index 0000000..906d2cb
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  operator [](core::int* i) → (self::C::T*) →* void
+    return null;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method test(self::C<core::num*>* c) → (core::num*) →* void {
+  return c.{self::C::[]}(0){(core::int*) →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.modular.expect
new file mode 100644
index 0000000..80e45ff
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  method f(covariant-by-class self::B::T* x) → void {}
+  method g({covariant-by-class self::B::T* x = #C1}) → void {}
+  method h<covariant-by-class U extends self::B::T*>() → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B<core::int*> {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+static method g1(self::B<core::num*>* b) → void {
+  b.{self::B::f}(1.5){(core::num*) →* void};
+}
+static method g2(self::C* c) → void {
+  c.{self::B::f}(1){(core::int*) →* void};
+}
+static method test() → void {
+  self::g1(new self::C::•());
+}
+static method main() → void {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.modular.expect
new file mode 100644
index 0000000..985b00d
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::B::T* x = null;
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B<core::num*> {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.modular.expect
new file mode 100644
index 0000000..ec01d37
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.modular.expect
@@ -0,0 +1,57 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:16:7: Error: The implementation of 'x' in the non-abstract class 'D' does not conform to its interface.
+// class D extends C implements B {}
+//       ^
+// pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:13:7: Context: The field 'C.x' has type 'int', which does not match the corresponding type, 'num', in the overridden setter, 'D.x'.
+//   int x;
+//       ^
+// pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:16:7: Context: This is the overridden method ('x').
+// class D extends C implements B {}
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  covariant-by-declaration field core::num* x = null;
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends core::Object {
+  field core::int* x = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class D extends self::C implements self::B {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+  forwarding-stub set x(covariant-by-declaration core::num* value) → void
+    return super.{self::C::x} = value as core::int*;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.modular.expect
new file mode 100644
index 0000000..05fc7de
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.weak.modular.expect
@@ -0,0 +1,50 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field dynamic staticField = null;
+  field dynamic instanceField = null;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  static set staticSetter(dynamic x) → void {}
+  set instanceSetter(dynamic x) → void {}
+  method test() → void {
+    dynamic localVar;
+    for (final dynamic #t1 in <dynamic>[]) {
+      self::topLevel = #t1;
+    }
+    for (final dynamic #t2 in <dynamic>[]) {
+      self::topLevelSetter = #t2;
+    }
+    for (final dynamic #t3 in <dynamic>[]) {
+      self::C::staticField = #t3;
+    }
+    for (final dynamic #t4 in <dynamic>[]) {
+      self::C::staticSetter = #t4;
+    }
+    for (final dynamic #t5 in <dynamic>[]) {
+      this.{self::C::instanceField} = #t5;
+    }
+    for (final dynamic #t6 in <dynamic>[]) {
+      this.{self::C::instanceSetter} = #t6;
+    }
+    for (final dynamic #t7 in <dynamic>[]) {
+      localVar = #t7;
+    }
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field dynamic topLevel;
+static set topLevelSetter(dynamic x) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..7bfe030
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.modular.expect
@@ -0,0 +1,58 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B<T extends core::Object* = dynamic> extends core::Object {
+  covariant-by-class field self::B::T* x = null;
+  covariant-by-class field self::B::T* y = null;
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C<T extends core::Object* = dynamic> extends core::Object implements self::B<core::num*> {
+  covariant-by-class field core::num* x = null;
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  abstract get y() → core::num*;
+  abstract set y(covariant-by-class core::num* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class D<T extends core::Object* = dynamic> extends core::Object implements self::B<self::D::T*> {
+  covariant-by-class field self::D::T* x = null;
+  synthetic constructor •() → self::D<self::D::T*>*
+    : super core::Object::•()
+    ;
+  abstract get y() → self::D::T*;
+  abstract set y(covariant-by-class self::D::T* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart.weak.modular.expect
new file mode 100644
index 0000000..0fdb717
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  static field core::bool* staticValue = self::o as{TypeError} core::bool*;
+  field core::bool* instanceValue = self::o as{TypeError} core::bool*;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field core::Object* o = 1;
+static field core::bool* topLevelValue = self::o as{TypeError} core::bool*;
+static method main() → dynamic {
+  try {
+    self::topLevelValue;
+    throw "no exception";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+  try {
+    self::C::staticValue;
+    throw "no exception";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+  try {
+    new self::C::•();
+    throw "no exception";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.modular.expect
new file mode 100644
index 0000000..99c30ab
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.modular.expect
@@ -0,0 +1,122 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:51:7: Error: The mixin application class 'C' introduces an erroneous override of 'y'.
+// class C = B with M implements I<int>;
+//       ^
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:48:7: Context: The field 'M.y' has type 'int', which does not match the corresponding type, 'Object', in the overridden setter, 'I.y'.
+//  - 'Object' is from 'dart:core'.
+//   int y;
+//       ^
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:43:12: Context: This is the overridden method ('y').
+//   void set y(covariant Object value);
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get x() → core::int* {
+    throw "Should not be reached";
+  }
+  set x(core::int* value) → void {
+    throw "Should not be reached";
+  }
+  get y() → core::int* {
+    throw "Should not be reached";
+  }
+  set y(core::int* value) → void {
+    throw "Should not be reached";
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T*>*
+    : super core::Object::•()
+    ;
+  abstract get x() → self::I::T*;
+  abstract set x(covariant-by-class self::I::T* value) → void;
+  abstract get y() → core::Object*;
+  abstract set y(covariant-by-declaration core::Object* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M extends core::Object {
+  field core::int* x = null;
+  field core::int* y = null;
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C = self::B with self::M implements self::I<core::int*> {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  mixin-super-stub get x() → core::int*
+    return super.{self::M::x};
+  forwarding-stub set x(covariant-by-class core::int* value) → void
+    return super.{self::M::x} = value;
+  mixin-super-stub get y() → core::int*
+    return super.{self::M::y};
+  forwarding-stub set y(covariant-by-declaration core::int* value) → void
+    return super.{self::M::y} = value;
+}
+static method expectTypeError(() →* void callback) → void {
+  try {
+    callback(){() →* void};
+    throw "Expected TypeError, did not occur";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
+static method expect(core::Object* value, core::Object* expected) → void {
+  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
+    throw "Expected ${expected}, got ${value}";
+  }
+}
+static method test(self::I<core::Object*>* i) → void {
+  self::expectTypeError(() → Null {
+    i.{self::I::x} = "hello";
+  });
+  i.{self::I::x} = 1;
+  self::expect(i.{self::I::x}{core::Object*}, 1);
+  self::expectTypeError(() → Null {
+    i.{self::I::y} = "hello";
+  });
+  i.{self::I::y} = 2;
+  self::expect(i.{self::I::y}{core::Object*}, 2);
+}
+static method main() → void {
+  self::test(new self::C::•());
+}
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.modular.expect
new file mode 100644
index 0000000..83a8031
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.modular.expect
@@ -0,0 +1,131 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart:58:7: Error: The mixin application class 'C' introduces an erroneous override of 'y'.
+// class C = B with M implements I<int>;
+//       ^
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart:53:18: Context: The parameter 'value' of the method 'M.y' has type 'int', which does not match the corresponding type, 'Object', in the overridden method, 'I.y'.
+//  - 'Object' is from 'dart:core'.
+// Change to a supertype of 'Object', or, for a covariant parameter, a subtype.
+//   void set y(int value) {
+//                  ^
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart:43:12: Context: This is the overridden method ('y').
+//   void set y(covariant Object value);
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  get x() → core::int* {
+    throw "Should not be reached";
+  }
+  set x(core::int* value) → void {
+    throw "Should not be reached";
+  }
+  get y() → core::int* {
+    throw "Should not be reached";
+  }
+  set y(core::int* value) → void {
+    throw "Should not be reached";
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T*>*
+    : super core::Object::•()
+    ;
+  abstract get x() → self::I::T*;
+  abstract set x(covariant-by-class self::I::T* value) → void;
+  abstract get y() → core::Object*;
+  abstract set y(covariant-by-declaration core::Object* value) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class M extends core::Object {
+  synthetic constructor •() → self::M*
+    : super core::Object::•()
+    ;
+  get x() → core::int*
+    return 1;
+  set x(core::int* value) → void {
+    self::expect(value, 2);
+  }
+  get y() → core::int*
+    return 3;
+  set y(core::int* value) → void {
+    self::expect(value, 4);
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C = self::B with self::M implements self::I<core::int*> {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  mixin-super-stub get x() → core::int*
+    return super.{self::M::x};
+  forwarding-stub set x(covariant-by-class core::int* value) → void
+    return super.{self::M::x} = value;
+  mixin-super-stub get y() → core::int*
+    return super.{self::M::y};
+  forwarding-stub set y(covariant-by-declaration core::int* value) → void
+    return super.{self::M::y} = value;
+}
+static method expectTypeError(() →* void callback) → void {
+  try {
+    callback(){() →* void};
+    throw "Expected TypeError, did not occur";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
+static method expect(core::Object* value, core::Object* expected) → void {
+  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
+    throw "Expected ${expected}, got ${value}";
+  }
+}
+static method test(self::I<core::Object*>* i) → void {
+  self::expectTypeError(() → Null {
+    i.{self::I::x} = "hello";
+  });
+  i.{self::I::x} = 2;
+  self::expect(i.{self::I::x}{core::Object*}, 1);
+  self::expectTypeError(() → Null {
+    i.{self::I::y} = "hello";
+  });
+  i.{self::I::y} = 4;
+  self::expect(i.{self::I::y}{core::Object*}, 3);
+}
+static method main() → void {
+  self::test(new self::C::•());
+}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.modular.expect
new file mode 100644
index 0000000..0fc6d13
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.modular.expect
@@ -0,0 +1,76 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method f(core::int* x) → core::int* {
+    self::expect(x, 1);
+    return 2;
+  }
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  abstract method f(covariant-by-declaration core::Object* x) → core::int*;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C extends self::B implements self::I {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  forwarding-stub method f(covariant-by-declaration core::Object* x) → core::int*
+    return super.{self::B::f}(x as core::int*);
+}
+static method expectTypeError(() →* void callback) → void {
+  try {
+    callback(){() →* void};
+    throw "Expected TypeError, did not occur";
+  }
+  on core::TypeError* catch(no-exception-var) {
+  }
+}
+static method expect(core::Object* value, core::Object* expected) → void {
+  if(!(value =={core::Object::==}{(core::Object*) →* core::bool*} expected)) {
+    throw "Expected ${expected}, got ${value}";
+  }
+}
+static method g(self::C* c) → void {
+  c.{self::C::f}("hello"){(core::Object*) →* core::int*};
+}
+static method test(self::C* c, self::I* i) → void {
+  self::expectTypeError(() → Null {
+    i.{self::I::f}("hello"){(core::Object*) →* core::int*};
+  });
+  self::expect(i.{self::I::f}(1){(core::Object*) →* core::int*}, 2);
+  self::expectTypeError(() → Null {
+    c.{self::C::f}("hello"){(core::Object*) →* core::int*};
+  });
+  self::expect(c.{self::C::f}(1){(core::Object*) →* core::int*}, 2);
+}
+static method main() → dynamic {
+  self::C* c = new self::C::•();
+  self::test(c, c);
+}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.modular.expect
new file mode 100644
index 0000000..9aacb53
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method f(core::int* x, core::int* y) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T*>*
+    : super core::Object::•()
+    ;
+  abstract method f(covariant-by-class self::I::T* x, core::Object* y) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends self::B implements self::I<core::int*> {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  forwarding-stub method f(covariant-by-class core::int* x, core::Object* y) → void
+    return super.{self::B::f}(x, y as core::int*);
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.modular.expect
new file mode 100644
index 0000000..f0e4b8e
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T*>*
+    : super core::Object::•()
+    ;
+  method f(covariant-by-class self::B::T* x, core::int* y) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  abstract method f(core::int* x, core::Object* y) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends self::B<core::int*> implements self::I {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  abstract forwarding-stub method f(covariant-by-class core::int* x, core::Object* y) → void;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.modular.expect
new file mode 100644
index 0000000..8f7a060
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method f(core::int* x, core::int* y) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  abstract method f(covariant-by-declaration core::int* x, core::Object* y) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends self::B implements self::I {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  forwarding-stub method f(covariant-by-declaration core::int* x, core::Object* y) → void
+    return super.{self::B::f}(x, y as core::int*);
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.modular.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.modular.expect
new file mode 100644
index 0000000..d4b9b44
--- /dev/null
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+  method f(covariant-by-declaration core::int* x, core::int* y) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I*
+    : super core::Object::•()
+    ;
+  abstract method f(core::int* x, core::Object* y) → void;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class C extends self::B implements self::I {
+  synthetic constructor •() → self::C*
+    : super self::B::•()
+    ;
+  abstract forwarding-stub method f(covariant-by-declaration core::int* x, core::Object* y) → void;
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.modular.expect b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.modular.expect
new file mode 100644
index 0000000..d565d03
--- /dev/null
+++ b/pkg/front_end/testcases/set_literals/disambiguation_rule.dart.weak.modular.expect
@@ -0,0 +1,139 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:13:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
+//  - 'Set' is from 'dart:core'.
+//  - 'LinkedHashSet' is from 'dart:collection'.
+// Change the type of the set literal or the context in which it is used.
+//   LinkedHashSet<int> lhs = {};
+//                            ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:14:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'LinkedHashMap' is from 'dart:collection'.
+// Change the type of the map literal or the context in which it is used.
+//   LinkedHashMap<int, bool> lhm = {};
+//                                  ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:32:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
+//  - 'Future' is from 'dart:async'.
+//  - 'Set' is from 'dart:core'.
+//  - 'LinkedHashSet' is from 'dart:collection'.
+// Change the type of the set literal or the context in which it is used.
+// Future<LinkedHashSet<int>> lhsfun() async => {};
+//                                              ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:33:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
+//  - 'Future' is from 'dart:async'.
+//  - 'Map' is from 'dart:core'.
+//  - 'LinkedHashMap' is from 'dart:collection'.
+// Change the type of the map literal or the context in which it is used.
+// Future<LinkedHashMap<int, bool>> lhmfun() async => {};
+//                                                    ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:38:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
+//  - 'Set' is from 'dart:core'.
+//  - 'LinkedHashSet' is from 'dart:collection'.
+// FutureOr<LinkedHashSet<int>> lhsfun2() => {};
+//                                           ^
+//
+// pkg/front_end/testcases/set_literals/disambiguation_rule.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
+//  - 'Map' is from 'dart:core'.
+//  - 'LinkedHashMap' is from 'dart:collection'.
+// FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
+//                                                 ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+import "dart:async" as asy;
+
+import "dart:async" show FutureOr;
+import "dart:collection" show LinkedHashMap, LinkedHashSet;
+
+static method main() → dynamic async {
+  core::Map<core::int*, core::bool*>* m = <core::int*, core::bool*>{};
+  core::Set<core::int*>* s = block {
+    final core::Set<core::int*>* #t1 = col::LinkedHashSet::•<core::int*>();
+  } =>#t1;
+  core::Iterable<core::int*>* i = block {
+    final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
+  } =>#t2;
+  col::LinkedHashSet<core::int*>* lhs = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:13:28: Error: The set literal type 'Set<dynamic>' isn't of expected type 'LinkedHashSet<int>'.
+ - 'Set' is from 'dart:core'.
+ - 'LinkedHashSet' is from 'dart:collection'.
+Change the type of the set literal or the context in which it is used.
+  LinkedHashSet<int> lhs = {};
+                           ^" in block {
+    final core::Set<dynamic>* #t3 = col::LinkedHashSet::•<dynamic>();
+  } =>#t3;
+  col::LinkedHashMap<core::int*, core::bool*>* lhm = invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:14:34: Error: The map literal type 'Map<dynamic, dynamic>' isn't of expected type 'LinkedHashMap<int, bool>'.
+ - 'Map' is from 'dart:core'.
+ - 'LinkedHashMap' is from 'dart:collection'.
+Change the type of the map literal or the context in which it is used.
+  LinkedHashMap<int, bool> lhm = {};
+                                 ^" in <dynamic, dynamic>{};
+  core::Map<core::int*, core::bool*>* fm = await self::mapfun();
+  core::Set<core::int*>* fs = await self::setfun();
+  core::Iterable<core::int*>* fi = await self::iterablefun();
+  col::LinkedHashSet<core::int*>* flhs = await self::lhsfun();
+  col::LinkedHashMap<core::int*, core::bool*>* flhm = await self::lhmfun();
+  core::Map<core::int*, core::bool*>* fm2 = await self::mapfun2();
+  core::Set<core::int*>* fs2 = await self::setfun2();
+  core::Iterable<core::int*>* fi2 = await self::iterablefun2();
+  col::LinkedHashSet<core::int*>* flhs2 = await self::lhsfun2();
+  col::LinkedHashMap<core::int*, core::bool*>* flhm2 = await self::lhmfun2();
+}
+static method mapfun() → asy::Future<core::Map<core::int*, core::bool*>*>* async 
+  return <core::int*, core::bool*>{};
+static method setfun() → asy::Future<core::Set<core::int*>*>* async 
+  return block {
+    final core::Set<core::int*>* #t4 = col::LinkedHashSet::•<core::int*>();
+  } =>#t4;
+static method iterablefun() → asy::Future<core::Iterable<core::int*>*>* async 
+  return block {
+    final core::Set<core::int*>* #t5 = col::LinkedHashSet::•<core::int*>();
+  } =>#t5;
+static method lhsfun() → asy::Future<col::LinkedHashSet<core::int*>*>* async 
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:32:46: Error: The set literal type 'Future<Set<dynamic>>' isn't of expected type 'Future<LinkedHashSet<int>>'.
+ - 'Future' is from 'dart:async'.
+ - 'Set' is from 'dart:core'.
+ - 'LinkedHashSet' is from 'dart:collection'.
+Change the type of the set literal or the context in which it is used.
+Future<LinkedHashSet<int>> lhsfun() async => {};
+                                             ^" in block {
+    final core::Set<dynamic>* #t6 = col::LinkedHashSet::•<dynamic>();
+  } =>#t6;
+static method lhmfun() → asy::Future<col::LinkedHashMap<core::int*, core::bool*>*>* async 
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:33:52: Error: The map literal type 'Future<Map<dynamic, dynamic>>' isn't of expected type 'Future<LinkedHashMap<int, bool>>'.
+ - 'Future' is from 'dart:async'.
+ - 'Map' is from 'dart:core'.
+ - 'LinkedHashMap' is from 'dart:collection'.
+Change the type of the map literal or the context in which it is used.
+Future<LinkedHashMap<int, bool>> lhmfun() async => {};
+                                                   ^" in <dynamic, dynamic>{};
+static method mapfun2() → FutureOr<core::Map<core::int*, core::bool*>*>*
+  return <core::int*, core::bool*>{};
+static method setfun2() → FutureOr<core::Set<core::int*>*>*
+  return block {
+    final core::Set<core::int*>* #t7 = col::LinkedHashSet::•<core::int*>();
+  } =>#t7;
+static method iterablefun2() → FutureOr<core::Iterable<core::int*>*>*
+  return block {
+    final core::Set<core::int*>* #t8 = col::LinkedHashSet::•<core::int*>();
+  } =>#t8;
+static method lhsfun2() → FutureOr<col::LinkedHashSet<core::int*>*>*
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:38:43: Error: A value of type 'Set<dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashSet<int>>'.
+ - 'Set' is from 'dart:core'.
+ - 'LinkedHashSet' is from 'dart:collection'.
+FutureOr<LinkedHashSet<int>> lhsfun2() => {};
+                                          ^" in ( block {
+    final core::Set<dynamic>* #t9 = col::LinkedHashSet::•<dynamic>();
+  } =>#t9) as{TypeError} FutureOr<col::LinkedHashSet<core::int*>*>*;
+static method lhmfun2() → FutureOr<col::LinkedHashMap<core::int*, core::bool*>*>*
+  return invalid-expression "pkg/front_end/testcases/set_literals/disambiguation_rule.dart:39:49: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'FutureOr<LinkedHashMap<int, bool>>'.
+ - 'Map' is from 'dart:core'.
+ - 'LinkedHashMap' is from 'dart:collection'.
+FutureOr<LinkedHashMap<int, bool>> lhmfun2() => {};
+                                                ^" in <dynamic, dynamic>{} as{TypeError} FutureOr<col::LinkedHashMap<core::int*, core::bool*>*>*;
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.modular.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.modular.expect
new file mode 100644
index 0000000..4d0ac34
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.modular.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::A> values = #C7;
+  static const field self::A a = #C3;
+  static const field self::A b = #C6;
+  const constructor •(core::int index, core::String name) → self::A
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "A.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::A {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "b"
+  #C6 = self::A {index:#C4, _name:#C5}
+  #C7 = <self::A*>[#C3, #C6]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum.dart:
+- A. (from org-dartlang-testcase:///enum.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.modular.expect b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.modular.expect
new file mode 100644
index 0000000..bae037b
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/opt_in.dart.weak.modular.expect
@@ -0,0 +1,340 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Class extends core::Object {
+  static const field core::int staticConstField = #C1;
+  static field core::int? staticFieldWithoutInitializer = null;
+  field core::int nonNullableInstanceFieldWithInitializer = self::init<core::int>(55);
+  field core::int? nullableInstanceFieldWithInitializer = self::init<core::int?>(17);
+  static field core::int? _#nonNullableStaticFieldWithInitializer1 = null;
+  static field core::bool _#nonNullableStaticFieldWithInitializer1#isSet = false;
+  static field core::int? _#nullableStaticFieldWithInitializer1 = null;
+  static field core::bool _#nullableStaticFieldWithInitializer1#isSet = false;
+  static field core::int? _#nonNullableStaticFieldWithInitializer2 = null;
+  static field core::bool _#nonNullableStaticFieldWithInitializer2#isSet = false;
+  static field core::int? _#nullableStaticFieldWithInitializer2 = null;
+  static field core::bool _#nullableStaticFieldWithInitializer2#isSet = false;
+  static field core::int? _#nonNullableStaticFinalFieldWithInitializer1 = null;
+  static field core::bool _#nonNullableStaticFinalFieldWithInitializer1#isSet = false;
+  static field core::int? _#nullableStaticFinalFieldWithInitializer1 = null;
+  static field core::bool _#nullableStaticFinalFieldWithInitializer1#isSet = false;
+  static field core::int? _#nonNullableStaticFinalFieldWithInitializer2Init = null;
+  static field core::bool _#nonNullableStaticFinalFieldWithInitializer2Init#isSet = false;
+  static field core::int? _#nonNullableStaticFinalFieldWithInitializer2 = null;
+  static field core::bool _#nonNullableStaticFinalFieldWithInitializer2#isSet = false;
+  static field core::int? _#nullableStaticFinalFieldWithInitializer2Init = null;
+  static field core::bool _#nullableStaticFinalFieldWithInitializer2Init#isSet = false;
+  static field core::int? _#nullableStaticFinalFieldWithInitializer2 = null;
+  static field core::bool _#nullableStaticFinalFieldWithInitializer2#isSet = false;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  static get nonNullableStaticFieldWithInitializer1() → core::int {
+    if(!self::Class::_#nonNullableStaticFieldWithInitializer1#isSet) {
+      self::Class::_#nonNullableStaticFieldWithInitializer1 = self::init<core::int>(55);
+      self::Class::_#nonNullableStaticFieldWithInitializer1#isSet = true;
+    }
+    return let final core::int? #t1 = self::Class::_#nonNullableStaticFieldWithInitializer1 in #t1{core::int};
+  }
+  static set nonNullableStaticFieldWithInitializer1(core::int #t2) → void {
+    self::Class::_#nonNullableStaticFieldWithInitializer1#isSet = true;
+    self::Class::_#nonNullableStaticFieldWithInitializer1 = #t2;
+  }
+  static get nullableStaticFieldWithInitializer1() → core::int? {
+    if(!self::Class::_#nullableStaticFieldWithInitializer1#isSet) {
+      self::Class::_#nullableStaticFieldWithInitializer1 = self::init<core::int?>(17);
+      self::Class::_#nullableStaticFieldWithInitializer1#isSet = true;
+    }
+    return self::Class::_#nullableStaticFieldWithInitializer1;
+  }
+  static set nullableStaticFieldWithInitializer1(core::int? #t3) → void {
+    self::Class::_#nullableStaticFieldWithInitializer1#isSet = true;
+    self::Class::_#nullableStaticFieldWithInitializer1 = #t3;
+  }
+  static get nonNullableStaticFieldWithInitializer2() → core::int {
+    if(!self::Class::_#nonNullableStaticFieldWithInitializer2#isSet) {
+      self::Class::_#nonNullableStaticFieldWithInitializer2 = self::init<core::int>(55);
+      self::Class::_#nonNullableStaticFieldWithInitializer2#isSet = true;
+    }
+    return let final core::int? #t4 = self::Class::_#nonNullableStaticFieldWithInitializer2 in #t4{core::int};
+  }
+  static set nonNullableStaticFieldWithInitializer2(core::int #t5) → void {
+    self::Class::_#nonNullableStaticFieldWithInitializer2#isSet = true;
+    self::Class::_#nonNullableStaticFieldWithInitializer2 = #t5;
+  }
+  static get nullableStaticFieldWithInitializer2() → core::int? {
+    if(!self::Class::_#nullableStaticFieldWithInitializer2#isSet) {
+      self::Class::_#nullableStaticFieldWithInitializer2 = self::init<core::int?>(17);
+      self::Class::_#nullableStaticFieldWithInitializer2#isSet = true;
+    }
+    return self::Class::_#nullableStaticFieldWithInitializer2;
+  }
+  static set nullableStaticFieldWithInitializer2(core::int? #t6) → void {
+    self::Class::_#nullableStaticFieldWithInitializer2#isSet = true;
+    self::Class::_#nullableStaticFieldWithInitializer2 = #t6;
+  }
+  static get nonNullableStaticFinalFieldWithInitializer1() → core::int {
+    if(!self::Class::_#nonNullableStaticFinalFieldWithInitializer1#isSet) {
+      final core::int #t7 = self::init<core::int>(73);
+      if(self::Class::_#nonNullableStaticFinalFieldWithInitializer1#isSet)
+        throw new _in::LateError::fieldADI("nonNullableStaticFinalFieldWithInitializer1");
+      self::Class::_#nonNullableStaticFinalFieldWithInitializer1 = #t7;
+      self::Class::_#nonNullableStaticFinalFieldWithInitializer1#isSet = true;
+    }
+    return let final core::int? #t8 = self::Class::_#nonNullableStaticFinalFieldWithInitializer1 in #t8{core::int};
+  }
+  static get nullableStaticFinalFieldWithInitializer1() → core::int? {
+    if(!self::Class::_#nullableStaticFinalFieldWithInitializer1#isSet) {
+      final core::int? #t9 = self::init<core::int?>(19);
+      if(self::Class::_#nullableStaticFinalFieldWithInitializer1#isSet)
+        throw new _in::LateError::fieldADI("nullableStaticFinalFieldWithInitializer1");
+      self::Class::_#nullableStaticFinalFieldWithInitializer1 = #t9;
+      self::Class::_#nullableStaticFinalFieldWithInitializer1#isSet = true;
+    }
+    return self::Class::_#nullableStaticFinalFieldWithInitializer1;
+  }
+  static get nonNullableStaticFinalFieldWithInitializer2Init() → core::int {
+    if(!self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init#isSet) {
+      self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init = 0;
+      self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init#isSet = true;
+    }
+    return let final core::int? #t10 = self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init in #t10{core::int};
+  }
+  static set nonNullableStaticFinalFieldWithInitializer2Init(core::int #t11) → void {
+    self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init#isSet = true;
+    self::Class::_#nonNullableStaticFinalFieldWithInitializer2Init = #t11;
+  }
+  static get nonNullableStaticFinalFieldWithInitializer2() → core::int {
+    if(!self::Class::_#nonNullableStaticFinalFieldWithInitializer2#isSet) {
+      final core::int #t12 = (let final core::int #t13 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init in let final core::int #t14 = self::Class::nonNullableStaticFinalFieldWithInitializer2Init = #t13.{core::num::+}(1){(core::num) → core::int} in #t13) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nonNullableStaticFinalFieldWithInitializer2.{core::num::+}(1){(core::num) → core::int} : 87;
+      if(self::Class::_#nonNullableStaticFinalFieldWithInitializer2#isSet)
+        throw new _in::LateError::fieldADI("nonNullableStaticFinalFieldWithInitializer2");
+      self::Class::_#nonNullableStaticFinalFieldWithInitializer2 = #t12;
+      self::Class::_#nonNullableStaticFinalFieldWithInitializer2#isSet = true;
+    }
+    return let final core::int? #t15 = self::Class::_#nonNullableStaticFinalFieldWithInitializer2 in #t15{core::int};
+  }
+  static get nullableStaticFinalFieldWithInitializer2Init() → core::int {
+    if(!self::Class::_#nullableStaticFinalFieldWithInitializer2Init#isSet) {
+      self::Class::_#nullableStaticFinalFieldWithInitializer2Init = 0;
+      self::Class::_#nullableStaticFinalFieldWithInitializer2Init#isSet = true;
+    }
+    return let final core::int? #t16 = self::Class::_#nullableStaticFinalFieldWithInitializer2Init in #t16{core::int};
+  }
+  static set nullableStaticFinalFieldWithInitializer2Init(core::int #t17) → void {
+    self::Class::_#nullableStaticFinalFieldWithInitializer2Init#isSet = true;
+    self::Class::_#nullableStaticFinalFieldWithInitializer2Init = #t17;
+  }
+  static get nullableStaticFinalFieldWithInitializer2() → core::int? {
+    if(!self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet) {
+      final core::int? #t18 = (let final core::int #t19 = self::Class::nullableStaticFinalFieldWithInitializer2Init in let final core::int #t20 = self::Class::nullableStaticFinalFieldWithInitializer2Init = #t19.{core::num::+}(1){(core::num) → core::int} in #t19) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::Class::nullableStaticFinalFieldWithInitializer2!.{core::num::+}(1){(core::num) → core::int} : 32;
+      if(self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet)
+        throw new _in::LateError::fieldADI("nullableStaticFinalFieldWithInitializer2");
+      self::Class::_#nullableStaticFinalFieldWithInitializer2 = #t18;
+      self::Class::_#nullableStaticFinalFieldWithInitializer2#isSet = true;
+    }
+    return self::Class::_#nullableStaticFinalFieldWithInitializer2;
+  }
+}
+static field dynamic lastInit;
+static const field core::int constTopLevelField = #C2;
+static field core::int? topLevelFieldWithoutInitializer;
+static field core::int? _#nonNullableTopLevelFieldWithInitializer1 = null;
+static field core::bool _#nonNullableTopLevelFieldWithInitializer1#isSet = false;
+static field core::int? _#nullableTopLevelFieldWithInitializer = null;
+static field core::bool _#nullableTopLevelFieldWithInitializer#isSet = false;
+static field core::int? _#nonNullableTopLevelFieldWithInitializer2 = null;
+static field core::bool _#nonNullableTopLevelFieldWithInitializer2#isSet = false;
+static field core::int? _#nullableTopLevelFieldWithInitializer2 = null;
+static field core::bool _#nullableTopLevelFieldWithInitializer2#isSet = false;
+static field core::int? _#nonNullableFinalTopLevelFieldWithInitializer1 = null;
+static field core::bool _#nonNullableFinalTopLevelFieldWithInitializer1#isSet = false;
+static field core::int? _#nullableFinalTopLevelFieldWithInitializer1 = null;
+static field core::bool _#nullableFinalTopLevelFieldWithInitializer1#isSet = false;
+static field core::int? _#nonNullableFinalTopLevelFieldWithInitializer2Init = null;
+static field core::bool _#nonNullableFinalTopLevelFieldWithInitializer2Init#isSet = false;
+static field core::int? _#nonNullableFinalTopLevelFieldWithInitializer2 = null;
+static field core::bool _#nonNullableFinalTopLevelFieldWithInitializer2#isSet = false;
+static field core::int? _#nullableFinalTopLevelFieldWithInitializer2Init = null;
+static field core::bool _#nullableFinalTopLevelFieldWithInitializer2Init#isSet = false;
+static field core::int? _#nullableFinalTopLevelFieldWithInitializer2 = null;
+static field core::bool _#nullableFinalTopLevelFieldWithInitializer2#isSet = false;
+static method init<T extends core::Object? = dynamic>(self::init::T% value) → self::init::T% {
+  self::lastInit = value;
+  return value;
+}
+static get nonNullableTopLevelFieldWithInitializer1() → core::int {
+  if(!self::_#nonNullableTopLevelFieldWithInitializer1#isSet) {
+    self::_#nonNullableTopLevelFieldWithInitializer1 = self::init<core::int>(42);
+    self::_#nonNullableTopLevelFieldWithInitializer1#isSet = true;
+  }
+  return let final core::int? #t21 = self::_#nonNullableTopLevelFieldWithInitializer1 in #t21{core::int};
+}
+static set nonNullableTopLevelFieldWithInitializer1(core::int #t22) → void {
+  self::_#nonNullableTopLevelFieldWithInitializer1#isSet = true;
+  self::_#nonNullableTopLevelFieldWithInitializer1 = #t22;
+}
+static get nullableTopLevelFieldWithInitializer() → core::int? {
+  if(!self::_#nullableTopLevelFieldWithInitializer#isSet) {
+    self::_#nullableTopLevelFieldWithInitializer = self::init<core::int?>(123);
+    self::_#nullableTopLevelFieldWithInitializer#isSet = true;
+  }
+  return self::_#nullableTopLevelFieldWithInitializer;
+}
+static set nullableTopLevelFieldWithInitializer(core::int? #t23) → void {
+  self::_#nullableTopLevelFieldWithInitializer#isSet = true;
+  self::_#nullableTopLevelFieldWithInitializer = #t23;
+}
+static get nonNullableTopLevelFieldWithInitializer2() → core::int {
+  if(!self::_#nonNullableTopLevelFieldWithInitializer2#isSet) {
+    self::_#nonNullableTopLevelFieldWithInitializer2 = self::init<core::int>(42);
+    self::_#nonNullableTopLevelFieldWithInitializer2#isSet = true;
+  }
+  return let final core::int? #t24 = self::_#nonNullableTopLevelFieldWithInitializer2 in #t24{core::int};
+}
+static set nonNullableTopLevelFieldWithInitializer2(core::int #t25) → void {
+  self::_#nonNullableTopLevelFieldWithInitializer2#isSet = true;
+  self::_#nonNullableTopLevelFieldWithInitializer2 = #t25;
+}
+static get nullableTopLevelFieldWithInitializer2() → core::int? {
+  if(!self::_#nullableTopLevelFieldWithInitializer2#isSet) {
+    self::_#nullableTopLevelFieldWithInitializer2 = self::init<core::int?>(123);
+    self::_#nullableTopLevelFieldWithInitializer2#isSet = true;
+  }
+  return self::_#nullableTopLevelFieldWithInitializer2;
+}
+static set nullableTopLevelFieldWithInitializer2(core::int? #t26) → void {
+  self::_#nullableTopLevelFieldWithInitializer2#isSet = true;
+  self::_#nullableTopLevelFieldWithInitializer2 = #t26;
+}
+static get nonNullableFinalTopLevelFieldWithInitializer1() → core::int {
+  if(!self::_#nonNullableFinalTopLevelFieldWithInitializer1#isSet) {
+    final core::int #t27 = self::init<core::int>(87);
+    if(self::_#nonNullableFinalTopLevelFieldWithInitializer1#isSet)
+      throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer1");
+    self::_#nonNullableFinalTopLevelFieldWithInitializer1 = #t27;
+    self::_#nonNullableFinalTopLevelFieldWithInitializer1#isSet = true;
+  }
+  return let final core::int? #t28 = self::_#nonNullableFinalTopLevelFieldWithInitializer1 in #t28{core::int};
+}
+static get nullableFinalTopLevelFieldWithInitializer1() → core::int? {
+  if(!self::_#nullableFinalTopLevelFieldWithInitializer1#isSet) {
+    final core::int? #t29 = self::init<core::int?>(32);
+    if(self::_#nullableFinalTopLevelFieldWithInitializer1#isSet)
+      throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer1");
+    self::_#nullableFinalTopLevelFieldWithInitializer1 = #t29;
+    self::_#nullableFinalTopLevelFieldWithInitializer1#isSet = true;
+  }
+  return self::_#nullableFinalTopLevelFieldWithInitializer1;
+}
+static get nonNullableFinalTopLevelFieldWithInitializer2Init() → core::int {
+  if(!self::_#nonNullableFinalTopLevelFieldWithInitializer2Init#isSet) {
+    self::_#nonNullableFinalTopLevelFieldWithInitializer2Init = 0;
+    self::_#nonNullableFinalTopLevelFieldWithInitializer2Init#isSet = true;
+  }
+  return let final core::int? #t30 = self::_#nonNullableFinalTopLevelFieldWithInitializer2Init in #t30{core::int};
+}
+static set nonNullableFinalTopLevelFieldWithInitializer2Init(core::int #t31) → void {
+  self::_#nonNullableFinalTopLevelFieldWithInitializer2Init#isSet = true;
+  self::_#nonNullableFinalTopLevelFieldWithInitializer2Init = #t31;
+}
+static get nonNullableFinalTopLevelFieldWithInitializer2() → core::int {
+  if(!self::_#nonNullableFinalTopLevelFieldWithInitializer2#isSet) {
+    final core::int #t32 = (let final core::int #t33 = self::nonNullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t34 = self::nonNullableFinalTopLevelFieldWithInitializer2Init = #t33.{core::num::+}(1){(core::num) → core::int} in #t33) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nonNullableFinalTopLevelFieldWithInitializer2.{core::num::+}(1){(core::num) → core::int} : 87;
+    if(self::_#nonNullableFinalTopLevelFieldWithInitializer2#isSet)
+      throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer2");
+    self::_#nonNullableFinalTopLevelFieldWithInitializer2 = #t32;
+    self::_#nonNullableFinalTopLevelFieldWithInitializer2#isSet = true;
+  }
+  return let final core::int? #t35 = self::_#nonNullableFinalTopLevelFieldWithInitializer2 in #t35{core::int};
+}
+static get nullableFinalTopLevelFieldWithInitializer2Init() → core::int {
+  if(!self::_#nullableFinalTopLevelFieldWithInitializer2Init#isSet) {
+    self::_#nullableFinalTopLevelFieldWithInitializer2Init = 0;
+    self::_#nullableFinalTopLevelFieldWithInitializer2Init#isSet = true;
+  }
+  return let final core::int? #t36 = self::_#nullableFinalTopLevelFieldWithInitializer2Init in #t36{core::int};
+}
+static set nullableFinalTopLevelFieldWithInitializer2Init(core::int #t37) → void {
+  self::_#nullableFinalTopLevelFieldWithInitializer2Init#isSet = true;
+  self::_#nullableFinalTopLevelFieldWithInitializer2Init = #t37;
+}
+static get nullableFinalTopLevelFieldWithInitializer2() → core::int? {
+  if(!self::_#nullableFinalTopLevelFieldWithInitializer2#isSet) {
+    final core::int? #t38 = (let final core::int #t39 = self::nullableFinalTopLevelFieldWithInitializer2Init in let final core::int #t40 = self::nullableFinalTopLevelFieldWithInitializer2Init = #t39.{core::num::+}(1){(core::num) → core::int} in #t39) =={core::num::==}{(core::Object) → core::bool} 0 ?{core::int} self::nullableFinalTopLevelFieldWithInitializer2!.{core::num::+}(1){(core::num) → core::int} : 32;
+    if(self::_#nullableFinalTopLevelFieldWithInitializer2#isSet)
+      throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer2");
+    self::_#nullableFinalTopLevelFieldWithInitializer2 = #t38;
+    self::_#nullableFinalTopLevelFieldWithInitializer2#isSet = true;
+  }
+  return self::_#nullableFinalTopLevelFieldWithInitializer2;
+}
+static method main() → dynamic {
+  self::expect(null, self::lastInit);
+  self::expect(null, self::topLevelFieldWithoutInitializer);
+  self::expect(324, #C2);
+  self::expect(null, self::Class::staticFieldWithoutInitializer);
+  self::expect(123, #C1);
+  self::expect(42, self::nonNullableTopLevelFieldWithInitializer1);
+  self::expect(42, self::lastInit);
+  self::expect(123, self::nullableTopLevelFieldWithInitializer);
+  self::expect(123, self::lastInit);
+  self::nonNullableTopLevelFieldWithInitializer2 = 56;
+  self::expect(123, self::lastInit);
+  self::expect(56, self::nonNullableTopLevelFieldWithInitializer2);
+  self::expect(123, self::lastInit);
+  self::nullableTopLevelFieldWithInitializer2 = 7;
+  self::expect(123, self::lastInit);
+  self::expect(7, self::nullableTopLevelFieldWithInitializer2);
+  self::expect(123, self::lastInit);
+  self::expect(87, self::nonNullableFinalTopLevelFieldWithInitializer1);
+  self::expect(87, self::lastInit);
+  self::expect(32, self::nullableFinalTopLevelFieldWithInitializer1);
+  self::expect(32, self::lastInit);
+  self::throws(() → core::int => self::nonNullableFinalTopLevelFieldWithInitializer2, "Read nonNullableFinalTopLevelFieldWithInitializer2");
+  self::throws(() → core::int? => self::nullableFinalTopLevelFieldWithInitializer2, "Read nullableFinalTopLevelFieldWithInitializer2");
+  self::expect(55, self::Class::nonNullableStaticFieldWithInitializer1);
+  self::expect(55, self::lastInit);
+  self::expect(17, self::Class::nullableStaticFieldWithInitializer1);
+  self::expect(17, self::lastInit);
+  self::Class::nonNullableStaticFieldWithInitializer2 = 63;
+  self::expect(17, self::lastInit);
+  self::expect(63, self::Class::nonNullableStaticFieldWithInitializer2);
+  self::expect(17, self::lastInit);
+  self::Class::nullableStaticFieldWithInitializer2 = 89;
+  self::expect(17, self::lastInit);
+  self::expect(89, self::Class::nullableStaticFieldWithInitializer2);
+  self::expect(17, self::lastInit);
+  self::expect(73, self::Class::nonNullableStaticFinalFieldWithInitializer1);
+  self::expect(73, self::lastInit);
+  self::expect(19, self::Class::nullableStaticFinalFieldWithInitializer1);
+  self::expect(19, self::lastInit);
+  self::throws(() → core::int => self::Class::nonNullableStaticFinalFieldWithInitializer2, "Read nonNullableStaticFinalFieldWithInitializer2");
+  self::throws(() → core::int? => self::Class::nullableStaticFinalFieldWithInitializer2, "Read nullableStaticFinalFieldWithInitializer2");
+  self::Class c = new self::Class::•();
+  self::expect(17, self::lastInit);
+  self::expect(55, c.{self::Class::nonNullableInstanceFieldWithInitializer}{core::int});
+  self::expect(17, c.{self::Class::nullableInstanceFieldWithInitializer}{core::int?});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() → dynamic f, core::String message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() → dynamic};
+  }
+  on core::Error catch(final core::Error e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
+
+constants  {
+  #C1 = 123
+  #C2 = 324
+}
diff --git a/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.modular.expect b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.modular.expect
new file mode 100644
index 0000000..be71725
--- /dev/null
+++ b/pkg/front_end/testcases/static_field_lowering/opt_out.dart.weak.modular.expect
@@ -0,0 +1,87 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  static const field core::int* staticConstField = #C1;
+  field core::int* instanceFieldWithInitializer = self::init<core::int*>(55);
+  static field core::int* staticFieldWithoutInitializer = null;
+  static field core::int* staticFieldWithInitializer1 = self::init<core::int*>(55);
+  static field core::int* staticFieldWithInitializer2 = self::init<core::int*>(55);
+  static final field core::int* staticFinalFieldWithInitializer1 = self::init<core::int*>(73);
+  static field core::int* staticFinalFieldWithInitializer2Init = 0;
+  static final field core::int* staticFinalFieldWithInitializer2 = (let final core::int* #t1 = self::Class::staticFinalFieldWithInitializer2Init in let final core::int* #t2 = self::Class::staticFinalFieldWithInitializer2Init = #t1.{core::num::+}(1){(core::num*) →* core::int*} in #t1) =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{core::int*} self::Class::staticFinalFieldWithInitializer2.{core::num::+}(1){(core::num*) →* core::int*} : 87;
+  synthetic constructor •() → self::Class*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+static field dynamic lastInit;
+static const field core::int* constTopLevelField = #C2;
+static field core::int* topLevelFieldWithoutInitializer;
+static field core::int* topLevelFieldWithInitializer1 = self::init<core::int*>(42);
+static field core::int* topLevelFieldWithInitializer2 = self::init<core::int*>(42);
+static final field core::int* finalTopLevelFieldWithInitializer1 = self::init<core::int*>(87);
+static field core::int* finalTopLevelFieldWithInitializer2Init = 0;
+static final field core::int* finalTopLevelFieldWithInitializer2 = (let final core::int* #t3 = self::finalTopLevelFieldWithInitializer2Init in let final core::int* #t4 = self::finalTopLevelFieldWithInitializer2Init = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3) =={core::num::==}{(core::Object*) →* core::bool*} 0 ?{core::int*} self::finalTopLevelFieldWithInitializer2.{core::num::+}(1){(core::num*) →* core::int*} : 87;
+static method init<T extends core::Object* = dynamic>(self::init::T* value) → self::init::T* {
+  self::lastInit = value;
+  return value;
+}
+static method main() → dynamic {
+  self::expect(null, self::lastInit);
+  self::expect(null, self::topLevelFieldWithoutInitializer);
+  self::expect(324, #C2);
+  self::expect(null, self::Class::staticFieldWithoutInitializer);
+  self::expect(123, #C1);
+  self::expect(42, self::topLevelFieldWithInitializer1);
+  self::expect(42, self::lastInit);
+  self::topLevelFieldWithInitializer2 = 56;
+  self::expect(42, self::lastInit);
+  self::expect(56, self::topLevelFieldWithInitializer2);
+  self::expect(42, self::lastInit);
+  self::expect(87, self::finalTopLevelFieldWithInitializer1);
+  self::expect(87, self::lastInit);
+  self::throws(() → core::int* => self::finalTopLevelFieldWithInitializer2, "Read finalTopLevelFieldWithInitializer2");
+  self::expect(55, self::Class::staticFieldWithInitializer1);
+  self::expect(55, self::lastInit);
+  self::Class::staticFieldWithInitializer2 = 63;
+  self::expect(55, self::lastInit);
+  self::expect(63, self::Class::staticFieldWithInitializer2);
+  self::expect(55, self::lastInit);
+  self::expect(73, self::Class::staticFinalFieldWithInitializer1);
+  self::expect(73, self::lastInit);
+  self::throws(() → core::int* => self::Class::staticFinalFieldWithInitializer2, "Read staticFinalFieldWithInitializer2");
+  self::Class* c = new self::Class::•();
+  self::expect(55, self::lastInit);
+  self::expect(55, c.{self::Class::instanceFieldWithInitializer}{core::int*});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+static method throws(() →* dynamic f, core::String* message) → dynamic {
+  dynamic value;
+  try {
+    value = f(){() →* dynamic};
+  }
+  on dynamic catch(final dynamic e) {
+    core::print(e);
+    return;
+  }
+  throw "${message}: ${value}";
+}
+
+constants  {
+  #C1 = 123
+  #C2 = 324
+}
diff --git a/pkg/front_end/testcases/super_parameters/simple.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/simple.dart.weak.modular.expect
new file mode 100644
index 0000000..a1ba70a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/simple.dart:11:3: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+//   B(super.foo);
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(dynamic foo) → self::B
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/super_parameters/simple.dart:11:3: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+  B(super.foo);
+  ^"
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart
new file mode 100644
index 0000000..f8bb940
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  final int foo;
+  A(this.foo);
+}
+
+class B extends A {
+  B(super.foo) : super();
+}
+
+class C extends A {
+  C(super.foo) : super(42); // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.strong.expect b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.strong.expect
new file mode 100644
index 0000000..630145e
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.strong.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart:15:23: Error: Positional super-initializer parameters cannot be used when the super initializer has positional arguments.
+//   C(super.foo) : super(42); // Error.
+//                       ^
+// pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart:15:11: Context: This is the super-initializer parameter.
+//   C(super.foo) : super(42); // Error.
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(dynamic foo) → self::B
+    : super self::A::•(foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+    ;
+}
+class C extends self::A {
+  constructor •(dynamic foo) → self::C
+    : super self::A::•(42)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.strong.transformed.expect
new file mode 100644
index 0000000..630145e
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.strong.transformed.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart:15:23: Error: Positional super-initializer parameters cannot be used when the super initializer has positional arguments.
+//   C(super.foo) : super(42); // Error.
+//                       ^
+// pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart:15:11: Context: This is the super-initializer parameter.
+//   C(super.foo) : super(42); // Error.
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(dynamic foo) → self::B
+    : super self::A::•(foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+    ;
+}
+class C extends self::A {
+  constructor •(dynamic foo) → self::C
+    : super self::A::•(42)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline.expect
new file mode 100644
index 0000000..942d614
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline.expect
@@ -0,0 +1,11 @@
+class A {
+  final int foo;
+  A(this.foo);
+}
+class B extends A {
+  B(super.foo) : super();
+}
+class C extends A {
+  C(super.foo) : super(42);
+}
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.expect b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.expect
new file mode 100644
index 0000000..630145e
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart:15:23: Error: Positional super-initializer parameters cannot be used when the super initializer has positional arguments.
+//   C(super.foo) : super(42); // Error.
+//                       ^
+// pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart:15:11: Context: This is the super-initializer parameter.
+//   C(super.foo) : super(42); // Error.
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(dynamic foo) → self::B
+    : super self::A::•(foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+    ;
+}
+class C extends self::A {
+  constructor •(dynamic foo) → self::C
+    : super self::A::•(42)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.outline.expect
new file mode 100644
index 0000000..767d2ef
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.outline.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A
+    ;
+}
+class B extends self::A {
+  constructor •(dynamic foo) → self::B
+    ;
+}
+class C extends self::A {
+  constructor •(dynamic foo) → self::C
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.transformed.expect
new file mode 100644
index 0000000..630145e
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.weak.transformed.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart:15:23: Error: Positional super-initializer parameters cannot be used when the super initializer has positional arguments.
+//   C(super.foo) : super(42); // Error.
+//                       ^
+// pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart:15:11: Context: This is the super-initializer parameter.
+//   C(super.foo) : super(42); // Error.
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(dynamic foo) → self::B
+    : super self::A::•(foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+    ;
+}
+class C extends self::A {
+  constructor •(dynamic foo) → self::C
+    : super self::A::•(42)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 956276e..9eb437c 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -200,6 +200,8 @@
 regress/issue_41265.crash: Crash
 regress/issue_41265.crash: FormatterCrash
 super_parameters/simple: FormatterCrash
+super_parameters/simple_positional_super_parameters: FormatterCrash
+super_parameters/typed_super_parameter: FormatterCrash
 triple_shift/invalid_operator: FormatterCrash
 variance/class_type_parameter_modifier: FormatterCrash
 variance/generic_covariance_sound_variance: FormatterCrash
diff --git a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.modular.expect b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.modular.expect
new file mode 100644
index 0000000..86bba08
--- /dev/null
+++ b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.weak.modular.expect
@@ -0,0 +1,90 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:6:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>() => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:10:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, b) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:14:17: Error: An operator can't have optional parameters.
+//   operator >>>([a]) => true;
+//                 ^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:18:17: Error: An operator can't have optional parameters.
+//   operator >>>({a}) => true;
+//                 ^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:22:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, [b]) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:26:12: Error: Operator '>>>' should have exactly one parameter.
+//   operator >>>(a, {b}) => true;
+//            ^^^
+//
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:30:16: Error: Types parameters aren't allowed when defining an operator.
+// Try removing the type parameters.
+//   operator >>><T>(a) => true;
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Operators1 extends core::Object {
+  synthetic constructor •() → self::Operators1
+    : super core::Object::•()
+    ;
+  operator >>>() → dynamic
+    return true;
+}
+class Operators2 extends core::Object {
+  synthetic constructor •() → self::Operators2
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic a, dynamic b) → dynamic
+    return true;
+}
+class Operators3 extends core::Object {
+  synthetic constructor •() → self::Operators3
+    : super core::Object::•()
+    ;
+  operator >>>([dynamic a = #C1]) → dynamic
+    return true;
+}
+class Operators4 extends core::Object {
+  synthetic constructor •() → self::Operators4
+    : super core::Object::•()
+    ;
+  operator >>>({dynamic a = #C1}) → dynamic
+    return true;
+}
+class Operators5 extends core::Object {
+  synthetic constructor •() → self::Operators5
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic a, [dynamic b = #C1]) → dynamic
+    return true;
+}
+class Operators6 extends core::Object {
+  synthetic constructor •() → self::Operators6
+    : super core::Object::•()
+    ;
+  operator >>>(dynamic a, {dynamic b = #C1}) → dynamic
+    return true;
+}
+class Operators7 extends core::Object {
+  synthetic constructor •() → self::Operators7
+    : super core::Object::•()
+    ;
+  operator >>><T extends core::Object? = dynamic>(dynamic a) → dynamic
+    return true;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.modular.expect
new file mode 100644
index 0000000..9474a72
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/fold_initial.dart.weak.modular.expect
@@ -0,0 +1,206 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method foldInitialElements() → void {
+  dynamic element0 = 0;
+  core::num* element1 = 1;
+  core::int* element2 = 2;
+  core::List<core::int*>* list = block {
+    final core::List<core::int*>* #t1 = <core::int*>[element0 as{TypeError,ForDynamic} core::int*, element1 as{TypeError} core::int*, element2];
+    if(true)
+      #t1.{core::List::add}{Invariant}(3){(core::int*) →* void};
+    #t1.{core::List::add}{Invariant}(4){(core::int*) →* void};
+    #t1.{core::List::add}{Invariant}(5){(core::int*) →* void};
+    #t1.{core::List::add}{Invariant}(6){(core::int*) →* void};
+  } =>#t1;
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
+  core::Set<core::int*>* set = block {
+    final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
+    #t2.{core::Set::add}{Invariant}(element0 as{TypeError,ForDynamic} core::int*){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}{Invariant}(element1 as{TypeError} core::int*){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}{Invariant}(element2){(core::int*) →* core::bool*};
+    if(true)
+      #t2.{core::Set::add}{Invariant}(3){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}{Invariant}(4){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}{Invariant}(5){(core::int*) →* core::bool*};
+    #t2.{core::Set::add}{Invariant}(6){(core::int*) →* core::bool*};
+  } =>#t2;
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
+}
+static method foldInitialSpread1() → void {
+  dynamic initial = <core::int*>[0, 1, 2];
+  core::List<core::int*>* list = block {
+    final core::List<core::int*>* #t3 = <core::int*>[];
+    for (final dynamic #t4 in initial as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      final core::int* #t5 = #t4 as{TypeError} core::int*;
+      #t3.{core::List::add}{Invariant}(#t5){(core::int*) →* void};
+    }
+    if(true)
+      #t3.{core::List::add}{Invariant}(3){(core::int*) →* void};
+    #t3.{core::List::add}{Invariant}(4){(core::int*) →* void};
+    #t3.{core::List::add}{Invariant}(5){(core::int*) →* void};
+    #t3.{core::List::add}{Invariant}(6){(core::int*) →* void};
+  } =>#t3;
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
+  core::Set<core::int*>* set = block {
+    final core::Set<core::int*>* #t6 = col::LinkedHashSet::•<core::int*>();
+    for (final dynamic #t7 in initial as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      final core::int* #t8 = #t7 as{TypeError} core::int*;
+      #t6.{core::Set::add}{Invariant}(#t8){(core::int*) →* core::bool*};
+    }
+    if(true)
+      #t6.{core::Set::add}{Invariant}(3){(core::int*) →* core::bool*};
+    #t6.{core::Set::add}{Invariant}(4){(core::int*) →* core::bool*};
+    #t6.{core::Set::add}{Invariant}(5){(core::int*) →* core::bool*};
+    #t6.{core::Set::add}{Invariant}(6){(core::int*) →* core::bool*};
+  } =>#t6;
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
+}
+static method foldInitialSpread2() → void {
+  core::Iterable<core::num*>* initial = <core::num*>[0, 1, 2];
+  core::List<core::int*>* list = block {
+    final core::List<core::int*>* #t9 = <core::int*>[];
+    for (final dynamic #t10 in initial) {
+      final core::int* #t11 = #t10 as{TypeError} core::int*;
+      #t9.{core::List::add}{Invariant}(#t11){(core::int*) →* void};
+    }
+    if(true)
+      #t9.{core::List::add}{Invariant}(3){(core::int*) →* void};
+    #t9.{core::List::add}{Invariant}(4){(core::int*) →* void};
+    #t9.{core::List::add}{Invariant}(5){(core::int*) →* void};
+    #t9.{core::List::add}{Invariant}(6){(core::int*) →* void};
+  } =>#t9;
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
+  core::Set<core::int*>* set = block {
+    final core::Set<core::int*>* #t12 = col::LinkedHashSet::•<core::int*>();
+    for (final dynamic #t13 in initial) {
+      final core::int* #t14 = #t13 as{TypeError} core::int*;
+      #t12.{core::Set::add}{Invariant}(#t14){(core::int*) →* core::bool*};
+    }
+    if(true)
+      #t12.{core::Set::add}{Invariant}(3){(core::int*) →* core::bool*};
+    #t12.{core::Set::add}{Invariant}(4){(core::int*) →* core::bool*};
+    #t12.{core::Set::add}{Invariant}(5){(core::int*) →* core::bool*};
+    #t12.{core::Set::add}{Invariant}(6){(core::int*) →* core::bool*};
+  } =>#t12;
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
+}
+static method foldInitialSpread3() → void {
+  core::List<core::num*>* initial = <core::num*>[0, 1, 2];
+  core::List<core::int*>* list = block {
+    final core::List<core::int*>* #t15 = <core::int*>[];
+    for (final dynamic #t16 in initial) {
+      final core::int* #t17 = #t16 as{TypeError} core::int*;
+      #t15.{core::List::add}{Invariant}(#t17){(core::int*) →* void};
+    }
+    if(true)
+      #t15.{core::List::add}{Invariant}(3){(core::int*) →* void};
+    #t15.{core::List::add}{Invariant}(4){(core::int*) →* void};
+    #t15.{core::List::add}{Invariant}(5){(core::int*) →* void};
+    #t15.{core::List::add}{Invariant}(6){(core::int*) →* void};
+  } =>#t15;
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
+  core::Set<core::int*>* set = block {
+    final core::Set<core::int*>* #t18 = col::LinkedHashSet::•<core::int*>();
+    for (final dynamic #t19 in initial) {
+      final core::int* #t20 = #t19 as{TypeError} core::int*;
+      #t18.{core::Set::add}{Invariant}(#t20){(core::int*) →* core::bool*};
+    }
+    if(true)
+      #t18.{core::Set::add}{Invariant}(3){(core::int*) →* core::bool*};
+    #t18.{core::Set::add}{Invariant}(4){(core::int*) →* core::bool*};
+    #t18.{core::Set::add}{Invariant}(5){(core::int*) →* core::bool*};
+    #t18.{core::Set::add}{Invariant}(6){(core::int*) →* core::bool*};
+  } =>#t18;
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
+}
+static method foldInitialSpread4() → void {
+  core::Iterable<core::int*>* initial = <core::int*>[0, 1, 2];
+  core::List<core::int*>* list = block {
+    final core::List<core::int*>* #t21 = core::List::of<core::int*>(initial);
+    if(true)
+      #t21.{core::List::add}{Invariant}(3){(core::int*) →* void};
+    #t21.{core::List::add}{Invariant}(4){(core::int*) →* void};
+    #t21.{core::List::add}{Invariant}(5){(core::int*) →* void};
+    #t21.{core::List::add}{Invariant}(6){(core::int*) →* void};
+  } =>#t21;
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
+  core::Set<core::int*>* set = block {
+    final core::Set<core::int*>* #t22 = col::LinkedHashSet::of<core::int*>(initial);
+    if(true)
+      #t22.{core::Set::add}{Invariant}(3){(core::int*) →* core::bool*};
+    #t22.{core::Set::add}{Invariant}(4){(core::int*) →* core::bool*};
+    #t22.{core::Set::add}{Invariant}(5){(core::int*) →* core::bool*};
+    #t22.{core::Set::add}{Invariant}(6){(core::int*) →* core::bool*};
+  } =>#t22;
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
+}
+static method foldInitialSpread5() → void {
+  core::List<core::int*>* initial = <core::int*>[0, 1, 2];
+  core::List<core::int*>* list = block {
+    final core::List<core::int*>* #t23 = core::List::of<core::int*>(initial);
+    if(true)
+      #t23.{core::List::add}{Invariant}(3){(core::int*) →* void};
+    #t23.{core::List::add}{Invariant}(4){(core::int*) →* void};
+    #t23.{core::List::add}{Invariant}(5){(core::int*) →* void};
+    #t23.{core::List::add}{Invariant}(6){(core::int*) →* void};
+  } =>#t23;
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
+  core::Set<core::int*>* set = block {
+    final core::Set<core::int*>* #t24 = col::LinkedHashSet::of<core::int*>(initial);
+    if(true)
+      #t24.{core::Set::add}{Invariant}(3){(core::int*) →* core::bool*};
+    #t24.{core::Set::add}{Invariant}(4){(core::int*) →* core::bool*};
+    #t24.{core::Set::add}{Invariant}(5){(core::int*) →* core::bool*};
+    #t24.{core::Set::add}{Invariant}(6){(core::int*) →* core::bool*};
+  } =>#t24;
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
+}
+static method foldInitialSpread6() → void {
+  core::List<core::int*>* initial = <core::int*>[0, 1, 2];
+  core::List<core::int*>* list = block {
+    final core::List<core::int*>* #t25 = <core::int*>[];
+    final core::Iterable<core::int*>* #t26 = initial;
+    if(!(#t26 == null))
+      #t25.{core::List::addAll}{Invariant}(#t26){(core::Iterable<core::int*>*) →* void};
+    if(true)
+      #t25.{core::List::add}{Invariant}(3){(core::int*) →* void};
+    #t25.{core::List::add}{Invariant}(4){(core::int*) →* void};
+    #t25.{core::List::add}{Invariant}(5){(core::int*) →* void};
+    #t25.{core::List::add}{Invariant}(6){(core::int*) →* void};
+  } =>#t25;
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), list);
+  core::Set<core::int*>* set = block {
+    final core::Set<core::int*>* #t27 = col::LinkedHashSet::•<core::int*>();
+    final core::Iterable<core::int*>* #t28 = initial;
+    if(!(#t28 == null))
+      #t27.{core::Set::addAll}{Invariant}(#t28){(core::Iterable<core::int*>*) →* void};
+    if(true)
+      #t27.{core::Set::add}{Invariant}(3){(core::int*) →* core::bool*};
+    #t27.{core::Set::add}{Invariant}(4){(core::int*) →* core::bool*};
+    #t27.{core::Set::add}{Invariant}(5){(core::int*) →* core::bool*};
+    #t27.{core::Set::add}{Invariant}(6){(core::int*) →* core::bool*};
+  } =>#t27;
+  self::expect(core::List::generate<core::int*>(7, (core::int* i) → core::int* => i), set.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::int*>*});
+}
+static method main() → dynamic {
+  self::foldInitialElements();
+  self::foldInitialSpread1();
+  self::foldInitialSpread2();
+  self::foldInitialSpread3();
+  self::foldInitialSpread4();
+  self::foldInitialSpread5();
+  self::foldInitialSpread6();
+}
+static method expect(core::List<dynamic>* list1, core::List<dynamic>* list2) → void {
+  if(!(list1.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} list2.{core::List::length}{core::int*})) {
+    throw "Unexpected length. Expected ${list1.{core::List::length}{core::int*}}, actual ${list2.{core::List::length}{core::int*}}.";
+  }
+  for (core::int* i = 0; i.{core::num::<}(list1.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    if(!(list1.{core::List::[]}(i){(core::int*) →* dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} list2.{core::List::[]}(i){(core::int*) →* dynamic})) {
+      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i){(core::int*) →* dynamic}}, actual ${list2.{core::List::[]}(i){(core::int*) →* dynamic}}.";
+    }
+  }
+}
diff --git a/pkg/front_end/testcases/unified_collections/invariance.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/invariance.dart.weak.modular.expect
new file mode 100644
index 0000000..78bb3e0
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/invariance.dart.weak.modular.expect
@@ -0,0 +1,72 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method main() → dynamic {
+  core::List<core::int*>* list1 = <core::int*>[0];
+  core::List<core::num*>* list2 = <core::num*>[0];
+  dynamic list3 = <core::int*>[0];
+  core::List<core::int*>* list = block {
+    final core::List<core::int*>* #t1 = <core::int*>[0];
+    #t1.{core::List::addAll}{Invariant}(list1){(core::Iterable<core::int*>*) →* void};
+    for (final dynamic #t2 in list2) {
+      final core::int* #t3 = #t2 as{TypeError} core::int*;
+      #t1.{core::List::add}{Invariant}(#t3){(core::int*) →* void};
+    }
+    for (final dynamic #t4 in list3 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      final core::int* #t5 = #t4 as{TypeError} core::int*;
+      #t1.{core::List::add}{Invariant}(#t5){(core::int*) →* void};
+    }
+    if(true)
+      #t1.{core::List::add}{Invariant}(2){(core::int*) →* void};
+  } =>#t1;
+  core::Set<core::int*>* set1 = block {
+    final core::Set<core::int*>* #t6 = col::LinkedHashSet::•<core::int*>();
+    #t6.{core::Set::add}{Invariant}(0){(core::int*) →* core::bool*};
+  } =>#t6;
+  core::Set<core::num*>* set2 = block {
+    final core::Set<core::num*>* #t7 = col::LinkedHashSet::•<core::num*>();
+    #t7.{core::Set::add}{Invariant}(0){(core::num*) →* core::bool*};
+  } =>#t7;
+  dynamic set3 = block {
+    final core::Set<core::int*>* #t8 = col::LinkedHashSet::•<core::int*>();
+    #t8.{core::Set::add}{Invariant}(0){(core::int*) →* core::bool*};
+  } =>#t8;
+  core::Set<core::int*>* set = block {
+    final core::Set<core::int*>* #t9 = col::LinkedHashSet::•<core::int*>();
+    #t9.{core::Set::add}{Invariant}(0){(core::int*) →* core::bool*};
+    #t9.{core::Set::addAll}{Invariant}(set1){(core::Iterable<core::int*>*) →* void};
+    for (final dynamic #t10 in set2) {
+      final core::int* #t11 = #t10 as{TypeError} core::int*;
+      #t9.{core::Set::add}{Invariant}(#t11){(core::int*) →* core::bool*};
+    }
+    for (final dynamic #t12 in set3 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      final core::int* #t13 = #t12 as{TypeError} core::int*;
+      #t9.{core::Set::add}{Invariant}(#t13){(core::int*) →* core::bool*};
+    }
+    if(true)
+      #t9.{core::Set::add}{Invariant}(2){(core::int*) →* core::bool*};
+  } =>#t9;
+  core::Map<core::int*, core::String*>* map1 = <core::int*, core::String*>{0: "foo"};
+  core::Map<core::num*, core::Object*>* map2 = <core::num*, core::Object*>{0: "bar"};
+  dynamic map3 = <core::int*, core::String*>{0: "baz"};
+  core::Map<core::int*, core::String*>* map = block {
+    final core::Map<core::int*, core::String*>* #t14 = <core::int*, core::String*>{};
+    #t14.{core::Map::[]=}{Invariant}(0, "foo"){(core::int*, core::String*) →* void};
+    for (final core::MapEntry<core::int*, core::String*>* #t15 in map1.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>})
+      #t14.{core::Map::[]=}{Invariant}(#t15.{core::MapEntry::key}{core::int*}, #t15.{core::MapEntry::value}{core::String*}){(core::int*, core::String*) →* void};
+    for (final core::MapEntry<dynamic, dynamic>* #t16 in map2.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}) {
+      final core::int* #t17 = #t16.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
+      final core::String* #t18 = #t16.{core::MapEntry::value}{dynamic} as{TypeError} core::String*;
+      #t14.{core::Map::[]=}{Invariant}(#t17, #t18){(core::int*, core::String*) →* void};
+    }
+    for (final core::MapEntry<dynamic, dynamic>* #t19 in (map3 as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}) {
+      final core::int* #t20 = #t19.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
+      final core::String* #t21 = #t19.{core::MapEntry::value}{dynamic} as{TypeError} core::String*;
+      #t14.{core::Map::[]=}{Invariant}(#t20, #t21){(core::int*, core::String*) →* void};
+    }
+    if(true)
+      #t14.{core::Map::[]=}{Invariant}(2, "baz"){(core::int*, core::String*) →* void};
+  } =>#t14;
+}
diff --git a/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.modular.expect
new file mode 100644
index 0000000..253e487
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/list_add_all.dart.weak.modular.expect
@@ -0,0 +1,155 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method useAddAll() → void {
+  dynamic dynamicList1 = <core::int*>[0, 1, 2];
+  dynamic dynamicList2 = <core::num*>[3, 4, 5];
+  core::Iterable<core::int*>* iterableIntList = <core::int*>[6, 7, 8];
+  core::Iterable<core::num*>* iterableNumList1 = <core::int*>[9, 10, 11];
+  core::Iterable<core::num*>* iterableNumList2 = <core::num*>[12, 13, 14];
+  core::List<core::int*>* intList = <core::int*>[15, 16, 17];
+  core::List<core::num*>* numList1 = <core::int*>[18, 19, 20];
+  core::List<core::num*>* numList2 = <core::num*>[21, 22, 23];
+  core::List<core::int*>* list1 = block {
+    final core::List<core::int*>* #t1 = <core::int*>[];
+    for (final dynamic #t2 in dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      final core::int* #t3 = #t2 as{TypeError} core::int*;
+      #t1.{core::List::add}{Invariant}(#t3){(core::int*) →* void};
+    }
+    for (final dynamic #t4 in dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      final core::int* #t5 = #t4 as{TypeError} core::int*;
+      #t1.{core::List::add}{Invariant}(#t5){(core::int*) →* void};
+    }
+    #t1.{core::List::addAll}{Invariant}(iterableIntList){(core::Iterable<core::int*>*) →* void};
+    for (final dynamic #t6 in iterableNumList1) {
+      final core::int* #t7 = #t6 as{TypeError} core::int*;
+      #t1.{core::List::add}{Invariant}(#t7){(core::int*) →* void};
+    }
+    for (final dynamic #t8 in iterableNumList2) {
+      final core::int* #t9 = #t8 as{TypeError} core::int*;
+      #t1.{core::List::add}{Invariant}(#t9){(core::int*) →* void};
+    }
+    #t1.{core::List::addAll}{Invariant}(intList){(core::Iterable<core::int*>*) →* void};
+    for (final dynamic #t10 in numList1) {
+      final core::int* #t11 = #t10 as{TypeError} core::int*;
+      #t1.{core::List::add}{Invariant}(#t11){(core::int*) →* void};
+    }
+    for (final dynamic #t12 in numList2) {
+      final core::int* #t13 = #t12 as{TypeError} core::int*;
+      #t1.{core::List::add}{Invariant}(#t13){(core::int*) →* void};
+    }
+  } =>#t1;
+  self::expect(core::List::generate<core::int*>(24, (core::int* i) → core::int* => i), list1);
+  core::List<core::num*>* list2 = block {
+    final core::List<core::num*>* #t14 = <core::num*>[];
+    for (final dynamic #t15 in dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      final core::num* #t16 = #t15 as{TypeError} core::num*;
+      #t14.{core::List::add}{Invariant}(#t16){(core::num*) →* void};
+    }
+    for (final dynamic #t17 in dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      final core::num* #t18 = #t17 as{TypeError} core::num*;
+      #t14.{core::List::add}{Invariant}(#t18){(core::num*) →* void};
+    }
+    #t14.{core::List::addAll}{Invariant}(iterableIntList){(core::Iterable<core::num*>*) →* void};
+    #t14.{core::List::addAll}{Invariant}(iterableNumList1){(core::Iterable<core::num*>*) →* void};
+    #t14.{core::List::addAll}{Invariant}(iterableNumList2){(core::Iterable<core::num*>*) →* void};
+    #t14.{core::List::addAll}{Invariant}(intList){(core::Iterable<core::num*>*) →* void};
+    #t14.{core::List::addAll}{Invariant}(numList1){(core::Iterable<core::num*>*) →* void};
+    #t14.{core::List::addAll}{Invariant}(numList2){(core::Iterable<core::num*>*) →* void};
+  } =>#t14;
+  self::expect(core::List::generate<core::num*>(24, (core::int* i) → core::int* => i), list2);
+  core::List<core::int*>* list3 = block {
+    final core::List<core::int*>* #t19 = <core::int*>[];
+    final core::Iterable<dynamic>* #t20 = dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+    if(!(#t20 == null))
+      for (final dynamic #t21 in #t20) {
+        final core::int* #t22 = #t21 as{TypeError} core::int*;
+        #t19.{core::List::add}{Invariant}(#t22){(core::int*) →* void};
+      }
+    final core::Iterable<dynamic>* #t23 = dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+    if(!(#t23 == null))
+      for (final dynamic #t24 in #t23) {
+        final core::int* #t25 = #t24 as{TypeError} core::int*;
+        #t19.{core::List::add}{Invariant}(#t25){(core::int*) →* void};
+      }
+    final core::Iterable<core::int*>* #t26 = iterableIntList;
+    if(!(#t26 == null))
+      #t19.{core::List::addAll}{Invariant}(#t26){(core::Iterable<core::int*>*) →* void};
+    final core::Iterable<dynamic>* #t27 = iterableNumList1;
+    if(!(#t27 == null))
+      for (final dynamic #t28 in #t27) {
+        final core::int* #t29 = #t28 as{TypeError} core::int*;
+        #t19.{core::List::add}{Invariant}(#t29){(core::int*) →* void};
+      }
+    final core::Iterable<dynamic>* #t30 = iterableNumList2;
+    if(!(#t30 == null))
+      for (final dynamic #t31 in #t30) {
+        final core::int* #t32 = #t31 as{TypeError} core::int*;
+        #t19.{core::List::add}{Invariant}(#t32){(core::int*) →* void};
+      }
+    final core::Iterable<core::int*>* #t33 = intList;
+    if(!(#t33 == null))
+      #t19.{core::List::addAll}{Invariant}(#t33){(core::Iterable<core::int*>*) →* void};
+    final core::Iterable<dynamic>* #t34 = numList1;
+    if(!(#t34 == null))
+      for (final dynamic #t35 in #t34) {
+        final core::int* #t36 = #t35 as{TypeError} core::int*;
+        #t19.{core::List::add}{Invariant}(#t36){(core::int*) →* void};
+      }
+    final core::Iterable<dynamic>* #t37 = numList2;
+    if(!(#t37 == null))
+      for (final dynamic #t38 in #t37) {
+        final core::int* #t39 = #t38 as{TypeError} core::int*;
+        #t19.{core::List::add}{Invariant}(#t39){(core::int*) →* void};
+      }
+  } =>#t19;
+  self::expect(core::List::generate<core::int*>(24, (core::int* i) → core::int* => i), list3);
+  core::List<core::num*>* list4 = block {
+    final core::List<core::num*>* #t40 = <core::num*>[];
+    final core::Iterable<dynamic>* #t41 = dynamicList1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+    if(!(#t41 == null))
+      for (final dynamic #t42 in #t41) {
+        final core::num* #t43 = #t42 as{TypeError} core::num*;
+        #t40.{core::List::add}{Invariant}(#t43){(core::num*) →* void};
+      }
+    final core::Iterable<dynamic>* #t44 = dynamicList2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+    if(!(#t44 == null))
+      for (final dynamic #t45 in #t44) {
+        final core::num* #t46 = #t45 as{TypeError} core::num*;
+        #t40.{core::List::add}{Invariant}(#t46){(core::num*) →* void};
+      }
+    final core::Iterable<core::num*>* #t47 = iterableIntList;
+    if(!(#t47 == null))
+      #t40.{core::List::addAll}{Invariant}(#t47){(core::Iterable<core::num*>*) →* void};
+    final core::Iterable<core::num*>* #t48 = iterableNumList1;
+    if(!(#t48 == null))
+      #t40.{core::List::addAll}{Invariant}(#t48){(core::Iterable<core::num*>*) →* void};
+    final core::Iterable<core::num*>* #t49 = iterableNumList2;
+    if(!(#t49 == null))
+      #t40.{core::List::addAll}{Invariant}(#t49){(core::Iterable<core::num*>*) →* void};
+    final core::Iterable<core::num*>* #t50 = intList;
+    if(!(#t50 == null))
+      #t40.{core::List::addAll}{Invariant}(#t50){(core::Iterable<core::num*>*) →* void};
+    final core::Iterable<core::num*>* #t51 = numList1;
+    if(!(#t51 == null))
+      #t40.{core::List::addAll}{Invariant}(#t51){(core::Iterable<core::num*>*) →* void};
+    final core::Iterable<core::num*>* #t52 = numList2;
+    if(!(#t52 == null))
+      #t40.{core::List::addAll}{Invariant}(#t52){(core::Iterable<core::num*>*) →* void};
+  } =>#t40;
+  self::expect(core::List::generate<core::num*>(24, (core::int* i) → core::int* => i), list4);
+}
+static method main() → dynamic {
+  self::useAddAll();
+}
+static method expect(core::List<dynamic>* list1, core::List<dynamic>* list2) → void {
+  if(!(list1.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} list2.{core::List::length}{core::int*})) {
+    throw "Unexpected length. Expected ${list1.{core::List::length}{core::int*}}, actual ${list2.{core::List::length}{core::int*}}.";
+  }
+  for (core::int* i = 0; i.{core::num::<}(list1.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+    if(!(list1.{core::List::[]}(i){(core::int*) →* dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} list2.{core::List::[]}(i){(core::int*) →* dynamic})) {
+      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i){(core::int*) →* dynamic}}, actual ${list2.{core::List::[]}(i){(core::int*) →* dynamic}}.";
+    }
+  }
+}
diff --git a/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.modular.expect
new file mode 100644
index 0000000..c6f63bf
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/list_add_all_nnbd.dart.weak.modular.expect
@@ -0,0 +1,124 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method useAddAll() → void {
+  dynamic dynamicList1 = <core::int>[0, 1, 2];
+  dynamic dynamicList2 = <core::num>[3, 4, 5];
+  dynamic dynamicList3 = <core::int?>[6, 7, 8];
+  core::Iterable<core::int> iterableIntList = <core::int>[9, 10, 11];
+  core::List<core::int> intList = <core::int>[12, 13, 14];
+  core::List<core::int> list1 = block {
+    final core::List<core::int> #t1 = <core::int>[];
+    for (final dynamic #t2 in dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t3 = #t2 as{TypeError,ForNonNullableByDefault} core::int;
+      #t1.{core::List::add}{Invariant}(#t3){(core::int) → void};
+    }
+    for (final dynamic #t4 in dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t5 = #t4 as{TypeError,ForNonNullableByDefault} core::int;
+      #t1.{core::List::add}{Invariant}(#t5){(core::int) → void};
+    }
+    for (final dynamic #t6 in dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t7 = #t6 as{TypeError,ForNonNullableByDefault} core::int;
+      #t1.{core::List::add}{Invariant}(#t7){(core::int) → void};
+    }
+    #t1.{core::List::addAll}{Invariant}(iterableIntList){(core::Iterable<core::int>) → void};
+    #t1.{core::List::addAll}{Invariant}(intList){(core::Iterable<core::int>) → void};
+  } =>#t1;
+  self::expect(core::List::generate<core::int>(15, (core::int i) → core::int => i), list1);
+  core::List<core::num> list2 = block {
+    final core::List<core::num> #t8 = <core::num>[];
+    for (final dynamic #t9 in dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::num #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::num;
+      #t8.{core::List::add}{Invariant}(#t10){(core::num) → void};
+    }
+    for (final dynamic #t11 in dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::num #t12 = #t11 as{TypeError,ForNonNullableByDefault} core::num;
+      #t8.{core::List::add}{Invariant}(#t12){(core::num) → void};
+    }
+    for (final dynamic #t13 in dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::num #t14 = #t13 as{TypeError,ForNonNullableByDefault} core::num;
+      #t8.{core::List::add}{Invariant}(#t14){(core::num) → void};
+    }
+    #t8.{core::List::addAll}{Invariant}(iterableIntList){(core::Iterable<core::num>) → void};
+    #t8.{core::List::addAll}{Invariant}(intList){(core::Iterable<core::num>) → void};
+  } =>#t8;
+  self::expect(core::List::generate<core::num>(15, (core::int i) → core::int => i), list2);
+}
+static method useAddAllNullable() → void {
+  dynamic dynamicList1 = <core::int>[0, 1, 2];
+  dynamic dynamicList2 = <core::num>[3, 4, 5];
+  dynamic dynamicList3 = <core::int?>[6, 7, 8];
+  core::Iterable<core::int>? iterableIntList = true ?{core::List<core::int>?} <core::int>[9, 10, 11] : null;
+  core::List<core::int>? intList = true ?{core::List<core::int>?} <core::int>[12, 13, 14] : null;
+  core::List<core::int> list1 = block {
+    final core::List<core::int> #t15 = <core::int>[];
+    final core::Iterable<dynamic>? #t16 = dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
+    if(!(#t16 == null))
+      for (final dynamic #t17 in #t16{core::Iterable<dynamic>}) {
+        final core::int #t18 = #t17 as{TypeError,ForNonNullableByDefault} core::int;
+        #t15.{core::List::add}{Invariant}(#t18){(core::int) → void};
+      }
+    final core::Iterable<dynamic>? #t19 = dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
+    if(!(#t19 == null))
+      for (final dynamic #t20 in #t19{core::Iterable<dynamic>}) {
+        final core::int #t21 = #t20 as{TypeError,ForNonNullableByDefault} core::int;
+        #t15.{core::List::add}{Invariant}(#t21){(core::int) → void};
+      }
+    final core::Iterable<dynamic>? #t22 = dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
+    if(!(#t22 == null))
+      for (final dynamic #t23 in #t22{core::Iterable<dynamic>}) {
+        final core::int #t24 = #t23 as{TypeError,ForNonNullableByDefault} core::int;
+        #t15.{core::List::add}{Invariant}(#t24){(core::int) → void};
+      }
+    final core::Iterable<core::int>? #t25 = iterableIntList;
+    if(!(#t25 == null))
+      #t15.{core::List::addAll}{Invariant}(#t25{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    final core::Iterable<core::int>? #t26 = intList;
+    if(!(#t26 == null))
+      #t15.{core::List::addAll}{Invariant}(#t26{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t15;
+  self::expect(core::List::generate<core::int>(15, (core::int i) → core::int => i), list1);
+  core::List<core::num> list2 = block {
+    final core::List<core::num> #t27 = <core::num>[];
+    final core::Iterable<dynamic>? #t28 = dynamicList1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
+    if(!(#t28 == null))
+      for (final dynamic #t29 in #t28{core::Iterable<dynamic>}) {
+        final core::num #t30 = #t29 as{TypeError,ForNonNullableByDefault} core::num;
+        #t27.{core::List::add}{Invariant}(#t30){(core::num) → void};
+      }
+    final core::Iterable<dynamic>? #t31 = dynamicList2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
+    if(!(#t31 == null))
+      for (final dynamic #t32 in #t31{core::Iterable<dynamic>}) {
+        final core::num #t33 = #t32 as{TypeError,ForNonNullableByDefault} core::num;
+        #t27.{core::List::add}{Invariant}(#t33){(core::num) → void};
+      }
+    final core::Iterable<dynamic>? #t34 = dynamicList3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
+    if(!(#t34 == null))
+      for (final dynamic #t35 in #t34{core::Iterable<dynamic>}) {
+        final core::num #t36 = #t35 as{TypeError,ForNonNullableByDefault} core::num;
+        #t27.{core::List::add}{Invariant}(#t36){(core::num) → void};
+      }
+    final core::Iterable<core::num>? #t37 = iterableIntList;
+    if(!(#t37 == null))
+      #t27.{core::List::addAll}{Invariant}(#t37{core::Iterable<core::num>}){(core::Iterable<core::num>) → void};
+    final core::Iterable<core::num>? #t38 = intList;
+    if(!(#t38 == null))
+      #t27.{core::List::addAll}{Invariant}(#t38{core::Iterable<core::num>}){(core::Iterable<core::num>) → void};
+  } =>#t27;
+  self::expect(core::List::generate<core::num>(15, (core::int i) → core::int => i), list2);
+}
+static method main() → dynamic {
+  self::useAddAll();
+  self::useAddAllNullable();
+}
+static method expect(core::List<dynamic> list1, core::List<dynamic> list2) → void {
+  if(!(list1.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} list2.{core::List::length}{core::int})) {
+    throw "Unexpected length. Expected ${list1.{core::List::length}{core::int}}, actual ${list2.{core::List::length}{core::int}}.";
+  }
+  for (core::int i = 0; i.{core::num::<}(list1.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(!(list1.{core::List::[]}(i){(core::int) → dynamic} =={core::Object::==}{(core::Object) → core::bool} list2.{core::List::[]}(i){(core::int) → dynamic})) {
+      throw "Unexpected element at index ${i}. Expected ${list1.{core::List::[]}(i){(core::int) → dynamic}}, actual ${list2.{core::List::[]}(i){(core::int) → dynamic}}.";
+    }
+  }
+}
diff --git a/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.modular.expect
new file mode 100644
index 0000000..2ccee62
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/mixed_entries.dart.weak.modular.expect
@@ -0,0 +1,176 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// var error4 = {if (b) 0: 1 else for (var a in list) a};
+//                                ^
+//
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:36:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// var error5 = {if (b) for (var a in list) a else 0: 1};
+//                      ^
+//
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// var error8 = {if (b) 0: 1 else for (var i = 0; i < list.length; i++) list[i]};
+//                                ^
+//
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:44:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// var error9 = {if (b) for (var i = 0; i < list.length; i++) list[i] else 0: 1};
+//                      ^
+//
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:37:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// var error6 = {
+//              ^
+//
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:40:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// var error7 = {
+//              ^
+//
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:45:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// var error10 = {
+//               ^
+//
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:48:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// var error11 = {
+//               ^
+//
+// pkg/front_end/testcases/unified_collections/mixed_entries.dart:51:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// var error12 = {
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* b = false;
+static field core::List<dynamic>* list = <dynamic>[];
+static field core::Map<dynamic, dynamic>* map0 = <dynamic, dynamic>{};
+static field core::Map<dynamic, dynamic>* map1 = block {
+  final core::Map<dynamic, dynamic>* #t1 = <dynamic, dynamic>{};
+  if(self::b)
+    #t1.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) →* void};
+  else
+    for (final core::MapEntry<dynamic, dynamic>* #t2 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t1.{core::Map::[]=}{Invariant}(#t2.{core::MapEntry::key}{dynamic}, #t2.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+} =>#t1;
+static field core::Map<dynamic, dynamic>* map2 = block {
+  final core::Map<dynamic, dynamic>* #t3 = <dynamic, dynamic>{};
+  if(self::b)
+    for (final core::MapEntry<dynamic, dynamic>* #t4 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t3.{core::Map::[]=}{Invariant}(#t4.{core::MapEntry::key}{dynamic}, #t4.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+  else
+    #t3.{core::Map::[]=}{Invariant}(0, 1){(dynamic, dynamic) →* void};
+} =>#t3;
+static field core::Map<dynamic, dynamic>* map3 = block {
+  final core::Map<dynamic, dynamic>* #t5 = <dynamic, dynamic>{};
+  if(self::b)
+    for (final core::MapEntry<dynamic, dynamic>* #t6 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t5.{core::Map::[]=}{Invariant}(#t6.{core::MapEntry::key}{dynamic}, #t6.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+  else
+    for (final core::MapEntry<dynamic, dynamic>* #t7 in self::map0.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+      #t5.{core::Map::[]=}{Invariant}(#t7.{core::MapEntry::key}{dynamic}, #t7.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) →* void};
+} =>#t5;
+static field core::Map<dynamic, core::int*>* map4 = block {
+  final core::Map<dynamic, core::int*>* #t8 = <dynamic, core::int*>{};
+  if(self::b)
+    #t8.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+  else
+    for (dynamic a in self::list)
+      #t8.{core::Map::[]=}{Invariant}(a, 1){(dynamic, core::int*) →* void};
+} =>#t8;
+static field core::Map<dynamic, core::int*>* map5 = block {
+  final core::Map<dynamic, core::int*>* #t9 = <dynamic, core::int*>{};
+  if(self::b)
+    for (dynamic a in self::list)
+      #t9.{core::Map::[]=}{Invariant}(a, 1){(dynamic, core::int*) →* void};
+  else
+    #t9.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+} =>#t9;
+static field core::Map<dynamic, core::int*>* map6 = block {
+  final core::Map<dynamic, core::int*>* #t10 = <dynamic, core::int*>{};
+  if(self::b)
+    #t10.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+  else
+    for (dynamic a in self::list)
+      for (final core::MapEntry<dynamic, core::int*>* #t11 in <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
+        #t10.{core::Map::[]=}{Invariant}(#t11.{core::MapEntry::key}{dynamic}, #t11.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
+} =>#t10;
+static field core::Map<dynamic, core::int*>* map7 = block {
+  final core::Map<dynamic, core::int*>* #t12 = <dynamic, core::int*>{};
+  if(self::b)
+    for (dynamic a in self::list)
+      for (final core::MapEntry<dynamic, core::int*>* #t13 in <dynamic, core::int*>{a: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
+        #t12.{core::Map::[]=}{Invariant}(#t13.{core::MapEntry::key}{dynamic}, #t13.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
+  else
+    #t12.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+} =>#t12;
+static field core::Map<dynamic, core::int*>* map8 = block {
+  final core::Map<dynamic, core::int*>* #t14 = <dynamic, core::int*>{};
+  if(self::b)
+    #t14.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+  else
+    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t14.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i){(core::int*) →* dynamic}, 1){(dynamic, core::int*) →* void};
+} =>#t14;
+static field core::Map<dynamic, core::int*>* map9 = block {
+  final core::Map<dynamic, core::int*>* #t15 = <dynamic, core::int*>{};
+  if(self::b)
+    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      #t15.{core::Map::[]=}{Invariant}(self::list.{core::List::[]}(i){(core::int*) →* dynamic}, 1){(dynamic, core::int*) →* void};
+  else
+    #t15.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+} =>#t15;
+static field core::Map<dynamic, core::int*>* map10 = block {
+  final core::Map<dynamic, core::int*>* #t16 = <dynamic, core::int*>{};
+  if(self::b)
+    #t16.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+  else
+    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<dynamic, core::int*>* #t17 in <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
+        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{dynamic}, #t17.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
+} =>#t16;
+static field core::Map<dynamic, core::int*>* map11 = block {
+  final core::Map<dynamic, core::int*>* #t18 = <dynamic, core::int*>{};
+  if(self::b)
+    for (core::int* i = 0; i.{core::num::<}(self::list.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
+      for (final core::MapEntry<dynamic, core::int*>* #t19 in <dynamic, core::int*>{self::list.{core::List::[]}(i){(core::int*) →* dynamic}: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, core::int*>>})
+        #t18.{core::Map::[]=}{Invariant}(#t19.{core::MapEntry::key}{dynamic}, #t19.{core::MapEntry::value}{core::int*}){(dynamic, core::int*) →* void};
+  else
+    #t18.{core::Map::[]=}{Invariant}(0, 1){(dynamic, core::int*) →* void};
+} =>#t18;
+static field core::Map<core::int*, core::int*>* map12 = block {
+  final core::Map<core::int*, core::int*>* #t20 = <core::int*, core::int*>{};
+  if(self::b)
+    #t20.{core::Map::[]=}{Invariant}(0, 1){(core::int*, core::int*) →* void};
+  else
+    if(self::b)
+      for (final core::MapEntry<core::int*, core::int*>* #t21 in <core::int*, core::int*>{0: 1}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
+        #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::int*}, #t21.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
+} =>#t20;
+static field core::Map<invalid-type, Null>* error4 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:35:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+var error4 = {if (b) 0: 1 else for (var a in list) a};
+                               ^": null};
+static field core::Map<invalid-type, Null>* error5 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:36:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+var error5 = {if (b) for (var a in list) a else 0: 1};
+                     ^": null};
+static field Null error6 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:37:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+var error6 = {
+             ^";
+static field Null error7 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:40:14: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+var error7 = {
+             ^";
+static field core::Map<invalid-type, Null>* error8 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:43:32: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+var error8 = {if (b) 0: 1 else for (var i = 0; i < list.length; i++) list[i]};
+                               ^": null};
+static field core::Map<invalid-type, Null>* error9 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:44:22: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+var error9 = {if (b) for (var i = 0; i < list.length; i++) list[i] else 0: 1};
+                     ^": null};
+static field Null error10 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:45:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+var error10 = {
+              ^";
+static field Null error11 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:48:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+var error11 = {
+              ^";
+static field Null error12 = invalid-expression "pkg/front_end/testcases/unified_collections/mixed_entries.dart:51:15: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+var error12 = {
+              ^";
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.modular.expect
new file mode 100644
index 0000000..5fe44fb
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/set_add_all.dart.weak.modular.expect
@@ -0,0 +1,197 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+import "dart:_internal" as _in;
+
+static method useAddAll() → void {
+  dynamic dynamicSet1 = block {
+    final core::Set<core::int*>* #t1 = col::LinkedHashSet::•<core::int*>();
+    #t1.{core::Set::add}{Invariant}(0){(core::int*) →* core::bool*};
+    #t1.{core::Set::add}{Invariant}(1){(core::int*) →* core::bool*};
+    #t1.{core::Set::add}{Invariant}(2){(core::int*) →* core::bool*};
+  } =>#t1;
+  dynamic dynamicSet2 = block {
+    final core::Set<core::num*>* #t2 = col::LinkedHashSet::•<core::num*>();
+    #t2.{core::Set::add}{Invariant}(3){(core::num*) →* core::bool*};
+    #t2.{core::Set::add}{Invariant}(4){(core::num*) →* core::bool*};
+    #t2.{core::Set::add}{Invariant}(5){(core::num*) →* core::bool*};
+  } =>#t2;
+  core::Iterable<core::int*>* iterableIntSet = block {
+    final core::Set<core::int*>* #t3 = col::LinkedHashSet::•<core::int*>();
+    #t3.{core::Set::add}{Invariant}(6){(core::int*) →* core::bool*};
+    #t3.{core::Set::add}{Invariant}(7){(core::int*) →* core::bool*};
+    #t3.{core::Set::add}{Invariant}(8){(core::int*) →* core::bool*};
+  } =>#t3;
+  core::Iterable<core::num*>* iterableNumSet1 = block {
+    final core::Set<core::int*>* #t4 = col::LinkedHashSet::•<core::int*>();
+    #t4.{core::Set::add}{Invariant}(9){(core::int*) →* core::bool*};
+    #t4.{core::Set::add}{Invariant}(10){(core::int*) →* core::bool*};
+    #t4.{core::Set::add}{Invariant}(11){(core::int*) →* core::bool*};
+  } =>#t4;
+  core::Iterable<core::num*>* iterableNumSet2 = block {
+    final core::Set<core::num*>* #t5 = col::LinkedHashSet::•<core::num*>();
+    #t5.{core::Set::add}{Invariant}(12){(core::num*) →* core::bool*};
+    #t5.{core::Set::add}{Invariant}(13){(core::num*) →* core::bool*};
+    #t5.{core::Set::add}{Invariant}(14){(core::num*) →* core::bool*};
+  } =>#t5;
+  core::Set<core::int*>* intSet = block {
+    final core::Set<core::int*>* #t6 = col::LinkedHashSet::•<core::int*>();
+    #t6.{core::Set::add}{Invariant}(15){(core::int*) →* core::bool*};
+    #t6.{core::Set::add}{Invariant}(16){(core::int*) →* core::bool*};
+    #t6.{core::Set::add}{Invariant}(17){(core::int*) →* core::bool*};
+  } =>#t6;
+  core::Set<core::num*>* numSet1 = block {
+    final core::Set<core::int*>* #t7 = col::LinkedHashSet::•<core::int*>();
+    #t7.{core::Set::add}{Invariant}(18){(core::int*) →* core::bool*};
+    #t7.{core::Set::add}{Invariant}(19){(core::int*) →* core::bool*};
+    #t7.{core::Set::add}{Invariant}(20){(core::int*) →* core::bool*};
+  } =>#t7;
+  core::Set<core::num*>* numSet2 = block {
+    final core::Set<core::num*>* #t8 = col::LinkedHashSet::•<core::num*>();
+    #t8.{core::Set::add}{Invariant}(21){(core::num*) →* core::bool*};
+    #t8.{core::Set::add}{Invariant}(22){(core::num*) →* core::bool*};
+    #t8.{core::Set::add}{Invariant}(23){(core::num*) →* core::bool*};
+  } =>#t8;
+  core::Set<core::int*>* set1 = block {
+    final core::Set<core::int*>* #t9 = col::LinkedHashSet::•<core::int*>();
+    for (final dynamic #t10 in dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      final core::int* #t11 = #t10 as{TypeError} core::int*;
+      #t9.{core::Set::add}{Invariant}(#t11){(core::int*) →* core::bool*};
+    }
+    for (final dynamic #t12 in dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      final core::int* #t13 = #t12 as{TypeError} core::int*;
+      #t9.{core::Set::add}{Invariant}(#t13){(core::int*) →* core::bool*};
+    }
+    #t9.{core::Set::addAll}{Invariant}(iterableIntSet){(core::Iterable<core::int*>*) →* void};
+    for (final dynamic #t14 in iterableNumSet1) {
+      final core::int* #t15 = #t14 as{TypeError} core::int*;
+      #t9.{core::Set::add}{Invariant}(#t15){(core::int*) →* core::bool*};
+    }
+    for (final dynamic #t16 in iterableNumSet2) {
+      final core::int* #t17 = #t16 as{TypeError} core::int*;
+      #t9.{core::Set::add}{Invariant}(#t17){(core::int*) →* core::bool*};
+    }
+    #t9.{core::Set::addAll}{Invariant}(intSet){(core::Iterable<core::int*>*) →* void};
+    for (final dynamic #t18 in numSet1) {
+      final core::int* #t19 = #t18 as{TypeError} core::int*;
+      #t9.{core::Set::add}{Invariant}(#t19){(core::int*) →* core::bool*};
+    }
+    for (final dynamic #t20 in numSet2) {
+      final core::int* #t21 = #t20 as{TypeError} core::int*;
+      #t9.{core::Set::add}{Invariant}(#t21){(core::int*) →* core::bool*};
+    }
+  } =>#t9;
+  self::expect(core::List::generate<core::int*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::int*>*}, set1);
+  core::Set<core::num*>* set2 = block {
+    final core::Set<core::num*>* #t22 = col::LinkedHashSet::•<core::num*>();
+    for (final dynamic #t23 in dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      final core::num* #t24 = #t23 as{TypeError} core::num*;
+      #t22.{core::Set::add}{Invariant}(#t24){(core::num*) →* core::bool*};
+    }
+    for (final dynamic #t25 in dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
+      final core::num* #t26 = #t25 as{TypeError} core::num*;
+      #t22.{core::Set::add}{Invariant}(#t26){(core::num*) →* core::bool*};
+    }
+    #t22.{core::Set::addAll}{Invariant}(iterableIntSet){(core::Iterable<core::num*>*) →* void};
+    #t22.{core::Set::addAll}{Invariant}(iterableNumSet1){(core::Iterable<core::num*>*) →* void};
+    #t22.{core::Set::addAll}{Invariant}(iterableNumSet2){(core::Iterable<core::num*>*) →* void};
+    #t22.{core::Set::addAll}{Invariant}(intSet){(core::Iterable<core::num*>*) →* void};
+    #t22.{core::Set::addAll}{Invariant}(numSet1){(core::Iterable<core::num*>*) →* void};
+    #t22.{core::Set::addAll}{Invariant}(numSet2){(core::Iterable<core::num*>*) →* void};
+  } =>#t22;
+  self::expect(core::List::generate<core::num*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::num*>*}, set2);
+  core::Set<core::int*>* set3 = block {
+    final core::Set<core::int*>* #t27 = col::LinkedHashSet::•<core::int*>();
+    final core::Iterable<dynamic>* #t28 = dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+    if(!(#t28 == null))
+      for (final dynamic #t29 in #t28) {
+        final core::int* #t30 = #t29 as{TypeError} core::int*;
+        #t27.{core::Set::add}{Invariant}(#t30){(core::int*) →* core::bool*};
+      }
+    final core::Iterable<dynamic>* #t31 = dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+    if(!(#t31 == null))
+      for (final dynamic #t32 in #t31) {
+        final core::int* #t33 = #t32 as{TypeError} core::int*;
+        #t27.{core::Set::add}{Invariant}(#t33){(core::int*) →* core::bool*};
+      }
+    final core::Iterable<core::int*>* #t34 = iterableIntSet;
+    if(!(#t34 == null))
+      #t27.{core::Set::addAll}{Invariant}(#t34){(core::Iterable<core::int*>*) →* void};
+    final core::Iterable<dynamic>* #t35 = iterableNumSet1;
+    if(!(#t35 == null))
+      for (final dynamic #t36 in #t35) {
+        final core::int* #t37 = #t36 as{TypeError} core::int*;
+        #t27.{core::Set::add}{Invariant}(#t37){(core::int*) →* core::bool*};
+      }
+    final core::Iterable<dynamic>* #t38 = iterableNumSet2;
+    if(!(#t38 == null))
+      for (final dynamic #t39 in #t38) {
+        final core::int* #t40 = #t39 as{TypeError} core::int*;
+        #t27.{core::Set::add}{Invariant}(#t40){(core::int*) →* core::bool*};
+      }
+    final core::Iterable<core::int*>* #t41 = intSet;
+    if(!(#t41 == null))
+      #t27.{core::Set::addAll}{Invariant}(#t41){(core::Iterable<core::int*>*) →* void};
+    final core::Iterable<dynamic>* #t42 = numSet1;
+    if(!(#t42 == null))
+      for (final dynamic #t43 in #t42) {
+        final core::int* #t44 = #t43 as{TypeError} core::int*;
+        #t27.{core::Set::add}{Invariant}(#t44){(core::int*) →* core::bool*};
+      }
+    final core::Iterable<dynamic>* #t45 = numSet2;
+    if(!(#t45 == null))
+      for (final dynamic #t46 in #t45) {
+        final core::int* #t47 = #t46 as{TypeError} core::int*;
+        #t27.{core::Set::add}{Invariant}(#t47){(core::int*) →* core::bool*};
+      }
+  } =>#t27;
+  self::expect(core::List::generate<core::int*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::int*>*}, set3);
+  core::Set<core::num*>* set4 = block {
+    final core::Set<core::num*>* #t48 = col::LinkedHashSet::•<core::num*>();
+    final core::Iterable<dynamic>* #t49 = dynamicSet1 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+    if(!(#t49 == null))
+      for (final dynamic #t50 in #t49) {
+        final core::num* #t51 = #t50 as{TypeError} core::num*;
+        #t48.{core::Set::add}{Invariant}(#t51){(core::num*) →* core::bool*};
+      }
+    final core::Iterable<dynamic>* #t52 = dynamicSet2 as{TypeError,ForDynamic} core::Iterable<dynamic>*;
+    if(!(#t52 == null))
+      for (final dynamic #t53 in #t52) {
+        final core::num* #t54 = #t53 as{TypeError} core::num*;
+        #t48.{core::Set::add}{Invariant}(#t54){(core::num*) →* core::bool*};
+      }
+    final core::Iterable<core::num*>* #t55 = iterableIntSet;
+    if(!(#t55 == null))
+      #t48.{core::Set::addAll}{Invariant}(#t55){(core::Iterable<core::num*>*) →* void};
+    final core::Iterable<core::num*>* #t56 = iterableNumSet1;
+    if(!(#t56 == null))
+      #t48.{core::Set::addAll}{Invariant}(#t56){(core::Iterable<core::num*>*) →* void};
+    final core::Iterable<core::num*>* #t57 = iterableNumSet2;
+    if(!(#t57 == null))
+      #t48.{core::Set::addAll}{Invariant}(#t57){(core::Iterable<core::num*>*) →* void};
+    final core::Iterable<core::num*>* #t58 = intSet;
+    if(!(#t58 == null))
+      #t48.{core::Set::addAll}{Invariant}(#t58){(core::Iterable<core::num*>*) →* void};
+    final core::Iterable<core::num*>* #t59 = numSet1;
+    if(!(#t59 == null))
+      #t48.{core::Set::addAll}{Invariant}(#t59){(core::Iterable<core::num*>*) →* void};
+    final core::Iterable<core::num*>* #t60 = numSet2;
+    if(!(#t60 == null))
+      #t48.{core::Set::addAll}{Invariant}(#t60){(core::Iterable<core::num*>*) →* void};
+  } =>#t48;
+  self::expect(core::List::generate<core::num*>(24, (core::int* i) → core::int* => i).{core::Iterable::toSet}(){() →* core::Set<core::num*>*}, set4);
+}
+static method main() → dynamic {
+  self::useAddAll();
+}
+static method expect(core::Set<dynamic>* set1, core::Set<dynamic>* set2) → void {
+  if(!(set1.{_in::EfficientLengthIterable::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} set2.{_in::EfficientLengthIterable::length}{core::int*})) {
+    throw "Unexpected length. Expected ${set1.{_in::EfficientLengthIterable::length}{core::int*}}, actual ${set2.{_in::EfficientLengthIterable::length}{core::int*}}.";
+  }
+  for (dynamic element in set1) {
+    if(!set2.{core::Set::contains}(element){(core::Object*) →* core::bool*}) {
+      throw "Element ${element} not found. Expected ${set1}, actual ${set2}.";
+    }
+  }
+}
diff --git a/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.modular.expect
new file mode 100644
index 0000000..4037509
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/set_add_all_nnbd.dart.weak.modular.expect
@@ -0,0 +1,176 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+import "dart:_internal" as _in;
+
+static method useAddAll() → void {
+  dynamic dynamicSet1 = block {
+    final core::Set<core::int> #t1 = col::LinkedHashSet::•<core::int>();
+    #t1.{core::Set::add}{Invariant}(0){(core::int) → core::bool};
+    #t1.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
+    #t1.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
+  } =>#t1;
+  dynamic dynamicSet2 = block {
+    final core::Set<core::num> #t2 = col::LinkedHashSet::•<core::num>();
+    #t2.{core::Set::add}{Invariant}(3){(core::num) → core::bool};
+    #t2.{core::Set::add}{Invariant}(4){(core::num) → core::bool};
+    #t2.{core::Set::add}{Invariant}(5){(core::num) → core::bool};
+  } =>#t2;
+  dynamic dynamicSet3 = block {
+    final core::Set<core::int?> #t3 = col::LinkedHashSet::•<core::int?>();
+    #t3.{core::Set::add}{Invariant}(6){(core::int?) → core::bool};
+    #t3.{core::Set::add}{Invariant}(7){(core::int?) → core::bool};
+    #t3.{core::Set::add}{Invariant}(8){(core::int?) → core::bool};
+  } =>#t3;
+  core::Iterable<core::int> iterableIntSet = block {
+    final core::Set<core::int> #t4 = col::LinkedHashSet::•<core::int>();
+    #t4.{core::Set::add}{Invariant}(9){(core::int) → core::bool};
+    #t4.{core::Set::add}{Invariant}(10){(core::int) → core::bool};
+    #t4.{core::Set::add}{Invariant}(11){(core::int) → core::bool};
+  } =>#t4;
+  core::Set<core::int> intSet = block {
+    final core::Set<core::int> #t5 = col::LinkedHashSet::•<core::int>();
+    #t5.{core::Set::add}{Invariant}(12){(core::int) → core::bool};
+    #t5.{core::Set::add}{Invariant}(13){(core::int) → core::bool};
+    #t5.{core::Set::add}{Invariant}(14){(core::int) → core::bool};
+  } =>#t5;
+  core::Set<core::int> set1 = block {
+    final core::Set<core::int> #t6 = col::LinkedHashSet::•<core::int>();
+    for (final dynamic #t7 in dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t8 = #t7 as{TypeError,ForNonNullableByDefault} core::int;
+      #t6.{core::Set::add}{Invariant}(#t8){(core::int) → core::bool};
+    }
+    for (final dynamic #t9 in dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t10 = #t9 as{TypeError,ForNonNullableByDefault} core::int;
+      #t6.{core::Set::add}{Invariant}(#t10){(core::int) → core::bool};
+    }
+    for (final dynamic #t11 in dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::int #t12 = #t11 as{TypeError,ForNonNullableByDefault} core::int;
+      #t6.{core::Set::add}{Invariant}(#t12){(core::int) → core::bool};
+    }
+    #t6.{core::Set::addAll}{Invariant}(iterableIntSet){(core::Iterable<core::int>) → void};
+    #t6.{core::Set::addAll}{Invariant}(intSet){(core::Iterable<core::int>) → void};
+  } =>#t6;
+  self::expect(core::List::generate<core::int>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(){() → core::Set<core::int>}, set1);
+  core::Set<core::num> set2 = block {
+    final core::Set<core::num> #t13 = col::LinkedHashSet::•<core::num>();
+    for (final dynamic #t14 in dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::num #t15 = #t14 as{TypeError,ForNonNullableByDefault} core::num;
+      #t13.{core::Set::add}{Invariant}(#t15){(core::num) → core::bool};
+    }
+    for (final dynamic #t16 in dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::num #t17 = #t16 as{TypeError,ForNonNullableByDefault} core::num;
+      #t13.{core::Set::add}{Invariant}(#t17){(core::num) → core::bool};
+    }
+    for (final dynamic #t18 in dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      final core::num #t19 = #t18 as{TypeError,ForNonNullableByDefault} core::num;
+      #t13.{core::Set::add}{Invariant}(#t19){(core::num) → core::bool};
+    }
+    #t13.{core::Set::addAll}{Invariant}(iterableIntSet){(core::Iterable<core::num>) → void};
+    #t13.{core::Set::addAll}{Invariant}(intSet){(core::Iterable<core::num>) → void};
+  } =>#t13;
+  self::expect(core::List::generate<core::num>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(){() → core::Set<core::num>}, set2);
+}
+static method useAddAllNullable() → void {
+  dynamic dynamicSet1 = block {
+    final core::Set<core::int> #t20 = col::LinkedHashSet::•<core::int>();
+    #t20.{core::Set::add}{Invariant}(0){(core::int) → core::bool};
+    #t20.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
+    #t20.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
+  } =>#t20;
+  dynamic dynamicSet2 = block {
+    final core::Set<core::num> #t21 = col::LinkedHashSet::•<core::num>();
+    #t21.{core::Set::add}{Invariant}(3){(core::num) → core::bool};
+    #t21.{core::Set::add}{Invariant}(4){(core::num) → core::bool};
+    #t21.{core::Set::add}{Invariant}(5){(core::num) → core::bool};
+  } =>#t21;
+  dynamic dynamicSet3 = block {
+    final core::Set<core::int?> #t22 = col::LinkedHashSet::•<core::int?>();
+    #t22.{core::Set::add}{Invariant}(6){(core::int?) → core::bool};
+    #t22.{core::Set::add}{Invariant}(7){(core::int?) → core::bool};
+    #t22.{core::Set::add}{Invariant}(8){(core::int?) → core::bool};
+  } =>#t22;
+  core::Iterable<core::int>? iterableIntSet = true ?{core::Set<core::int>?} block {
+    final core::Set<core::int> #t23 = col::LinkedHashSet::•<core::int>();
+    #t23.{core::Set::add}{Invariant}(9){(core::int) → core::bool};
+    #t23.{core::Set::add}{Invariant}(10){(core::int) → core::bool};
+    #t23.{core::Set::add}{Invariant}(11){(core::int) → core::bool};
+  } =>#t23 : null;
+  core::Set<core::int>? intSet = true ?{core::Set<core::int>?} block {
+    final core::Set<core::int> #t24 = col::LinkedHashSet::•<core::int>();
+    #t24.{core::Set::add}{Invariant}(12){(core::int) → core::bool};
+    #t24.{core::Set::add}{Invariant}(13){(core::int) → core::bool};
+    #t24.{core::Set::add}{Invariant}(14){(core::int) → core::bool};
+  } =>#t24 : null;
+  core::Set<core::int> set1 = block {
+    final core::Set<core::int> #t25 = col::LinkedHashSet::•<core::int>();
+    final core::Iterable<dynamic>? #t26 = dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
+    if(!(#t26 == null))
+      for (final dynamic #t27 in #t26{core::Iterable<dynamic>}) {
+        final core::int #t28 = #t27 as{TypeError,ForNonNullableByDefault} core::int;
+        #t25.{core::Set::add}{Invariant}(#t28){(core::int) → core::bool};
+      }
+    final core::Iterable<dynamic>? #t29 = dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
+    if(!(#t29 == null))
+      for (final dynamic #t30 in #t29{core::Iterable<dynamic>}) {
+        final core::int #t31 = #t30 as{TypeError,ForNonNullableByDefault} core::int;
+        #t25.{core::Set::add}{Invariant}(#t31){(core::int) → core::bool};
+      }
+    final core::Iterable<dynamic>? #t32 = dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
+    if(!(#t32 == null))
+      for (final dynamic #t33 in #t32{core::Iterable<dynamic>}) {
+        final core::int #t34 = #t33 as{TypeError,ForNonNullableByDefault} core::int;
+        #t25.{core::Set::add}{Invariant}(#t34){(core::int) → core::bool};
+      }
+    final core::Iterable<core::int>? #t35 = iterableIntSet;
+    if(!(#t35 == null))
+      #t25.{core::Set::addAll}{Invariant}(#t35{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    final core::Iterable<core::int>? #t36 = intSet;
+    if(!(#t36 == null))
+      #t25.{core::Set::addAll}{Invariant}(#t36{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t25;
+  self::expect(core::List::generate<core::int>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(){() → core::Set<core::int>}, set1);
+  core::Set<core::num> set2 = block {
+    final core::Set<core::num> #t37 = col::LinkedHashSet::•<core::num>();
+    final core::Iterable<dynamic>? #t38 = dynamicSet1 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
+    if(!(#t38 == null))
+      for (final dynamic #t39 in #t38{core::Iterable<dynamic>}) {
+        final core::num #t40 = #t39 as{TypeError,ForNonNullableByDefault} core::num;
+        #t37.{core::Set::add}{Invariant}(#t40){(core::num) → core::bool};
+      }
+    final core::Iterable<dynamic>? #t41 = dynamicSet2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
+    if(!(#t41 == null))
+      for (final dynamic #t42 in #t41{core::Iterable<dynamic>}) {
+        final core::num #t43 = #t42 as{TypeError,ForNonNullableByDefault} core::num;
+        #t37.{core::Set::add}{Invariant}(#t43){(core::num) → core::bool};
+      }
+    final core::Iterable<dynamic>? #t44 = dynamicSet3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>?;
+    if(!(#t44 == null))
+      for (final dynamic #t45 in #t44{core::Iterable<dynamic>}) {
+        final core::num #t46 = #t45 as{TypeError,ForNonNullableByDefault} core::num;
+        #t37.{core::Set::add}{Invariant}(#t46){(core::num) → core::bool};
+      }
+    final core::Iterable<core::num>? #t47 = iterableIntSet;
+    if(!(#t47 == null))
+      #t37.{core::Set::addAll}{Invariant}(#t47{core::Iterable<core::num>}){(core::Iterable<core::num>) → void};
+    final core::Iterable<core::num>? #t48 = intSet;
+    if(!(#t48 == null))
+      #t37.{core::Set::addAll}{Invariant}(#t48{core::Iterable<core::num>}){(core::Iterable<core::num>) → void};
+  } =>#t37;
+  self::expect(core::List::generate<core::num>(15, (core::int i) → core::int => i).{core::Iterable::toSet}(){() → core::Set<core::num>}, set2);
+}
+static method main() → dynamic {
+  self::useAddAll();
+  self::useAddAllNullable();
+}
+static method expect(core::Set<dynamic> set1, core::Set<dynamic> set2) → void {
+  if(!(set1.{_in::EfficientLengthIterable::length}{core::int} =={core::num::==}{(core::Object) → core::bool} set2.{_in::EfficientLengthIterable::length}{core::int})) {
+    throw "Unexpected length. Expected ${set1.{_in::EfficientLengthIterable::length}{core::int}}, actual ${set2.{_in::EfficientLengthIterable::length}{core::int}}.";
+  }
+  for (dynamic element in set1) {
+    if(!set2.{core::Set::contains}(element){(core::Object?) → core::bool}) {
+      throw "Element ${element} not found. Expected ${set1}, actual ${set2}.";
+    }
+  }
+}
diff --git a/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.modular.expect b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.modular.expect
new file mode 100644
index 0000000..2263773
--- /dev/null
+++ b/pkg/front_end/testcases/unified_collections/string_concatenation.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::bool* b = false;
+  block {
+    final core::List<core::String*>* #t1 = <core::String*>["ab"];
+    if(b)
+      #t1.{core::List::add}{Invariant}("cd"){(core::String*) →* void};
+  } =>#t1;
+}
diff --git a/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.modular.expect b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.modular.expect
new file mode 100644
index 0000000..f81b865
--- /dev/null
+++ b/pkg/front_end/testcases/value_class/copy_with_call_sites.dart.weak.modular.expect
@@ -0,0 +1,142 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/value_class/copy_with_call_sites.dart:20:21: Error: The parameter 'bar' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   Foo copyWith({int bar, int bar2}) {
+//                     ^^^
+//
+// pkg/front_end/testcases/value_class/copy_with_call_sites.dart:20:30: Error: The parameter 'bar2' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   Foo copyWith({int bar, int bar2}) {
+//                              ^^^^
+//
+// pkg/front_end/testcases/value_class/copy_with_call_sites.dart:21:15: Error: Too many positional arguments: 0 allowed, but 2 found.
+// Try removing the extra positional arguments.
+//     return Foo(bar, bar2);
+//               ^
+// pkg/front_end/testcases/value_class/copy_with_call_sites.dart:19:3: Context: Found this candidate, but the arguments don't match.
+//   Foo({this.bar, this.bar2});
+//   ^^^
+//
+// pkg/front_end/testcases/value_class/copy_with_call_sites.dart:29:20: Error: No named parameter with the name 'numberOfWhiskers'.
+//  Cat cat = new Cat(numberOfWhiskers: 20, numberOfLegs: 4);
+//                    ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/value_class/copy_with_call_sites.dart:13:7: Context: The class 'Cat' has a constructor that takes no arguments.
+// class Cat extends Animal {
+//       ^
+//
+// pkg/front_end/testcases/value_class/copy_with_call_sites.dart:35:29: Error: The method 'copyWith' isn't defined for the class 'Object'.
+//  - 'Object' is from 'dart:core'.
+// Try correcting the name to the name of an existing method, or defining a method named 'copyWith'.
+//  Cat cat4 = (cat as Object).copyWith(numberOfWhiskers: 4);
+//                             ^^^^^^^^
+//
+// pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
+//  A a2 = (a as dynamic).copyWith(x: 42, y: 42) as A;
+//          ^
+//
+// pkg/front_end/testcases/value_class/copy_with_call_sites.dart:14:14: Error: Final field 'numberOfWhiskers' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int? numberOfWhiskers;
+//              ^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "value_class_support_lib.dart" as val;
+
+import "org-dartlang-testcase:///value_class_support_lib.dart";
+
+class Animal extends core::Object {
+  final field core::int? numberOfLegs;
+  constructor •({required core::int? numberOfLegs = #C1}) → self::Animal
+    : self::Animal::numberOfLegs = numberOfLegs, super core::Object::•()
+    ;
+}
+class Cat extends self::Animal {
+  final field core::int? numberOfWhiskers = null;
+  synthetic constructor •({required core::int? numberOfWhiskers, core::int? numberOfLegs}) → self::Cat
+    : self::Cat::numberOfWhiskers = numberOfWhiskers, super self::Animal::•(numberOfLegs)
+    ;
+  operator /*isLegacy*/ ==(core::Object other) → core::bool
+    return other is self::Cat && this.{self::Animal::numberOfLegs}{core::int?} =={core::num::==}{(core::Object) → core::bool} other{self::Cat}.{self::Animal::numberOfLegs}{core::int?} && this.{self::Cat::numberOfWhiskers}{core::int?} =={core::num::==}{(core::Object) → core::bool} other{self::Cat}.{self::Cat::numberOfWhiskers}{core::int?};
+  get /*isLegacy*/ hashCode() → core::int
+    return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine(val::JenkinsSmiHash::combine("org-dartlang-testcase:///copy_with_call_sites.dartCat".{core::String::hashCode}{core::int}, this.{self::Animal::numberOfLegs}{core::int?}.{core::num::hashCode}{core::int}), this.{self::Cat::numberOfWhiskers}{core::int?}.{core::num::hashCode}{core::int}));
+  method /*isLegacy*/ toString() → core::String
+    return "Cat(numberOfLegs: ${this.{self::Animal::numberOfLegs}{core::int?}.{core::int::toString}(){() → core::String}}, numberOfWhiskers: ${this.{self::Cat::numberOfWhiskers}{core::int?}.{core::int::toString}(){() → core::String}})";
+  method /*isLegacy*/ copyWith({core::int? numberOfLegs, core::int? numberOfWhiskers}) → dynamic
+    return new self::Cat::•(numberOfLegs: numberOfLegs, numberOfWhiskers: numberOfWhiskers);
+}
+class Foo extends core::Object {
+  field core::int? bar;
+  field core::int? bar2;
+  constructor •({core::int? bar = #C1, core::int? bar2 = #C1}) → self::Foo
+    : self::Foo::bar = bar, self::Foo::bar2 = bar2, super core::Object::•()
+    ;
+  method copyWith({core::int bar = #C1, core::int bar2 = #C1}) → self::Foo {
+    return invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:21:15: Error: Too many positional arguments: 0 allowed, but 2 found.
+Try removing the extra positional arguments.
+    return Foo(bar, bar2);
+              ^";
+  }
+}
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  operator /*isLegacy*/ ==(core::Object other) → core::bool
+    return other is self::A;
+  get /*isLegacy*/ hashCode() → core::int
+    return val::JenkinsSmiHash::finish("org-dartlang-testcase:///copy_with_call_sites.dartA".{core::String::hashCode}{core::int});
+  method /*isLegacy*/ toString() → core::String
+    return "A()";
+  method /*isLegacy*/ copyWith() → dynamic
+    return new self::A::•();
+}
+static method main() → dynamic {
+  self::Cat cat = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:29:20: Error: No named parameter with the name 'numberOfWhiskers'.
+ Cat cat = new Cat(numberOfWhiskers: 20, numberOfLegs: 4);
+                   ^^^^^^^^^^^^^^^^";
+  self::Cat cat2 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat3 = (((cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4) as{ForNonNullableByDefault} self::Cat) as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfLegs: 3) as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat4 = invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:35:29: Error: The method 'copyWith' isn't defined for the class 'Object'.
+ - 'Object' is from 'dart:core'.
+Try correcting the name to the name of an existing method, or defining a method named 'copyWith'.
+ Cat cat4 = (cat as Object).copyWith(numberOfWhiskers: 4);
+                            ^^^^^^^^" in (cat as{ForNonNullableByDefault} core::Object){<unresolved>}.copyWith(numberOfWhiskers: 4) as{TypeError,ForDynamic,ForNonNullableByDefault} self::Cat;
+  self::Cat cat5 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith() as{ForNonNullableByDefault} self::Cat;
+  self::Cat cat6 = (cat as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(numberOfWhiskers: 4, numberOfHorns: 5) as{ForNonNullableByDefault} self::Cat;
+  self::A a;
+  self::A a2 = (invalid-expression "pkg/front_end/testcases/value_class/copy_with_call_sites.dart:43:10: Error: Non-nullable variable 'a' must be assigned before it can be used.
+ A a2 = (a as dynamic).copyWith(x: 42, y: 42) as A;
+         ^" in a as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(x: 42, y: 42) as{ForNonNullableByDefault} self::A;
+  self::Foo foo = new self::Foo::•(bar: 4, bar2: 5);
+  self::Foo foo2 = (foo as{ForNonNullableByDefault} dynamic){dynamic}.copyWith(bar: 4) as{ForNonNullableByDefault} self::Foo;
+}
+
+library /*isNonNullableByDefault*/;
+import self as val;
+import "dart:core" as core;
+
+class JenkinsSmiHash extends core::Object {
+  synthetic constructor •() → val::JenkinsSmiHash
+    : super core::Object::•()
+    ;
+  static method combine(core::int hash, core::int value) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
+  }
+  static method finish(core::int hash) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+  }
+}
+static const field core::String valueClass = #C2;
+
+constants  {
+  #C1 = null
+  #C2 = "valueClass"
+}
diff --git a/pkg/front_end/testcases/value_class/empty.dart.weak.modular.expect b/pkg/front_end/testcases/value_class/empty.dart.weak.modular.expect
new file mode 100644
index 0000000..d243d4d
--- /dev/null
+++ b/pkg/front_end/testcases/value_class/empty.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "value_class_support_lib.dart" as val;
+
+import "org-dartlang-testcase:///value_class_support_lib.dart";
+
+class EmptyClass extends core::Object {
+  synthetic constructor •() → self::EmptyClass
+    : super core::Object::•()
+    ;
+  operator /*isLegacy*/ ==(core::Object other) → core::bool
+    return other is self::EmptyClass;
+  get /*isLegacy*/ hashCode() → core::int
+    return val::JenkinsSmiHash::finish("org-dartlang-testcase:///empty.dartEmptyClass".{core::String::hashCode}{core::int});
+  method /*isLegacy*/ toString() → core::String
+    return "EmptyClass()";
+  method /*isLegacy*/ copyWith() → dynamic
+    return new self::EmptyClass::•();
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as val;
+import "dart:core" as core;
+
+class JenkinsSmiHash extends core::Object {
+  synthetic constructor •() → val::JenkinsSmiHash
+    : super core::Object::•()
+    ;
+  static method combine(core::int hash, core::int value) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
+  }
+  static method finish(core::int hash) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+  }
+}
+static const field core::String valueClass = #C1;
+
+constants  {
+  #C1 = "valueClass"
+}
diff --git a/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.modular.expect b/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.modular.expect
new file mode 100644
index 0000000..0509836
--- /dev/null
+++ b/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.modular.expect
@@ -0,0 +1,79 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "value_class_support_lib.dart" as val;
+
+import "org-dartlang-testcase:///value_class_support_lib.dart";
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  operator /*isLegacy*/ ==(core::Object other) → core::bool
+    return other is self::A;
+  get /*isLegacy*/ hashCode() → core::int
+    return val::JenkinsSmiHash::finish("org-dartlang-testcase:///explicit_mixin.dartA".{core::String::hashCode}{core::int});
+  method /*isLegacy*/ toString() → core::String
+    return "A()";
+  method /*isLegacy*/ copyWith() → dynamic
+    return new self::A::•();
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+}
+class D = self::A with self::B {
+  synthetic constructor •() → self::D
+    : super self::A::•()
+    ;
+}
+class E = self::B with self::A {
+  synthetic constructor •() → self::E
+    : super self::B::•()
+    ;
+}
+class F = self::B with self::C {
+  synthetic constructor •() → self::F
+    : super self::B::•()
+    ;
+  operator /*isLegacy*/ ==(core::Object other) → core::bool
+    return other is self::F;
+  get /*isLegacy*/ hashCode() → core::int
+    return val::JenkinsSmiHash::finish("org-dartlang-testcase:///explicit_mixin.dartF".{core::String::hashCode}{core::int});
+  method /*isLegacy*/ toString() → core::String
+    return "F()";
+  method /*isLegacy*/ copyWith() → dynamic
+    return new self::F::•();
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as val;
+import "dart:core" as core;
+
+class JenkinsSmiHash extends core::Object {
+  synthetic constructor •() → val::JenkinsSmiHash
+    : super core::Object::•()
+    ;
+  static method combine(core::int hash, core::int value) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
+  }
+  static method finish(core::int hash) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+  }
+}
+static const field core::String valueClass = #C1;
+
+constants  {
+  #C1 = "valueClass"
+}
diff --git a/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.modular.expect b/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.modular.expect
new file mode 100644
index 0000000..a3eef16
--- /dev/null
+++ b/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.modular.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/value_class/non_final_field_error.dart:9:7: Error: Field 'numberOfLegs' should be initialized because its type 'int' doesn't allow null.
+//   int numberOfLegs;
+//       ^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "value_class_support_lib.dart" as val;
+
+import "org-dartlang-testcase:///value_class_support_lib.dart";
+
+class Animal extends core::Object {
+  field core::int numberOfLegs = null;
+  synthetic constructor •({required core::int numberOfLegs}) → self::Animal
+    : self::Animal::numberOfLegs = numberOfLegs, super core::Object::•()
+    ;
+  operator /*isLegacy*/ ==(core::Object other) → core::bool
+    return other is self::Animal && this.{self::Animal::numberOfLegs}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Animal}.{self::Animal::numberOfLegs}{core::int};
+  get /*isLegacy*/ hashCode() → core::int
+    return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///non_final_field_error.dartAnimal".{core::String::hashCode}{core::int}, this.{self::Animal::numberOfLegs}{core::int}.{core::num::hashCode}{core::int}));
+  method /*isLegacy*/ toString() → core::String
+    return "Animal(numberOfLegs: ${this.{self::Animal::numberOfLegs}{core::int}.{core::int::toString}(){() → core::String}})";
+  method /*isLegacy*/ copyWith({core::int numberOfLegs}) → dynamic
+    return new self::Animal::•(numberOfLegs: numberOfLegs);
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as val;
+import "dart:core" as core;
+
+class JenkinsSmiHash extends core::Object {
+  synthetic constructor •() → val::JenkinsSmiHash
+    : super core::Object::•()
+    ;
+  static method combine(core::int hash, core::int value) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
+  }
+  static method finish(core::int hash) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+  }
+}
+static const field core::String valueClass = #C1;
+
+constants  {
+  #C1 = "valueClass"
+}
diff --git a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.modular.expect b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.modular.expect
new file mode 100644
index 0000000..eca2eeb
--- /dev/null
+++ b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/value_class/non_value_extends_value_error.dart:9:13: Error: Final field 'numberOfLegs' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int numberOfLegs;
+//             ^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "value_class_support_lib.dart" as val;
+
+import "org-dartlang-testcase:///value_class_support_lib.dart";
+
+class Animal extends core::Object {
+  final field core::int numberOfLegs = null;
+  synthetic constructor •({required core::int numberOfLegs}) → self::Animal
+    : self::Animal::numberOfLegs = numberOfLegs, super core::Object::•()
+    ;
+  operator /*isLegacy*/ ==(core::Object other) → core::bool
+    return other is self::Animal && this.{self::Animal::numberOfLegs}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Animal}.{self::Animal::numberOfLegs}{core::int};
+  get /*isLegacy*/ hashCode() → core::int
+    return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///non_value_extends_value_error.dartAnimal".{core::String::hashCode}{core::int}, this.{self::Animal::numberOfLegs}{core::int}.{core::num::hashCode}{core::int}));
+  method /*isLegacy*/ toString() → core::String
+    return "Animal(numberOfLegs: ${this.{self::Animal::numberOfLegs}{core::int}.{core::int::toString}(){() → core::String}})";
+  method /*isLegacy*/ copyWith({core::int numberOfLegs}) → dynamic
+    return new self::Animal::•(numberOfLegs: numberOfLegs);
+}
+class Cat extends self::Animal {
+  synthetic constructor •() → self::Cat
+    : super self::Animal::•()
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as val;
+import "dart:core" as core;
+
+class JenkinsSmiHash extends core::Object {
+  synthetic constructor •() → val::JenkinsSmiHash
+    : super core::Object::•()
+    ;
+  static method combine(core::int hash, core::int value) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
+  }
+  static method finish(core::int hash) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+  }
+}
+static const field core::String valueClass = #C1;
+
+constants  {
+  #C1 = "valueClass"
+}
diff --git a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.modular.expect b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.modular.expect
new file mode 100644
index 0000000..6759904
--- /dev/null
+++ b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/value_class/non_value_implements_value_error.dart:9:13: Error: Final field 'numberOfLegs' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int numberOfLegs;
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/value_class/non_value_implements_value_error.dart:13:13: Error: Final field 'numberOfLegs' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int numberOfLegs;
+//             ^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "value_class_support_lib.dart" as val;
+
+import "org-dartlang-testcase:///value_class_support_lib.dart";
+
+class Animal extends core::Object {
+  final field core::int numberOfLegs = null;
+  synthetic constructor •({required core::int numberOfLegs}) → self::Animal
+    : self::Animal::numberOfLegs = numberOfLegs, super core::Object::•()
+    ;
+  operator /*isLegacy*/ ==(core::Object other) → core::bool
+    return other is self::Animal && this.{self::Animal::numberOfLegs}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Animal}.{self::Animal::numberOfLegs}{core::int};
+  get /*isLegacy*/ hashCode() → core::int
+    return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///non_value_implements_value_error.dartAnimal".{core::String::hashCode}{core::int}, this.{self::Animal::numberOfLegs}{core::int}.{core::num::hashCode}{core::int}));
+  method /*isLegacy*/ toString() → core::String
+    return "Animal(numberOfLegs: ${this.{self::Animal::numberOfLegs}{core::int}.{core::int::toString}(){() → core::String}})";
+  method /*isLegacy*/ copyWith({core::int numberOfLegs}) → dynamic
+    return new self::Animal::•(numberOfLegs: numberOfLegs);
+}
+class Cat extends core::Object implements self::Animal {
+  final field core::int numberOfLegs = null;
+  synthetic constructor •() → self::Cat
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as val;
+import "dart:core" as core;
+
+class JenkinsSmiHash extends core::Object {
+  synthetic constructor •() → val::JenkinsSmiHash
+    : super core::Object::•()
+    ;
+  static method combine(core::int hash, core::int value) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
+  }
+  static method finish(core::int hash) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+  }
+}
+static const field core::String valueClass = #C1;
+
+constants  {
+  #C1 = "valueClass"
+}
diff --git a/pkg/front_end/testcases/value_class/simple.dart.weak.modular.expect b/pkg/front_end/testcases/value_class/simple.dart.weak.modular.expect
new file mode 100644
index 0000000..0144bcf
--- /dev/null
+++ b/pkg/front_end/testcases/value_class/simple.dart.weak.modular.expect
@@ -0,0 +1,94 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/value_class/simple.dart:13:31: Error: No named parameter with the name 'numberOfLegs'.
+//   Animal firstAnimal = Animal(numberOfLegs: 4);
+//                               ^^^^^^^^^^^^
+// pkg/front_end/testcases/value_class/simple.dart:8:7: Context: The class 'Animal' has a constructor that takes no arguments.
+// class Animal {
+//       ^
+//
+// pkg/front_end/testcases/value_class/simple.dart:14:32: Error: No named parameter with the name 'numberOfLegs'.
+//   Animal secondAnimal = Animal(numberOfLegs: 4);
+//                                ^^^^^^^^^^^^
+// pkg/front_end/testcases/value_class/simple.dart:8:7: Context: The class 'Animal' has a constructor that takes no arguments.
+// class Animal {
+//       ^
+//
+// pkg/front_end/testcases/value_class/simple.dart:15:31: Error: No named parameter with the name 'numberOfLegs'.
+//   Animal thirdAnimal = Animal(numberOfLegs: 3);
+//                               ^^^^^^^^^^^^
+// pkg/front_end/testcases/value_class/simple.dart:8:7: Context: The class 'Animal' has a constructor that takes no arguments.
+// class Animal {
+//       ^
+//
+// pkg/front_end/testcases/value_class/simple.dart:9:13: Error: Final field 'numberOfLegs' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int numberOfLegs;
+//             ^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "value_class_support_lib.dart" as val;
+
+import "org-dartlang-testcase:///value_class_support_lib.dart";
+
+class Animal extends core::Object {
+  final field core::int numberOfLegs = null;
+  synthetic constructor •({required core::int numberOfLegs}) → self::Animal
+    : self::Animal::numberOfLegs = numberOfLegs, super core::Object::•()
+    ;
+  operator /*isLegacy*/ ==(core::Object other) → core::bool
+    return other is self::Animal && this.{self::Animal::numberOfLegs}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Animal}.{self::Animal::numberOfLegs}{core::int};
+  get /*isLegacy*/ hashCode() → core::int
+    return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///simple.dartAnimal".{core::String::hashCode}{core::int}, this.{self::Animal::numberOfLegs}{core::int}.{core::num::hashCode}{core::int}));
+  method /*isLegacy*/ toString() → core::String
+    return "Animal(numberOfLegs: ${this.{self::Animal::numberOfLegs}{core::int}.{core::int::toString}(){() → core::String}})";
+  method /*isLegacy*/ copyWith({core::int numberOfLegs}) → dynamic
+    return new self::Animal::•(numberOfLegs: numberOfLegs);
+}
+static method main() → dynamic {
+  self::Animal firstAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:13:31: Error: No named parameter with the name 'numberOfLegs'.
+  Animal firstAnimal = Animal(numberOfLegs: 4);
+                              ^^^^^^^^^^^^";
+  self::Animal secondAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:14:32: Error: No named parameter with the name 'numberOfLegs'.
+  Animal secondAnimal = Animal(numberOfLegs: 4);
+                               ^^^^^^^^^^^^";
+  self::Animal thirdAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:15:31: Error: No named parameter with the name 'numberOfLegs'.
+  Animal thirdAnimal = Animal(numberOfLegs: 3);
+                              ^^^^^^^^^^^^";
+  self::expect(true, firstAnimal =={core::Object::==}{(core::Object) → core::bool} secondAnimal);
+  self::expect(false, firstAnimal =={core::Object::==}{(core::Object) → core::bool} thirdAnimal);
+  self::expect(true, firstAnimal.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondAnimal.{core::Object::hashCode}{core::int});
+  self::expect(false, firstAnimal.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdAnimal.{core::Object::hashCode}{core::int});
+}
+static method expect(core::Object? expected, core::Object? actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected=${expected}, actual=${actual}";
+}
+
+library /*isNonNullableByDefault*/;
+import self as val;
+import "dart:core" as core;
+
+class JenkinsSmiHash extends core::Object {
+  synthetic constructor •() → val::JenkinsSmiHash
+    : super core::Object::•()
+    ;
+  static method combine(core::int hash, core::int value) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
+  }
+  static method finish(core::int hash) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+  }
+}
+static const field core::String valueClass = #C1;
+
+constants  {
+  #C1 = "valueClass"
+}
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.modular.expect b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.modular.expect
new file mode 100644
index 0000000..955fab2
--- /dev/null
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.modular.expect
@@ -0,0 +1,101 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/value_class/value_extends_non_value.dart:18:22: Error: No named parameter with the name 'numberOfLegs'.
+//   Cat firstCat = Cat(numberOfLegs: 4, numberOfWhiskers: 10);
+//                      ^^^^^^^^^^^^
+// pkg/front_end/testcases/value_class/value_extends_non_value.dart:13:7: Context: The class 'Cat' has a constructor that takes no arguments.
+// class Cat extends Animal {
+//       ^
+//
+// pkg/front_end/testcases/value_class/value_extends_non_value.dart:19:23: Error: No named parameter with the name 'numberOfLegs'.
+//   Cat secondCat = Cat(numberOfLegs: 4, numberOfWhiskers: 10);
+//                       ^^^^^^^^^^^^
+// pkg/front_end/testcases/value_class/value_extends_non_value.dart:13:7: Context: The class 'Cat' has a constructor that takes no arguments.
+// class Cat extends Animal {
+//       ^
+//
+// pkg/front_end/testcases/value_class/value_extends_non_value.dart:20:22: Error: No named parameter with the name 'numberOfLegs'.
+//   Cat thirdCat = Cat(numberOfLegs: 4, numberOfWhiskers: 0);
+//                      ^^^^^^^^^^^^
+// pkg/front_end/testcases/value_class/value_extends_non_value.dart:13:7: Context: The class 'Cat' has a constructor that takes no arguments.
+// class Cat extends Animal {
+//       ^
+//
+// pkg/front_end/testcases/value_class/value_extends_non_value.dart:14:13: Error: Final field 'numberOfWhiskers' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int numberOfWhiskers;
+//             ^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "value_class_support_lib.dart" as val;
+
+import "org-dartlang-testcase:///value_class_support_lib.dart";
+
+class Animal extends core::Object {
+  final field core::int numberOfLegs;
+  constructor •({required core::int numberOfLegs = #C1}) → self::Animal
+    : self::Animal::numberOfLegs = numberOfLegs, super core::Object::•()
+    ;
+}
+class Cat extends self::Animal {
+  final field core::int numberOfWhiskers = null;
+  synthetic constructor •({required core::int numberOfWhiskers, core::int numberOfLegs}) → self::Cat
+    : self::Cat::numberOfWhiskers = numberOfWhiskers, super self::Animal::•(numberOfLegs)
+    ;
+  operator /*isLegacy*/ ==(core::Object other) → core::bool
+    return other is self::Cat && this.{self::Animal::numberOfLegs}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Cat}.{self::Animal::numberOfLegs}{core::int} && this.{self::Cat::numberOfWhiskers}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Cat}.{self::Cat::numberOfWhiskers}{core::int};
+  get /*isLegacy*/ hashCode() → core::int
+    return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine(val::JenkinsSmiHash::combine("org-dartlang-testcase:///value_extends_non_value.dartCat".{core::String::hashCode}{core::int}, this.{self::Animal::numberOfLegs}{core::int}.{core::num::hashCode}{core::int}), this.{self::Cat::numberOfWhiskers}{core::int}.{core::num::hashCode}{core::int}));
+  method /*isLegacy*/ toString() → core::String
+    return "Cat(numberOfLegs: ${this.{self::Animal::numberOfLegs}{core::int}.{core::int::toString}(){() → core::String}}, numberOfWhiskers: ${this.{self::Cat::numberOfWhiskers}{core::int}.{core::int::toString}(){() → core::String}})";
+  method /*isLegacy*/ copyWith({core::int numberOfLegs, core::int numberOfWhiskers}) → dynamic
+    return new self::Cat::•(numberOfLegs: numberOfLegs, numberOfWhiskers: numberOfWhiskers);
+}
+static method main() → dynamic {
+  self::Cat firstCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:18:22: Error: No named parameter with the name 'numberOfLegs'.
+  Cat firstCat = Cat(numberOfLegs: 4, numberOfWhiskers: 10);
+                     ^^^^^^^^^^^^";
+  self::Cat secondCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:19:23: Error: No named parameter with the name 'numberOfLegs'.
+  Cat secondCat = Cat(numberOfLegs: 4, numberOfWhiskers: 10);
+                      ^^^^^^^^^^^^";
+  self::Cat thirdCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:20:22: Error: No named parameter with the name 'numberOfLegs'.
+  Cat thirdCat = Cat(numberOfLegs: 4, numberOfWhiskers: 0);
+                     ^^^^^^^^^^^^";
+  self::expect(true, firstCat =={core::Object::==}{(core::Object) → core::bool} secondCat);
+  self::expect(false, firstCat =={core::Object::==}{(core::Object) → core::bool} thirdCat);
+  self::expect(true, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat.{core::Object::hashCode}{core::int});
+  self::expect(false, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat.{core::Object::hashCode}{core::int});
+}
+static method expect(core::Object? expected, core::Object? actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected=${expected}, actual=${actual}";
+}
+
+library /*isNonNullableByDefault*/;
+import self as val;
+import "dart:core" as core;
+
+class JenkinsSmiHash extends core::Object {
+  synthetic constructor •() → val::JenkinsSmiHash
+    : super core::Object::•()
+    ;
+  static method combine(core::int hash, core::int value) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
+  }
+  static method finish(core::int hash) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+  }
+}
+static const field core::String valueClass = #C2;
+
+constants  {
+  #C1 = null
+  #C2 = "valueClass"
+}
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.modular.expect b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.modular.expect
new file mode 100644
index 0000000..068409c
--- /dev/null
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.modular.expect
@@ -0,0 +1,83 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/value_class/value_extends_non_value_error.dart:8:7: Error: Field 'numberOfLegs' should be initialized because its type 'int' doesn't allow null.
+//   int numberOfLegs;
+//       ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/value_class/value_extends_non_value_error.dart:15:13: Error: Final field 'numberOfLegs' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int numberOfLegs;
+//             ^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "value_class_support_lib.dart" as val;
+
+import "org-dartlang-testcase:///value_class_support_lib.dart";
+
+class Animal extends core::Object {
+  field core::int numberOfLegs = null;
+  synthetic constructor •() → self::Animal
+    : super core::Object::•()
+    ;
+}
+class Cat extends self::Animal {
+  synthetic constructor •() → self::Cat
+    : super self::Animal::•()
+    ;
+  operator /*isLegacy*/ ==(core::Object other) → core::bool
+    return other is self::Cat;
+  get /*isLegacy*/ hashCode() → core::int
+    return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_extends_non_value_error.dartCat".{core::String::hashCode}{core::int});
+  method /*isLegacy*/ toString() → core::String
+    return "Cat()";
+  method /*isLegacy*/ copyWith() → dynamic
+    return new self::Cat::•();
+}
+class Animal2 extends core::Object {
+  final field core::int numberOfLegs = null;
+  synthetic constructor •() → self::Animal2
+    : super core::Object::•()
+    ;
+}
+class Cat2 extends self::Animal2 {
+  synthetic constructor •() → self::Cat2
+    : super self::Animal2::•()
+    ;
+  operator /*isLegacy*/ ==(core::Object other) → core::bool
+    return other is self::Cat2;
+  get /*isLegacy*/ hashCode() → core::int
+    return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_extends_non_value_error.dartCat2".{core::String::hashCode}{core::int});
+  method /*isLegacy*/ toString() → core::String
+    return "Cat2()";
+  method /*isLegacy*/ copyWith() → dynamic
+    return new self::Cat2::•();
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as val;
+import "dart:core" as core;
+
+class JenkinsSmiHash extends core::Object {
+  synthetic constructor •() → val::JenkinsSmiHash
+    : super core::Object::•()
+    ;
+  static method combine(core::int hash, core::int value) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
+  }
+  static method finish(core::int hash) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+  }
+}
+static const field core::String valueClass = #C1;
+
+constants  {
+  #C1 = "valueClass"
+}
diff --git a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.modular.expect b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.modular.expect
new file mode 100644
index 0000000..28477fa
--- /dev/null
+++ b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.modular.expect
@@ -0,0 +1,176 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:29:22: Error: No named parameter with the name 'numberOfLegs'.
+//   Cat firstCat = Cat(numberOfLegs: 4, numberOfWhiskers: 10);
+//                      ^^^^^^^^^^^^
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:12:7: Context: The class 'Cat' has a constructor that takes no arguments.
+// class Cat implements Animal {
+//       ^
+//
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:30:23: Error: No named parameter with the name 'numberOfLegs'.
+//   Cat secondCat = Cat(numberOfLegs: 4, numberOfWhiskers: 10);
+//                       ^^^^^^^^^^^^
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:12:7: Context: The class 'Cat' has a constructor that takes no arguments.
+// class Cat implements Animal {
+//       ^
+//
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:31:22: Error: No named parameter with the name 'numberOfLegs'.
+//   Cat thirdCat = Cat(numberOfLegs: 4, numberOfWhiskers: 0);
+//                      ^^^^^^^^^^^^
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:12:7: Context: The class 'Cat' has a constructor that takes no arguments.
+// class Cat implements Animal {
+//       ^
+//
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:39:25: Error: No named parameter with the name 'numberOfLegs'.
+//   Cat2 firstCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 10);
+//                         ^^^^^^^^^^^^
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:22:7: Context: The class 'Cat2' has a constructor that takes no arguments.
+// class Cat2 implements Animal2 {
+//       ^
+//
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:40:26: Error: No named parameter with the name 'numberOfLegs'.
+//   Cat2 secondCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 10);
+//                          ^^^^^^^^^^^^
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:22:7: Context: The class 'Cat2' has a constructor that takes no arguments.
+// class Cat2 implements Animal2 {
+//       ^
+//
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:41:25: Error: No named parameter with the name 'numberOfLegs'.
+//   Cat2 thirdCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 0);
+//                         ^^^^^^^^^^^^
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:22:7: Context: The class 'Cat2' has a constructor that takes no arguments.
+// class Cat2 implements Animal2 {
+//       ^
+//
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:8:13: Error: Final field 'numberOfLegs' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int numberOfLegs;
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:13:13: Error: Final field 'numberOfLegs' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int numberOfLegs;
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:14:13: Error: Final field 'numberOfWhiskers' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int numberOfWhiskers;
+//             ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:23:13: Error: Final field 'numberOfLegs' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int numberOfLegs;
+//             ^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/value_class/value_implements_non_value.dart:24:13: Error: Final field 'numberOfWhiskers' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int numberOfWhiskers;
+//             ^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "value_class_support_lib.dart" as val;
+
+import "org-dartlang-testcase:///value_class_support_lib.dart";
+
+class Animal extends core::Object {
+  final field core::int numberOfLegs = null;
+  synthetic constructor •() → self::Animal
+    : super core::Object::•()
+    ;
+}
+class Cat extends core::Object implements self::Animal {
+  final field core::int numberOfLegs = null;
+  final field core::int numberOfWhiskers = null;
+  synthetic constructor •({required core::int numberOfLegs, required core::int numberOfWhiskers}) → self::Cat
+    : self::Cat::numberOfLegs = numberOfLegs, self::Cat::numberOfWhiskers = numberOfWhiskers, super core::Object::•()
+    ;
+  operator /*isLegacy*/ ==(core::Object other) → core::bool
+    return other is self::Cat && this.{self::Cat::numberOfLegs}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Cat}.{self::Cat::numberOfLegs}{core::int} && this.{self::Cat::numberOfWhiskers}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Cat}.{self::Cat::numberOfWhiskers}{core::int};
+  get /*isLegacy*/ hashCode() → core::int
+    return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine(val::JenkinsSmiHash::combine("org-dartlang-testcase:///value_implements_non_value.dartCat".{core::String::hashCode}{core::int}, this.{self::Cat::numberOfLegs}{core::int}.{core::num::hashCode}{core::int}), this.{self::Cat::numberOfWhiskers}{core::int}.{core::num::hashCode}{core::int}));
+  method /*isLegacy*/ toString() → core::String
+    return "Cat(numberOfLegs: ${this.{self::Cat::numberOfLegs}{core::int}.{core::int::toString}(){() → core::String}}, numberOfWhiskers: ${this.{self::Cat::numberOfWhiskers}{core::int}.{core::int::toString}(){() → core::String}})";
+  method /*isLegacy*/ copyWith({core::int numberOfLegs, core::int numberOfWhiskers}) → dynamic
+    return new self::Cat::•(numberOfLegs: numberOfLegs, numberOfWhiskers: numberOfWhiskers);
+}
+abstract class Animal2 extends core::Object {
+  synthetic constructor •() → self::Animal2
+    : super core::Object::•()
+    ;
+  abstract get numberOfLegs() → core::int;
+}
+class Cat2 extends core::Object implements self::Animal2 {
+  final field core::int numberOfLegs = null;
+  final field core::int numberOfWhiskers = null;
+  synthetic constructor •({required core::int numberOfLegs, required core::int numberOfWhiskers}) → self::Cat2
+    : self::Cat2::numberOfLegs = numberOfLegs, self::Cat2::numberOfWhiskers = numberOfWhiskers, super core::Object::•()
+    ;
+  operator /*isLegacy*/ ==(core::Object other) → core::bool
+    return other is self::Cat2 && this.{self::Cat2::numberOfLegs}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Cat2}.{self::Cat2::numberOfLegs}{core::int} && this.{self::Cat2::numberOfWhiskers}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Cat2}.{self::Cat2::numberOfWhiskers}{core::int};
+  get /*isLegacy*/ hashCode() → core::int
+    return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine(val::JenkinsSmiHash::combine("org-dartlang-testcase:///value_implements_non_value.dartCat2".{core::String::hashCode}{core::int}, this.{self::Cat2::numberOfLegs}{core::int}.{core::num::hashCode}{core::int}), this.{self::Cat2::numberOfWhiskers}{core::int}.{core::num::hashCode}{core::int}));
+  method /*isLegacy*/ toString() → core::String
+    return "Cat2(numberOfLegs: ${this.{self::Cat2::numberOfLegs}{core::int}.{core::int::toString}(){() → core::String}}, numberOfWhiskers: ${this.{self::Cat2::numberOfWhiskers}{core::int}.{core::int::toString}(){() → core::String}})";
+  method /*isLegacy*/ copyWith({core::int numberOfLegs, core::int numberOfWhiskers}) → dynamic
+    return new self::Cat2::•(numberOfLegs: numberOfLegs, numberOfWhiskers: numberOfWhiskers);
+}
+static method main() → dynamic {
+  self::Cat firstCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:29:22: Error: No named parameter with the name 'numberOfLegs'.
+  Cat firstCat = Cat(numberOfLegs: 4, numberOfWhiskers: 10);
+                     ^^^^^^^^^^^^";
+  self::Cat secondCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:30:23: Error: No named parameter with the name 'numberOfLegs'.
+  Cat secondCat = Cat(numberOfLegs: 4, numberOfWhiskers: 10);
+                      ^^^^^^^^^^^^";
+  self::Cat thirdCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:31:22: Error: No named parameter with the name 'numberOfLegs'.
+  Cat thirdCat = Cat(numberOfLegs: 4, numberOfWhiskers: 0);
+                     ^^^^^^^^^^^^";
+  self::expect(true, firstCat =={core::Object::==}{(core::Object) → core::bool} secondCat);
+  self::expect(false, firstCat =={core::Object::==}{(core::Object) → core::bool} thirdCat);
+  self::expect(true, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat.{core::Object::hashCode}{core::int});
+  self::expect(false, firstCat.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat.{core::Object::hashCode}{core::int});
+  self::Cat2 firstCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:39:25: Error: No named parameter with the name 'numberOfLegs'.
+  Cat2 firstCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 10);
+                        ^^^^^^^^^^^^";
+  self::Cat2 secondCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:40:26: Error: No named parameter with the name 'numberOfLegs'.
+  Cat2 secondCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 10);
+                         ^^^^^^^^^^^^";
+  self::Cat2 thirdCat2 = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:41:25: Error: No named parameter with the name 'numberOfLegs'.
+  Cat2 thirdCat2 = Cat2(numberOfLegs: 4, numberOfWhiskers: 0);
+                        ^^^^^^^^^^^^";
+  self::expect(true, firstCat2 =={core::Object::==}{(core::Object) → core::bool} secondCat2);
+  self::expect(false, firstCat2 =={core::Object::==}{(core::Object) → core::bool} thirdCat2);
+  self::expect(true, firstCat2.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} secondCat2.{core::Object::hashCode}{core::int});
+  self::expect(false, firstCat2.{core::Object::hashCode}{core::int} =={core::num::==}{(core::Object) → core::bool} thirdCat2.{core::Object::hashCode}{core::int});
+}
+static method expect(core::Object? expected, core::Object? actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected=${expected}, actual=${actual}";
+}
+
+library /*isNonNullableByDefault*/;
+import self as val;
+import "dart:core" as core;
+
+class JenkinsSmiHash extends core::Object {
+  synthetic constructor •() → val::JenkinsSmiHash
+    : super core::Object::•()
+    ;
+  static method combine(core::int hash, core::int value) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
+  }
+  static method finish(core::int hash) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+  }
+}
+static const field core::String valueClass = #C1;
+
+constants  {
+  #C1 = "valueClass"
+}
diff --git a/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.modular.expect b/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.modular.expect
new file mode 100644
index 0000000..391ae35
--- /dev/null
+++ b/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.modular.expect
@@ -0,0 +1,71 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "value_class_support_lib.dart" as val;
+
+import "org-dartlang-testcase:///value_class_support_lib.dart";
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  operator /*isLegacy*/ ==(core::Object other) → core::bool
+    return other is self::A;
+  get /*isLegacy*/ hashCode() → core::int
+    return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_mixin_error.dartA".{core::String::hashCode}{core::int});
+  method /*isLegacy*/ toString() → core::String
+    return "A()";
+  method /*isLegacy*/ copyWith() → dynamic
+    return new self::A::•();
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+}
+abstract class _C&B&A = self::B with self::A /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C&B&A
+    : super self::B::•()
+    ;
+}
+class C extends self::_C&B&A {
+  synthetic constructor •() → self::C
+    : super self::_C&B&A::•()
+    ;
+}
+abstract class _D&A&B = self::A with self::B /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_D&A&B
+    : super self::A::•()
+    ;
+}
+class D extends self::_D&A&B {
+  synthetic constructor •() → self::D
+    : super self::_D&A&B::•()
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as val;
+import "dart:core" as core;
+
+class JenkinsSmiHash extends core::Object {
+  synthetic constructor •() → val::JenkinsSmiHash
+    : super core::Object::•()
+    ;
+  static method combine(core::int hash, core::int value) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(value){(core::num) → core::int}){(core::int) → core::int};
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(524287.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(10){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    return hash.{core::int::^}(hash.{core::int::>>}(6){(core::int) → core::int}){(core::int) → core::int};
+  }
+  static method finish(core::int hash) → core::int {
+    hash = 536870911.{core::int::&}(hash.{core::num::+}(67108863.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(3){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+    hash = hash.{core::int::^}(hash.{core::int::>>}(11){(core::int) → core::int}){(core::int) → core::int};
+    return 536870911.{core::int::&}(hash.{core::num::+}(16383.{core::int::&}(hash){(core::int) → core::int}.{core::int::<<}(15){(core::int) → core::int}){(core::num) → core::int}){(core::int) → core::int};
+  }
+}
+static const field core::String valueClass = #C1;
+
+constants  {
+  #C1 = "valueClass"
+}
diff --git a/pkg/front_end/testcases/variance/class_type_parameter_modifier.dart.weak.modular.expect b/pkg/front_end/testcases/variance/class_type_parameter_modifier.dart.weak.modular.expect
new file mode 100644
index 0000000..14e8ddf
--- /dev/null
+++ b/pkg/front_end/testcases/variance/class_type_parameter_modifier.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic, contravariant Y extends core::Object? = dynamic, invariant Z extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%, self::A::Y%, self::A::Z%>
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  self::A<dynamic, dynamic, dynamic> a = new self::A::•<dynamic, dynamic, dynamic>();
+}
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.modular.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.modular.expect
new file mode 100644
index 0000000..5153118
--- /dev/null
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.modular.expect
@@ -0,0 +1,128 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef ContraFunction<contravariant T extends core::Object? = dynamic> = (T%) → void;
+typedef InvFunction<invariant T extends core::Object? = dynamic> = (T%) → T%;
+class Contravariant<contravariant T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Contravariant<self::Contravariant::T%>
+    : super core::Object::•()
+    ;
+}
+class Invariant<invariant T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Invariant<self::Invariant::T%>
+    : super core::Object::•()
+    ;
+}
+class A<contravariant T extends core::Object? = dynamic, U extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
+  final field (self::A::T%) →? void field = null;
+  synthetic constructor •() → self::A<self::A::T%, self::A::U%, self::A::V%>
+    : super core::Object::•()
+    ;
+  method method(self::A::T% t, (self::A::U%) → void u, covariant-by-class self::A::V% v) → void {}
+  method method2(self::A::T% x, [self::A::T? y = #C1]) → void {}
+  set x(self::A::T% t) → void {}
+  get mapContra() → core::Map<self::A::U%, self::Contravariant<self::A::V%>>
+    return core::Map::•<self::A::U%, self::Contravariant<self::A::V%>>();
+  get mapContraFn() → core::Map<self::A::U%, (self::A::V%) → void>
+    return core::Map::•<self::A::U%, (self::A::V%) → void>();
+  get mapInv() → core::Map<self::A::U%, self::Invariant<self::A::V%>>
+    return core::Map::•<self::A::U%, self::Invariant<self::A::V%>>();
+  get mapInvFn() → core::Map<self::A::U%, (self::A::V%) → self::A::V%>
+    return core::Map::•<self::A::U%, (self::A::V%) → self::A::V%>();
+}
+class B<invariant T extends core::Object? = dynamic> extends core::Object {
+  field self::B::T? x = null;
+  synthetic constructor •() → self::B<self::B::T%>
+    : super core::Object::•()
+    ;
+  method method(self::B::T% x) → self::B::T%
+    return x;
+  set y(self::B::T% x) → void {}
+}
+class C<contravariant T extends core::Object? = dynamic> extends core::Object {
+  final field (self::C::T%) →? void field = null;
+  synthetic constructor •() → self::C<self::C::T%>
+    : super core::Object::•()
+    ;
+  method method(self::C::T% x, [self::C::T? y = #C1]) → void {}
+  set x(self::C::T% t) → void {}
+}
+abstract class D<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::D<self::D::T%>
+    : super core::Object::•()
+    ;
+  abstract method method(covariant-by-class self::D::T% x) → core::int;
+}
+class E<invariant T extends core::Object? = dynamic> extends core::Object {
+  final field (self::E::T%) → void f;
+  constructor •((self::E::T%) → void f) → self::E<self::E::T%>
+    : self::E::f = f, super core::Object::•()
+    ;
+  method method(self::E::T% x) → core::int {
+    let final self::E::T% #t1 = x in this.{self::E::f}{(self::E::T%) → void}(#t1){(self::E::T%) → void};
+    return 0;
+  }
+}
+class F<invariant T extends core::Object? = dynamic> extends self::E<self::F::T%> implements self::D<self::F::T%> {
+  constructor •((self::F::T%) → void f) → self::F<self::F::T%>
+    : super self::E::•(f)
+    ;
+  forwarding-stub method method(covariant-by-class self::F::T% x) → core::int
+    return super.{self::E::method}(x);
+}
+class NoSuchMethod<invariant T extends core::Object? = dynamic> extends core::Object implements self::B<self::NoSuchMethod::T%> {
+  synthetic constructor •() → self::NoSuchMethod<self::NoSuchMethod::T%>
+    : super core::Object::•()
+    ;
+  method noSuchMethod(core::Invocation _) → dynamic
+    return 3;
+  no-such-method-forwarder get x() → self::NoSuchMethod::T?
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::NoSuchMethod::T?;
+  no-such-method-forwarder method method(self::NoSuchMethod::T% x) → self::NoSuchMethod::T%
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::NoSuchMethod::T%;
+  no-such-method-forwarder set y(self::NoSuchMethod::T% x) → void
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+  no-such-method-forwarder set x(self::NoSuchMethod::T? value) → void
+    return this.{self::NoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation) → dynamic};
+}
+static method main() → dynamic {
+  self::A<core::int, core::num, core::String> a = new self::A::•<core::int, core::num, core::String>();
+  self::expect(null, a.{self::A::field}{(core::int) →? void});
+  a.{self::A::method}(3, (core::num num) → void {}, "test"){(core::int, (core::num) → void, core::String) → void};
+  a.{self::A::method2}(3){(core::int, [core::int?]) → void};
+  a.{self::A::x} = 3;
+  core::Map<core::num, self::Contravariant<core::String>> mapContra = a.{self::A::mapContra}{core::Map<core::num, self::Contravariant<core::String>>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, self::Contravariant<core::String>>;
+  core::Map<core::num, (core::String) → void> mapContraFn = a.{self::A::mapContraFn}{core::Map<core::num, (core::String) → void>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, (core::String) → void>;
+  core::Map<core::num, self::Invariant<core::String>> mapInv = a.{self::A::mapInv}{core::Map<core::num, self::Invariant<core::String>>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, self::Invariant<core::String>>;
+  core::Map<core::num, (core::String) → core::String> mapInvFn = a.{self::A::mapInvFn}{core::Map<core::num, (core::String) → core::String>} as{TypeError,CovarianceCheck,ForNonNullableByDefault} core::Map<core::num, (core::String) → core::String>;
+  self::B<core::int> b = new self::B::•<core::int>();
+  b.{self::B::x} = 3;
+  self::expect(3, b.{self::B::x}{core::int?});
+  self::expect(3, b.{self::B::method}(3){(core::int) → core::int});
+  b.{self::B::y} = 3;
+  self::C<core::int> c = new self::C::•<core::int>();
+  self::expect(null, c.{self::C::field}{(core::int) →? void});
+  c.{self::C::method}(3, 2){(core::int, [core::int?]) → void};
+  c.{self::C::x} = 3;
+  self::D<core::Object> d = new self::F::•<core::String>((core::String s) → void {});
+  d.{self::D::method}("test"){(core::Object) → core::int};
+  self::NoSuchMethod<core::num> nsm = new self::NoSuchMethod::•<core::num>();
+  self::expect(3, nsm.{self::B::method}(3){(core::num) → core::num});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
+
+constants  {
+  #C1 = null
+  #C2 = #x
+  #C3 = <core::Type*>[]
+  #C4 = <dynamic>[]
+  #C5 = <core::Symbol*, dynamic>{)
+  #C6 = #method
+  #C7 = #y=
+  #C8 = #x=
+}
diff --git a/pkg/front_end/testcases/variance/mixin_type_parameter_modifier.dart.weak.modular.expect b/pkg/front_end/testcases/variance/mixin_type_parameter_modifier.dart.weak.modular.expect
new file mode 100644
index 0000000..abd3eea
--- /dev/null
+++ b/pkg/front_end/testcases/variance/mixin_type_parameter_modifier.dart.weak.modular.expect
@@ -0,0 +1,12 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+abstract class B<invariant X extends core::Object? = dynamic, Y extends core::Object? = dynamic, contravariant Z extends core::Object? = dynamic> extends self::A /*isMixinDeclaration*/  {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/variance/unconstrained_inference.dart.weak.modular.expect b/pkg/front_end/testcases/variance/unconstrained_inference.dart.weak.modular.expect
new file mode 100644
index 0000000..0850650
--- /dev/null
+++ b/pkg/front_end/testcases/variance/unconstrained_inference.dart.weak.modular.expect
@@ -0,0 +1,30 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Covariant<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Covariant<self::Covariant::T%>
+    : super core::Object::•()
+    ;
+}
+class Contravariant<contravariant T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Contravariant<self::Contravariant::T%>
+    : super core::Object::•()
+    ;
+}
+class Invariant<invariant T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Invariant<self::Invariant::T%>
+    : super core::Object::•()
+    ;
+}
+static method covariantListInfer<T extends core::Object? = dynamic>(self::Covariant<core::List<self::covariantListInfer::T%>> x) → void {}
+static method contravariantListInfer<T extends core::Object? = dynamic>(self::Contravariant<core::List<self::contravariantListInfer::T%>> x) → void {}
+static method invariantListInfer<T extends core::Object? = dynamic>(self::Invariant<core::List<self::invariantListInfer::T%>> x) → void {}
+static method main() → dynamic {
+  self::Covariant<dynamic> cov = new self::Covariant::•<dynamic>();
+  self::covariantListInfer<core::Object?>(new self::Covariant::•<core::List<core::Object?>>());
+  self::Contravariant<Never> contra = new self::Contravariant::•<Never>();
+  self::contravariantListInfer<core::Object?>(new self::Contravariant::•<core::List<core::Object?>>());
+  self::Invariant<dynamic> inv = new self::Invariant::•<dynamic>();
+  self::invariantListInfer<core::Object?>(new self::Invariant::•<core::List<core::Object?>>());
+}
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index 11fca520..d0f87bb 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -128,6 +128,23 @@
       ]
     },
     {
+      "name": "modular",
+      "kind": "Chain",
+      "source": "test/fasta/modular_suite.dart",
+      "path": "testcases/",
+      "status": "testcases/modular.status",
+      "pattern": [
+        "\\.dart$",
+        "\\.crash_dart$"
+      ],
+      "exclude": [
+        "/testcases/.*_part[0-9]*\\.dart$",
+        "/testcases/.*_lib[0-9]*\\.dart$",
+        "/testcases/dartino/",
+        "/testcases/expression/"
+      ]
+    },
+    {
       "name": "weak",
       "kind": "Chain",
       "source": "test/fasta/weak_suite.dart",
diff --git a/pkg/front_end/tool/update_expectations.dart b/pkg/front_end/tool/update_expectations.dart
index 45d7ef3..8a99e2e 100644
--- a/pkg/front_end/tool/update_expectations.dart
+++ b/pkg/front_end/tool/update_expectations.dart
@@ -8,6 +8,7 @@
   'weak',
   'outline',
   'strong',
+  'modular',
   'text_serialization',
   'textual_outline',
 ];
diff --git a/pkg/frontend_server/lib/frontend_server.dart b/pkg/frontend_server/lib/frontend_server.dart
index 706448e..7563736 100644
--- a/pkg/frontend_server/lib/frontend_server.dart
+++ b/pkg/frontend_server/lib/frontend_server.dart
@@ -55,6 +55,9 @@
       help:
           'Enable global type flow analysis and related transformations in AOT mode.',
       defaultsTo: false)
+  ..addFlag('rta',
+      help: 'Use rapid type analysis for faster compilation in AOT mode.',
+      defaultsTo: true)
   ..addFlag('tree-shake-write-only-fields',
       help: 'Enable tree shaking of fields which are only written in AOT mode.',
       defaultsTo: true)
@@ -555,6 +558,7 @@
           deleteToStringPackageUris: options['delete-tostring-package-uri'],
           aot: options['aot'],
           useGlobalTypeFlowAnalysis: options['tfa'],
+          useRapidTypeAnalysis: options['rta'],
           environmentDefines: environmentDefines,
           enableAsserts: options['enable-asserts'],
           useProtobufTreeShakerV2: options['protobuf-tree-shaker-v2'],
diff --git a/pkg/vm/lib/kernel_front_end.dart b/pkg/vm/lib/kernel_front_end.dart
index 51ed004..871ee7d 100644
--- a/pkg/vm/lib/kernel_front_end.dart
+++ b/pkg/vm/lib/kernel_front_end.dart
@@ -101,6 +101,9 @@
       help:
           'Enable global type flow analysis and related transformations in AOT mode.',
       defaultsTo: true);
+  args.addFlag('rta',
+      help: 'Use rapid type analysis for faster compilation in AOT mode.',
+      defaultsTo: true);
   args.addFlag('tree-shake-write-only-fields',
       help: 'Enable tree shaking of fields which are only written in AOT mode.',
       defaultsTo: true);
@@ -181,6 +184,7 @@
   final List<String>? fileSystemRoots = options['filesystem-root'];
   final bool aot = options['aot'];
   final bool tfa = options['tfa'];
+  final bool rta = options['rta'];
   final bool linkPlatform = options['link-platform'];
   final bool embedSources = options['embed-sources'];
   final bool enableAsserts = options['enable-asserts'];
@@ -269,6 +273,7 @@
       deleteToStringPackageUris: options['delete-tostring-package-uri'],
       aot: aot,
       useGlobalTypeFlowAnalysis: tfa,
+      useRapidTypeAnalysis: rta,
       environmentDefines: environmentDefines,
       enableAsserts: enableAsserts,
       useProtobufTreeShakerV2: useProtobufTreeShakerV2,
@@ -337,6 +342,7 @@
     List<String> deleteToStringPackageUris: const <String>[],
     bool aot: false,
     bool useGlobalTypeFlowAnalysis: false,
+    bool useRapidTypeAnalysis: true,
     required Map<String, String> environmentDefines,
     bool enableAsserts: true,
     bool useProtobufTreeShakerV2: false,
@@ -376,7 +382,8 @@
     await runGlobalTransformations(target, component, useGlobalTypeFlowAnalysis,
         enableAsserts, useProtobufTreeShakerV2, errorDetector,
         minimalKernel: minimalKernel,
-        treeShakeWriteOnlyFields: treeShakeWriteOnlyFields);
+        treeShakeWriteOnlyFields: treeShakeWriteOnlyFields,
+        useRapidTypeAnalysis: useRapidTypeAnalysis);
 
     if (minimalKernel) {
       // compiledSources is component.uriToSource.keys.
@@ -433,7 +440,8 @@
     bool useProtobufTreeShakerV2,
     ErrorDetector errorDetector,
     {bool minimalKernel: false,
-    bool treeShakeWriteOnlyFields: false}) async {
+    bool treeShakeWriteOnlyFields: false,
+    bool useRapidTypeAnalysis: true}) async {
   if (errorDetector.hasCompilationErrors) return;
 
   final coreTypes = new CoreTypes(component);
@@ -454,7 +462,8 @@
     globalTypeFlow.transformComponent(target, coreTypes, component,
         treeShakeSignatures: !minimalKernel,
         treeShakeWriteOnlyFields: treeShakeWriteOnlyFields,
-        treeShakeProtobufs: useProtobufTreeShakerV2);
+        treeShakeProtobufs: useProtobufTreeShakerV2,
+        useRapidTypeAnalysis: useRapidTypeAnalysis);
   } else {
     devirtualization.transformComponent(coreTypes, component);
     no_dynamic_invocations_annotator.transformComponent(component);
diff --git a/pkg/vm/lib/transformations/type_flow/rta.dart b/pkg/vm/lib/transformations/type_flow/rta.dart
new file mode 100644
index 0000000..df987e1
--- /dev/null
+++ b/pkg/vm/lib/transformations/type_flow/rta.dart
@@ -0,0 +1,528 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Rapid type analysis on kernel AST.
+
+import 'dart:core' hide Type;
+
+import 'package:kernel/ast.dart';
+import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
+import 'package:kernel/library_index.dart' show LibraryIndex;
+import 'package:kernel/core_types.dart' show CoreTypes;
+
+import 'calls.dart' as calls
+    show Selector, DirectSelector, InterfaceSelector, VirtualSelector;
+import 'native_code.dart'
+    show EntryPointsListener, NativeCodeOracle, PragmaEntryPointsVisitor;
+import 'protobuf_handler.dart' show ProtobufHandler;
+import 'types.dart' show TFClass, Type, ConcreteType;
+import '../pragma.dart' show ConstantPragmaAnnotationParser;
+
+class Selector {
+  final Name name;
+  final bool setter;
+
+  Selector(this.name, this.setter);
+
+  @override
+  int get hashCode => name.hashCode ^ setter.hashCode;
+
+  @override
+  bool operator ==(Object other) =>
+      other is Selector &&
+      this.name == other.name &&
+      this.setter == other.setter;
+}
+
+class ClassInfo extends TFClass {
+  final ClassInfo? superclass;
+  final Set<ClassInfo> supertypes; // All super-types including this.
+  final Set<ClassInfo> subclasses = Set<ClassInfo>();
+  final Set<ClassInfo> subtypes = Set<ClassInfo>();
+
+  final Set<Selector>
+      calledDynamicSelectors; // Selectors called with dynamic and interface calls.
+  final Set<Selector> calledVirtualSelectors;
+
+  bool isAllocated = false;
+
+  late final Map<Name, Member> _dispatchTargetsSetters =
+      _initDispatchTargets(true);
+  late final Map<Name, Member> _dispatchTargetsNonSetters =
+      _initDispatchTargets(false);
+
+  ClassInfo(int id, Class classNode, this.superclass, this.supertypes,
+      this.calledDynamicSelectors, this.calledVirtualSelectors)
+      : super(id, classNode) {
+    supertypes.add(this);
+    for (var sup in supertypes) {
+      sup.subtypes.add(this);
+    }
+    for (ClassInfo? sup = this; sup != null; sup = sup.superclass) {
+      sup.subclasses.add(this);
+    }
+  }
+
+  late final ConcreteType concreteType = ConcreteType(this, null);
+
+  Map<Name, Member> _initDispatchTargets(bool setters) {
+    Map<Name, Member> targets;
+    final superclass = this.superclass;
+    if (superclass != null) {
+      targets = Map.from(setters
+          ? superclass._dispatchTargetsSetters
+          : superclass._dispatchTargetsNonSetters);
+    } else {
+      targets = {};
+    }
+    for (Field f in classNode.fields) {
+      if (!f.isStatic && !f.isAbstract) {
+        if (!setters || f.hasSetter) {
+          targets[f.name] = f;
+        }
+      }
+    }
+    for (Procedure p in classNode.procedures) {
+      if (!p.isStatic && !p.isAbstract) {
+        if (p.isSetter == setters) {
+          targets[p.name] = p;
+        }
+      }
+    }
+    return targets;
+  }
+
+  Member? getDispatchTarget(Selector selector) {
+    return (selector.setter
+        ? _dispatchTargetsSetters
+        : _dispatchTargetsNonSetters)[selector.name];
+  }
+}
+
+class _ClassHierarchyCache {
+  final Map<Class, ClassInfo> classes = <Class, ClassInfo>{};
+  int _classIdCounter = 0;
+
+  _ClassHierarchyCache();
+
+  ClassInfo getClassInfo(Class c) {
+    return classes[c] ??= _createClassInfo(c);
+  }
+
+  ClassInfo _createClassInfo(Class c) {
+    final supertypes = Set<ClassInfo>();
+    final dynSel = Set<Selector>();
+    for (var sup in c.supers) {
+      final supInfo = getClassInfo(sup.classNode);
+      supertypes.addAll(supInfo.supertypes);
+      dynSel.addAll(supInfo.calledDynamicSelectors);
+    }
+    Class? superclassNode = c.superclass;
+    ClassInfo? superclass;
+    final virtSel = Set<Selector>();
+    if (superclassNode != null) {
+      superclass = getClassInfo(superclassNode);
+      virtSel.addAll(superclass.calledVirtualSelectors);
+    }
+    return ClassInfo(
+        ++_classIdCounter, c, superclass, supertypes, dynSel, virtSel);
+  }
+
+  ConcreteType addAllocatedClass(Class cl, RapidTypeAnalysis rta) {
+    assert(!cl.isAbstract);
+    final ClassInfo classInfo = getClassInfo(cl);
+    if (!classInfo.isAllocated) {
+      classInfo.isAllocated = true;
+      for (var sel in classInfo.calledDynamicSelectors) {
+        final member = classInfo.getDispatchTarget(sel);
+        if (member != null) {
+          rta.addMember(member);
+        }
+      }
+      for (var sel in classInfo.calledVirtualSelectors) {
+        final member = classInfo.getDispatchTarget(sel);
+        if (member != null) {
+          rta.addMember(member);
+        }
+      }
+    }
+    return classInfo.concreteType;
+  }
+
+  void addDynamicCall(Selector selector, Class cl, RapidTypeAnalysis rta) {
+    final ClassInfo classInfo = getClassInfo(cl);
+    for (var sub in classInfo.subtypes) {
+      if (sub.calledDynamicSelectors.add(selector) && sub.isAllocated) {
+        final member = sub.getDispatchTarget(selector);
+        if (member != null) {
+          rta.addMember(member);
+        }
+      }
+    }
+  }
+
+  void addVirtualCall(Selector selector, Class cl, RapidTypeAnalysis rta) {
+    final ClassInfo classInfo = getClassInfo(cl);
+    for (var sub in classInfo.subclasses) {
+      if (sub.calledVirtualSelectors.add(selector) && sub.isAllocated) {
+        final member = sub.getDispatchTarget(selector);
+        if (member != null) {
+          rta.addMember(member);
+        }
+      }
+    }
+  }
+}
+
+class RapidTypeAnalysis {
+  final CoreTypes coreTypes;
+  final ClassHierarchy hierarchy;
+  final _ClassHierarchyCache hierarchyCache = _ClassHierarchyCache();
+  final ProtobufHandler? protobufHandler;
+
+  final Set<Member> visited = {};
+  final List<Member> workList = [];
+
+  RapidTypeAnalysis(Component component, this.coreTypes, this.hierarchy,
+      LibraryIndex libraryIndex, this.protobufHandler) {
+    Procedure? main = component.mainMethod;
+    if (main != null) {
+      addMember(main);
+    }
+    final annotationMatcher = ConstantPragmaAnnotationParser(coreTypes);
+    final nativeCodeOracle = NativeCodeOracle(libraryIndex, annotationMatcher);
+    component.accept(PragmaEntryPointsVisitor(
+        _EntryPointsListenerImpl(this), nativeCodeOracle, annotationMatcher));
+    run();
+  }
+
+  List<Class> get allocatedClasses {
+    return <Class>[
+      for (var entry in hierarchyCache.classes.entries)
+        if (entry.value.isAllocated) entry.key
+    ];
+  }
+
+  bool isAllocatedClass(Class cl) =>
+      hierarchyCache.classes[cl]?.isAllocated ?? false;
+
+  ConcreteType addAllocatedClass(Class cl) =>
+      hierarchyCache.addAllocatedClass(cl, this);
+
+  void addMember(Member member) {
+    if (visited.add(member)) {
+      workList.add(member);
+    }
+  }
+
+  void addCall(Class? currentClass, Member? interfaceTarget, Name name,
+      bool isVirtual, bool isSetter) {
+    final Class cl = isVirtual
+        ? currentClass!
+        : (interfaceTarget != null
+            ? interfaceTarget.enclosingClass!
+            : coreTypes.objectClass);
+    final Selector selector = Selector(name, isSetter);
+    if (isVirtual) {
+      hierarchyCache.addVirtualCall(selector, cl, this);
+    } else {
+      hierarchyCache.addDynamicCall(selector, cl, this);
+    }
+  }
+
+  void run() {
+    final memberVisitor = _MemberVisitor(this);
+    while (workList.isNotEmpty || invalidateProtobufFields()) {
+      final member = workList.removeLast();
+      protobufHandler?.beforeSummaryCreation(member);
+      member.accept(memberVisitor);
+    }
+  }
+
+  bool invalidateProtobufFields() {
+    final protobufHandler = this.protobufHandler;
+    if (protobufHandler == null) {
+      return false;
+    }
+    final fields = protobufHandler.getInvalidatedFields();
+    if (fields.isEmpty) {
+      return false;
+    }
+    // Protobuf handler replaced contents of static field initializers.
+    bool invalidated = false;
+    for (var field in fields) {
+      assert(field.isStatic);
+      if (visited.contains(field)) {
+        workList.add(field);
+        invalidated = true;
+      }
+    }
+    return invalidated;
+  }
+}
+
+class _MemberVisitor extends RecursiveVisitor {
+  final RapidTypeAnalysis rta;
+  final _ConstantVisitor _constantVisitor;
+
+  Class? _currentClass;
+  ClassInfo? _superclassInfo;
+
+  _MemberVisitor(this.rta) : _constantVisitor = _ConstantVisitor(rta);
+
+  ClassInfo get superclassInfo => _superclassInfo ??=
+      rta.hierarchyCache.getClassInfo(_currentClass!.superclass!);
+
+  @override
+  void defaultMember(Member node) {
+    _superclassInfo = null;
+    _currentClass = node.enclosingClass;
+    node.visitChildren(this);
+    if (node is Constructor) {
+      // Make sure instance field initializers are visited.
+      for (var f in _currentClass!.members) {
+        if (f is Field && !f.isStatic) {
+          f.initializer?.accept(this);
+        }
+      }
+    }
+    _superclassInfo = null;
+    _currentClass = null;
+  }
+
+  @override
+  void visitConstructorInvocation(ConstructorInvocation node) {
+    rta.addAllocatedClass(node.constructedType.classNode);
+    rta.addMember(node.target);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitInstanceInvocation(InstanceInvocation node) {
+    rta.addCall(_currentClass, node.interfaceTarget, node.name,
+        node.receiver is ThisExpression, false);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitDynamicInvocation(DynamicInvocation node) {
+    rta.addCall(null, null, node.name, false, false);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitEqualsCall(EqualsCall node) {
+    rta.addCall(_currentClass, node.interfaceTarget, node.interfaceTarget.name,
+        node.left is ThisExpression, false);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitInstanceGet(InstanceGet node) {
+    rta.addCall(_currentClass, node.interfaceTarget, node.name,
+        node.receiver is ThisExpression, false);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitInstanceTearOff(InstanceTearOff node) {
+    rta.addCall(_currentClass, node.interfaceTarget, node.name,
+        node.receiver is ThisExpression, false);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitDynamicGet(DynamicGet node) {
+    rta.addCall(null, null, node.name, false, false);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitInstanceSet(InstanceSet node) {
+    rta.addCall(_currentClass, node.interfaceTarget, node.name,
+        node.receiver is ThisExpression, true);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitDynamicSet(DynamicSet node) {
+    rta.addCall(null, null, node.name, false, true);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSuperMethodInvocation(SuperMethodInvocation node) {
+    final target = superclassInfo.getDispatchTarget(Selector(node.name, false));
+    if (target != null) {
+      rta.addMember(target);
+    }
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSuperPropertyGet(SuperPropertyGet node) {
+    final target = superclassInfo.getDispatchTarget(Selector(node.name, false));
+    if (target != null) {
+      rta.addMember(target);
+    }
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSuperPropertySet(SuperPropertySet node) {
+    final target = superclassInfo.getDispatchTarget(Selector(node.name, true));
+    if (target != null) {
+      rta.addMember(target);
+    }
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitStaticGet(StaticGet node) {
+    rta.addMember(node.target);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitStaticInvocation(StaticInvocation node) {
+    rta.addMember(node.target);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitStaticSet(StaticSet node) {
+    rta.addMember(node.target);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitRedirectingInitializer(RedirectingInitializer node) {
+    rta.addMember(node.target);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitSuperInitializer(SuperInitializer node) {
+    // Re-resolve target due to partial mixin resolution.
+    for (var replacement in _currentClass!.superclass!.constructors) {
+      if (node.target.name == replacement.name) {
+        rta.addMember(replacement);
+        break;
+      }
+    }
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitConstantExpression(ConstantExpression node) {
+    _constantVisitor.visit(node.constant);
+  }
+}
+
+class _ConstantVisitor extends ConstantVisitor<void> {
+  final RapidTypeAnalysis rta;
+  final Set<Constant> visited = {};
+
+  _ConstantVisitor(this.rta);
+
+  void visit(Constant constant) {
+    if (visited.add(constant)) {
+      constant.accept(this);
+    }
+  }
+
+  @override
+  void defaultConstant(Constant node) {}
+
+  @override
+  void visitListConstant(ListConstant constant) {
+    for (final entry in constant.entries) {
+      visit(entry);
+    }
+  }
+
+  @override
+  void visitMapConstant(MapConstant constant) {
+    for (final entry in constant.entries) {
+      visit(entry.key);
+      visit(entry.value);
+    }
+  }
+
+  @override
+  void visitSetConstant(SetConstant constant) {
+    for (final entry in constant.entries) {
+      visit(entry);
+    }
+  }
+
+  @override
+  void visitInstanceConstant(InstanceConstant constant) {
+    rta.addAllocatedClass(constant.classNode);
+    for (var value in constant.fieldValues.values) {
+      visit(value);
+    }
+  }
+
+  void _visitTearOffConstant(TearOffConstant constant) {
+    final Member member = constant.target;
+    rta.addMember(member);
+    if (member is Constructor) {
+      rta.addAllocatedClass(member.enclosingClass);
+    }
+  }
+
+  @override
+  void visitStaticTearOffConstant(StaticTearOffConstant constant) =>
+      _visitTearOffConstant(constant);
+
+  @override
+  void visitConstructorTearOffConstant(ConstructorTearOffConstant constant) =>
+      _visitTearOffConstant(constant);
+
+  @override
+  void visitRedirectingFactoryTearOffConstant(
+          RedirectingFactoryTearOffConstant constant) =>
+      _visitTearOffConstant(constant);
+
+  @override
+  void visitInstantiationConstant(InstantiationConstant constant) {
+    visit(constant.tearOffConstant);
+  }
+}
+
+class _EntryPointsListenerImpl implements EntryPointsListener {
+  final RapidTypeAnalysis rta;
+
+  _EntryPointsListenerImpl(this.rta);
+
+  @override
+  void addFieldUsedInConstant(Field field, Type instance, Type value) {}
+
+  @override
+  void addRawCall(calls.Selector selector) {
+    if (selector is calls.DirectSelector) {
+      rta.addMember(selector.member);
+    } else if (selector is calls.InterfaceSelector) {
+      rta.addCall(selector.member.enclosingClass!, selector.member,
+          selector.name, selector is calls.VirtualSelector, selector.isSetter);
+    } else {
+      throw 'Unexpected selector ${selector.runtimeType} $selector';
+    }
+  }
+
+  @override
+  ConcreteType addAllocatedClass(Class c) => rta.addAllocatedClass(c);
+
+  @override
+  void recordMemberCalledViaInterfaceSelector(Member target) =>
+      throw 'Unsupported operation';
+
+  @override
+  void recordMemberCalledViaThis(Member target) =>
+      throw 'Unsupported operation';
+
+  @override
+  void recordTearOff(Member target) => throw 'Unsupported operation';
+}
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index 169abef..d82925a 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -20,6 +20,7 @@
 import 'calls.dart';
 import 'signature_shaking.dart';
 import 'protobuf_handler.dart' show ProtobufHandler;
+import 'rta.dart' show RapidTypeAnalysis;
 import 'summary.dart';
 import 'table_selector_assigner.dart';
 import 'types.dart';
@@ -44,7 +45,8 @@
     {PragmaAnnotationParser? matcher,
     bool treeShakeSignatures: true,
     bool treeShakeWriteOnlyFields: true,
-    bool treeShakeProtobufs: false}) {
+    bool treeShakeProtobufs: false,
+    bool useRapidTypeAnalysis: true}) {
   void ignoreAmbiguousSupertypes(Class cls, Supertype a, Supertype b) {}
   final hierarchy = new ClassHierarchy(component, coreTypes,
           onAmbiguousSupertypes: ignoreAmbiguousSupertypes)
@@ -58,6 +60,25 @@
       : null;
 
   Statistics.reset();
+
+  CleanupAnnotations(coreTypes, libraryIndex, protobufHandler)
+      .visitComponent(component);
+
+  Stopwatch? rtaStopWatch;
+  RapidTypeAnalysis? rta;
+  if (useRapidTypeAnalysis) {
+    // Rapid type analysis (RTA) is used to quickly calculate
+    // the set of allocated classes to make the subsequent
+    // type flow analysis converge much faster.
+    rtaStopWatch = new Stopwatch()..start();
+    final protobufHandlerRta = treeShakeProtobufs
+        ? ProtobufHandler.forComponent(component, coreTypes)
+        : null;
+    rta = RapidTypeAnalysis(
+        component, coreTypes, hierarchy, libraryIndex, protobufHandlerRta);
+    rtaStopWatch.stop();
+  }
+
   final analysisStopWatch = new Stopwatch()..start();
 
   MoveFieldInitializers().transformComponent(component);
@@ -81,8 +102,11 @@
     typeFlowAnalysis.addRawCall(mainSelector);
   }
 
-  CleanupAnnotations(coreTypes, libraryIndex, protobufHandler)
-      .visitComponent(component);
+  if (useRapidTypeAnalysis) {
+    for (Class c in rta!.allocatedClasses) {
+      typeFlowAnalysis.addAllocatedClass(c);
+    }
+  }
 
   typeFlowAnalysis.process();
 
@@ -119,6 +143,9 @@
 
   transformsStopWatch.stop();
 
+  if (useRapidTypeAnalysis) {
+    statPrint("RTA took ${rtaStopWatch!.elapsedMilliseconds}ms");
+  }
   statPrint("TF analysis took ${analysisStopWatch.elapsedMilliseconds}ms");
   statPrint("TF transforms took ${transformsStopWatch.elapsedMilliseconds}ms");
 
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
index db77666..8964972 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
@@ -22,6 +22,6 @@
   synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3254,getterSelectorId:3255]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3305,getterSelectorId:3306]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
     return [@vm.inferred-type.metadata=!] e.{core::_Enum::index}{core::int};
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
index 1212909..f5fb218 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
@@ -13,6 +13,8 @@
     : super core::Object::•()
     ;
 }
+class T3 extends core::Object {
+}
 class T4 extends core::Object {
   synthetic constructor •() → self::T4
     : super core::Object::•()
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
index 0e44dd5..86ad485 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
@@ -16,6 +16,8 @@
 [@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i]  method foo() → core::int
     return _in::unsafeCast<core::int>([@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] 1.{core::num::+}(_in::unsafeCast<core::num>([@vm.direct-call.metadata=#lib::B.foo] [@vm.inferred-type.metadata=int? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult(){dynamic}.foo())){(core::num) → core::num});
 }
+class C extends core::Object implements self::A {
+}
 abstract class Base extends core::Object {
   synthetic constructor •() → self::Base
     : super core::Object::•()
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
index 3aa20dc..7251a55 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
@@ -51,6 +51,6 @@
   synthetic constructor •() → self::ConstClass
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3258,getterSelectorId:3259]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::ConstEnum e) → core::int
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3309,getterSelectorId:3310]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::ConstEnum e) → core::int
     return [@vm.inferred-type.metadata=!] e.{core::_Enum::index}{core::int};
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field.dart.expect
index e544ddf..1d30a71 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field.dart.expect
@@ -2,6 +2,8 @@
 import self as self;
 import "dart:core" as core;
 
+class A extends core::Object {
+}
 class B extends core::Object {
   constructor •() → self::B
     : super core::Object::•() {
diff --git a/tests/modular/cross_module_constant_with_mixin/a.dart b/tests/modular/cross_module_constant_with_mixin/a.dart
new file mode 100644
index 0000000..3e1b8b9
--- /dev/null
+++ b/tests/modular/cross_module_constant_with_mixin/a.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 't.dart';
+
+String _defaultStringy(String t) => t.toLowerCase();
+
+class A {
+  A({
+    double d = 3.14,
+    StringyFunction<String> s = _defaultStringy,
+  }) : this.factoryConstructor(d: d, s: s);
+
+  A.factoryConstructor({
+    double d = 3.14,
+    StringyFunction<String> s = _defaultStringy,
+  })  : d = d,
+        _s = s;
+
+  String doStringy(String i) => _s(i);
+
+  final double d;
+  final StringyFunction<String> _s;
+}
diff --git a/tests/modular/cross_module_constant_with_mixin/b.dart b/tests/modular/cross_module_constant_with_mixin/b.dart
new file mode 100644
index 0000000..03b89b8
--- /dev/null
+++ b/tests/modular/cross_module_constant_with_mixin/b.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'a.dart';
+import 'm.dart';
+
+class B extends A with M {
+  B({double d = 2.71}) : super(d: d);
+}
diff --git a/tests/modular/cross_module_constant_with_mixin/m.dart b/tests/modular/cross_module_constant_with_mixin/m.dart
new file mode 100644
index 0000000..e4f4935
--- /dev/null
+++ b/tests/modular/cross_module_constant_with_mixin/m.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'a.dart';
+
+mixin M on A {
+  m1() {}
+}
diff --git a/tests/modular/cross_module_constant_with_mixin/main.dart b/tests/modular/cross_module_constant_with_mixin/main.dart
new file mode 100644
index 0000000..8daaa4e
--- /dev/null
+++ b/tests/modular/cross_module_constant_with_mixin/main.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+import 'b.dart';
+
+main() {
+  var bInst = B();
+  Expect.equals(2.71, bInst.d);
+  Expect.equals('default', bInst.doStringy('DEFAULT'));
+}
diff --git a/tests/modular/cross_module_constant_with_mixin/modules.yaml b/tests/modular/cross_module_constant_with_mixin/modules.yaml
new file mode 100644
index 0000000..54b3cdf
--- /dev/null
+++ b/tests/modular/cross_module_constant_with_mixin/modules.yaml
@@ -0,0 +1,9 @@
+# Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+dependencies:
+  main: [a, b, m, expect]
+  b: [a, m]
+  m: a
+  a: t
diff --git a/tests/modular/cross_module_constant_with_mixin/t.dart b/tests/modular/cross_module_constant_with_mixin/t.dart
new file mode 100644
index 0000000..ab0db0e
--- /dev/null
+++ b/tests/modular/cross_module_constant_with_mixin/t.dart
@@ -0,0 +1,5 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+typedef StringyFunction<T> = String Function(T item);
diff --git a/tools/VERSION b/tools/VERSION
index 5f05953..42c478b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 16
 PATCH 0
-PRERELEASE 98
+PRERELEASE 99
 PRERELEASE_PATCH 0
\ No newline at end of file